ืื™ืœื•ืฃ USB/IP

ื”ืžืฉื™ืžื” ืฉืœ ื—ื™ื‘ื•ืจ ื”ืชืงืŸ USB ืœืžื—ืฉื‘ ืžืจื•ื—ืง ื“ืจืš ืจืฉืช ืžืงื•ืžื™ืช ืžืชืขื•ืจืจืช ื‘ืื•ืคืŸ ืงื‘ื•ืข. ืžืชื—ืช ืœื—ืชื•ืš, ืžืชื•ืืจืช ื”ื™ืกื˜ื•ืจื™ื™ืช ื”ื—ื™ืคื•ืฉื™ื ืฉืœื™ ื‘ื›ื™ื•ื•ืŸ ื”ื–ื”, ื•ื”ื“ืจืš ืœืคืชืจื•ืŸ ืžื•ื›ืŸ ื”ืžื‘ื•ืกืก ืขืœ ืคืจื•ื™ืงื˜ ืงื•ื“ ืคืชื•ื— USB/IP ืขื ืชื™ืื•ืจ ืฉืœ ื”ืžื›ืฉื•ืœื™ื ืฉื”ืฆื™ื‘ื• ื‘ืงืคื™ื“ื” ืื ืฉื™ื ืฉื•ื ื™ื ื‘ื“ืจืš ื–ื•, ื›ืžื• ื’ื ื“ืจื›ื™ื ืœืขืงื•ืฃ ืื•ืชื.

ื—ืœืง ืจืืฉื•ืŸ, ื”ื™ืกื˜ื•ืจื™

ืื ื”ืžื›ื•ื ื” ื”ื™ื ื•ื™ืจื˜ื•ืืœื™ืช - ื›ืœ ื–ื” ืงืœ. ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ืขื‘ืจืช USB ืžืžืืจื— โ€‹โ€‹ืœืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื”ื•ืคื™ืขื” ื‘-VMWare 4.1. ืื‘ืœ ื‘ืžืงืจื” ืฉืœื™, ืžืคืชื— ื”ืื‘ื˜ื—ื”, ืฉื ื™ืชืŸ ืœื–ื”ื•ืช ืื•ืชื• ื›-WIBU-KEY, ื”ื™ื” ืฆืจื™ืš ืœื”ื™ื•ืช ืžื—ื•ื‘ืจ ื‘ื–ืžื ื™ื ืฉื•ื ื™ื ืœืžื›ื•ื ื•ืช ืฉื•ื ื•ืช, ื•ืœื ืจืง ืœื•ื•ื™ืจื˜ื•ืืœื™ื™ื.
ืกื‘ื‘ ื”ื—ื™ืคื•ืฉ ื”ืจืืฉื•ืŸ ื‘-2009 ื”ืจื—ื•ืง ื”ื•ื‘ื™ืœ ืื•ืชื™ ืืœ ืคื™ืกืช ื‘ืจื–ืœ ืฉื ืงืจืืช TrendNet TU2-NU4
ื™ืชืจื•ื ื•ืช:

  • ืœืคืขืžื™ื ื–ื” ืืคื™ืœื• ืขื•ื‘ื“

ื—ืกืจื•ื ื•ืช:

  • ืœื ืชืžื™ื“ ืขื•ื‘ื“. ื ื ื™ื— ืฉืžืคืชื— ื”ื”ื’ื ื” ืฉืœ Guardant Stealth II ืœื ืžืชื—ื™ืœ ื“ืจื›ื•, ื ืฉื‘ืข ืขื ื”ืฉื’ื™ืื” "ืœื ื ื™ืชืŸ ืœื”ืคืขื™ืœ ืืช ื”ืžื›ืฉื™ืจ".
  • ืชื•ื›ื ืช ื ื™ื”ื•ืœ (ืงืจื™ืื” - ื”ืจื›ื‘ื” ื•ื”ืกืจื” ืฉืœ ื”ืชืงื ื™ USB) ื”ื™ื ืคืชื˜ื™ืช ืขื“ ืงื™ืฆื•ื ื™ืช. ืžืชื’ื™ ืฉื•ืจืช ืคืงื•ื“ื”, ืื•ื˜ื•ืžืฆื™ื” - ืœื, ืœื ืฉืžืขืชื™. ื”ื›ืœ ืจืง ื‘ื™ื“. ืกื™ื•ื˜.
  • ืชื•ื›ื ืช ื”ื‘ืงืจื” ืžื—ืคืฉืช ืืช ืคื™ืกืช ื”ื‘ืจื–ืœ ืขืฆืžื” ื‘ืจืฉืช ื‘ืืžืฆืขื•ืช ืฉื™ื“ื•ืจ, ื›ืš ืฉื–ื” ืขื•ื‘ื“ ืจืง ื‘ืชื•ืš ืงื˜ืข ืจืฉืช ืฉื™ื“ื•ืจ ืื—ื“. ืืชื” ืœื ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืืช ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื—ืชื™ื›ืช ื”ื‘ืจื–ืœ ื‘ื™ื“. ื—ืชื™ื›ืช ื‘ืจื–ืœ ื‘ืชืช ืจืฉืช ืื—ืจืช? ืื– ื™ืฉ ืœืš ื‘ืขื™ื”.
  • ืžืคืชื—ื™ื ืงื™ื‘ืœื• ืฆื™ื•ืŸ ื‘ืžื›ืฉื™ืจ, ื–ื” ื—ืกืจ ืชื•ืขืœืช ืœืฉืœื•ื— ื“ื•ื—ื•ืช ื‘ืื’ื™ื.

ื”ืกื™ื‘ื•ื‘ ื”ืฉื ื™ ืงืจื” ื‘ื–ืžื ื™ื ืœื ื›ืœ ื›ืš ืจื—ื•ืงื™ื, ื•ื”ื•ื‘ื™ืœ ืื•ืชื™ ืœื ื•ืฉื ื”ืžืืžืจ - ืคืจื•ื™ืงื˜ USB/IP. ืžื•ืฉืš ื‘ืคืชื™ื—ื•ืช, ื‘ืžื™ื•ื—ื“ ืžืื– ื”ื—ื‘ืจ'ื” ืž ReactOS ื”ื ื—ืชืžื• ืขืœ ืžื ื”ืœ ื”ืชืงืŸ ืขื‘ื•ืจ Windows, ืื– ืขื›ืฉื™ื• ื”ื›ืœ ืขื•ื‘ื“ ืืคื™ืœื• ืขืœ x64 ืœืœื ืงื‘ื™ื™ื ื›ืžื• ืžืฆื‘ ื‘ื“ื™ืงื”. ืขืœ ื›ืš ืชื•ื“ื” ืจื‘ื” ืœืฆื•ื•ืช ReactOS! ื”ื›ืœ ื ืฉืžืข ื™ืคื”, ื‘ื•ืื• ื ื ืกื” ืœื”ืจื’ื™ืฉ ืืช ื–ื”, ื”ืื ื–ื” ื‘ืืžืช ื›ืš? ืœืžืจื‘ื” ื”ืฆืขืจ, ื’ื ื”ืคืจื•ื™ืงื˜ ืขืฆืžื• ื ื˜ื•ืฉ, ื•ืื™ ืืคืฉืจ ืœืกืžื•ืš ืขืœ ืชืžื™ื›ื” - ืื‘ืœ ืื™ืคื” ืฉืœื ื• ืœื ื ืขืœื, ื”ืžืงื•ืจ ื ืžืฆื ืฉื, ืื ื—ื ื• ื ื‘ื™ืŸ ืืช ื–ื”!

ื—ืœืง ืฉื ื™, ืฉืจืช-ืœื™ื ื•ืงืก

ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืฉืจืช USB/IP ื”ืžืฉืชืฃ ื”ืชืงื ื™ USB ื“ืจืš ืจืฉืช ืจืง ื‘ืžืขืจื›ืช ื”ืคืขืœื” ืžื‘ื•ืกืกืช ืœื™ื ื•ืงืก. ื•ื‘ื›ืŸ, ืœื™ื ื•ืงืก ื”ื™ื ืœื™ื ื•ืงืก, ืื– ื”ืชืงืŸ ืขืœ ื”ืžื›ื•ื ื” ื”ื•ื•ื™ืจื˜ื•ืืœื™ืช ืฉืœ ื“ื‘ื™ืืŸ 8 ื‘ืชืฆื•ืจื” ื”ืžื™ื ื™ืžืœื™ืช, ืชื ื•ืขืช ื™ื“ ืจื’ื™ืœื”:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbip

ืžึฐื™ื•ึผืฉืึธื‘. ื™ืชืจ ืขืœ ื›ืŸ, ื”ืื™ื ื˜ืจื ื˜ ืžืฆื™ืข ืฉืชืฆื˜ืจื›ื• ืœื”ื•ืจื™ื“ ืืช ืžื•ื“ื•ืœ ื”-usbip, ืื‘ืœ - ืฉืœื•ื, ื”ื’ืจื™ืฃ ื”ืจืืฉื•ืŸ. ืื™ืŸ ืžื•ื“ื•ืœ ื›ื–ื”. ื•ื”ื›ืœ ื‘ื’ืœืœ ืฉืจื•ื‘ ื”ืžื“ืจื™ื›ื™ื ื‘ืจืฉืช ืžืชื™ื™ื—ืกื™ื ืœืขื ืฃ ื”ื™ืฉืŸ ื™ื•ืชืจ 0.1.x, ื•ื‘ื’ืจืกื” 0.2.0 ื”ืื—ืจื•ื ื” ืœืžื•ื“ื•ืœ ื”-usbip ื™ืฉ ืฉืžื•ืช ืฉื•ื ื™ื.

ืœื›ืŸ:

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbip

ื•ื‘ื›ืŸ, ื‘ื•ืื• ื ื•ืกื™ืฃ ืืช ื”ืฉื•ืจื•ืช ื”ื‘ืื•ืช ืœ-/etc/modules ื›ื“ื™ ืœื˜ืขื•ืŸ ืื•ืชืŸ ืื•ื˜ื•ืžื˜ื™ืช ื‘ืขืช ื”ืคืขืœืช ื”ืžืขืจื›ืช:

usbip-core
usbip-host
vhci-hcd

ื‘ื•ืื• ื ืชื—ื™ืœ ืืช ืฉืจืช ื”- usbip:

sudo usbipd -D

ื™ืชืจื” ืžื›ืš, ื”ืžื•ื— ื”ืื•ื ื™ื‘ืจืกืœื™ ืื•ืžืจ ืœื ื• ืฉ-usbip ืžื’ื™ืข ืขื ืกืงืจื™ืคื˜ื™ื ืฉืžืืคืฉืจื™ื ืœื ื• ืœื ื”ืœ ืืช ื”ืฉืจืช - ืœื”ืจืื•ืช ืื™ื–ื” ืžื›ืฉื™ืจ ื”ื•ื ื™ืฉืชืฃ ื‘ืจืฉืช, ืœืจืื•ืช ืืช ื”ืกื˜ื˜ื•ืก ื•ื›ื•'. ื›ืืŸ ืžื—ื›ื” ืœื ื• ื›ืœื™ ื’ืŸ ื ื•ืกืฃ - ื”ืกืงืจื™ืคื˜ื™ื ื”ืืœื” ื‘ืขื ืฃ 0.2.x, ืฉื•ื‘, ืงื™ื‘ืœื• ืืช ื”ืฉื. ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ืคืงื•ื“ื•ืช ืขื

sudo usbip

ืœืื—ืจ ืงืจื™ืืช ืชื™ืื•ืจ ื”ืคืงื•ื“ื•ืช, ืžืชื‘ืจืจ ืฉื›ื“ื™ ืœืฉืชืฃ ืืช ื”ืชืงืŸ ื”-USB ื”ื ื“ืจืฉ, usbip ืจื•ืฆื” ืœื“ืขืช ืืช ื”-Bus ID ืฉืœื•. ืฆื•ืคื™ื ื™ืงืจื™ื, ื’ืจื™ืคื” ืžืกืคืจ ืฉืœื•ืฉ ื ืžืฆืืช ื‘ื–ื™ืจื”: ื”-Bus ID ืฉื™ื™ืชืŸ ืœื ื• lsusb (ื–ื” ื”ื™ื” ื ืจืื” ื”ื›ื™ ื‘ืจื•ืจ) - ื–ื” ืœื ืžืชืื™ื ืœื”! ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉ-usbip ืžืชืขืœื ืžื—ื•ืžืจื” ื›ืžื• ืจื›ื–ื•ืช USB. ืœื›ืŸ, ื ืฉืชืžืฉ ื‘ืคืงื•ื“ื” ื”ืžื•ื‘ื ื™ืช:

user@usb-server:~$ sudo usbip list -l
 - busid 1-1 (064f:0bd7)
   WIBU-Systems AG : BOX/U (064f:0bd7)

ื”ืขืจื”: ืœื”ืœืŸ ื‘ืจืฉื™ืžื•ืช ืืชืืจ ื”ื›ืœ ื‘ืืžืฆืขื•ืช ื”ื“ื•ื’ืžื” ืฉืœ ืžืคืชื— ื”-USB ื”ืกืคืฆื™ืคื™ ืฉืœื™. ืฉื ื”ื—ื•ืžืจื” ื•ืฆืžื“ ื”-VID:PID ืฉืœืš ื™ื›ื•ืœื™ื ื•ื™ื”ื™ื” ืฉื•ื ื™ื. ืฉืœื™ ื ืงืจื Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

ืขื›ืฉื™ื• ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืฉืชืฃ ืืช ื”ืžื›ืฉื™ืจ ืฉืœื ื•:

user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: complete

ื™ื•ื”ืจื”, ื—ื‘ืจื™ื!

user@usb-server:~$ sudo usbip list -r localhost
Exportable USB devices
======================
 - localhost
        1-1: WIBU-Systems AG : BOX/U (064f:0bd7)
           : /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-1
           : Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)

ืฉืœื•ืฉ ืขื™ื“ื•ื“, ื—ื‘ืจื™ื! ื”ืฉืจืช ืฉื™ืชืฃ ืืช ืคื™ืกืช ื”ื‘ืจื–ืœ ื“ืจืš ื”ืจืฉืช, ื•ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื—ื‘ืจ ืื•ืชื”! ื ื•ืชืจ ืจืง ืœื”ื•ืกื™ืฃ ืืช ื”ื”ืคืขืœื” ื”ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ื”ื“ืžื•ืŸ usbip ืœ-/etc/rc.local

usbipd -D

ื—ืœืง ืฉืœื™ืฉื™, ืฆื“ ื”ืœืงื•ื— ื•ืžื‘ืœื‘ืœ

ื ื™ืกื™ืชื™ ืœื—ื‘ืจ ืืช ื”ืžื›ืฉื™ืจ ื”ืžืฉื•ืชืฃ ื“ืจืš ื”ืจืฉืช ืœืžื›ื•ื ืช ื“ื‘ื™ืืŸ ืžื™ื“ ื‘ืื•ืชื• ืฉืจืช, ื•ื”ื›ืœ ื”ืชื—ื‘ืจ ื‘ืกื“ืจ:

sudo usbip attach --remote=localhost --busid=1-1

ื‘ื•ืื• ื ืขื‘ื•ืจ ืœ-Windows. ื‘ืžืงืจื” ืฉืœื™ ื–ื” ื”ื™ื” Windows Server 2008R2 Standard Edition. ื”ืžื“ืจื™ืš ื”ืจืฉืžื™ ืžื‘ืงืฉ ืžืžืš ืœื”ืชืงื™ืŸ ืชื—ื™ืœื” ืืช ื”ื“ืจื™ื™ื‘ืจ. ื”ื”ืœื™ืš ืžืชื•ืืจ ื‘ืฆื•ืจื” ืžื•ืฉืœืžืช ื‘-readme ื”ืžืฆื•ืจืฃ ืœืœืงื•ื— Windows, ืื ื—ื ื• ืขื•ืฉื™ื ื”ื›ืœ ื›ืคื™ ืฉื›ืชื•ื‘, ื”ื›ืœ ืžืกืชื“ืจ. ื’ื ื‘-XP ื–ื” ืขื•ื‘ื“ ื‘ืœื™ ื‘ืขื™ื•ืช.

ืœืื—ืจ ืคืจื™ืงืช ื”ืœืงื•ื—, ืื ื• ืžื ืกื™ื ืœื”ืจื›ื™ื‘ ืืช ื”ืžืคืชื— ืฉืœื ื•:

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip_windows.c: 756 (query_interface0) recv op_common
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

ื”ื• ื”ื•. ืžืฉื”ื• ื”ืฉืชื‘ืฉ. ืื ื• ืžืฉืชืžืฉื™ื ื‘ืžื™ื•ืžื ื•ืช ืฉืœ ื’ื•ื’ืœ. ื™ืฉ ืื–ื›ื•ืจื™ื ืžืงื•ื˜ืขื™ื ืฉืžืฉื”ื• ืœื ื‘ืกื“ืจ ื‘ืงื‘ื•ืขื™ื, ื‘ื—ืœืง ื”ืฉืจืช, ื”ืžืคืชื—ื™ื ืฉื™ื ื• ืืช ื’ืจืกืช ื”ืคืจื•ื˜ื•ืงื•ืœ ื‘ืขืช ื”ืžืขื‘ืจ ืœื’ืจืกื” 0.2.0, ืืš ื”ื ืฉื›ื—ื• ืœืขืฉื•ืช ื–ืืช ื‘ืœืงื•ื— Win. ื”ืคืชืจื•ืŸ ื”ืžื•ืฆืข ื”ื•ื ืœืฉื ื•ืช ืืช ื”ืงื‘ื•ืข ื‘ืงื•ื“ ื”ืžืงื•ืจ ื•ืœื‘ื ื•ืช ืžื—ื“ืฉ ืืช ื”ืœืงื•ื—.

ืื‘ืœ ืื ื™ ืžืžืฉ ืœื ืจื•ืฆื” ืœื”ื•ืจื™ื“ ืืช Visual Studio ืœืžืขืŸ ื”ื”ืœื™ืš ื”ื–ื”. ืื‘ืœ ื™ืฉ ืœื™ ื”ื™ื™ื• ื™ืฉืŸ ื•ื˜ื•ื‘. ื‘ืงื•ื“ ื”ืžืงื•ืจ, ื”ืงื‘ื•ืข ืžื•ื›ืจื– ื›ืžื™ืœื” ื›ืคื•ืœื”. ื‘ื•ื ื ื—ืคืฉ ื‘ืงื•ื‘ืฅ ืืช 0x00000106, ื•ื ื—ืœื™ืฃ ืื•ืชื• ื‘-0x00000111. ื–ื›ื•ืจ, ืกื“ืจ ื‘ืชื™ื ื”ืคื•ืš. ื”ืชื•ืฆืื” ื”ื™ื ืฉื ื™ ื”ืชืืžื•ืช, ืชื™ืงื•ืŸ:

[usbip.exe]
00000CBC: 06 11
00000E0A: 06 11

ืื™ื™ื™ื™ื™... ื›ืŸ!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
new usb device attached to usbvbus port 1

ื–ื” ื™ื›ื•ืœ ื”ื™ื” ืœืกื™ื™ื ืืช ื”ืžืฆื’ืช, ืื‘ืœ ื”ืžื•ื–ื™ืงื” ืœื ื”ืชื ื’ื ื” ืœืื•ืจืš ื–ืžืŸ. ืœืื—ืจ ืืชื—ื•ืœ ืžื—ื“ืฉ ืฉืœ ื”ืฉืจืช, ื’ื™ืœื™ืชื™ ืฉื”ืžื›ืฉื™ืจ ื‘ืœืงื•ื— ืื™ื ื• ืžื•ืชืงืŸ!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

ื•ื–ื” ื”ื›ืœ. ืืคื™ืœื• ื’ื•ื’ืœ ื”ื™ื•ื“ืข ื›ืœ ืœื ื™ื›ืœื” ืœืขื ื•ืช ืขืœ ื–ื” ื‘ืฉื‘ื™ืœื™. ื•ื™ื—ื“ ืขื ื–ืืช, ื”ืคืงื•ื“ื” ืœื”ืฆื’ืช ืžื›ืฉื™ืจื™ื ื–ืžื™ื ื™ื ื‘ืฉืจืช ืžืจืื” ื‘ืฆื•ืจื” ื“ื™ ื ื›ื•ื ื” - ื”ื ื” ื–ื”, ื”ืžืคืชื—, ืืชื” ื™ื›ื•ืœ ืœืขืœื•ืช ืื•ืชื•. ืื ื™ ืžื ืกื” ืœืขืœื•ืช ืžืชื—ืช ืœืœื™ื ื•ืงืก - ื–ื” ืขื•ื‘ื“! ื•ืื ืขื›ืฉื™ื• ืชื ืกื” ืžืชื—ืช ืœื•ื•ื™ื ื“ื•ืก? ืื•ื™ ืœืขื–ืื–ืœ - ื–ื” ืขื•ื‘ื“!

ื”ื’ืจื™ืฃ ื”ืื—ืจื•ืŸ: ืžืฉื”ื• ืœื ื ื•ืกืฃ ื‘ืงื•ื“ ื”ืฉืจืช. ื‘ืขืช ืฉื™ืชื•ืฃ ืžื›ืฉื™ืจ, ื”ื•ื ืื™ื ื• ืงื•ืจื ืžืžื ื• ืืช ืžืกืคืจ ืžืชืืจื™ ื”-USB. ื•ื›ืืฉืจ ืžืชืงื™ื ื™ื ืืช ื”ืžื›ืฉื™ืจ ืž-Linux, ื”ืฉื“ื” ื”ื–ื” ืžืชืžืœื. ืœืจื•ืข ื”ืžื–ืœ, ืื ื™ ืžื›ื™ืจ ืืช ื”ืคื™ืชื•ื— ืชื—ืช ืœื™ื ื•ืงืก ื‘ืจืžืช "ืขืฉื” && ืขืฉื” ื”ืชืงื ื”". ืœื›ืŸ, ื”ื‘ืขื™ื” ื ืคืชืจืช ืขื ืคืจื™ืฆื” ืžืœื•ื›ืœื›ืช ืœืžื“ื™ - ื”ื•ืกืคื” ืœ- /etc/rc.local

usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00

ื—ืœืง ื’ืžืจ

ืื—ืจื™ ืงืฆืช ื”ืชืขืกืงื•ืช ื–ื” ืขื•ื‘ื“. ื”ืชื•ืฆืื” ื”ืจืฆื•ื™ื” ื”ืชืงื‘ืœื”, ื›ืขืช ื ื™ืชืŸ ืœื”ืจื›ื™ื‘ ืืช ื”ืžืคืชื— ืขืœ ื›ืœ ืžื—ืฉื‘ (ื•ืœื ืžื•ืชืงืŸ ื›ืžื•ื‘ืŸ), ื›ื•ืœืœ ืืœื” ืฉืžื—ื•ืฅ ืœืงื˜ืข ืจืฉืช ื”ืฉื™ื“ื•ืจ. ืื ืชืจืฆื”, ืชื•ื›ืœ ืœืขืฉื•ืช ื–ืืช ื‘ืืžืฆืขื•ืช ืกืงืจื™ืคื˜ ืžืขื˜ืคืช. ืžื” ืฉื ื—ืžื“ - ื”ืชืขื ื•ื’ ื”ื•ื ืœื’ืžืจื™ ื‘ื—ื™ื ื.
ืื ื™ ืžืงื•ื•ื” ืฉื”ื ื™ืกื™ื•ืŸ ืฉืœื™ ื™ืขื–ื•ืจ ืœ-habrazhiteli ืœืขืงื•ืฃ ืืช ื”ืžื’ืจืคื” ืฉื”ื˜ื‘ื™ืขื” ืขืœ ื”ืžืฆื— ืฉืœื™. ืชื•ื“ื” ืœืš ืขืœ ืชืฉื•ืžืช ื”ืœื‘!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”