Как стать автором
Поиск
Написать публикацию
Обновить

Готовим свой Linux на базе Gentoo

Время на прочтение8 мин
Количество просмотров48K


Многие любят Gentoo за ее универсальность. Используя портежи, можно сделать инструмент под любые задачи. И пускай вас не смущает то, что секретарь никогда не будет компилировать Firefox — Боже упаси ей дать возможность ставить софт! Что может быть лучше дистрибутива, установив который вам больше ничего не понадобится с ним делать! Представьте себе — 5-10 минут времени и вы получаете систему с необходимым набором софта, собранного, настроенного и оптимизированного по вашим предпочтениям.

В этой статье я опишу процесс создания своей версии дистрибутива на основе Gentoo при помощи утилит Calculate 2.2. На выходе вы получите гибридный ISO диск для записи на CD/DVD или USB-Flash, полностью совместимый с Gentoo, поддерживающий установку на USB-HDD, USB-Flash, HDD с поддержкой LVM и Raid, файловой системой ext4, ext3, ext2, reiserfs, btrfs, xfs, jfs, nilfs2 или fat32.

Статья в первую очередь адресована всем любителям Gentoo, системным администраторам, преподавателям компьютерных классов школ и вузов, а также всем любителям Linux. Все операции выполняются с правами пользователя root из консоли.

1. То что нам понадобится


Разумеется, у вас уже должен быть установлен Gentoo, либо любой Gentoo-based дистрибутив и настроен доступ к сети интернет. Все операции я выполнял из Calculate Linux Desktop 11.9 KDE 64 бит.

Для начала установите пакеты calculate-assemble и calculate-builder. В Gentoo для этого понадобится подключить оверлей Calculate:

emerge layman
layman -a calculate
emerge calculate-assemble calculate-builder


Теперь определитесь с тем, какую систему вы хотите собрать. Перед вами выбор базовых образов:
  1. Gentoo Stage3 — прожиточный минимум для начала сборки системы;
  2. Calculate Scratch Server (CSS) — по сути тот же Gentoo Stage3 с ядром, драйверами, загрузчиком, портежами и утилитами Calculate.
  3. Calculate Linux Scratch (CLS) — CSS + Xorg + wireless.
  4. Calculate Linux Desktop с рабочим столом KDE, Gnome или XFCE (CLD, CLDG, CLDX) либо Calculate Directory Server (CDS).


В зависимости от задачи, загрузите последний Stage-архив Gentoo или Stage-образ Calculate и поместите в директории /var/calculate/remote/stages и /var/calculate/linux соответственно:

cd /var/calculate/remote/stages
wget mirror.yandex.ru/gentoo-distfiles/releases/x86/current-stage3/stage3-i686-20111018.tar.bz2


или

cd /var/calculate/linux
wget mirror.cnet.kz/calculate/CLDX/stages/i686/cldx-20111024-i686.iso


Stage образ Calculate Linux включает дерево портежей. По сути это одно из основных отличий образа Calculate от Gentoo Stage4. Собирая систему из Gentoo Stage, вам также понадобится загрузить портежи в директорию /var/calculate/remote/snapshots:

cd /var/calculate/remote/snapshots
wget mirror.yandex.ru/gentoo-distfiles/snapshots/portage-20111024.tar.bz2


Обратите внимание, версии фалов постоянно обновляются.
В этой статье я остановлю свой выбор на CLDX 32 бит по следующим причинам:

  • Дистрибутив уже содержит большинство необходимых программ;
  • Нет привязки к Gnome/KDE;
  • XFCE включает несколько небольших пакетов и при желании быстро удаляется.


2. Подготовим систему к сборке


Для подготовки системы к сборке служит утилита cl-assemble. Вы можете воспользоваться любым из доступных профилей. В профилях Calculate Linux флаги подобраны с учётом используемого рабочего стола. CLD оптимизирован с учётом использования Qt/KDE, CLDG — Gtk/Gnome, XFCE — Gtk. Профиль CLDX идеально подойдет, если вы не хотите использовать ни KDE, ни Gnome.

Если в качестве профиля указать «CLDX», программа попросит более точно ввести его название:



Вам также понадобится указать раздел для установки. Это может быть либо раздел жесткого диска (10-15 Гб), либо директория. В случае использования директории, будет тратиться дополнительное время на удаление старых файлов. По умолчанию утилита использует Gentoo Stage3 образ и свежие портежи:



Укажем, что мы хотим взять 32-битный образ CLDX, свежую версию которого можно скачать отсюда mirror.cnet.kz/calculate/CLDX/stages/i686. Для этого понадобится правильно указать профиль и, в случае если мы работаем в 64-битной системе, указать, что мы хотим использовать архитектуру i686:

cl-assemble -p desktop/CLDX/x86/binary -d /dev/sda2 --source=CLDX --march=i686

На моей машине вся подготовка заняла менее 10 минут:



3. Обновим систему


Для сборки системы служит утилита cl-make. Обратите внимание на несколько параметров. Если вы хотите собрать систему со Stage3 — используйте опцию сборки системы "-m" (или "--make"), если из образа Calculate — опцию обновления системы "-u", (или "--update"). Обратите внимание на опцию "-V" (или "--withvideo") для копирования проприетарных видеодрайверов. Копирование без установки пресекает нарушение лицензии GPL, при этом у вас остаётся выбор проприетарного видеодрайвера, который будет инсталлирован в систему во время процесса загрузки.

cl-make -u -V

Выполним обновление:



В приведенном примере я не указывал собираемый профиль. Его следует вводить в случае, если вы ставите на сборку несколько систем одновременно. Например, 32 и 64 битную версии. В этом случае профиль можно ввести как "-p amd64" и "-p x86". Путем сравнения собираемых версий, программа попытается определить нужный профиль.

В моем случае потребовалось обновить около 40 пакетов.

Свои действия утилиты Calculate отписывают в файл /etc/calculate/assemble.env:



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



После указания доступных разделов, передавать параметр раздела сборки уже не обязательно.

Я успел написать этот текст пока система обновляется. Мне попались под обновление сразу gtk с python, лучше бы я взял сегодняшний образ. Несмотря на то, что я выбрал бинарный профиль, компиляция идет из исходников. Пойду налью себе кофе :)

4. Внесем изменения


Наконец добрались до самого интересного. Что мы можем изменить:

  • состав пакетов;
  • флаги сборки;
  • настройки программ;
  • настройки рабочего стола пользователей;
  • темы и т.п.


Как вы могли заметить, образ развернулся в директорию /mnt/calculate-desktop-CLDX-x86-binary/. Используйте этот путь для внесения изменений. На скриншотах видно, что с развернутой системой производится некоторая настройка. Собственно все шаблоны настройки можно посмотреть в директории /usr/share/calculate/templates/assemble/. Важно вносить изменения так, чтобы не вызывать конфликт настроек. Где-то можно создать свои шаблоны изменений, где-то использовать альтернативные файлы. Рассмотрим теперь подробней.

4.1. Флаги сборки

Управление параметрами сборки пакетов осуществляется через USE-флаги. Урезая зависимости, вы можете добиться нескольких преимуществ:

  • ускорить выполнение программ;
  • повысить защищенность системы;
  • избавиться от лишних зависимостей;
  • уменьшить требование к дисковому пространству.


Давайте посмотрим на содержимое переменной USE. Для этого в собираемой системе нужно выполнить следующую команду:

linux32 chroot /mnt/calculate-desktop-CLDX-x86-binary /bin/bash -c "emerge --info"

Обратите внимание, я использовал вызов chroot через утилиту linux32, т.к. я выполняю сборку 32-битной системы из-под 64-битной. В противном случае в утилите linux32 нет необходимости.

Флагов будет великое множество. Более подробно о них можно узнать, почитав следующие описания: общие — /usr/portage/profiles/use.desc и индивидуальные — /usr/portage/profiles/use.local.desc.

Для внесения изменений в флаги применительно ко всем пакетам сразу используется файл make.conf. В процессе сборки содержимое файла /etc/make.conf будет переписываться, поэтому для внесения изменений, мы рекомендуем использовать альтернативный путь — /etc/portage/make.conf.

В качестве примера, давайте исключим поддержку адресации ipv6 во всех пакетах, для этого добавьте в файл /mnt/calculate-desktop-CLDX-x86-binary/etc/portage/make.conf следующую строчку:

USE="-ipv6"

Посмотрим что получится. В этот раз запустим обновление с флагом "-U", вместо "-u". Это позволит сэкономить время на синхронизацию портежей. Выполним 'cl-make -U -V':



Примечание. Так как при обновлении пакетов был пересобран Xorg сервер, в конце программа выполнит пересборку его модулей. Если вы будете запускать несколько сборок подряд, анализируя файл emerge.log, программа будет каждый раз пересобирать драйвера Xorg-сервера. Чтобы этого не происходило, вы можете удалить файл var/log/emerge.log в директории собираемой системы. Во время запаковки системы в образ, этот файл будет в любом случае удален.

4.2. Флаги и маски пакетов

Для изменения флагов и масок используются следующие пути: etc/portage/package.use, etc/portage/package.keywords, etc/portage/package.mask, etc/portage/package.unmask. Менеджер пакетов emerge 2.2 умеет размаскировывать зависимости.

Рассмотрим размаскировку пакетов, на примере браузера Firefox. Для начала сменим корневой каталог:

linux32 chroot /mnt/calculate-desktop-CLDX-x86-binary
env-update && source /etc/profile


Определим правильное название пакета firefox и узнаем список доступных версий:

eix firefox
* www-client/firefox
Available versions: *3.6.12 3.6.20 ~3.6.21 ~3.6.22 ~7.0.1-r1


Стабильная версия пакета 3.6.20. Размаскируем версию 7.0.1-r1:



Для обновления настроек используем утилиту dispatch-conf вместо etc-update:



Утилита обновит маски и USE-флаги. В обоих случаях нажмите «u» для принятия изменений.



Здесь же вы можете проверить и выписать названия других пакетов, необходимых для сборки. В конце, чтобы проверить все зависимости, выполните:

emerge -p пакет1 пакет2 ..

4.3. Добавление пакетов

Все устанавливаемые пакеты, за исключением зависимостей, прописываются в файле 'world'. Если вы ставите пакет, он, вместе с зависимыми библиотеками, устанавливается в систему. Если какие-либо библиотеки в последствии пакету уже не понадобятся, команда 'emerge --depclean' их удалит. Поэтому важно, чтобы все пакеты (без зависимостей), которые вы установили дополнительно, были прописаны в файле 'world'. Удалить их можно опять же командой 'emerge --unmerge' с указанием пакета(ов) или вручную, отредактировав файл и выполнив 'emerge --depclean'.

Для построения дерева зависимостей утилиты Calculate используют мета-пакеты, в основе которых лежит app-misc/calculate-meta. Посредством USE-флагов строятся всё дерево зависимостей. Так как в процессе сборки вы могли устанавливать для проверки софт, файл var/lib/portage/world перед запаковкой будет содержать только один этот мета-пакет.

Для того, чтобы добавить свои пакеты в дистрибутив, в портежах есть замечательный инструмент — сеты. При помощи сетов вы сможете подготовить свои тематические подборки программ. Сеты поддерживают вложения, что тоже очень удобно. Вы можете отредактировать свой список пакетов, воспользоваться сетом custom, находящемся в фале /etc/portage/sets/custom@, вписав в него строчку:

www-client/firefox

Либо создать новый сет с другим именем, например 'web', вписав в него пакет, а в файле 'custom' указать ссылку на него:

@web

Таким образом, сет может содержать как вложенные сеты, так и пакеты.

Во время обновления системы программы из сета будут установлены, т.к. сет прописан в своем world-файле, находящемся в /var/lib/portage/world_sets.

4.4. Удаление пакетов

Если очистить файл world и выполнить 'emerge --depclean', мы получим Stage3-образ. Т.е. прожиточный минимум всё же имеется и называется он 'system'. Обновить его можно командой 'emerge system', либо используя сет — 'emerge system'. Мета-пакет calculate-meta строит зависимости исходя из выбранного профиля. Используя USE-флаги calculate_nowireless, calculate_nonetwork, calculate_noxfce и т.п., можно исключить часть зависимостей. Полный список флагов можно посмотреть в файле /var/lib/layman/calculate/profiles/desc/calculate.desc. Для примера, давайте отключим поддержку беспроводных устройств. Для этого отредактируете файл /etc/portage/make.conf, вписав в него:

CALCULATE="nowireless"

5. Сохраним изменения


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

cl-make -U -V

Пакет firefox будет установлен, а лишние зависимости удалены:



5. Создадим новый образ


Для создания образа используйте утилиту cl-image:

cl-image --live iso



Опция "--live" позволит выиграть несколько секунд при загрузке с LiveCD или USB-Flash. Используйте эту опцию, если вы используете свежий Stage-образ Calculate Linux.

6. Завершение сборки


В случае необходимости, либо по завершению установки можно прервать сборку выполнив:

cl-make --break



7. Итог


Для эксперимента я выбрал дистрибутив Calculate Linux Desktop XFCE и воспользовался бинарным профилем CLDX. Все дальнейшие обновления системы я буду выполнять с учётом своих USE-флагов, командой 'emerge -uDNa world'. В случае, если флаги будут полностью совпадать, пакет будет установлен из бинарного репозитория, если будут различия — пакет соберется на моей машине.

Я получил образ с необходимым мне набором программного обеспечения. Не все из описанных возможностей я задействовал. Например в дистрибутиве можно подготовить шаблоны настройки рабочего стола пользователя (см. habrahabr.ru/blogs/linux/129658).

В следующей статье, если будет достаточный интерес, я опишу как можно получить тот же результат более наглядно и без использования жесткого диска ;-)
Теги:
Хабы:
Всего голосов 74: ↑66 и ↓8+58
Комментарии67

Публикации

Ближайшие события