Debian GNU/Hurd

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 13:37, 7 июля 2017.
Debian GNU/Hurd
Debian-gnu hurd logo.jpg
Первая версия Май 2013
Пакетный менеджер apt
Ядро GNU Hurd
Последняя версия Debian GNU/Hurd 2015
Официальная страница ссылка

Debian GNU/Hurd — проект разработки операционной системы на основе GNU с ядром GNU Hurd на микроядре Mach, под патронажем группы Debian, разработчиком одноимённого дистрибутива ОС GNU/Linux. Исторически первый дистрибутив Debian, основанный на ядре, отличном от Linux.

Кроме Debian GNU/Hurd, на сегодняшний день существует ещё один до-производственный дистрибутив ОС GNU — Arch Hurd. ОС GNU на данный момент находится на последнем этапе разработки, ведущейся с 1990 года.

Debian GNU/Hurd состоит из собранных кросс-компиляцией частей GNU/Hurd (с CVS-репозитория GNU), дополненных пакетами и наработками из Debian GNU/Linux.

История

Debian GNU/Hurd стал первым дистрибутивом Debian, основанном на ядре, отличном от Linux. Этот проект ведёт свою историю с 1998 года.

Однако, в настоящее время он не относится к официальным проектам Debian. Первым мажорным релизом проекта стал выпуск Debian GNU/Hurd 2013. Он вышел в мае 2013 года и использовал версию 1.3.99 ядра GNU Hurd и Debian 7 «Wheezy».

Представленный 30 апреля 2015 года Debian GNU/Hurd 2015, основан на редакции дистрибутива Debian 8.0 «Jessie» и ядре. В нём, в частности впервые появилась возможность работать в графическом окружении Xfce, также дистрибутив перешёл на систему инициализации SysVinit. Для монтирования файловых систем, конфигурирования сети и завершения работы использованы штатные средства Debian, а не settrans и fsysopts: инструменты, разработанные в рамках проекта специально для GNU/Hurd. Подобная операция проделана и для сетевых драйверов: они работают в пространстве пользователя и основанные на коде из ядра Linux версии 2.6.32, для этого используется фреймворк NetDDE (Device Driver Environment), позволяющий использовать драйверы из состава ядра Linux.

Обзор

GNU Hurd представляет собой ядро, развиваемое в качестве замены ядра Unix и оформленное в виде набора серверов, работающих поверх микроядра GNU Mach и реализующих различные системные сервисы, такие как файловые системы, сетевой стек, система управления доступом к файлам. Микроядро GNU Mach предоставляет IPC-механизм, используемый для организации взаимодействия компонентов GNU Hurd и построения распределённой мультисерверной архитектуры.

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

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

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

Установка и настройка

Установка

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

$ wget http://ftp.ports.debian.org/debian-ports-cd/hurd-i386/debian-hurd-2015/debian-hurd-20150424.img.tar.gz
$ tar xzf debian-hurd*img.tar.gz$ kvm -m 1G -drive file=
$(echo debian-hurd-*.img),cache=writeback

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

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

Скачать образ Debian GNU/Hurd можно по ссылке

Видео инструкция по установке

Настройка

Сеть

Способ в стиле 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

Ссылки/Литература