ОБРАЗ

Создание персональной коллекции пакетов Fedora Linux.

1. Первоначальная установка Fedora Linux.

Установку Fedora Linux я рекомендую производить со стандартного CD диска.
Образ диска можно скачать с www.fedoraproject.com:

Fedora-14-i686-Live-Desktop.iso
size: 686,0 МБ (719323136 байт)
CRC32: 2598208a
MD5: 1df208ced5340ae2f33bd0636e2b8211
SHA1: 6d84a5fc248dd807fd224ad77f88c86d6825d457

Установка с данного CD производится способом копирования распакованного Live-CD образа на жесткий диск (Live-CD Installer).
Это означает, что, в случае нормального запуска Live-CD, нормально запустится система и с жесткого диска.

Данный образ диска содержит необходимый минимум пакетов, но ничего лишнего.
Это означает, что после установки в системе отсутствуют пакеты, способные осложнить далнейшее развитие системы своими зависимостями.
Помимо этого, в отличии от Fedora-14-i686-DVD.iso, Fedora-14-i686-Live-Desktop.iso базируется на Gnome, который во многих отношениях гораздо пластичней KDE и менее тормозной (в Gnome можно полностью удалить стандартные панели, создать свои собственные и расположить апплеты на них по собственному усмотрению; разница между временем отклика Gnome и KDE видна невооруженным взглядом).

2. Накопление коллекции пакетов.

Для создания локального репозитория многие предлагают использовать плагин yum-а "yum-downloadonly":

# yum install yum-downloadonly

# yum --downloadonly install пакет1 пакет2 ...

Все пакеты будут закачены в каталоги /var/cache/yum/$basearch/$releasever/$reponame/packages (например, /var/cache/yum/i386/14/fedora/packages).

Но такой способ неудобен тем, что пакеты из разных репозиториев (например, fedora и update) будут скачены в разные папки.
Помимо этого, действие этих пакетов нельзя сразу опробовать (и соответственно узнать, как сильно они нужны).
Необходимо сначала скопировать данные пакеты (из всех кешей репозиториев!) в новую папку, после чего повторить команду yum без --downloadonly:

# yum install пакет1 пакет2 ...

Я же предлагаю использовать плагин "yum-plugin-local":

$ su -c 'yum install yum-plugin-local'

Этот пакет надо установить сразу же после установки Fedora, до обновлений.
Во время установки данного плагина, с помощью второй консоли надо скопировать ("перехватить") пакет данного плагина сразу после его закачки (до завершения установки) из папки /var/cache/yum/$basearch/$releasever/$reponame/packages (скорее всего из /var/cache/yum/i386/14/fedora/packages) в какую-нибудь другую папку:

$ mkdir /mnt/DATA/myfedora

$ mkdir /mnt/DATA/myfedora/rpms

$ cp /var/cache/yum/i386/14/fedora/packages/*.rpm /mnt/DATA/myfedora/rpms

где /mnt/DATA - несистемный раздел для хранения информации.

/*
Я предпочитаю монтировать хранилища информации через fstab, не доверяя эту операцию fuse:

$ su -c 'mkdir /mnt/DATA'

$ su -c 'vi /etc/fstab'

----------vi begin----------------
[i]
----------insert------------------
/dev/sda5          /             ext4    defaults        1 1
/dev/sda7          /home         xfs     defaults        1 2
/dev/sda6          swap          swap    defaults        0 0
/dev/sda3          /mnt/DATA     ntfs    defaults,user   1 2
tmpfs              /dev/shm      tmpfs   defaults        0 0
devpts             /dev/pts      devpts  gid=5,mode=620  0 0
sysfs              /sys          sysfs   defaults        0 0
proc               /proc         proc    defaults        0 0
----------end insert--------------
[ESC]
[Shift]+[z],[Shift]+[z].
----------vi end------------------

Из этой таблицы монтирования файловых систем видно, что я для корневых разделов заменил все UUID=... на прямые указатели /dev/sda?, так как принципиально не понимаю назначение идентификаторов UUID.
*/

Указанное выше копирование необходимо, чтобы данный пакет вошел в персональную коллекцию пакетов.

После установки этого плагина все пакеты обновления и нового ПО в ходе установки будут копироваться в локальный репозиторий /var/lib/yum/plugin/local.
Это полноценный репозиторий с описывающими его таблицами и базами: /var/lib/yum/plugin/local/repodata/*.

Этот репозиторий можно использовать без каких-либо изменений, но:
1) он занимает большое место в корневом разделе;
2) он не имеет собственных "групп";
3) при переустановке он будет уничтожен.

Исходя из перечисленного списка недостатков такого репозитория, предлагаю переносить пакеты в другое место, а данный репозиторий зачищать:

$ cd /var/lib/yum/plugin/local

$ cp *.rpm /mnt/DATA/myfedora/rpms

$ su -c 'rm -r -f *'

$ su -c 'createrepo -d ./'

$ cd ~/

Команда su -c 'createrepo -d ./' создает под root-ом пустые таблицы репозитория взамен удаленных (необходимо для yum).

По ходу накопления пакетов, а соответственно и установки, данные пакеты естественным образом проходят тестирование. Администратор видит как садятся пакеты, получает логи, системные уведомления. А это прямо указывает, что в ходе первичной установки лучше использовать принцип избыточности. Т.е. устанавливать пакеты со всеми прибамбасами, отмечая для себя какие именно элементы реально необходимы. Подобная избыточность несильно увеличит размер персональной коллекции пакетов (ну максимум в 2 раза). При этом основные пакеты будут полностью обеспечены как зависимостями, так и возможностью расширения функционала.

С другой стороны избыточность усложняет систему, увеличивая количество отказов. Но это не является в полной мере негативным фактом. Отказы помогают понять, как должна быть скомпанована результирующая система. Первичная установка Fedora предназначена только для сбора коллекции пакетов и их тестирования и дальнейшее ее использование, либо чистка и устранение отказов, не предусматривается.

3. Оформление коллекции пакетов как локального репозитория.

После сбора всех необходимых пакетов в /mnt/DATA/myfedora/rpms, необходимо оформить их в локальный репозиторий, что позволит при вторичной установке применять к ним методы yum-а, либо PackageKit-а. Данное оформление состоит из следующих этапов:

1) Автоматическая зачистка локального репозитория (/mnt/DATA/myfedora/rpms) от лишнего;
2) Автоматическая генерация "групп" пакетов;
3) Создание таблиц локального репозитория;
4) Заготовка yum-описания локального репозитория.

3.1 Автоматическая зачистка локального репозитория от лишнего.

Предполагается, что по мере накопления пакетов производилась многократная зачистка /var/lib/yum/plugin/local, как это описано в главе 2.
В результате этого, получившаяся коллекция содержит устаревшие и, соответственно, ненужные пакеты. Для получения списка устаревших пакетов используем repomanage, для использования этого списка xargs:

$ cd /mnt/DATA/myfedora/rpms

$ repomanage -o ./ | xargs rm -v

3.2 Автоматическая генерация "групп" пакетов.

Для автоматической генерации "групп" пакетов используем информацию, заложенную в этих пакетах и специально приготовленный скрипт.
Получение информации о пакете:

$ rpm -q -p --qf %-30{NAME}%{GROUP} packagename.rpm

Скрипт для генерации таблицы групп: 0.group.list.sh.gz - генерирует таблицу xml: 0.group.xml.
Использование скрипта:

$ cp ~/Downloads/0.group.list.sh.gz /mnt/DATA/myfedora

$ cp /mnt/DATA/myfedora/0.group.list.sh.gz /mnt/DATA/myfedora/rpms

$ cd /mnt/DATA/myfedora/rpms

$ gunzip 0.group.list.sh.gz

$ vi 0.group.list.sh

----------vi begin----------------
[i]
----------insert------------------
#!/bin/sh
# GET GROUP LIST IN PACKAGES

namedistr="my_name_collection_rpm"

...
----------end insert--------------
[ESC]
[Shift]+[z],[Shift]+[z].
----------vi end------------------

$ sh 0.group.list.sh

В данном скрипте не используются стандартные группы Fedora, а создается своя группа с именем my_name_collection_rpm с вложенными в нее подгруппами, указанными в свойствах пакетов. И это хорошо, так как при повторной установке логичнее иметь четко определенное описание собранной коллекции пакетов.

3.3 Создание таблиц локального репозитория.

После создания таблицы "групп" пакетов генерируем остальные таблицы и базы:

$ cd /mnt/DATA/myfedora/rpms

$ createrepo -d -g 0.group.xml ./

Эта команда создаст директорию repodata со всеми необходимыми таблицами и базами.

3.4 Заготовка yum-описания локального репозитория.

После генерации таблиц и баз описания локального репозитория, надо создать его yum-описание, протестировать и сохранить на внешнем носителе:

$ su -c 'cp /etc/yum.repos.d/_local.repo /etc/yum.repos.d/localdata.repo'

$ su -c 'vi /etc/yum.repos.d/localdata.repo'

----------vi begin----------------
[i]
----------insert------------------
[localdata]
name=Local repo
baseurl=file:/mnt/DATA/myfedora/rpms
enabled=1
gpgcheck=0
metadata_expire=1h
----------end insert--------------
[ESC]
[Shift]+[z],[Shift]+[z].
----------vi end------------------

$ yumex

----------yumex begin-------------
# test repo in yumex
----------yumex end---------------

$ cp /etc/yum.repos.d/localdata.repo /mnt/DATA/myfedora

Все готово к повторной установке Fedora.

4. Повторная установка Fedora.

Повторная установка производится с того же диска, что и первичная (с форматированием системных разделов: /,/home).
После установки меняем таблицу монтирования файловых систем fstab:

$ su -c 'mkdir /mnt/DATA'

$ su -c 'vi /etc/fstab'

----------vi begin----------------
[i]
----------insert------------------
/dev/sda5          /             ext4    defaults        1 1
/dev/sda7          /home         xfs     defaults        1 2
/dev/sda6          swap          swap    defaults        0 0
/dev/sda3          /mnt/DATA     ntfs    defaults,user   1 2
tmpfs              /dev/shm      tmpfs   defaults        0 0
devpts             /dev/pts      devpts  gid=5,mode=620  0 0
sysfs              /sys          sysfs   defaults        0 0
proc               /proc         proc    defaults        0 0
----------end insert--------------
[ESC]
[Shift]+[z],[Shift]+[z].
----------vi end------------------

Перезагрузка (для монтирования хранилища данных).

Копирование yum-описания локального репозитория:

$ su -c 'cp /mnt/DATA/myfedora/localdata.repo /etc/yum.repos.d'

Перезагрузка (для активации PackageKit update).

Обновление системы (при отсутствии сети произойдет полностью из персональной коллекции пакетов, при наличие сети закачка только более новых пакетов) с помощью PackageKit.
Расширение системы из персональной коллекции пакетов по своему усмотрению (с учетом наблюдений при тестировании в первичной установке).

ПРИЛОЖЕНИЕ.

Многие приложения распространяются в сети в виде исходников (*.tar.gz,*.tar.bz2,*.tgz), при этом содержат в себе файлы спецификации (*.spec). Это позволяет создать из исходников бинарные пакеты (*.rpm) и добавить их в персональную коллекцию пакетов.
Для примера приведу пакет moc-2.4.4.tar.bz2. Это удобный консольный аудиопроигрыватель. Rpm-версии данного пакета я не нашел. Архив содержит файл спецификации moc.spec. И этого в контексте данной статьи достаточно, чтобы добавить этот пакет к коллекции:

1) устанавливаем rpmbuild

$ su -c 'yum install rpmbuild'

2) после этого в домашней папке должна быть создана папка rpmbuild. Если это не так, командуем:

$ rpmbuild

Если и после этого папка rpmbuild отсутствует создаем ее ручками:

$ mkdir ~/rpmbuild

$ mkdir ~/rpmbuild/BUILD

$ mkdir ~/rpmbuild/BUILDROOT

$ mkdir ~/rpmbuild/RPMS

$ mkdir ~/rpmbuild/SOURCES

$ mkdir ~/rpmbuild/SPECS

$ mkdir ~/rpmbuild/SRPMS

3) копируем пакет в rpmbuild:

$ cp ~/Downloads/moc-2.4.4.tar.bz2 ~/rpmbuild/SOURCES

$ cd ~/rpmbuild/SOURCES

$ tar -xjvf moc-2.4.4.tar.bz2 *.spec

$ mv moc-2.4.4/moc.spec ../SPECS

4) создаем пакет:

$ cd ~/rpmbuild

$ rpmbuild -bb -v --nodeps SPECS/moc.spec

/*
ключ --nodeps нужен потому, что rpmbuild предполагает возможность создания пакета-исходника, а для этого в системе должны быть установлены dev-ы пакетов зависимостей, которые нужны разработчикам, но не нужны администраторам и тем более конечному пользователю, и по умолчанию отсутствуют в системе.
*/

5) копируем полученный пакет в коллекцию:

$ cp ~/rpmbuild/RPMS/i686/moc-2.4.4*.rpm /mnt/DATA/myfedora/rpms

А дальше все согласно главы 3.


12 марта 2011г.

Made in Terra No Names.


Сайт управляется системой uCoz