Переносы ] [ 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. Затем, для правильной настройки необходимо будет предпринять следующие шаги.

Настройка

Сеть

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

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

 
 # settrans -fgap /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 -fgap /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 -cgap /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-get. Отредактируйте /etc/apt/sources.list и добавьте какой-нибудь пункт из списка http://www.debian-ports.org/mirrors (это ещё не выпущенные переносы) и установите пакет debian-ports-archive-keyring:

 
deb http://ftp.debian-ports.org/debian unreleased main

http://ftp.debian-ports.org/ и его зеркала содержат пакеты, имеющие хаки или заплаты, которые ещё не были интегрированы в основную ветку разработки или в Debian.

Кроме того, добавьте нестабильный выпуск Debian с одного из официальных зеркал (см. полный список зеркал по адресу https://www.debian.org/mirror/list), содержащий данную архитектуру (если apt сообщает, что вы выбрали «плохое зеркало архива», попробуйте другое):

 
deb http://ftp.fr.debian.org/debian unstable main

Если вы выполняете команду apt-get, 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

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

X.Org

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

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

Вам следует выполнить dpkg-reconfigure x11-common, чтобы разрешить любому пользователю запускать 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

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

Наконец, выполните startx.

И напоследок

До sysvinit версии 2.88dsf-48 и hurd версии 1:0.5.git20140320-1 система инициализации SysV по умолчанию не использовалась. Чтобы выключить вашу систему, просто используйте halt или reboot.

Чтобы использовать стандартную систему SysV, убедитесь, что пакет sysvinit обновлён до версии 2.88dsf-48 и более поздней, затем используйте update-alternatives --config runsystem , выберите runsystem.sysv и перезагрузитесь с помощью команды reboot-hurd, чтобы завершить переход на sysv.