Настройка 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 2G -drive file=$(echo debian-hurd*.img),cache=writeback |
https://cdimage.debian.org/cdimage/ports/latest/hurd-amd64/debian-hurd.img.tar.gz
для 64-битной версии предварительного выпуска)
Для того, чтобы включить доступ к системе через 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
, которые не отключают службы, но выполняют синхронизацию данных и сохранение их на диск.