Linux -- это интересно

Gentoo Linux


Рубрика: Дополнительные материалы -> Дистрибутивы -> Изучаем Linux
Метки: | |
Просмотров: 2030

Цель данного текста - коротко и сжато объяснить, как устроен дистрибутив Gentoo Linux, на что стоит смотреть при установке. Предполагается, что читатель знает, что такое Unix вообще и Linux в частности, а также способен читать хотя бы Quick Install Guide.

Gentoo Linux не имеет инсталлятора, в отличие от большинства популярных дистрибутивов. То есть имеет, на самом деле, но, судя по отдельным отзывам, лучше бы не имел. Для того, чтобы поставить gentoo на компьютер необходимо наличие на этом компьютере любого линукса, сетевого соединения и места на диске. Я ставил gentoo первый раз ис под Федорина горя.

Собственно, gentoo live CD имеет к gentoo весьма отдаленное отношение - это просто загрузочный диск с линуксовым ядром, шеллом и несколькими системными утилитами вроде fdisk, net-setup и иже. Собственно поэтому я бы советовал восспользоваться не им, а Resque CD, потому что с чего ставить все равно, а утилит там побольше и ядро побогаче, например, поддерживает Reiser4, а также можно грузить и 32 и 64-битное ядро.

Основой Gentoo является 2 файла, это stage3-XXX-tar.gz portage.latest.tar.gz. И то и другое желательно использовать последнее. Обратите внимание, первый файл зависит от платформы (и битности) желаемой системы, второй нет. В первом файле содержится собственно готовый к запуску линукс, только что без ядра. В него уже установлены необходимые для запуска пакеты, в частности шелл, компилятор, система установки пакетов (portage). Кроме того на сегодняшний день в поставке имеется компилятор версии 4.1, а не 4.3, который предпочтительнее на процессорах последнего поколения и старая (относительно) версия glibc.

Файл portage.latest.tar.gz содержит описание всех доступных пакетов. Не сами пакеты, а их описания. Вот тут можно немного поговорить о том, как в Gentoo ставятся пакеты и что они из себя представляют. В системе живет каталог /usr/portage, в котором по полочкам разложено все, что вообще можно поставить. Обычно, одного и того же пакета можно поставть по нескольку версий, соответственно на каждую версию отводится собственный файлик:

ls /usr/portage/sys-devel/gcc
ChangeLog              gcc-3.1.1-r2.ebuild  gcc-3.4.6-r2.ebuild  gcc-4.2.3.ebuild     gcc-4.3.1.ebuild     Manifest
files                  gcc-3.2.2.ebuild     gcc-4.0.4.ebuild     gcc-4.2.4.ebuild     gcc-4.3.1-r1.ebuild  metadata.xml
gcc-2.95.3-r10.ebuild  gcc-3.2.3-r4.ebuild  gcc-4.1.0-r1.ebuild  gcc-4.2.4-r1.ebuild  gcc-4.3.2.ebuild
gcc-2.95.3-r9.ebuild   gcc-3.3.6-r1.ebuild  gcc-4.1.2.ebuild     gcc-4.3.0.ebuild     gcc-4.3.2-r2.ebuild

Вот каждый из этих "ebuild" можно установить средствами дистрибутива. Не стану углубляться в подробности (сам нифига не понимаю), но внутри этого файла находится инструкция, по сути скрипт, откуда скачать исходные тексты пакета, как их пропатчить, если это необходимо, куда поставить, а так же информация о зависимостях (например нельзя ставить gcc-4.3.0 и выше, если не установлено glibc-2.8 или выше)

В Quick Install Guide нехорошим словом поминается команда emerge --sync. Ее предназначение - обновить вышеупомянутое дерево пакетов до самого что ни есть распоследнего, сегодняшнего варианта. В системе ежедневно появляются новые пакеты, в том числе новые версии уже существующих и уже установленных. Ничего при этом не устанавливается, просто появляется возможность пакеты проапгредить.

Все без исключения пакеты в Gentoo собираются из исходных текстов, то есть для них запускается configure "" make "" make install. Нет, понятие бинарного пакеты существует, конечно, но на самом деле у него фаза компиляции просто не выполняется, она уже выполнена. Принципиального отличия для того, кто ставит пакет, нету.

В системе портежей (система установки пакетов в Gentoo) есть еще 3 особенности.

Первая - управление всеми система сборки - файлик /etc/make.conf. В нем указано, для какой системы собираются пакеты, указаны флаги компиляции, с которыми надо пакеты собирать, указаны зеркала - хранилища исходных текстов пакетов и т.п. Обсуждать формат подробно я не буду. для этого документация есть. Самое интересное, что там есть, это так называемые USE-флаги.

На самом деле каждый пакет может быть собран с какими то особенностями, см. параметры скрипта configure. Разумеется, для каждого пакета эти параметры свои, например nginx и php можно собрать с поддержкой fastcgi, а можно без нее, а для bash такая возможность вовсе не определена. Так вот в USE-флагах как раз и задается такая возможность - включить или выключить поддержку какой то опции. Для тех пекетов, которые эту опцию не понимают, наличие флага не имеет никакого значения.

Чтобы узнать, какие флаги поддерживаются пакетом, надо "попытаться" его поставить с визуализацией, что будет ставиться:

emerge -pv gcc
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild   R   ] sys-devel/gcc-4.3.2-r2  USE="gtk mudflap nls openmp (-altivec) -bootstrap -build -doc (-fixed-point) -fortran -gcj (-hardened) -ip28 -ip32r10k -libffi (-multilib) -multislot (-n32) (-n64) -nocxx -nopie -objc -objc++ -objc-gc -test -vanilla" 74 kB

Смотрим список включенных и выключенных флагов, огорчаемся и идем редактировать make.conf. Повторяем попытку до удовлетворения. Есть способ сделать то же самое быстрее, но для этого надо ставить дополнительные пакеты, оставим пока. Список флагов в системе единственный, живет он только в make.conf и это идеологически правильно. Тем не менее иногда хочется, чтобы все пакеты имели вот этот главный список, а отдельные собирались с другими флагами. Это дурная политика, но сделать это можно даже несколькими способами.

Первый, просто установив переменную окружения:

USE="-fortran objc objc++" emerge gcc

Работает до первого обновления пакета. Второй способ - конфигурационный файл /etc/portage/package.use

cat /etc/portage/package.use
net-misc/openssh        -ldap
media-sound/amarok      -python

Идея простая, пусть все, что может, собирается с поддержкой ldap, а openssh без нее. Про политику я уже упоминал, но вот для сервера, например, я бы добавил туда строчку "app-misc/mc -X" :-)

Вторая особенность - выбор профиля. В профиль входит возможность запрещать или наоборот разрешать какие то пакеты.

Существует несколько заранее заготовленных профилей, для десктопа, для сервера. Список можно получить командой

eselect profile list
Available profile symlink targets:
  [1]   hardened/x86/2.6
  [2]   selinux/2007.0/x86
  [3]   selinux/2007.0/x86/hardened
  [4]   default/linux/x86/2008.0
  [5]   default/linux/x86/2008.0/desktop *
  [6]   default/linux/x86/2008.0/developer
  [7]   default/linux/x86/2008.0/server
  [8]   hardened/linux/x86

Выбранный помечен звездочкой. Дальше eselect profile --help :)

Есть также возможность форсировать разрешение или запрещение каких то пакетов локально, именно для конкретного компьютера, для этого служат файлики /etc/portage/package.mask и /etc/portage/package.unmask. Например:

cat /etc/portage/package.unmask
>=sys-apps/portage-2.2_rc16
>=sys-apps/lm_sensors-3.0.2

Означает эта надпись, что я разрешаю ставить на моей системе пакет lm_sensors версии 3.0.2 и выше, и плевать я хотел на мнение разработчиков дистрибутива, которые полагают, что этот пакет еще недостаточно стабилен. В случае чего сам виноват буду.

Третья особенность - наличие двух "алиасов", не пакетов, а именно системных списков. Это system и world. Первый список черт знает, где хранится, и, насколько я понимаю, не изменяется. По сути - это содержимое stage3. А вот второй - просто текстовый список пакетов, установленных вашими кривыми ручками. Набрал emerge gcc, и система запомнила, что этому пользователю нужен для счастья компилятор. Когда появится обновление, компилятор будет обновлен, а gnome не будет, потому что я его никогда не ставил. Это полезно с двух точек зрения. Во первых, можно одним ударом обновить (emerge -uD world) или полностью пересобрать (emerge -e world) всю систему, не задумываясь, что я там ставил на прошлой неделе.

Во-вторых, не следует забывать об полезном флаге --oneshot, то есть пакет поставить, но в списки не заносить. Бывает, что пакет по каким то причинам собрать не удалось, но сам по себе пакет не нужен, он ставится потому, что от него что то зависит. Мы устраняем проблему и пересобираем вредный пакет, вроде все хорошо, но потом это всплывет при обновлении. Например, отчего то не собрался у меня kdelibs, при обновлении упорно ставится 4-я версия. А мне он не нужен, мне нужна последняя третья. Сей список живет в /var/lib/portage/world, редактировать его руками я не видел рекомендации, но редактировал. Ничего, работает )

Установка пакетов делается командой emerge, описываеть я ее не буду, без меня много желающих.Для удобства работы рекомендую поставить пакеты gentoolkit и eix, здорово упрощает жизнь. Первый позволяет искать зависимости, второй - быстрый поиск по описаниям.

Грабли и советы.

Для пользователей sysresccd хитрая особенность. На диске есть 64-битное ядро. Разумеется, для установки 64-битной системы надо загружаться в него. Далее действовать, как указано в инструкции по установке. Но перед тем, как ставить систему на голую машину, надо разбить диски на разделы. Для этого традиционно используется fdisk. Так вот он на сидироме 32-битный! Он запускается, даже работает, а вот считает неправильно. Делаю раздел 10 мегабайт, а получаю 500К. Загрузите обычное ядро, разбейте диск, потом перегружайтесь в 64 бита.

Все равно придется пересобирать glibc. Не так страшен он сам, как туева хуча локалей, которые он генерит. Для экономии времени сразу создайте файл /etc/locale.gen:

cat /etc/locale.gen
# /etc/locale.gen: list all of the locales you want to have on your system
#
# The format of each line:
# <locale> <charmap>
#
# Where <locale> is a locale located in /usr/share/i18n/locales/ and
# where <charmap> is a charmap located in /usr/share/i18n/charmaps/.
#
# All blank lines and lines starting with # are ignored.
#
# For the default list of supported combinations, see the file:
# /usr/share/i18n/SUPPORTED
#
# Whenever glibc is emerged, the locales listed here will be automatically
# rebuilt for you.  After updating this file, you can simply run `locale-gen`
# yourself instead of re-emerging glibc.
en_US UTF-8
ru_RU UTF-8</charmap></locale></charmap></locale>

Если изначально планируется переход на 4.3 компилятор, то после перехода будет смысл пересобрать все пакеты, да желательно с флагами -march=native -mtune=native, которые в версии 4.1 не поддерживаются. А чем меньше будет пакетов установлено, тем быстрее они все пересоберутся. Посему я бы немного отошел о стандартной последовательности Quick Install Guide, а первым делом пересобрал glibc, затем gcc, затем выбрал бы нужный (gcc-congig и следим за инструкциями). Затем отредактировал бы /etc/make.conf - добавить флаг, потом пересобрал бы все emerge -e worls system, а уже затем стал бы ставить все остальное, включая ядро и такие утилиты, как syslog, cron и т.д.

По материалу с gentoo.ru

Оставьте комментарий!
Используйте нормальные имена.Войти через loginza
Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



 
(обязательно)