Оригинал статьи: http://habrahabr.ru/blogs/linux/131234/
{{TOC}}
shadow
Многие любят 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
из консоли.
- То что нам понадобится
Разумеется, у вас уже должен быть установлен 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
Теперь определитесь с тем, какую систему вы хотите собрать. Перед вами выбор базовых образов:
# Gentoo Stage3 - прожиточный минимум для начала сборки системы;
# Calculate Scratch Server (CSS) - по сути тот же Gentoo Stage3 с ядром, драйверами, загрузчиком, портежами и утилитами Calculate.
# Calculate Linux Scratch (CLS) - CSS + Xorg + wireless.
# 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 http://mirror.yandex.ru/gentoo-distfiles/releases/x86/current-stage3/stage3-i686-20111018.tar.bz2
или
cd /var/calculate/linux
wget http://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 http://mirror.yandex.ru/gentoo-distfiles/snapshots/portage-20111024.tar.bz2
Обратите внимание, версии фалов постоянно обновляются.
В этой статье я остановлю свой выбор на CLDX 32 бит по следующим причинам:
- Дистрибутив уже содержит большинство необходимых программ;
- Нет привязки к Gnome/KDE;
- XFCE включает несколько небольших пакетов и при желании быстро удаляется.
- Подготовим систему к сборке
Для подготовки системы к сборке служит утилита cl-assemble
. Вы можете воспользоваться любым из доступных профилей. В профилях Calculate Linux флаги подобраны с учётом используемого рабочего стола. CLD оптимизирован с учётом использования Qt/KDE, CLDG - Gtk/Gnome, XFCE - Gtk. Профиль CLDX идеально подойдет, если вы не хотите использовать ни KDE, ни Gnome.
Если в качестве профиля указать “CLDX”, программа попросит более точно ввести его название:
shadow
Вам также понадобится указать раздел для установки. Это может быть либо раздел жесткого диска (10-15 Гб), либо директория. В случае использования директории, будет тратиться дополнительное время на удаление старых файлов. По умолчанию утилита использует Gentoo Stage3 образ и свежие портежи:
shadow
Укажем, что мы хотим взять 32-битный образ CLDX, свежую версию которого можно скачать отсюда http://mirror.cnet.kz/calculate/CLDX/stages/i686/. Для этого понадобится правильно указать профиль и, в случае если мы работаем в 64-битной системе, указать, что мы хотим использовать архитектуру i686:
cl-assemble -p desktop/CLDX/x86/binary -d /dev/sda2 --source=CLDX --march=i686
На моей машине вся подготовка заняла менее 10 минут:
shadow
- Обновим систему
Для сборки системы служит утилита cl-make
. Обратите внимание на несколько параметров. Если вы хотите собрать систему со Stage3 - используйте опцию сборки системы "-m" (или "--make")
, если из образа Calculate - опцию обновления системы "-u", (или "--update")
. Обратите внимание на опцию "-V" (или "--withvideo")
для копирования проприетарных видеодрайверов. Копирование без установки пресекает нарушение лицензии GPL, при этом у вас остаётся выбор проприетарного видеодрайвера, который будет инсталлирован в систему во время процесса загрузки.
cl-make -u -V
Выполним обновление:
shadow
В приведенном примере я не указывал собираемый профиль. Его следует вводить в случае, если вы ставите на сборку несколько систем одновременно. Например, 32 и 64 битную версии. В этом случае профиль можно ввести как “-p amd64” и “-p x86”. Путем сравнения собираемых версий, программа попытается определить нужный профиль.
В моем случае потребовалось обновить около 40 пакетов.
Свои действия утилиты Calculate отписывают в файл /etc/calculate/assemble.env
:
shadow
Некоторые значения, например rsync-сервер портежей, доступные разделы, можно прописать в переменных утилит. Пример с реального сервера сборки:
shadow
После указания доступных разделов, передавать параметр раздела сборки уже не обязательно.
Я успел написать этот текст пока система обновляется. Мне попались под обновление сразу gtk с python, лучше бы я взял сегодняшний образ. Несмотря на то, что я выбрал бинарный профиль, компиляция идет из исходников. Пойду налью себе кофе
- Внесем изменения
Наконец добрались до самого интересного. Что мы можем изменить:
- состав пакетов;
- флаги сборки;
- настройки программ;
- настройки рабочего стола пользователей;
- темы и т.п.
Как вы могли заметить, образ развернулся в директорию /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'
:
shadow
Примечание. Так как при обновлении пакетов был пересобран 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:
shadow
Для обновления настроек используем утилиту dispatch-conf
вместо etc-update
:
shadow
Утилита обновит маски и USE-флаги. В обоих случаях нажмите “u” для принятия изменений.
shadow
Здесь же вы можете проверить и выписать названия других пакетов, необходимых для сборки. В конце, чтобы проверить все зависимости, выполните:
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"
- Сохраним изменения
Мы добавили браузер firefox, удалили поддержку беспроводных устройств, давайте теперь обновим образ:
cl-make -U -V
Пакет firefox будет установлен, а лишние зависимости удалены:
shadow
- Создадим новый образ
Для создания образа используйте утилиту cl-image:
cl-image --live iso
shadow
Опция “–live” позволит выиграть несколько секунд при загрузке с LiveCD или USB-Flash. Используйте эту опцию, если вы используете свежий Stage-образ Calculate Linux.
- Завершение сборки
В случае необходимости, либо по завершению установки можно прервать сборку выполнив:
cl-make --break
shadow
- Итог
Для эксперимента я выбрал дистрибутив Calculate Linux Desktop XFCE и воспользовался бинарным профилем CLDX. Все дальнейшие обновления системы я буду выполнять с учётом своих USE-флагов, командой 'emerge uDNa world’. В случае, если флаги будут полностью совпадать, пакет будет установлен из бинарного репозитория, если будут различия пакет соберется на моей машине.
Я получил образ с необходимым мне набором программного обеспечения. Не все из описанных возможностей я задействовал. Например в дистрибутиве можно подготовить шаблоны настройки рабочего стола пользователя (см. http://www.calculate-linux.ru/blogs/ru/307/show).
В следующей статье, если будет достаточный интерес, я опишу как можно получить тот же результат более наглядно и без использования жесткого диска