Hasher/CentOS
Использование пакетов CentOS 6 с hasher
Оказалось возможным с незначительными правками скриптов hasher-1.3.22-alt1 добиться формирования с его помощью базового сборочного чрута на основе пакетной базы CentOS 6.0[1] (по идее, RHEL6 и Scientific Linux 6 должны подойти точно так же).
Вводная
С точки зрения запускающего hasher одним из существенных различий в пакетных базах является то, каков должен быть состав минимального и сборочного чрутов. Первое led@ в процессе экспериментов решил созданием пакета hasher-pkg-init, предназначенного для втягивания всего необходимого и предоставления всего формально требуемого, но отсутствующего именно в таком виде.
Изначально такой пакет был создан для репозитория openSUSE 11.4, где имеются дополнительные особенности раннего этапа построения чрутов.
Одним из неисправимых преимуществ пакетной базы RHEL6 является «закалка» пакета filesystem[2]. Для объезда пришлось форкнуть этот пакет, откатить патч и дополнительно убрать /dev[3].
Подготовка репозиториев
Потребуется локальное зеркало centos с дополнительным симлинком для apt, в данном случае это[4]:
$ rsync -Pav ftp.linux.kiev.ua::pub/Linux/CentOS/6.0/os/x86_64/Packages/ /var/ftp/pub/Linux/CentOS/6.0/os/x86_64/Packages/ $ ln -s Packages /var/ftp/pub/Linux/CentOS/6.0/os/x86_64/RPMS.Packages $ rsync -Pav ftp.linux.kiev.ua::pub/Linux/ALT/people/mike/repos/hasher/centos/6/ /var/ftp/pub/Linux/CentOS/6.0/hasher/[5]
и соответственно конфигурация apt к нему:
# cat > /etc/apt/apt.conf.centos6.0.x86_64 <<EOF Dir::Etc::main "/dev/null"; Dir::Etc::parts "/var/empty"; Dir::Etc::SourceParts "/var/empty"; Dir::Etc::sourcelist "/etc/apt/sources.list.centos6.0.x86_64"; EOF
# cat >/etc/apt/sources.list.centos6.0.x86_64 <<EOF rpm-dir file:/var/ftp/pub/Linux/CentOS/6.0/os x86_64 Packages rpm-dir file:/var/ftp/pub/Linux/CentOS/6.0/hasher x86_64 hasher rpm-dir file:/var/ftp/pub/Linux/CentOS/6.0/hasher noarch hasher EOF
Грязные хаки
В двух скриптах из состава hasher пришлось наскоро заглушить избыточные для данного случая проверки путём замены вызова fatal на verbose[6]:
- /usr/bin/hsh-sh-functions: 'RPM database update failed.'
- /usr/bin/hsh-initroot: 'Failed to update faked /proc permissions.'
# cp -a /usr/bin/hsh-sh-functions{,-orig} # cp -a /usr/bin/hsh-initroot{,-orig} # sed -i "s,fatal 'RPM database update failed.',verbose 'RPM database update failed.'," /usr/bin/hsh-sh-functions # sed -i "s,fatal 'Failed to update faked /proc permissions.',verbose 'Failed to update faked /proc permissions.'," /usr/bin/hsh-initroot
Понятно, что для промышленного применения понадобится придумать, как обрабатывать минимум первую ситуацию[7] в общем виде.
Результат
Получилось собрать в полученном сборочном чруте сам filesystem-2.4.30-3.1, а также выполнить сборку шаблона контейнера для OpenVZ при помощи минимально модифицированного[8] mkimage-profiles.
chroot
$ export HSHDIR=${TMP:=/tmp}/centos6 $ hsh-rmchroot $HSHDIR $ mkdir -p $HSHDIR $ nice time hsh --initroot --pkg-init-list='hasher-pkg-init' \ --apt-config=/etc/apt/apt.conf.centos6.0.x86_64 -vv --save-fakeroot $HSHDIR
Примечания
- ↑ эксперимент с 6.2 «в лоб» не удался: зачем-то лезут и 32-битные пакеты
- ↑ произведённая без особых пояснений и предназначенная вроде бы как для усиления безопасности, хотя у экспертов по таковой есть сомнения насчёт буйного перехода на capabilities
- ↑ http://permalink.gmane.org/gmane.linux.altlinux.devel/11942
- ↑ наверное, можно выкрутиться с помощью ftpfs и удалённого зеркала, но это будет заметно медленней
- ↑ оригинальный ftp.linux.kiev.ua уже недоступен, на яндексе ALT/people не продублировано, при необходимости пишите mike@ насчёт офлайнового архива
- ↑ также можно воспользоваться true(1) для понижения шумности
- ↑ развёрнутые с помощью rpm2cpio пакеты повторно устанавливаются с --justdb, однако оказываются уже установленными
- ↑ http://lists.altlinux.org/pipermail/sysadmins/2007-December/024257.html