Создание дистрибутива на основе Fedora

Аватар пользователя Tigro

Когда-то давно я написал статью Как сделать свою собственную Fedora Core. С тех пор многое изменилось, так что я решил написать новую.

В данное время установочные диски Fedora делаются при помощи утилиты pungi (LiveCD при помощи revisor, но это отдельная тема).

Что нам понадобится?

  1. Репозиторий с пакетами, которые мы хотим включить на установочный диск,
  2. Окружение mock (chroot) для сборки. Как показала практика, собирая дистрибутив в рабочей системе можно наткнуться на совершенно невероятные проблемы,
  3. Kickstart файл.

Создание локального зеркала репозиториев

Я думаю имеет смысл иметь локальную копию всех используемых репозиториев. Во-первых это сэкономит время, так как пакеты из локального репозитория будут качаться минимум со скоростью 20 мегабайт в секунду (а первый блин, как известно, всегда комом), во-вторых скорее всего вы захотите повлиять на набор устанавливаемых по умолчанию пакетов (отредактировать comps файлы).

Если вы хотите использовать репозитории из сети (а соответственно не вносить никаких изменений в comps файлы), то этот этап можно пропустить.

Также нам понадобится поднять FTP-сервер, чтобы можно было получать файлы внутри окружения mock. Таким образом зеркалировать репозитории нужно либо в корень уже работающего FTP-сервера, либо, если такового нет, туда где есть свободное место. Репозиторий Everything 9 i386 занимает ~ 13 Гб, x86_64 – ~ 15 Гб, Livna ~ 650 Мб для каждой архитектуры, Tigro – ~ 500-600 Мб. также понадобятся обновления, размер которых несколько гигабайт.

Итак допустим у нас достаточно места в /home/ftp, создадим там папку fedora, а в ней несколько папок 9, livna, tigro, updates и т. п. Зазеркалируем репозитории следующими командами:

rsync -avHP --delete --exclude={debug/,ppc*/,source/} \
spreader.yandex.net::fedora/linux/releases/9/Everything/ \
/home/ftp/fedora/9/

Если вам нужна только одна архитектура (i386 или x86_64), то добавьте исключение ненужной в exclude (обязательно с ”/” на конце).

Для зеркалирования репозитория Livna нужно отдать команду

rsync -avHP --delete --exclude={debug/,ppc*/,SRPMS/} \
rpm.livna.org::rlo/fedora/9/ /home/ftp/fedora/livna/

для Tigro

rsync -avHP --delete --exclude=SRPMS/ \
spreader.yandex.net::fedora-tigro/9/ /home/ftp/fedora/tigro/

а для обновлений

rsync -avHP --delete --exclude={debug/,ppc*/,SRPMS/} \
spreader.yandex.net::fedora-linux-updates/9/ \
/home/ftp/fedora/updates/

Изменение файлов comps

Теперь поговорим о том, как нам повлиять на список пакетов устанавливаемых по умолчанию (это не те пакеты, которые просто кладутся на диск, а те, которые ставятся автоматом в устанавливаемую систему). За это отвечает comps-файл, файл, в котором хранятся группы и названия пакетов. Он есть в каждом из вышеописанных репозиториев. Рассмотрим часть стандартного файла из Fedora 9 (с выкидыванием некоторых локализаций). Сам файл у нас должен лежать в /home/ftp/fedora/9/i386/os/repodata/Fedora-9-comps.xml

<group>
<id>editors</id>
<default>True</default>
<uservisible>True</uservisible>
<display_order>1024</display_order>
<name>Editors</name>
<name xml:lang="ru">Редакторы</name>
<description>Sometimes called bla bla bla</description>
<description xml:lang="ru">Эти программы, bla bla bla</description>
<packagelist>
<packagereq type="default">vim-enhanced</packagereq>
<packagereq type="optional">xemacs-packages-extra</packagereq>
<packagereq type="optional">nedit</packagereq>
<packagereq type="optional">zile</packagereq>
<packagereq type="optional">xmlcopyeditor</packagereq>
<packagereq type="optional">emacs-auctex</packagereq>
<packagereq type="optional">emacs-bbdb</packagereq>
<packagereq type="optional">geany</packagereq>
<packagereq type="optional">emacs-ess</packagereq>
<packagereq type="optional">scribes-templates</packagereq>
<packagereq type="optional">emacs</packagereq>
<packagereq type="optional">jed</packagereq>
<packagereq type="optional">scribes</packagereq>
<packagereq type="optional">psgml</packagereq>
<packagereq type="optional">emacs-vm</packagereq>
<packagereq type="optional">scite</packagereq>
<packagereq type="optional">emacs-muse</packagereq>
<packagereq type="optional">gobby</packagereq>
<packagereq type="optional">leafpad</packagereq>
<packagereq type="optional">joe</packagereq>
<packagereq type="optional">cssed</packagereq>
<packagereq type="optional">vim-X11</packagereq>
<packagereq type="optional">xemacs-ess</packagereq>
<packagereq type="optional">xemacs</packagereq>
<packagereq type="optional">poedit</packagereq>
<packagereq type="optional">emacs-nxml-mode</packagereq>
<packagereq type="optional">xemacs-muse</packagereq>
</packagelist>
</group>

Нас интересуют следующие теги:

  • default – если True, то группа помечается включённой для установки по умолчанию,
  • packagerreq type= – mandatory | default | optional. Mandatory и default в принципе означают одно и тоже, пакет будет установлен если выбрана группа, optional же означает, что пакет не будет устанавливаться по умолчанию. Кроме того пакеты, помеченные как mandatory и default, будут автоматически добавлены на диск pungi (если группа выбрана по умолчанию), а пакеты, помеченные как optional, необходимо будет указать в файле kickstart вручную.

Переиндексация репозиториев

После изменения comps файла необходимо переиндексировать репозитории. Устанавливаем пакет createrepo.

Comps файл для Everything хранится в каталоге repodata на уровне каталога Packages. Думаю будет намного проще скопировать исправленный Fedora-9-comps.xml в /home/ftp/fedora/9/i386/os/Packages/, а далее отдать команду

createrepo -g Fedora-9-comps.xml -d --update \
/home/ftp/fedora/9/i386/os/Packages/

Примерно тоже самое следует сделать с другими репозиториями (comps.xml в них лежит в самом дереве rpm-пакетов).

Вы также можете создать отдельно свой репозиторий, в который складывать какие-либо пропатченные пакеты, например, anaconda или fedora-release.

Запуск FTP-сервера

Нам необходимо установить пакет vsftpd. После установки изменяем в файле /etc/passwd домашний каталог пользователя ftp на /home/ftp и запускаем сервер командой

/etc/init.d/vsftpd start

В принципе ничего менять в настройках самого сервера не нужно. Vsftpd одна из давних программ Linux, которая работает из коробки. Проверяем всё ли у нас получилось, командой ftp localhost. Вывод должен быть примерно такой (пароль пустой).

$ ftp localhost
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.0.6)
Name (localhost:ashejn): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,137,231).
150 Here comes the directory listing.
drwxr-xr-x 5 263 263 43 May 27 07:44 9
drwxrwxr-x 4 552 552 30 May 02 2006 livna
drwxr-xr-x 9 0 0 4096 May 14 07:30 tigro
drwxr-xr-x 4 501 501 30 Jun 06 18:54 updates
226 Directory send OK.
ftp> by
221 Goodbye.
ftp>

Разумеется вы можете создавать репозитории не локально, а на другой машине и забирать их также по сети через FTP или даже HTTP.

Создание окружения для сборки дистрибутива

Даже если мы хотим собирать дистрибутив под текущую архитектуру, нам лучше воспользоваться утилитой mock. Mock – это специальная утилита для сборки пакетов, но в нашем случае мы будем использовать её как chroot окружение, в котором нет ничего лишнего.

Сперва нам нужно установить пакет mock, затем (только если мы создали свой репозиторий) подправить файлы конфигурации, чтобы пакеты брались с локального диска. Настройки лежат в каталоге /etc/mock. Допустим в файле fedora-9-i386.cfg мы исправляем в секциях [fedora] и [updates] mirrorlist на baseurl=file:///home/ftp/fedora/9/i386/os/Packages/ и baseurl=file:///home/ftp/fedora/updates/i386 соответственно. Также можете прописать и другие репозитории по образу и подобию, впрочем особой нужды в этом нет.

Теперь нам необходимо добавить пользователя, из-под которого мы будем производить работу с окружением, в группу mock. Для этого можно воспользоваться (из-под пользователя root) следующей командой:

/usr/sbin/usermod -G mock пользователь

После этого необходимо перелогинится (или сделать ssh на localhost)

Осталось только создать окружение командой

mock -r fedora-9-i386 --init

Если всё пройдёт удачно, то следует установить в него pungi, лучше ту, что лежит у меня в репозитории (а у вас на локальном диске), так как она умеет называть образы по параметру name.

mock -r fedora-9-i386 --install \
/home/ftp/tigro/i386/pungi-1.2.18-1.fc9.1.noarch.rpm

На этом этапе подготовка окружения к сборке дистрибутива закончена. Если у вас 64-х битная операционная система, то можете тоже самое проделать для 64-х битного окружения.

Создание kickstart файла

Первым делом не нужно пытаться создать его с нуля. Гораздо разумнее взять уже готовый, он входит в пакет fedora-release и называется /usr/share/fedora-release/f9-fedora.ks.

Что в нём нужно поправить? Во-первых репозитории (заменить на наши локальные). В нашем случае это будет выглядеть так:

repo --name=fedora --baseurl=ftp://localhost/9/$basearch/os/Packages/
repo --name=livna --baseurl=ftp://localhost/livna/$basearch
repo --name=tigro --baseurl=ftp://localhost/tigro/9/$basearch
repo --name=updates --baseurl=ftp://localhost/updates/$basearch

Если вы хотите создавать диски с исходниками, то необходимо указать и их (а в первой главе статьи также зазеркалировать и исходники).

Во-вторых – список пакетов. В секции %packages указываются группы (начинаются с @. Это те группы, которые в файле comps находятся внутри тега id) и пакеты. Редактируем их по своему разумению на свой страх и риск. При помощи метода научного тыка вы вероятно подберёте оптимальный для себя вариант. Если нам насильно не нужно включать пакет на диск, то перед его именем следует поставить символ ”-”.

Обо всех параметрах файла kickstart можно почитать здесь, а можно поиграться программой system-config-kickstart.

Создание образов дистрибутива

Файл kickstart готов. Допустим мы его назвали f9-custom.ks. Нам необходимо скопировать его в окружение командой

mock -r fedora-9-i386 --copyin f9-custom.ks builddir/

После этого заходим в окружение

mock -r fedora-9-i386 --shell

Первым делом нужно удалить файлы баз rpm (rm /var/lib/rpm/__db*), иначе у нас не соберутся образы. Удалять базы нужно только один раз, после инициализации окружения.

Далее переходим в каталог builddir (cd builddir) и отдаём команду

pungi -c f9-custom.ks --name="Fedora-Custom" \
--ver=9 --nosource --nosplitmedia --force

В результате у нас должны получиться два образа, DVD и образ для установки по сети. На Core2Duo 6600 с 2-мя гигабайтами памяти образы делаются около 20 минут, на AMD64 4800+ – около часа.

Все опции утилиты pungi можно просмотреть, запустив её без параметров. Там всё довольно просто, думаю у вас получится создать CD-диски, а также диски с исходниками. Самое сложное это правильно подобрать набор пакетов, а точнее выкинуть всё ненужное.

Pungi – это довольно простой механизм для получения своих собственных образов с Fedora (respin), например, для нужд учебного заведения, для студентов, для школьников.

Литература

  1. Документация по Anaconda
  2. Kickstart file format documentation
  3. Editing comps.xml

Когда-то давно я написал статью Как сделать свою собственную Fedora Core. С тех пор многое изменилось, так что я решил написать новую.

Это довольно большая статья, охватывающая создание копий репозиториев на локальном диске, изменение файлов групп, поднятие FTP-сервера, создание файла kickstart и сборке образов дистрибутива.

Содержание

  1. Создание локального зеркала репозиториев
  2. Изменение файлов comps
  3. Переиндексация репозиториев
  4. Запуск FTP-сервера
  5. Создание окружения для сборки дистрибутива
  6. Создание kickstart файла
  7. Создание образов дистрибутива
  8. Литература
Your rating: Нет Average: 10 (3 votes)

Комментарии

Аватар пользователя Гость

Re: Создание дистрибутива на основе Fedora

Удивительные дела - Федора развивается уже во всяких ипостасях, даже Tedora появилась, а от ASPLinux ни гу-гу, одни сервера клепают.
Надо понимать, что с десктопами компания завязала?

Аватар пользователя Гость

Re: Создание дистрибутива на основе Fedora

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

Аватар пользователя Гость

Re: Создание дистрибутива на основе Fedora

А что, есть факты или это просто так, волны? Улыбка

Аватар пользователя Леголегс

Re: Создание дистрибутива на ...

Цитата:
/usr/sbin/usermod -G mock пользователь

Плохой совет! Эта команда выкинет вас из всех остальных групп! Останетесь без звука, виртуалбокса и ещё чего-нибудь.
Правильная команда:

/usr/sbin/usermod -G mock -a пользователь
Аватар пользователя Коэльё

Re: Создание дистрибутива на ...

"spreader.yandex.net::fedora/linux/releases/9/Everything/ \
/home/ftp/fedora/9/" - паходу чуть-чуть не правильно

RSS-материал