Переносы ] [ Debian GNU/Hurd ] [ Новости ] [ Настройка ] [ Компакт-диски Hurd ] [ Документация ] [ Разработка ] [ Как связаться ]

Настройка Debian GNU/Hurd

Этот документ содержит набор простых и относительно не затратных инструкций по настройке Debian GNU/Hurd.

Он основан на Руководстве по установке Hurd Нила Уолфилда (Neil H. Walfield). Выражаем благодарность Нилу за его вклад.

Обзор

GNU по природе схож с системами Unix: после входа в систему пользователю предоставляется оболочка и знакомая Unix VFS (виртуальная файловая система). Хотя GNU и пытается соответствовать стандарту POSIX, она не является Unix. GNU/Hurd построена на многих понятиях Unix и расширяет их, либо добавляя новую функциональность, либо исправляя то, что кажется недостатками изначального проектирования. Наиболее заметным отличием являются трансляторы, программы из пользовательского пространства, которые взаимодействуют с VFS. Эти файловые системы не живут в ядре, их также не нужно запускать с правами суперпользователя; им нужен лишь доступ к резервному хранилищу и точке монтирования. Другим отличием является то, что процессы имеют скорее один идентификатор пользователя, который фиксируется во время создания процесса, они имеют токены идентификации, которые не пересекаются с процессом, т.е. они могут быть добавлены при соответствующем разрешении того, кто обладает соответствующими правами, либо уничтожены.

Знакомство с окружением Unix (и особенно с пользовательскими программами GNU, которые можно найти во многих популярных вариантах GNU/Linux) необходимо для того, чтобы чувствовать себя комфортно в GNU. Наличие опыта работы с инструментами Debian также будет весьма ценно при настройке и сопровождении системы с GNU/Hurd.

Настоящее руководство стремится к тому, чтобы установка GNU/Hurd была безболезненным процессом, насколько это только возможно. Если в руководстве присутствуют какие-либо ошибки, они скорее всего сделаны автором. Пожалуйста, сообщайте о них ему, кроме того, он ждёт ваших предложений и критики; всё будет охотно принято.

Установка

Вы просто можете использовать установщик Debian, см. подготовленные образы CD. Затем, для правильной настройки необходимо будет предпринять следующие шаги.

Кроме того, вы можете загрузить предустановленный образ и запустить его в qemu:

 
$ wget https://cdimage.debian.org/cdimage/ports/stable/hurd-i386/debian-hurd.img.tar.gz
$ tar xzf debian-hurd.img.tar.gz
$ kvm -m 1G -drive file=$(echo debian-hurd*.img),cache=writeback

Для того, чтобы включить доступ к системе через ssh, вам следует добавить

 
-net nic -net user,hostfwd=tcp:127.0.0.1:2222-:22

и подключиться по ssh к вашему локальному TCP-порту 2222.

Также его можно преобразовать в формат VDI для virtualbox:

 
$ VBoxManage convertfromraw debian-hurd-*.img debian-hurd.vdi --format vdi

Настройка

Сеть

Способ в стиле Debian поддерживается начиная с sysvinit версии 2.88dsf-48 и hurd версии 1:0.5.git20140320-1: /etc/network/interfaces используется так же как и в Linux. Единственное отличие состоит в том, что сетевые карты находятся в /dev, поэтому сетевые интерфейсы должны указываться как /dev/eth0 и т. д.

Если сеть не работает, используйте следующую команду для получения отладочной информации от драйвера DDE:

 
# settrans -fga /dev/netdde /hurd/netdde

затем убейте все процессы devnode и pfinet, чтобы дать им возможность перезапуститься с новым netdde. Если сеть всё ещё не работает, поместите в сообщение об ошибке полный вывод netdde settrans, а также вывод lspci и lspci -n .

Чтобы настроить сеть без использования/etc/network/interfaces, следует настроить транслятор pfinet. Это можно сделать, используя dhclient из пакета isc-dhcp-client. Это также может быть сделано вручную при помощи inetutils-ifconfig из пакета inetutils-tools, ping доступен в пакете inetutils-ping. Наконец, последнее, но не менее важное, это может быть сделано (и навсегда записано) вручную, используя команду settrans, чтобы прикрепить транслятор к данной ноде файловой системы. Когда программа обращается к ноде, например отправляя RPC, операционная система прозрачно запускает сервер, чтобы обработать этот запрос.

 
 # settrans -fgap /servers/socket/2 /hurd/pfinet -i /dev/eth0 -a a.b.c.d -g e.f.g.h -m i.j.k.l

Здесь settrans передаётся несколько параметров. Первые два, fg, заставляют любой существующий транслятор исчезнуть. Следующие два, ap, создают активный и пассивный трансляторы. Создавая активный транслятор, мы сразу же видим любые сообщения об ошибках на stderr. Последний параметр сохраняет транслятор и аргументы в ноде, так что он может быть прозрачно перезапущен позже (т.е., этот параметр делает так, чтобы при перезагрузке настройки сохранялись). За параметрами следует нода, к которой должен быть прикреплён транслятор, затем программа (т.е., транслятор), которую следует запустить, и любые аргументы, которые следует ей передать. Параметр -i представляет собой интерфейс, который будет прослушиваться pfinet, -a — IP-адрес, -g — шлюз, а -m — сетевая маска.

Убедитесь, что серверы имён добавлены в файл /etc/resolv.conf:

 
  nameserver 192.168.1.1

Чтобы проверить настройки, выполните ping -c2 gateway. Параметр -c важен для ограничения количества запросов; помните, CONTROL-C не работает в однопользовательском режиме.

Вы можете получить помощь по settrans, если передадите ей параметр --help. Помощь по какому-либо конкретному транслятору может быть получена, если вы вызовите его из командной строки с тем же самым аргументом, например:

 
 # /hurd/pfinet --help

Поскольку вывод может быть очень большим, советуем передать его специальной программе постраничного чтения, такой как less.

Кроме того, чтобы настроить поддержку IPv6, та же самая настройка должна быть записана и в /servers/socket/2, и в /servers/socket/26, которые должны указывать друг на друга, чтобы фактически запускался только один файл настройки, привязанный к обеим нодам:

 
 # settrans -fgap /servers/socket/2 /hurd/pfinet -6 /servers/socket/26 -i /dev/eth0 -a a.b.c.d -g e.f.g.h -m i.j.k.l
# settrans -p /servers/socket/26 /hurd/pfinet -4 /servers/socket/2 -i /dev/eth0 -a a.b.c.d -g e.f.g.h -m i.j.k.l

Сервер pfinet по умолчанию включает автоматическую настройку IPv6. Её текущее состояние может быть получено из fsysopts /servers/socket/26. Адреса также могут быть установлены вручную с помощью, например -A 2001:123:123::42/64 -G 2001:123:123::1.

Настройка pfinet может быть изменена на лету (без записи на диск) при помощи fsysopts:

 
 # fsysopts /servers/socket/2
 /hurd/pfinet --interface=/dev/eth0 --address=10.3.0.1 --netmask=255.255.0.0 --gateway=10.3.0.128
 # fsysopts /server/socket/2 -a 10.3.0.2 -m 255.255.0.0 -g 10.3.0.128

Межсетевой экран может быть настроен путём включения транслятора eth-filter; например, следующая команда запрещает доступ к порту 22:

 
# settrans -c /dev/eth0f /hurd/eth-filter -i /dev/eth0 -r "not port 22"

Отфильтрованное устройство, /dev/eth0f, может быть передано pfinet или dhclient вместо устройства /dev/eth0.

Раскладка клавиатуры

Раскладка клавиатуры может быть настроена через стандартный пакет keyboard-configuration. Убедитесь, что он установлен, и выполните dpkg-reconfigure keyboard-configuration. Поддерживается только одна раскладка, варианты не поддерживаются (пока). Настройка не будет принята немедленно, поскольку должна быть перезапущена консоль, чтобы новые параметры начали учитываться. Например, вполне подойдет перезагрузка.

Другие файловые системы

Далее, отредактируйте /etc/fstab, чтобы добавить дополнительные файловые системы, а также место для подкачки. Очень важно использовать подкачку; Hurd будет намного более стабилен. Заметьте, что Hurd может прозрачно разделять раздел подкачки с Linux, но он вполне может работать с любым устройством, включая непустой раздел, такой как ваш раздел home. По умолчанию nano и vi являются единственными редакторами, устанавливаемыми базовым дистрибутивом.

Ниже приведён пример файла /etc/fstab:

 
# <file system> <mount point>   <type>  <options>  <dump>  <pass>
/dev/hd0s1      /               ext2    rw         0       1
/dev/hd0s2      /home           ext2    rw         0       2
/dev/hd0s3      none            swap    sw         0       0

Если какое-либо устройство /dev отсутствует, не забудьте создать его, используя команду MAKEDEV:

 
 # cd /dev
 # ./MAKEDEV hd0s1 hd0s2 hd0s3

Вы также можете монтировать файловые системы вручную, вызывая settrans:

 
 # settrans /mnt /hurd/ext2fs /dev/hd0s5

Суть этой команды состоит в том, что вы устанавливаете на ноду /mnt транслятор /hurd/ext2fs /dev/hd0s5. /hurd/ext2fs будет выполняться, начинать чтение/запись /dev/hd0s5 и показывать его содержимое на /mnt. Дополнительная информация может быть найдена в документации по трансляторам.

Чтобы смонтировать файловую систему nfs, используется транслятор /hurd/nfs. Когда он запущен пользователем, который не является суперпользователем, транслятор подключится к серверу, используя порт 1023 из примера. По умолчанию GNU/Linux отклонит это. Чтобы заставить GNU/Linux принять соединения, исходящие с незарезервированного порта, добавьте параметр insecure в строку экспорта. Ниже приведён пример файла /etc/exports, в примере сделано предположение о том, что клиент имеет IP-адрес 192.168.1.2:

 
  /home  192.168.1.2(rw,insecure)

Чтобы смонтировать этот раздел на системе с GNU, нужно выполнить следующее (допустим, что IP-адрес сервера nfs 192.168.1.1):

 
# settrans -cga /mount/point /hurd/nfs 192.168.1.1:/home

Развлекаемся с Debian GNU/Hurd

Итак, что мы можем делать с Hurd?

Монтировать образы дисков

Доступ к содержимому образа CD в стандартной системе Unix несколько затруднён, если вы, конечно, не суперпользователь. В GNU/Hurd эта процедура сводится к следующему:

 
settrans ~/mnt /hurd/iso9660fs CD_image.iso

И это абсолютно безопасно: транслятор iso9660fs запускается под вашей учётной записью, а не под суперпользователем. Вы даже можете написать свой собственный транслятор для любой файловой системы. Да, это похоже на FUSE. Без всех её ляпов.

Прозрачный FTP

Следующая команда настраивает прозрачный каталог ftp:

 
settrans -c /ftp: /hurd/hostmux /hurd/ftpfs /

Теперь перейдите в cd, например /ftp://ftp.gnu.org/, и выполните здесь ls. Да, вы можете из своего домашнего каталога запустить tar xf ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.6.0/gcc-4.6.0.tar.bz2 !

Под-Hurd

Под-Hurd — это полная подсистема. На первый взгляд, очень похоже на контейнеры виртуализации. За исключением того, что не обязательно быть суперпользователем, чтобы вообще запустить хотя бы одну подсистему.

gdb ext2fs, pfinet, ...

Да, вы можете запустить gdb на, например реализации ext2fs, стеке pfinet TCP/IP и т.д.

И много всего другого!

Ведётся работа над mboxfs, tarfs, xmlfs, gopherfs, …

Заключительные слова

Ниже приведены лишь базовые быстрые настройки, обязательно прочтите документацию для установленной системы: Документация по Debian GNU/Hurd, а также веб-сайт основной ветки разработки.

Установка дополнительных пакетов

Существует несколько способов добавления пакетов. Загрузка и использование dpkg -i вполне работает, но это очень неудобно. Наиболее простым методом является использование apt.

Если вы использовали выпуск Debian GNU/Hurd 2023, то наиболее безопасный способ состоит в использовании среза этого выпуска в качестве источника apt: отредактируйте /etc/apt/sources.list, добавив следующие записи:

 
deb [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian-ports/20230606T000000Z/ sid main
deb [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian-ports/20230606T000000Z/ unreleased main
deb-src [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian/20230606T000000Z/ sid main

Выполните обновление, установите пакет debian-ports-archive-keyring, повторно выполните обновление. Теперь у вас имеется полный выпуск Debian GNU/Hurd 2023.

Если вы использовали срез, созданный до выпуска 2023, то вы можете добавить указанные ниже источники для получения наиболее свежих пакетов:

 
deb http://deb.debian.org/debian-ports unstable main
deb-src http://deb.debian.org/debian unstable main
deb http://deb.debian.org/debian-ports unreleased main

Выполните обновление, установите пакет debian-ports-archive-keyring, выполните обновление повторно.

Если вы выполняете команду apt, dpkg сообщает об отсутствующих программах, получите права суперпользователя в отдельной оболочке и окружении (т.е., su -, а не просто su).

Если GNU Mach не может распознать вашу сетевую карту, либо если вы используете модем, единственным способом обновить пакеты — это загрузить их на другую систему, а потом перенести на систему GNU. Наиболее простым способом сделать это — использовать apt в автономном режиме. Обратитесь к /usr/share/doc/apt-doc/offline.text.gz за подробными инструкциями.

Консоль Hurd

Помимо консоли Mach, которую вы видели во время установки, GNU/Hurd имеет мощную консоль для пространства пользователя, предоставляющую виртуальные терминалы. Если вы осуществили установку в псевдографическом режиме, она должна автоматически запуститься во время загрузки системы, если этого не произошло, вы можете запустить её вручную при помощи следующей команды:

 
 # console -d vga -d pc_mouse --repeat=mouse -d pc_kbd --repeat=kbd -d generic_speaker -c /dev/vcs

Если во время проверки выяснится, что консоль работает, то можно её включить в файле /etc/default/hurd-console: измените ENABLE="false" на ENABLE="true".

Внутри консоли Hurd вы можете переключаться между виртуальными терминалами при помощи клавиш ALT+F1, ALT+F2 и т.д. ALT+CTRL+BACKSPACE прерывает консоль Hurd и переводит вас обратно в консоль Mach, из которой вы можете заново подключить пользовательскую консоль при помощи приведённой выше команды.

X.Org

X.Org и все видеокарты, поддерживаемые им, и которым не требуется наличие модуля ядра или drm, были перенесены и должны работать.

Нужно, чтобы консоль Hurd уже была запущена, а ретрансляторы настроены так, как это указано в предыдущем разделе.

Вам следует выполнить dpkg-reconfigure x11-common xserver-xorg-legacy, чтобы разрешить любому пользователю запускать Xorg, поскольку упаковщик X не знает о консолях Hurd и Mach.

Вам также нужно создать /etc/X11/xorg.conf, чтобы включить клавишу быстрого доступа control-alt-backspace:

 
Section "InputDevice"
   Identifier "Generic Keyboard"
   Driver "kbd"
   Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

Может случиться так, что Xorg выберет разрешение в формате 16/9, а размер рабочего стола в формате 4/3. В этом виноват Xorg, а не Hurd :) Чтобы избежать этой проблемы, добавьте в /etc/X11/xorg.conf следующие строки:

 
Section "Screen"
 Identifier "myScreen"
 SubSection "Display"
  Virtual 1024 768
 EndSubSection
EndSection

Вам понадобится несколько пакетов X. xorg, rxvt и оконный менеджер: twm, icewm, openbox, ... являются хорошим началом. Если вы хотите, чтобы X стартовали при загрузке, то вам нужно установить дисплейный менеджер. lightdm и gdm пока не работают, но xdm должен вполне хорошо работать.

Наконец, выполните startx /usr/bin/ваш_оконный_менеджер.

Если это не сработало, то в соответствии с сообщением об ошибке, обратитесь к файлу /var/log/Xorg.0.log (или разместите его в списке рассылки, чтобы другие люди могли посмотреть).

Обновление вашей системы

Если вы используете срез Debian, то для вашей системы нет доступных обновлений, так как выпущенный дистрибутив замораживается в день выпуска. Это означает, что вы не будете получать обновления безопасности! Скорее всего вы захотите включить нестабильный дистрибутив, как это описано в разделе Установка дополнительных пакетов.

Когда вы включите нестабильный дистрибутив, обратите внимание на то, что он нестабилен. В нём случаются ошибки из-за изменения библиотек, поэтому не удивляйтесь, что иногда не получится обновить некоторые пакеты. Обычно можно использовать рекомендованную Debian процедуру обновления: сначала использовать

 
# apt upgrade --without-new-pkgs

для обновления того, что может быть сделано без изменения списка пакетов, а потом использовать

 
# apt full-upgrade

для обновления всего остального.

Внимание: если вы очень редко обновляете свою систему, то вы можете столкнуться с проблемами при обновлении. Убедитесь, что вы сначала выполнили обновление до последнего среза (Hurd 2023, смотрите раздел Установка дополнительных пакетов) до выполнения обновления из нестабильного дистрибутива.

И напоследок

Для выключения вашей системы используйте команды halt, poweroff или reboot. Если в некоторых случаях система зависает из-за того, что какая-то служба завершается неправильно, то можно использовать команды halt-hurd, poweroff-hurd, reboot-hurd, которые не отключают службы, но выполняют синхронизацию данных и сохранение их на диск.