|
Создание персональной коллекции пакетов 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 видна невооруженным взглядом).
Для создания локального репозитория многие предлагают использовать плагин 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 предназначена только для сбора коллекции пакетов и их тестирования и дальнейшее ее использование, либо чистка и устранение отказов, не предусматривается.
После сбора всех необходимых пакетов в /mnt/DATA/myfedora/rpms, необходимо оформить их в локальный репозиторий, что позволит при вторичной установке применять к ним методы yum-а, либо PackageKit-а. Данное оформление состоит из следующих этапов:
1) Автоматическая зачистка локального репозитория (/mnt/DATA/myfedora/rpms) от лишнего;
2) Автоматическая генерация "групп" пакетов;
3) Создание таблиц локального репозитория;
4) Заготовка yum-описания локального репозитория.
Предполагается, что по мере накопления пакетов производилась многократная зачистка /var/lib/yum/plugin/local, как это описано в главе 2.
В результате этого, получившаяся коллекция содержит устаревшие и, соответственно, ненужные пакеты. Для получения списка устаревших пакетов используем repomanage, для использования этого списка xargs:
$ cd /mnt/DATA/myfedora/rpms
$ repomanage -o ./ | xargs rm -v
Для автоматической генерации "групп" пакетов используем информацию, заложенную в этих пакетах и специально приготовленный скрипт.
Получение информации о пакете:
$ 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 с вложенными в нее подгруппами, указанными в свойствах пакетов. И это хорошо, так как при повторной установке логичнее иметь четко определенное описание собранной коллекции пакетов.
После создания таблицы "групп" пакетов генерируем остальные таблицы и базы:
$ cd /mnt/DATA/myfedora/rpms
$ createrepo -d -g 0.group.xml ./
Эта команда создаст директорию repodata со всеми необходимыми таблицами и базами.
После генерации таблиц и баз описания локального репозитория, надо создать его 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.
Повторная установка производится с того же диска, что и первичная (с форматированием системных разделов: /,/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.