У ц╕й статт╕ я постараюся розказати Вам про те, як Ви можете з╕ старих ╕ вже по сут╕ н╕кому непотр╕бних комп'ютер╕в створити додатков╕ робоч╕ м╕сця.

Готувалось для журналу "Комп'ютер+Програми", але туди не попало


Подаю характеристики комп'ютер╕в, з якими я проводив експерименти:

  • Терм╕нальний сервер: Celeron Tualatin 1100МГц, RAM 256МБ, HDD 40GB, розд╕л п╕д в╕ртуальну пам'ять 500MB, мережева карта D-Link 583TX на баз╕ ч╕па RealTek 8139. Ключову роль тут в╕д╕гра╓ об'╓м оперативно╖ пам'ят╕, тому якщо Ви плану╓те дек╕лька терм╕нал╕в з оф╕сними пакетами, то поставте поб╕льше пам'ят╕.

  • Терм╕нал кл╕╓нта: Pentium 120МГц, RAM 24МБ, мережева карта (клон RealTek 8139), дисковод.

  • Коли Ви вир╕шили поекспериментувати з терм╕нальними р╕шеннями вдома, ╕ будете використовувати лише два комп'ютери, то мережа може складатися з перехресного кабеля, ну, а якщо терм╕нал╕в ма╓ бути б╕льше, н╕ж один, то це повинна бути повноц╕нна мережа на баз╕ концентратора або комутатора. Принцип вибору мереж╕ поляга╓ на принцип╕: чим швидше, тим краще. Тому беремо за основу мережу з швидкод╕╓ю 100Мб╕т.

    Етапи створення Х-терм╕нала:
  • Створення дискети з терм╕нал-ядром для завантаження Х-терм╕нала.
  • Створення робочого-ядра для роботи на Х-терм╕нал╕.
  • П╕дготовка робочого-ядра для його завантаження на Х-терм╕нал через мережу.
  • Налаштування роботи DHCP демона для видач╕ робочого-ядра Х-терм╕налу
  • Налаштування конф╕гурац╕йних файл╕в Х-терм╕нала та терм╕нального сервера

  • На першому етап╕ ╓ два вар╕анти:

    A. Ви ма╓те суперову мережеву карточку з BootROM ╕ ця карточка прекрасно розп╕зна╓ться ядром л╕нукса. Цей вар╕ант буде дуже под╕бним до вар╕анта "Б" за винятком того, що терм╕нал-ядро завантажу╓ться не на дискету, а в BootROM мережево╖ карти. Тому Вам потр╕бно буде мати програму, яка зможе записати терм╕нал-ядро у Вашу мережеву карту, п╕сля чого Ви можете переходити до другого етапу настройки Х-терм╕налу.

    Б. Ви ма╓те стандартну мережеву карточку за 5-10 бакс╕в, яка про BootROM нав╕ть нечула. Оск╕льки вар╕ант "Б" найб╕льш поширений, то про нього я ╕ буду вести нашу подальшу розмову. Нам потр╕бно створити спец╕альну дискету яка буде емулювати BootROM дорого╖ мережево╖ карти.

    Якщо Ви впевнен╕ в джерел╕, з якого Ви придбали мережеву карту ╕ ч╕тко зна╓те ╖╖ модель, тод╕ в╕дразу ╕д╕ть на сервер http://rom-o-matic.net, де через дек╕лька секунд зможете отримати терм╕нал-ядро. Терм╕нал-ядро для дискети займа╓ близько 30КБ ╕ ма╓ розширення lzdsk, тому будьте обережн╕ при вибор╕ ядра, яке Ви бажа╓те отримати.

    Вважа╓мо, що перший крок на шляху створення дискети ми пройшли. Ви ма╓те св╕женьке терм╕нал-ядро ╕ тепер настав час записати його на дискету для перев╕рки працездатност╕ нашого Х-терм╕налу. Процедура запису терм╕нал-ядра на дискету вигляда╓ так:

    dd if=eb-5.0.7-dfe538.lzdsk of=/dev/fd0

    Зам╕сть файла eb-5.0.7-dfe538.lzdsk Ви повинн╕ вказати файл з терм╕нал-ядром для Вашо╖ мережево╖ карти. Назва dfe538 буде зам╕нена на назву мережево╖ карти, для яко╖ Ви завантажили терм╕нал-ядро.

    Ну ╕ якщо Ви все правильно зробили ╕ Ваша впевнен╕сть у якост╕ мережево╖ карти Вас не п╕двела, то можете см╕ло вставляти дискету на Х-терм╕нал ╕ переванта- жуватися (не забудьте посл╕довн╕сть завантаження Х-терм╕налу розпочати з диско- воду). Через л╕чен╕ секунди на екран╕ Ви зможете побачити наступну ╕нформац╕ю:

    .000021.0000 done
    ROM segment 0x0800 length 0x4000 reloc 0x9400
    Etherboot 5.0.7 (GPL) Tagged ELF for [RTL8139]
    Boot from (N)etwork or from (L)ocal?

    Якщо терм╕нал-ядро розп╕зна╓ Вашу мережеву карту, то воно видасть наступну ╕нформац╕ю:

    Probing... [RTL8139] Found Realtek 8139 clone ROM address 0x0000
    -ioaddr 0x6100, addr 00:50:FC:20:D8:99 100Mbps full-duplex

    addr 00:50:FC:20:D8:99 - це MAC-адреса Вашо╖ мережево╖ карти, яка буде потр╕бна Вам на останньому етап╕ конф╕гурування Х-терм╕налу.

    Якщо щось буде не так, то терм╕нал-ядро видасть помилку про те, що мережеву карту не знайдено.

    Отже, перший етап ми виконали, а тепер подивимося, що буде, коли в нас под╕╖ будуть розвиватися не так гладко. Основна проблема на першому етап╕ полягатиме в розп╕знаванн╕ мережево╖ карти терм╕нал-ядром.

    Для цього потр╕бно взнати правдив╕ параметри мережевих карт, як╕ Ви будете використовуватися на Х-терм╕нал╕ та терм╕нальному сервер╕. Почергово вставля╓мо мережев╕ карти в комп'ютер (звичайно при виключеному живленн╕) ╕ п╕сля завантаження в л╕нукс викону╓мо наступну команду:

    lspci

    яка виводить список всього, що ╓ в нашому комп'ютер╕:

    00:00.0 Host bridge: Intel Corporation 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 04)
    00:01.0 PCI bridge: Intel Corporation: Unknown device 1131 (rev 04)
    00:1e.0 PCI bridge: Intel Corporation: Unknown device 244e (rev 05)
    00:1f.0 ISA bridge: Intel Corporation: Unknown device 2440 (rev 05)
    00:1f.1 IDE interface: Intel Corporation: Unknown device 244b (rev 05)
    00:1f.2 USB Controller: Intel Corporation: Unknown device 2442 (rev 05)
    00:1f.3 SMBus: Intel Corporation: Unknown device 2443 (rev 05)
    00:1f.4 USB Controller: Intel Corporation: Unknown device 2444 (rev 05)
    01:00.0 VGA compatible controller: nVidia Corporation NV11 (rev b2)
    02:0d.0 Multimedia audio controller: ESS Technology ES1969 Solo-1 Audiodrive (rev 02)
    02:0e.0 Ethernet controller: D-Link System Inc: Unknown device 1300 (rev 10)

    Як бачимо, наша мережева карта знаходиться на шин╕ 02, в слот╕ 0e, тому беремо число 02:0e.0 ╕ використову╓мо його в наступн╕й команд╕ для того, щоб взнати деяку додаткову ╕нформац╕ю:

    lspci -vn -s 02:0e.0

    02:0e.0 Class 0200: 1186:1300 (rev 10)
    Subsystem: 1186:1300
    Flags: bus master, medium devsel, latency 32, IRQ 5
    I/O ports at b000
    Memory at ed800000 (32-bit, non-prefetchable)

    п╕сля цих нескладних команд ми отримали те, що нам необх╕дно, а саме: число 1186:1300. Перша його частина означа╓ виробника мережево╖ карти, а друга - опису╓ модель мережево╖ карти. Ц╕ числа ╓ ун╕кальн╕ для будь-якого виробника чи його модел╕. З наступного файлу Ви зможете взнати коди виробник╕в, тут ╓ коди вс╕х виробник╕в, як╕ хоч щось випускають для комп'ютер╕в:

    /usr/share/pci.ids

    У Вас виникне законом╕рне питання: чому я це все описую? А тому, що саме таку п╕дробку (абсолютно цього не знаючи) я поставив на Х-терм╕нал, а пот╕м два дн╕ не м╕г зрозум╕ти чому карта, яка нормально працю╓ п╕д Windows, категорично в╕дмовля╓ться працювати п╕д Linux. А причина була в тому, що код карти був 0001:8139, ╕ саме про код виробника 0001, терм╕нал-ядро, яке я записав на дискету, абсолютно н╕чого не знало.

    Отже, як ми можемо об╕йти цю проблему? ╢ два вар╕анти: перший - дочекатися, поки група ентуз╕аст╕в, яка супроводжу╓ проект Etherboot, внесе коди нашо╖ п╕дробки в свою базу ╕ випустить нову верс╕ю продукту, що звичайно буде не дуже швидко.

    А, оск╕льки я не мав н╕якого бажання на когось чекати, я скористався другим вар╕антом, який поляга╓ в тому, щоб власноручно внести коди виробника карти в програму ╕, перекомп╕лювавши, ╖╖, отримати працездатне терм╕нал-ядро.

    Для цього завантажте з сайту http://etherboot.sourcefogre.net пакет etherboot-5.0.7 з емуляторами функц╕й BootROM для використання ╖х на Х-терм╕налах.

    Для тих, хто теж ма╓ проблеми з розп╕знаванням мережево╖ карти терм╕нал-ядром, подаю приклади патч╕в для мо╓╖ мережево╖ карти на баз╕ ч╕пу RealTek 8139:

    *** Patch #1 запису╓мо в файл patch1
    =====================================
    
    *** config.c	Thu Jul  4 11:34:16 2002
    --- my_config.c	Fri Nov  1 11:50:04 2002
    *************** static struct pci_id rtl8139_nics[] = {
    *** 153,158 ****
    --- 153,160 ----
      		"Realtek 8129" },
      	{ PCI_VENDOR_ID_REALTEK,	PCI_DEVICE_ID_REALTEK_8139,
      		"Realtek 8139" },
    + 	{ PCI_VENDOR_ID_REALTEK_CLONE,	PCI_DEVICE_ID_REALTEK_8139,
    + 		"Realtek 8139 clone" },
      	{ PCI_VENDOR_ID_DLINK,		PCI_DEVICE_ID_DFE530TXP,
                      "DFE530TX+/DFE538TX" },
              { PCI_VENDOR_ID_SMC_1211,       PCI_DEVICE_ID_SMC_1211,
    
    *** Patch #2 запису╓мо в файл patch2
    ====================================
    
    *** pci.h	Fri Nov  1 11:51:28 2002
    --- my_pci.h	Fri Nov  1 11:51:39 2002
    *************** __asm__ __volatile__("pushfl ; popl %0":
    *** 101,106 ****
    --- 101,107 ----
      #define restore_flags(x) \
      __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")
      
    + #define PCI_VENDOR_ID_REALTEK_CLONE     0x0001
      #define PCI_VENDOR_ID_ADMTEK            0x1317
      #define PCI_DEVICE_ID_ADMTEK_0985       0x0985
      #define PCI_VENDOR_ID_REALTEK           0x10ec
    
    Файли з патчами коп╕ю╓мо в директор╕ю etherboot-5.x.x/src ╕ наклада╓мо на файли наступними командами:

    patch -p0 < patch1
    patch -p0 < patch2

    Впринцип╕ для створення потр╕бних зм╕н Ви можете зам╕нити стр╕чки як╕ починаються з символу "+" на параметри Вашо╖ мережево╖ карти. Тепер, коли Ви використали мо╖ патч╕ або зробили власн╕ зм╕ни, можете скомп╕лювати терм╕нал-ядро для вашо╖ мережево╖ карти наступною командою:

    ./make bin/boot1a.bin bin32/rtl8139.lzdsk

    запису╓мо на дискету:

    dd if=bin32/rtl8139.lzdsk of=/dev/fd0

    Звичайно, назва rtl8139, яка використову╓ться в нашому приклад╕ повинна бути зам╕нена на назву драйвера мережево╖ карти, для яко╖ Ви комп╕лювали терм╕нал-ядро. Щоб це взнати, перегляньте файл etherboot-5.x.x/src/NIC ╕ зверн╕ть увагу на стр╕чки, в яких м╕ститься family ..... На м╕сц╕ крапок знаходиться назва драйвера, який в╕дпов╕да╓ за роботу Вашо╖ мережево╖ карти. От цю назву ╕ вказуйте при комп╕люванн╕ терм╕нал-ядра. А чи п╕дтриму╓ться саме Ваша мережева карта цим драйвером, Ви можете взнати з л╕н╕йок, що м╕стяться нижче family ..... ╕ в яких вказано коди виробника ╕ модел╕ мережевих карт.

    Якщо Ви зробили все правильно, то терм╕нал-ядро вже знаходиться на Ваш╕й дискет╕, з яко╖ Ви будете в подальшому завантажувати Х-терм╕нал.

    -----
    Тепер ми переходимо до наступного етапу, а саме до п╕дготовки робочого-ядра для Х-терм╕нала.

    Для робочого-ядра Х-терм╕налу я рекомендую взяти ядро верс╕╖ 2.4.18, оск╕льки воно м╕стить непоганий драйвер для мережевих карт на ч╕п╕ RealTek, який ╓ основою багатьох дешевих (╕ не дуже) мережевих карт. Ну, а загальний принцип вибору ядра - це його якомога найб╕льша сум╕сн╕сть з апаратним забезпеченням Х-терм╕нала.

    Процедура комп╕лювання нового робочого-ядра Вам повинна бути вже знайомою, тому не буду вдаватися в детал╕ ╕ скажу лише одне: при його конф╕гуруванн╕ враховуйте те, що це робоче-ядро буде працювати на Х-терм╕нал╕, а не на тому комп'ютер╕, де Ви його комп╕лю╓те.

    Перед комп╕люванням ядра завантажте з сайту http://www.instmath.rwth-aachen.de/~heine/nfs-swap/ патч який нада╓ можлив╕сть використовувати в╕ртуальну пам'ять через мережу. П╕сля його завантаження наклад╕ть його на робоче-ядро яке Ви збира╓теся конф╕гурувати. Перед комп╕люванням нового робочого-ядра для Х-терм╕налу створ╕ть прист╕й, який буде використовуватися робочим-ядром як коренева файлова система:

    mknod /dev/nfsroot c 0 255

    Нижче подаю конф╕гурац╕йний файл для робочого-ядра верс╕╖ 2.4.18. Ви можете взяти його за основу для будь якого ╕ншого Вашого робочого-ядра. Для цього скоп╕юйте цей текст в файл .config, що розташований в директор╕╖ з вих╕дними кодами робочого-ядра, а дал╕ можете командою make menuconfig п╕дправити деяк╕ параметри робочого-ядра. Т╕льки не викидайте закоментован╕ стр╕чки, бо тод╕ трохи зм╕ниться конф╕гурац╕я робочого-ядра.

    CONFIG_X86=y
    CONFIG_ISA=y
    # CONFIG_SBUS is not set
    CONFIG_UID16=y
    CONFIG_EXPERIMENTAL=y
    CONFIG_MODULES=y
    # CONFIG_MODVERSIONS is not set
    CONFIG_KMOD=y
    CONFIG_M586TSC=y
    CONFIG_X86_WP_WORKS_OK=y
    CONFIG_X86_INVLPG=y
    CONFIG_X86_CMPXCHG=y
    CONFIG_X86_XADD=y
    CONFIG_X86_BSWAP=y
    CONFIG_X86_POPAD_OK=y
    CONFIG_RWSEM_XCHGADD_ALGORITHM=y
    CONFIG_X86_L1_CACHE_SHIFT=5
    CONFIG_X86_USE_STRING_486=y
    CONFIG_X86_ALIGNMENT_16=y
    CONFIG_X86_TSC=y
    CONFIG_X86_PPRO_FENCE=y
    CONFIG_NOHIGHMEM=y
    CONFIG_MTRR=y
    # CONFIG_SMP is not set
    CONFIG_NET=y
    CONFIG_PCI=y
    CONFIG_PCI_GOANY=y
    CONFIG_PCI_BIOS=y
    CONFIG_PCI_DIRECT=y
    CONFIG_PCI_NAMES=y
    # CONFIG_HOTPLUG is not set
    CONFIG_PCMCIA=y
    CONFIG_CARDBUS=y
    # CONFIG_HOTPLUG_PCI is not set
    CONFIG_SYSVIPC=y
    # CONFIG_SYSCTL is not set
    CONFIG_KCORE_ELF=y
    # CONFIG_KCORE_AOUT is not set
    # CONFIG_BINFMT_AOUT is not set
    CONFIG_BINFMT_ELF=y
    # CONFIG_BINFMT_MISC is not set
    # CONFIG_PM is not set
    CONFIG_PNP=y
    CONFIG_ISAPNP=m
    CONFIG_BLK_DEV_FD=y
    CONFIG_BLK_DEV_LOOP=y
    CONFIG_BLK_DEV_RAM=y
    CONFIG_BLK_DEV_RAM_SIZE=4096
    CONFIG_PACKET=y
    # CONFIG_NETLINK_DEV is not set
    CONFIG_UNIX=y
    CONFIG_NETSWAP=y
    CONFIG_INET=y
    CONFIG_IP_MULTICAST=y
    CONFIG_IP_PNP=y
    CONFIG_IP_PNP_DHCP=y
    # CONFIG_IDE is not set
    # CONFIG_SCSI is not set
    CONFIG_NETDEVICES=y
    # CONFIG_DUMMY is not set
    CONFIG_NET_ETHERNET=y
    CONFIG_NET_PCI=y
    # CONFIG_EEPRO100 is not set
    CONFIG_8139TOO=y
    CONFIG_VT=y
    CONFIG_VT_CONSOLE=y
    CONFIG_SERIAL=y
    CONFIG_UNIX98_PTYS=y
    CONFIG_UNIX98_PTY_COUNT=256
    # CONFIG_BUSMOUSE is not set
    # CONFIG_MOUSE is not set
    # CONFIG_AGP is not set
    # CONFIG_DRM is not set
    # CONFIG_AUTOFS4_FS is not set
    # CONFIG_TMPFS is not set
    # CONFIG_ISO9660_FS is not set
    CONFIG_PROC_FS=y
    CONFIG_DEVFS_FS=y
    CONFIG_DEVPTS_FS=y
    CONFIG_EXT2_FS=y
    # CONFIG_PARTITION_ADVANCED is not set
    # CONFIG_MSDOS_PARTITION is not set
    CONFIG_NFS_FS=y
    CONFIG_ROOT_NFS=y
    CONFIG_SWAP_VIA_NFS=y
    CONFIG_NETSWAP=y
    CONFIG_NFSD=y
    CONFIG_SUNRPC=y
    CONFIG_LOCKD=y
    # CONFIG_PARTITION_ADVANCED is not set
    CONFIG_VGA_CONSOLE=y
    # CONFIG_SOUND is not set
    # CONFIG_USB is not set
    
    Отже, робоче-ядро скомп╕льовано ╕ ми переходимо до наступного етапу: п╕дготовки робочого-ядра, щоб завантажити його на Х-терм╕нал через мережу.

    Почнемо з того, що створимо директор╕ю, в як╕й tftp демон буде шукати робоче-ядро для видач╕ Х-терм╕налу:

    mkdir /tftpboot/lts

    Також Вам необх╕дно завантажити пакет mknbi-1.x.tar.gz з сервера http://etherboot.sourceforge.net, а також скомп╕лювати ╕ встановити цей пакет за допомогою наступних команд:

    ./configure && ./make && ./make install

    Звичайно, Ви можете завантажити RPM пакети для вс╕х вищезгаданих програм, бо, чесно кажучи, я звик все встановлювати з вих╕дних код╕в, але це нашо╖ проблеми зовс╕м не м╕ня╓.

    Переходимо в директор╕ю /usr/src/arch/i386/boot ╕ наступною командою створю╓мо робоче-ядро, яке зможе вантажитися по мереж╕:

    rdev bzImage /dev/nfsroot
    mknbi-linux --ip=rom --rootdir=rom bzImage > /tftpboot/lts/linux-2.4.18-ltsp

    Дал╕ нам потр╕бно перейти в директор╕ю, де щойно записано наше робоче-ядро ╕ створити символьне посилання на нього, яке нам буде потр╕бне в подальш╕й робот╕:

    cd /tftpboot/lts
    ln -s linux-2.4.18-ltsp vmlinuz.ltsp

    От ╕ все. Етап створення нового робочого-ядра для нашого Х-терм╕налу ╕ його налаштування для завантаження по мереж╕ ми виконали.

    Тепер почина╓мо наш четвертий етап, в якому ми налашту╓мо конф╕гурац╕йн╕ файли DHCP демона. Щоб нам було легше, потр╕бно з сайту http://www.ltsp.ru завантажити пакет ltsp.ru_core-3.x.x-i386 ╕ встановити його, а пот╕м лише п╕дправити зг╕дно з мо╖ми прикладами, конф╕гурац╕йн╕ файли, як╕ входять до цього пакету.

    Отже, в цьому приклад╕ використову╓ться DHCP сервер для того, щоб можна було динам╕чно видавати IP-адреси та параметри мереж╕ нашому Х-терм╕налу, або будь-як╕й ╕нш╕й ╖х к╕лькост╕. У сво╖й робот╕ я використовую за базову систему RedHat Linux 7.0 ╕ тому нижче подан╕ файли я використав з цього дистрибутива.
    RPM-пакети
    ----------
    dhcpcd-1.3.18.pl8-6
    dhcp-2.0-12
    portmap-4.0-29
    tftp-server-0.17-5
    nfs-utils-0.1.9.1-7
    
    Щоб NFS демон м╕г працювати на нашому терм╕нальному сервер╕, в ядро повинно бути включена п╕дтримка NFS кл╕╓н╕в та можлив╕сть його роботи як NFS сервера.

    А тепер наведу об╕цян╕ конф╕гурац╕йн╕ файли разом з директор╕ями, де вони знаходяться по замовчуванню:
    /etc/dhcp.conf
    default-lease-time            21600;
    max-lease-time                21600;
    
    option subnet-mask            255.255.255.0;
    option broadcast-address      192.168.0.255;
    option routers                192.168.0.254; вказу╓ться IP-адресу терм╕нального сервера (подив╕ться, що записано у файл╕ hosts)
    option domain-name-servers    192.168.0.254;
    
    option domain-name            "myhome.net"; вказу╓те назву свого домену, (це може бути будь-яка назва яку соб╕ придума╓те. Але у вс╕х файлах вона повинна бути одинакова.
    
    option root-path              "192.168.0.254:/opt/ltsp/i386";
    
    shared-network WORKSTATIONS {
      subnet 192.168.0.0 netmask 255.255.255.0 {
      }
    }
    
    group {
      use-host-decl-names   on;
      option log-servers    192.168.0.254;
    
      host xterminal {
        hardware ethernet   00:50:FC:20:D8:99; Ви повинн╕ вказати MAC-адрес Вашо╖ мережево╖ карти.
    
        fixed-address       192.168.0.2; вказу╓те IP-адресу яку Ви присвою╓те для дано╖ MAC-адреси.
    
        filename            "/tftpboot/lts/vmlinuz.ltsp";
      }
    }
    /etc/exports - цей файл потр╕бний NFS демону який в╕дпов╕да╓ за експорт вашо╖ файлово╖ системи на Х-терм╕нал (дуже уважно скоп╕юйте текс, вс╕ пуст╕ м╕сця це проб╕ли ╕ н╕ в якому раз╕ символи табуляц╕╖)
    /opt/ltsp/i386 192.168.0.0/255.255.255.0(ro,no_root_squash)
    /var/opt/ltsp/swapfiles 192.168.0.0/255.255.255.0(rw,no_root_squash)
    
    /etc/hosts - в╕дпов╕да╓ за перетворення символьних ╕мен в числову IP-адресу.
    127.0.0.1 localhost
    192.168.0.254 safari safari.myhome.net - це IP-адрес вашого терм╕нального сервера
    192.168.0.2 xterminal xterminal.myhome.net
    
    /etc/hosts.allow
    bootpd:    0.0.0.0
    in.tftpd:  192.168.0.
    portmap:   192.168.0.
    
    /etc/xinetd.d/tftp - створ╕ть або в╕дредагуйте цей файл. В╕н потр╕бен tftp демону для передач╕ робочого-ядра на Х-терм╕нал через мережу.
    service tftp
    {
      disable         = no
      socket_type     = dgram
      wait            = yes
      user            = nobody
      log_on_success += USERID
      log_on_failure += USERID
      server          = /usr/sbin/in.tftpd
      server_args     = /tftpboot
    }
    Ось приблизно так ма╓ виглядати вм╕ст директор╕╖ /etc/rc5.d та /etc/rc3.d.
    S10network
    S20portmap
    S25nfslock
    S30nfs
    S35dhcpd
    S40random
    S45xinetd
    S90xfs
    Командою netstat -a Ви можете перев╕рити наявн╕сть нищенаведених стр╕чок. Якщо вони присутн╕, значить все о'кей, якщо н╕, то шукайте, який сервер ╕ по як╕й причин╕ не запуска╓ться.
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 *:sunrpc                *:*                     LISTEN      
    udp        0      0 *:xdmcp                 *:*                                 
    udp        0      0 *:tftp                  *:*                                 
    udp        0      0 *:nfsd                  *:*                                 
    udp        0      0 *:sunrpc                *:*                                
    
    А наступною командою можете взнати, чи працю╓ сервери NFS та RPC-протоколу.

    rpcinfo -p

    Вив╕д ц╕╓╖ команди повинен виглядати приблизно так:
       program vers proto   port
        100000    2   tcp    111  portmapper
        100000    2   udp    111  portmapper
        100024    1   udp   1024  status
        100024    1   tcp   1024  status
        100011    1   udp   1011  rquotad
        100011    2   udp   1011  rquotad
        100005    1   udp   1025  mountd
        100005    1   tcp   1025  mountd
        100005    2   udp   1025  mountd
        100005    2   tcp   1025  mountd
        100003    2   udp   2049  nfs
        100021    1   udp   1027  nlockmgr
        100021    3   udp   1027  nlockmgr
    
    П╕сля вс╕х перев╕рок необх╕дно в файл╕ /etc/inittab зам╕нити стр╕чку

    id:3:initdefault:

    на

    id:5:initdefault:

    Це потр╕бно зробити для того, щоб ми могли завантажувати програму, яка буде в╕дпов╕дати за авторизац╕ю користувач╕в Х-терм╕налу ╕ запуск Х-сервера.

    Тепер перев╕рте файл /etc/X11/xdm/Xaccess, в якому розкоментуйте подану нижче стр╕чку, яка в╕дпов╕да╓ за можлив╕сть п╕дключення до Х-серверу, що працю╓ на Вашому терм╕нальному сервер╕.

    * # any host can get a login window

    А от наступну стр╕чку з файла /etc/X11/xdm/Xservers потр╕бно навпаки закоментувати, бо ╕накше Ви пост╕йно будете завантажуватися в граф╕чне середовище X Window:

    # :0 local /usr/X11R6/bin/X

    Остання зм╕на ╓ дуже важливою, оск╕льки ╖╖ пропуск зможе порушити завантажуван╕сть Вашого терм╕нального сервера, якщо Ви звикли працювати в консольному режим╕. Якщо Ви пост╕йно працю╓те в середовищ╕ X Window, тод╕ останню зм╕ну можете пропустити.

    Тепер Ви ма╓те змогу знову перевантажити Ваш Х-терм╕нал. Якщо все працю╓, п╕сля розп╕знавання терм╕нал-ядром Вашо╖ мережево╖ карти Ви зможете побачити наступну ╕нформац╕ю:
    Searching for server (DHCP)...
    Me: 192.168.0.2, Server: 192.168.0.254, Gateway: 192.168.0.254
    Loading 192.168.0.254:/tftpboot/lts/vmlinuz.ltsp
    А коли запити опрацьован╕, то tftp-сервер передасть на Х-терм╕нал робоче-ядро, яке через л╕чен╕ секунди видаватиме на екран Х-терм╕налу знайом╕ Вам ╕нформац╕йн╕ пов╕домлення про стан завантажування.

    Ну от, основна частина шляху з╕ створення Х-терм╕налу пройдена. Позаду залишилася одна, але найважча частина п╕дбору Х-сервера для Вашо╖ в╕деокарти. Вам потр╕бно прочитати документац╕ю на Х-сервери, як╕ ╕дуть у поставц╕ Вашого дистрибутиву Linux ╕ визначитися, який з них Вам п╕дходить, ╕ саме його записати у директор╕ю /opt/ltsp/i386/usr/X11R6/bin

    Подаю приклад конф╕гурац╕йного файлу, без якого ваш Х-сервер не зможе запуститися на Х-терм╕нал╕. В цьому файл╕ можете лише пом╕няти пристр╕й, який опису╓ Вашу мишку, назву Вашо╖ в╕деокарти та мон╕тору.
    /opt/ltsp/i386/etc/XF86Config
    Section "Files"
      RgbPath   "/usr/X11R6/lib/X11/rgb"
      FontPath  "/usr/X11R6/lib/X11/fonts/misc:unscaled"
      FontPath  "/usr/X11R6/lib/X11/fonts/cyrillic"
      FontPath  "/usr/X11R6/lib/X11/fonts/truetype"
    EndSection
    
    Section "Keyboard"
      Protocol    "Standard"
      AutoRepeat  500 5
      LeftAlt     Meta
      RightAlt    Meta
      ScrollLock  Compose
      RightCtl    Control
      XkbDisable  
    EndSection
    
    Section "Pointer"
      Device       "/dev/mouse"
      Protocol     "Microsoft"
      ZAxisMapping 4 5
    EndSection
    
    Section "Monitor"
      Identifier  "S/M 400b"
      VendorName  "Unknown"
      ModelName   "Unknown"
    
      HorizSync   30-69
      VertRefresh 50-160
    
      Modeline "800x600"  40  800  840  968 1056  600  601  605  628 +hsync +vsync
      Modeline "1024x768" 65 1024 1032 1176 1344  768  771  777  806 -hsync -vsync
    EndSection
    
    Section "Device"
      Identifier  "Trident 9440"
      VendorName  "Unknown"
      BoardName   "Unknown"
      VideoRam    1024
    EndSection
    
    Section "Screen"
     # Зверн╕ть увагу на назву Х-сервера, який буде керувати Вашою в╕деокартою ╕
     # вкаж╕ть той, який п╕дтриму╓ саме Вашу в╕деокарту.
     Driver      "svga"
    
     Device      "Trident 9440"
     Monitor     "S/M 400b"
     
     Subsection "Display"
       Depth       8
       Modes       "800x600" "1024x768"
       ViewPort    0 0
       Virtual     1024 768
     EndSubsection
    EndSection
    
    /opt/ltsp/i386/etc/lts.conf
    [Default]
      SERVER             = 192.168.0.254
      XSERVER            = auto
      USE_XFS            = N
      LOCAL_APPS         = N
      RUNLEVEL           = 5
    
    [xterminal]
      XSERVER            = XF86_SVGA
      LOCAL_APPS         = N
      USE_NFS_SWAP       = N
      SWAPFILE_SIZE      = 48m
      RUNLEVEL           = 5
    
    Директор╕╖, як╕ подано нижче, та ╖х вм╕ст можете взяти з терм╕нального сервера
    ╕ переписати в директор╕ю /opt/ltsp/i386/usr:
    
    /opt/ltsp/i386/usr/X11R6:
    drwxr-xr-x    2 root     root         4096 Oct 15 12:06 bin
    drwxr-xr-x    4 root     root         4096 Oct 15 12:52 lib
    drwxr-xr-x    4 root     root         4096 Oct 15 12:06 man
    
    /opt/ltsp/i386/usr/X11R6/bin:
    -rwxr-xr-x    1 2874     2878      3350364 Aug 20  2000 XF86_SVGA
    
    Це файл Х-сервера, який в╕дпов╕да╓ за роботу дуже багатьох старих в╕деокарт.
    Як бачите з прикладу, на мо╓му Х-терм╕нал╕ знаходиться старенька в╕деокарта
    Trident 9440, яка якраз п╕дтриму╓ться цим сервером, але у Вашому випадку
    назва сервера може зм╕нитися.
    
    /opt/ltsp/i386/usr/X11R6/lib:
    drwxr-xr-x    5 root     root         4096 Oct 15 13:11 X11
    
    /opt/ltsp/i386/usr/X11R6/lib/X11:
    drwxr-xr-x    2 root     root         4096 Oct 10 12:15 app-defaults
    drwxr-xr-x    5 root     root         4096 Oct 15 13:04 fonts
    -r--r--r--    1 root     root        17371 Aug 13 19:02 rgb.txt
    drwxr-xr-x    2 root     root         4096 Aug 13 19:03 xserver
    
    /opt/ltsp/i386/usr/X11R6/lib/X11/app-defaults:
    -r--r--r--    1 root     root         4527 Aug 26 15:00 XTerm
    -r--r--r--    1 root     root          828 Aug 13 19:02 XTerm-color
    -r--r--r--    1 root     root         1035 Sep 13 20:46 XXkb
    
    /opt/ltsp/i386/usr/X11R6/lib/X11/fonts:
    drwxr-xr-x    2 root     root         4096 Oct  1 13:41 misc
    
    /opt/ltsp/i386/usr/X11R6/lib/X11/fonts/misc:
    (вм╕ст ц╕╓╖ директор╕╖ повн╕стю в╕дпов╕да╓ вм╕сту терм╕нального сервера)
    
    /opt/ltsp/i386/usr/X11R6/lib/X11/xserver:
    -r--r--r--    1 root     root         2925 Aug 13 19:03 SecurityPolicy
    
    /opt/ltsp/i386/usr/X11R6/lib/modules:
    (вм╕ст ц╕╓╖ директор╕╖ повн╕стю в╕дпов╕да╓ вм╕сту терм╕нального сервера)
    
    /opt/ltsp/dev
    Повинен м╕стити наступн╕ файли, символьне посилання mouse може посилатися на
    пристр╕й psaux, якщо Ви користу╓теся PS/2 мишкою. Ц╕ файли можете взяти з
    в╕дпов╕дно╖ директор╕╖ терм╕нального сервера.
    
    crw--w--w-    1 root     root       5,   1 Nov  1 15:52 console
    crw-r-----    1 root     kmem       1,   2 Nov  1 16:06 kmem
    brw-rw----    1 root     disk       7,   0 Nov  1 16:07 loop0
    crw-r-----    1 root     kmem       1,   1 Nov  1 16:06 mem
    lrwxrwxrwx    1 root     root            5 Nov  1 16:11 mouse -> ttyS0
    crw-rw----    1 root     root      10,   1 Nov  1 15:53 psaux
    brw-rw----    1 root     disk       1,   1 Nov  1 15:53 ram1
    crw-------    1 root     root       4,   0 Nov  1 16:05 tty0
    crw--w----    1 root     tty        4,   1 Nov  1 16:05 tty1
    crw-------    1 root     root       4,   2 Nov  1 16:05 tty2
    crw-------    1 root     root       4,   3 Nov  1 16:05 tty3
    crw-------    1 root     root       4,   4 Nov  1 16:05 tty4
    crw-------    1 root     root       4,   5 Nov  1 16:05 tty5
    crw-r-----    1 root     uucp       4,  64 Nov  1 15:53 ttyS0
    crw-rw----    1 root     uucp       4,  65 Nov  1 15:53 ttyS1
    Зам╕н╕ть стр╕чки в файл╕ /opt/ltsp/i386/etc/rc.local

    /sbin/devfsd /dev

    на

    # /sbin/devfsd /dev ;

    та

    /bin/mount -n /dev/ram1 /tmp

    на

    /bin/mount -t ext2 /dev/ram1 /tmp

    От ╕ все. П╕сля завантаження Х-терм╕налу Ви повинн╕ через 2-3 секунди побачити запрошення на авторизац╕ю з терм╕нального серверу, якщо Ви його пройдете, то потрапите у в╕конний менеджер twm, а дал╕ все, що Ви будете виконувати, виконуватиметься на Вашому терм╕нальному сервер╕.

    Звичайно ця стаття не може претендувати на дуже детальний пос╕бник ╕з створення Х-терм╕нал╕в, але я намагався з╕брати всю ╕нформац╕ю в т╕й посл╕довност╕, в як╕й ╖╖ будуть потребувати п╕д час створення Х-терм╕налу, а також, звичайно постарався виявити дек╕лька п╕дводних камен╕в, як╕ не завжди ч╕тко описан╕ у в╕дпов╕дн╕й л╕тератур╕.

    Тарас Бродович, 2003