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

Оригинал статьи: http://habrahabr.ru/blogs/linux/131234/

{{TOC}}

assemble14.pngshadow

Многие любят 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

Теперь определитесь с тем, какую систему вы хотите собрать. Перед вами выбор базовых образов:

# 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 включает несколько небольших пакетов и при желании быстро удаляется.
  1. Подготовим систему к сборке

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

Если в качестве профиля указать “CLDX”, программа попросит более точно ввести его название:
assemble1.pngshadow

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

Укажем, что мы хотим взять 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 минут:
assemble3.pngshadow

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

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

cl-make -u -V

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

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

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

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

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

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

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

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

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

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

Как вы могли заметить, образ развернулся в директорию /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':
assemble7.pngshadow

Примечание. Так как при обновлении пакетов был пересобран 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:
assemble8.pngshadow

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

assemble10.pngshadow

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

assemble11.pngshadow

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

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', либо используя сет 'emergesystem’. Мета-пакетcalculate-meta@ строит зависимости исходя из выбранного профиля. Используя USE-флаги calculate_nowireless, calculate_nonetwork, calculate_noxfce и т.п., можно исключить часть зависимостей. Полный список флагов можно посмотреть в файле /var/lib/layman/calculate/profiles/desc/calculate.desc. Для примера, давайте отключим поддержку беспроводных устройств. Для этого отредактируете файл /etc/portage/make.conf, вписав в него:

CALCULATE="nowireless"
  1. Сохраним изменения

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

cl-make -U -V

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

assemble9.pngshadow

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

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

cl-image --live iso

assemble12.pngshadow

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

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

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

cl-make --break

assemble13.pngshadow

  1. Итог

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

Я получил образ с необходимым мне набором программного обеспечения. Не все из описанных возможностей я задействовал. Например в дистрибутиве можно подготовить шаблоны настройки рабочего стола пользователя (см. http://www.calculate-linux.ru/blogs/ru/307/show).

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

Этот гайд вместо этого http://www.calculate-linux.ru/main/ru/interactive_system_build ???

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

А можно ли подобным образом создать iso для ARM архитектуры? Для Calculate Media Center (CMC) целесообразна такая архитектура.

Пока железа нет и поддержки нет. Разве что собирать через эмулятор. Но тут и для тестирования железа нет.

Alexander Tratsevskiy писал(а):

Пока железа нет и поддержки нет. Разве что собирать через эмулятор. Но тут и для тестирования железа нет.

Могу предоставить для тестов Moko Neo Freerunner

Александр, есть ли возможность одновременно собирать несколько образов? Хотелось бы держать подготовленными к сборке cldx для 32 и 64 битной архитектуры, а также cds 64 бита. Огромное спасибо за очень полезную статью, постоянно пользуюсь данным методом.

Конечно, мы держим одновременно 14 образов.

Александр, можете по подробней изложить или дополните в статье, мне кажеиться, что многим будет полезно.

calculate-assemble будет полностью переписываться с учётом наработок + с поддержкой утилит 3.1. Интерфейс также претерпит изменение, будем пытаться добиться поддержки работы не только из консоли, но и с графического интерфейса. Статью уже имеет смысл писать под новые утилиты.