Передовой системой gentoo считается по праву, как и другие source-based. Мы сами собираем программы, в отличии от пользователей бинарных дистрибутивов, и все новинки к нам попадают быстрее. Но бывает и так, что нужна программа устаревшей версии. Или такая программа, которая была в портэжах, побыла - да "сплыла".
Выведеные из официального дерева пакеты (или их версии), можно взять из старых архивов портажей, что я и делал. Но со временем таких пакетов стало много... Проблемы начинаются тогда, когда несколько раз частично обновляешь систему (причиной было почти полное отсутствие интернета). Копятся сборочные скрипты из разных архивов, а ведь дистрибутив постоянно развивается! Более новые файлы .ebuild используют уже другие функции в сборке (я имею ввиду функции описанные в файлах /usr/portage/eclass/*), а пересобирать старые пакеты всё равно прийдётся: это "обеспечит" revdep-rebuild, или python-updater :)
Выход: распаковывать файлы.eclass вместе со сборочными скриптами, в отдельный для каждого архива каталог, и прописывать этот каталог как оверлей в /etc/make.conf. При сборке пакета из такого "оверлея" emerge будет использовать функции из совместимых со сборочным скриптом файлов.eclass и проблем не будет (если их небыло ранее)). Изобретать принципиально новый "велосипед" для поддержания порядка я не стал, а взял за основу принцип используемый в app-portage/layman: - создал для всей коллекции раритетов каталог /usr/local/old_portage
- создал файл /usr/local/old_portage/make.conf (по аналогичному файлу layman'а)
- в файл /etc/make.conf вписал строку: source /usr/local/old_portage/make.conf
- чтобы уж совсем не перетрудиться написал простейший скрипт для распаковки архивов, с созданием нужных каталогов и внесением записей в конфиг:
Code #!/bin/bash # lexus <l6xus@jabber.ru> on ira-station GNU/Linux 2009-09-29 # part_port-0.01.sh PORTSKLAD="/usr/local/portsklad" TARGET="/usr/local/old_portage" PORTFILE="${1}"; [[ "${PORTFILE:$((${#PORTFILE} - 8)):8}" = ".tar.bz2" ]] || exit 1 && shift PORTDATE="${PORTFILE:$((${#PORTFILE} - 16)):8}" PAKG="portage/${1}" new_portdate() { mkdir -p "${TARGET}/${PORTDATE}/portage/profiles" && echo "gentoo_legacy-${PORTDATE}" > "${TARGET}/${PORTDATE}"/portage/profiles/repo_name [[ -f "${TARGET}/make.conf" ]] || cat > "${TARGET}/make.conf" << EOF #${HOSTNAME}:${TARGET}/make.conf список устаревших портэжей для включения в систему (по датам) PORTDIR_OVERLAY=" \$PORTDIR_OVERLAY " EOF sed -i "/^PORTDIR_OVERLAY=\"/a${TARGET}\/${PORTDATE}\/portage" ${TARGET}/make.conf export PAKG="${PAKG} portage/eclass" }
[[ -d "${TARGET}/${PORTDATE}" ]] || new_portdate #cd ${TARGET}/${PORTDATE}
tar -xvjpf ${PORTFILE} -C ${TARGET}/${PORTDATE} ${PAKG} Скрипт планирую доработать и "научить" распаковывать сразу несколько пакетов (приведённый здесь распаковывает только один пакет), но пока мне лень его переписывать, т.к. в целом я им доволен 8-) Теперь если мне нужно было, например, установить sys-devel/gcc-4.2.3 содержавшийся в архиве от 20080327 я распаковывал архив коммандой part-port.sh portage-20080327.tar.bz2 и было мне счастье =) Конфиг моей "коллекции раритетов" файл /usr/local/old_portage/make.conf : Code #ira-station:/usr/local/old_portage/make.conf список устаревших портэжей для включения в систему (по датам) PORTDIR_OVERLAY=" /usr/local/old_portage/20080706/portage /usr/local/old_portage/20081014/portage /usr/local/old_portage/20080530/portage /usr/local/old_portage/20081123/portage /usr/local/old_portage/20080327/portage /usr/local/old_portage/20081222/portage /usr/local/old_portage/20080628/portage $PORTDIR_OVERLAY "
Примечание: эта статья не дописана; я буду редактировать и дополнять её. Использовать осторожно и с пониманием!
Источник: http://lexus.at.ua/ |