The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Создание бездискового X-терминала с помощью Debian etch (xterm x11 diskless boot debian linux xdm)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: xterm, x11, diskless, boot, debian, linux, xdm,  (найти похожие документы)
From: Виктор Вагнер <http://vitus.wagner.pp.ru>; Date: Sun, 16 Feb 2008 17:02:14 +0000 (UTC) Subject: Создание бездискового X-терминала с помощью Debian etch Оригинал: http://vitus.wagner.pp.ru/hints/etch-x-term.html В состав Debian etch входят пакеты ltsp-server и ltsp-utils, специально предназначенные для создания тонких клиентов. Но мне что-то получившаяся "тонкость" не понравилась. Поэтому я пошел другим путем Сначала я честно попытался воспользоваться debootstrap, но как выяснилось, зависимости у требуемых для X-терминала пакетов такие, что ой. Получится не меньше, чем у ltsp. А мне в итоге удалось уложиться в 28Мб. Тоже много, но уже если захочется, можно вместо сетевой загрузки ненужную 32Мб CF-ку на IDE прицепить. Постановка задачи Имеется система, содержащая видеокарту, сетевую карту с PXE-bootrom, звуковую карту, флоповод и немножко памяти (у меня - 64 мб). Хочется чтобы эта штука превратилась в полноценное рабочее место, где можно работать с приложениями, в том числе и работающими со звуком, читать дискеты и USB-флэшки. Для этого нам нужно чтобы на этой системе запустились X-сервер, nasd (желающие могут разработать вариант с PulseAudio или esd), и два floppyd - один на дисковод, другой на устройство /dev/sda1. Последовательность действий: Сначала собираем ядро с помощью kernel-package. В пакет. Ядро собираем без initrd, со всеми нужными модулями сетевых карт и поддержкой NFS-root внутри. Звук и поддержку USB можно модулями. USB нам нужна ради usb-storage, чтобы можно было втыкать флэшки в терминал и их читать с помощью mtools Берем набор следующий пакетов (некоторые зависимости будут неудовлетворены, но для нужной нам функциональности хватит) libc6 busybox modutils (это если с ядром 2.4. Если 2.6, то module-init-tools) libwrap0 portmap nfs-common x11-common libxt6 libice6 libsm6 libx11-6 libaudio2 libxau6 nas floppyd libfontenc1 libgcc1 libxfont1 zlib1g libfreetype6 xserver-xorg-core xserver-xorg-video-ati (это у меня ati. У вас может быть другое. В принципе, installed-size у драйверов маленький, можете хоть все засобачить) xserver-xorg-input-kbd xserver-xorg-input-mouse xserver-xorg-input-evdev Выбираем некоторую директорию (у меня /var/diskless), откуда это дело будет раздаваться по NFS. Распаковываем туда перечисленынные пакеты c помощью dpkg-deb -X пакет директория Никакие postinst скрипты не выполняются, но в данном случае нетривиальных postinst-скриптов и нет. Вместо этого делаем следующее # chroot /var/diskless /bin/busybox sh / # mount -t proc none /proc / # busybox --install / # ldconfig / # exit Вы, наверное, удивитесь: "А где же пакет xkb-data". А нету. Мы будем запускать xkbcomp с хоста, при логине из .xsession. Таким образом у каждого юзера может быть собственная раскладка клавиатуры. Теперь надо дополнительно создать файл /var/diskless/etc/X11/Xwrapper.config (я не мудрствуя лукаво скопировал его с хоста), создать симлинк /var/diskless/etc/X11/X, ведущий на /usr/bin/Xorg (ага, именно со слэшом вначале). Большие эстеты могут создавать его зайдя в chroot и запустив там busybox-овский шелл, но я и так обошелся, создать директории /dev /tmp и /var/log и населить dev соответствующими специальными файлами. У меня там audio dsp0 mem port sda1 sda13 sda3 sda7 tty1 tty5 audio0 fd0 mixer psaux sda10 sda14 sda4 sda8 tty2 tty6 console full mixer0 random sda11 sda15 sda5 sda9 tty3 urandom dsp kmem null sda sda12 sda2 sda6 tty0 tty4 zero В принципе, часть tty можно поотрывать, да и разделы sda кроме sda1 не нужны. Кладем xorg.conf в /etc/X11 (у него должен быть единственный элемент font-path, указывающий на фонт-сервер) и имеем практически готовую систему, за исключением init. Вместо init кладем шелловский скрипт следующего содержания: #!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH respawn() { (while true; do $1 sleep 5 done) & } echo -n loading modules for i in usbcore uhci usb-storage opl3sa2; do modprobe $i && echo -n " $i" done echo "." echo starting portmapper /sbin/portmap -v -d & /sbin/rpc.statd /sbin/rpc.lockd echo mounting all filesystems mount /proc mount /proc/bus/usb echo clearing /tmp cd /tmp&& rm -rf * .sockets .X0-lock echo -n starting floppyd floppyd -r root -d /dev/fd0&& echo -n " floppy" floppyd -r root -s 5704 /dev/sda1&& echo -n " flash" echo . respawn "nasd -aa" respawn "X -query wagner.wagner.home" wait Теперь получившуюся директорию надо раздать по NFS с опциями rw,no_root_squash и можно настраивать собственно загрузку. Настройрка загрузки Ставим на хост пакеты syslinux, dhcp3-server и tftp-hpa. В командную строку tftp-hpa нужно добавить опцию -r blksize, потому что у некоторых PXEboot ROM проблемы с этой опцией. /usr/lib/pxelinux.0 и ядро из /var/diskless/boot копируем в /var/lib/tftpboot. Создаем директорию /var/lib/ftpboot/pxelinux.cfg и помещаем туда файл default следующего содержания: DEFAULT term root=/dev/nfs ip=192.168.217.5:192.168.217.1:192.168.217.1:255.255.255.0:xterm3:eth0:dhcp nfsroot=192.168.217.1:/var/diskless rw LABEL term KERNEL vmlinuz-2.4.27-terminals все что идет после слова DEFAULT должно быть одной строкой Если почитать получше документацию на опцию nfsroot в ядре, может быть удастся обойтись без команды ip, которая фактьчески приводит к необходимости наличия отдельного конфигурационного файла для каждого терминала. Но я пока не стал с этим заморачиватсья, потому что pxelinux позволяет искать конфигурационный файл по IP-адресу или mac-адресу, а через этот файл можно (в виде непонимаемых ядром опций командной строки, которые потом можно скриптом извлечь из /proc/cmdline) передать много такого, что не вписывается в DHCP. В dhcpd.conf пишем раздел host для терминала. (если терминалов много, можно написать один раздел group, но это уж читайте документацию на pxelinux и dhcpd сами) host xterm3 { hardware ethernet xx:xx:xx:xx:xx:xx; fixed-address 192.168.217.5; option host-name "xterm3"; next-server 192.168.217.1; option domain-name "wagner.home"; filename "pxelinux.0"; option root-path "wagner.wagner,home:/var/diskless/"; } Главное, не забыть команду next-server, потому что если PXE BootRom прекрасно обходится без неё, то pxelinux почему-то начинает тащить свой файл конфигурации и ядро с адреса 0.0.0.0. Теперь ставим xfs, отрываем у него из конфига no-listen = tcp, и разрешаем обслуживание терминалов в display manager. В xdm для этого необходимо закоментарить строчку DisplayManager.requestPort: 0 в xdm-config и раскоментарить строчку * # any host can get a login window в Xaccess. Готово, можно грузиться. TBD Научиться получать aдрес фонт-сервера и адрес хоста, передаваемого в опцию query по dhcp (опции font-server и x-display-manager)

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру