Usb over ip
Configurare USB over IP Server pe Ubuntu 2X.04 LTS
Intr-un mediu enterprise in care se lucreaza cu foarte multe stiick-uri USB este nevoie ca acestea sa fie plasate intr-un mediu centralizat la care intreaga infrastuctura sa aiba acces. Prin intermediul USBIP stick-urile pot fi plasate intr-o singura locatie indiferent daca acestea sunt stick-uri de stocare, certificate SSL, semnaturi digitale, YubiKey-uri sau modem 4G/5G.
Instalare usbip
USBIP face parte in Ubuntu 2X.44 din luita de tool-uri linux-tools-generic. Pentru instalare se executa in consola:
# apt install linux-tools-generic
Se verifica daca kernelul are modulele disponibile:
# lsmod | grep usbip
...in unele situatii fiind necesara instalarea unor pachete specifice:
# apt install linux-tools-5.15.0-43-generic linux-cloud-tools-5.15.0-43-generic
Startup usbip
Pentru ca aplicatia sa porneasca la odata cu systemului de operare se creeaza un fisier de startup un systemctl
- nano /etc/systemd/system/usbipd.service
[Unit]
Description=USB/IP Host Service
After=network.target
[Service]
ExecStart=/usr/bin/usbipd -D
ExecStop=/usr/bin/usbip --tcp-port 3240 --log
Restart=on-failure
User=root
Type=forking
StartLimitBurst=5
StartLimitIntervalSec=10
[Install]
WantedBy=multi-user.target
Dupa creerea serviciului se executa:
# systemctl enable --now usbipd.service
# systemctl status usbipd.service
● usbipd.service - USB/IP Host Service
Loaded: loaded (/etc/systemd/system/usbipd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-04-12 18:03:02 EEST; 25min ago
Process: 696 ExecStart=/usr/bin/usbipd -D (code=exited, status=0/SUCCESS)
Main PID: 728 (usbipd)
Tasks: 1 (limit: 2220)
Memory: 800.0K
CPU: 18ms
Module usbip
USBIP are nevoie de 3 module dintre care doua de USB/IP si unul de virtual host controller
# modprobe usbip_core
# modprobe usbip_host
# modprobe vhci_hcd
Pentru ca aceste module sa fie activate la startup-ul de OS se adauga in lista de module incarcabile:
- nano nano /etc/modules-load.d/modules.conf
usbip_core
usbip_host
vhci_hcd
Adaugare dispozitive USB server
Din acest moment dispozitivele USB pot fi adaugate in porturile USB ale serverului sau masinii virtuale. Mai jos este prezentat modul in care se face passtrue dispozitivelor USB catre o masina virtuala intr-un hypervisor Proxmox VM
Dupa ce dispozitivele USB sunt adaugate fizis se trece la atasarea acestora in server:
Listare dispozitive USB
Listam dispozitivele USB atasate cu comanda lsusb:
# lsusb
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 005: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive
Bus 002 Device 002: ID 13fe:4200 Kingston Technology Company Inc. Platinum USB drive mini
Pentru a vedea ce dispozitive pot fi parsate de catre aplicatie rulam:
# usbip list -p -l
busid=2-2#usbid=13fe:4200#
busid=2-4#usbid=090c:1000#
Atasarea dispozitive USB
Pentru a afla BUSID-ul fiecatui dispozitiv asa cum este inregistrat de usbip rulam:
# usbip list -l
- busid 2-2 (13fe:4200)
Kingston Technology Company Inc. : Platinum USB drive mini (13fe:4200)
- busid 2-4 (090c:1000)
Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) : Flash Drive (090c:1000)
Vom atasa serverului cele doua dispozitive listate anterior:
# usbip bind -b 2-2
usbip: info: bind device on busid 2-2: complete
# usbip bind -b 2-4
usbip: info: bind device on busid 2-4: complete
Atasarea dispozitive USB la pornirea OS
Pentru binding-ul dispozitivelor USB la pornirea de OS se ceeaza cate un serviciu de sistemd pentru fiecare dispozitiv in parte:
- /etc/systemd/system/usbip_bus22.service
[Unit]
Description=USB-IP Device Binding BUS 2-2
After=network-online.target
Wants=network-online.target
Requires=usbipd.service
[Service]
Type=oneshot
ExecStart=/usr/bin/usbip bind --busid 2-2
[Install]
WantedBy=multi-user.target
# systemctl enable usbip_bus22.service
* Requires=usbipd.service este adaugat pentru ca bind-ul sa fie facut dupa ponirea aplicatiei de usbip
* Type=oneshot bind-ul este o actiune de se executa o singura data. Ne fiind un serviciu in sine systemctl status usbip_bus22.service va arata serviciul ca dead dar actiunea de bind este indeplinita