Стратегия обновления дерева портежей
Давно меня мучил этот вопрос теоретически, а теперь столкнулся с ним практически :)
Ситуация такая. Решил я поставить Open Office. Сделал
emerge -pv openoffice.
Ага.Нужно качнуть ~210 Мб. Ладно, делаем
emerge -pf openoffice
Винт под мышку и на халявный (но тоже медленный, как и у меня дома) канал. Запускаем wget, а wget-то мне и говорит: - нет таких файлов (части из них). Блин... Смотрим на http://distfiles.gentoo.org/distfiles/ - действительно нет. Ладно.
Смотрим дома в /usr/portage/app-office/openoffice. Есть openoffice-2.0.0.ebuild - стабильный,
openoffice-2.0.1.ebuild - маскированный.
Идем на http://distfiles.gentoo.org/distfiles/, смотрим openoffice-2.0.1 - уже стабильный.
Блин... portage староват. Обновлял в конце декабря.
Ладно, пишем в /etc/portage/package.keywords строчку =app-office/openoffice-2.0.1 ~x86
делаем
emerge -pf openoffice
Винт под мышку и на халявный канал. Запускаю wget. Второй раз наступаю на те же грабли (не все файлы проверил, а только самые большие). Нет файла ooo-build-2.0.1.tar.gz. Смотрим на http://distfiles.gentoo.org/distfiles/ - действительно нет. Есть ooo-build-2.0.1.3.tar.gz, ooo-build-oob680.3.0.tar.gz и ooo-build-oob680.5.0.tar.gz. Приехали. Название ebuild-а тоже, а внутренности изменились :( От обновления дерева portage не отвертеться.
Тут возникает сразу ряд вопросов.
Можно ли обновить нужный мне openoffice-2.0.1.ebuild не трогая все дерево портежей? Я понимаю, что это может быть не совсем корректно, но все же.
Есть ли где развернутое (свежее) дерево портежей в инете? Желательно официальное.
Если я обновлю дерево портежей не попаду ли я в ситуацию, когда при установке очередного маленького пакета мне нужно будет переустановить кучу других, поскольку они будут уже не самые свежие из стабильных? Как этого избежать?
Какая наиболее оптимальная стратегия обновления дерева портежей с медленным каналом? Чтобы заниматься еще и работой, а не только качать пакеты и компилировать их :)
Хотелось бы и с елки слезть и задницу не ободрать :)
- Для комментирования войдите или зарегистрируйтесь
Ищи в инете google
В свое время я просто брал какой нибудь файл *.emerge из своего портежа и искал его в инете, рядом лежали новые =)
Кстати можно ведь обновить портежи, а сами программы позже.
Обновление можно делать патчами для ежедневных snapshot'ов
К примеру за март эти патчи в сумме 1 116 582 байт =)
Я каждое утро
Я каждое утро вместо зарядки и параллельно с завтраком пишу:
потом пишу:
и ухожу на работу.
За месяц набегает обычно метров триста-четыреста.
Re: Я каждое утро
В моем случае это удвоение объема трафика :(
Да и актуальность в полгода для софта меня вполне устраевает. Я, частично, придерживаюь принципа: "Не трогай технику и она тебя не подведет" :)
Гента нравится
Гента нравится тем что обновляется легко. Надысь со знакомым поднимали сервак с релиза 2004.1 до последнего. С бубном поплясали, но не долго. Руками распаковали последний портеж, затем его же проинсталлировали как положено (контрольный выстрел в лоб) - пошла за милую душу. После перезагрузки (ядро все же) с полчаса ковыряли файлики (игра найди отличия). Все.
Домашнюю и рабочую машинку обновляю так. При установке новой софтинки лезу на kemsu.org. Там более менее свежее дерево по фтп. Тяну ветку. Затем емерге. Ежели ругаются зависимости - тяну ветки зависимостей. Когда надоедает синхронизирую дерево (где то раз в полгода). Пересборка мира не чаще 1 раза в год. Траффика минимум (монстров типа кде убрал), дельтап рулит.
ЗЫ.
Ежедневное обновление боевой машинки считаю делом нецелесообразным несмотря на легкость самого процесса. Вероятно из за субъективного понимания определения "Стабильность".
Re: Гента нравится
kemsu.org - че-то не находится даже ping-ом :(
ftp://ftp.org.kemsu.ru/gentoo/
Упс :). За кривую ссылку мои извинения.
Re: Гента нравится
Это все еще актуально? Дело в том, что я дерево вынес за пределы фтп. И только сейчас наткнулся на эту ветку. Вернуть?
--
Администратор org.kemsu
А как эти патчи
А как эти патчи накатывать? Я что-то не понял.
Читай мой пост.
Читай мой пост. Там всё написано.
Я неправлиьно
Я неправлиьно выразился. Мне нужно руками чтоб обновлялось. На машине где стоит linux нет инета и приходиться всё на дисках на неё носить.
Re: Я неправлиьно
Я нашел два способа при помощи emerge-delta-webrsync-3.3,
но оба требуют внести небольшие изменения в emerge-delta-webrsync
скрипт.
1.
Тарбол дерева портежей, md5sum файлы и umd5sum файлы к нему и
ко всем тарболам портежей до которых будем патчить складываем
в /usr/portage/distfiles/ (взяты с {GENTOO_MIRROR}/snapshots/).
Туда же складываем snapshot patch файлы и md5sum файлы к ним
(взяты с {GENTOO_MIRROR}/snapshots/deltas).
Теперь, в emerge-delta-webrsync находим строку
if ! fetch_from_mirrors "/snapshots/portage-${final_date}.tar.bz2.umd5sum" "portage-${final_date}.tar.bz2.umd5sum"; then
и заменяем ее на строку
if [[ ! -e portage-${final_date}.tar.bz2.umd5sum ]] && ! fetch_from_mirrors "/snapshots/portage-${final_date}.tar.bz2.umd5sum" "portage-${final_date}.tar.bz2.umd5sum"; then
Можно еще заменить строку
mv "${DISTDIR}/portage-${final_date}.tar.bz2.umd5sum" "${TEMPDIR}/portage-${final_date}.tar.bz2" ${STATE_DIR}/
на
cp "${DISTDIR}/portage-${final_date}.tar.bz2.umd5sum" ${STATE_DIR}/
mv "${TEMPDIR}/portage-${final_date}.tar.bz2" ${STATE_DIR}/
чтобы файл portage-xxxxxx.tar.bz2.umd5sum не перемещался из каталога
/usr/portage/distfiles/
Запускаем
emerge-delta-webrsync -k
ждем...
В каталоге /var/delta-webrsync должен быть результат, а локальное дерево
синхронизировано
2.
Устанавливаем локальный ftp сервер (например vsftpd). Создаем на нем
структуру каталогов как на зеркалах и копируем нужные нам файлы (см п.1).
Теперь, в emerge-delta-webrsync находим строку
if [[ ! -e ${p}.md5sum ]] && ! fetch_from_mirrors "/snapshot-deltas/${p}.md5sum" "${p}.md5sum" ${ALT_MIRROR}; then
и заменяем ее на строку
if [[ ! -e ${p}.md5sum ]] && ! fetch_from_mirrors "/snapshots/deltas/${p}.md5sum" "${p}.md5sum" ${GENTOO_MIRRORS}; then
находим строку
if ! fetch_from_mirrors "/snapshot-deltas/${p}" "${p}" ${ALT_MIRROR}; then
и заменяем ее на строку
if ! fetch_from_mirrors "/snapshots/deltas/${p}" "${p}" ${GENTOO_MIRRORS}; then
Запускаем
GENTOO_MIRRORS="ftp://127.0.0.1" emerge-delta-webrsync -k
ждем...
В каталоге /var/delta-webrsync должен быть результат, а локальное дерево
синхронизировано. Возможно нужно будет запустить два раза.
Если не нужно, чтобы локальное дерево портежей было синхронизировано с
со свежим snapshot-ом, а нужно поддерживать только актуальность snapshot-а,
то я добавил ключ --patch-only, который препятствует синхронизации локального
дерева.
Находим фрагмент
MUST_SYNC='1'
unset PUKE_HELP
for x in $*; do
if [[ $x == "-u" ]]; then
MUST_SYNC=''
elif [[ $x == "-k" ]]; then
KEEP_OLDIES='asdf'
elif [[ $x == "-h" ]]; then
PUKE_HELP=1
else
PUKE_HELP=1
echo "$x isn't a valid arg. bailing."
fi
if [[ -n $PUKE_HELP ]]; then
echo "-u for upgrade; sync only if new snapshots are found"
echo "-k for keep; keep old tree snapshots around"
exit -1
fi
done
и заменяем на
MUST_SYNC='1'
SYNC_SYNC='1'
unset PUKE_HELP
for x in $*; do
if [[ $x == "-u" ]]; then
MUST_SYNC=''
elif [[ $x == "-k" ]]; then
KEEP_OLDIES='asdf'
elif [[ $x == "--patch-only" ]]; then
SYNC_SYNC=''
elif [[ $x == "-h" ]]; then
PUKE_HELP=1
else
PUKE_HELP=1
echo "$x isn't a valid arg. bailing."
fi
if [[ -n $PUKE_HELP ]]; then
echo "-u for upgrade; sync only if new snapshots are found"
echo "-k for keep; keep old tree snapshots around"
exit -1
fi
done
находим фрагмент
sync_local() {
local FILE flags
FILE="$1"
if [ "${FILE/\/}" == "${FILE}" ]; then
FILE="${DISTDIR}/${FILE}";
fi
и заменяем на
sync_local() {
local FILE flags
FILE="$1"
[[ -z $SYNC_SYNC ]] && return 0
if [ "${FILE/\/}" == "${FILE}" ]; then
FILE="${DISTDIR}/${FILE}";
fi
Запускаем
emerge-delta-webrsync -k --patch-only
Можно еще поменять строку
wgetops="-q"
на
wgetops="-v"
Это я где-то в wiki находил.
ЕМ
Через deltup`ом
Через deltup`ом сделать нельзя? У меня просто только несколько патчей выкаченно.
Re: Через deltup`ом
Вот тут не смогу помочь. deltup`ом еще не пользовался.
Могу посоветовать сделать снова тарбол портежей (/usr/portage без distfiles), если ты там ничего не менял, перед этим проверив на md5 (та каторая, portage-xxxxxxxx.tar.bz2.umd5sum, т.е. для распакованного портежа), точно вспомнить, какому snapshot-у он соответствует (можно уточнить через, опять же portage-xxxxxxxx.tar.bz2.umd5sum), а дальше emerge-delta-webrsync.
Кстати, я не понимаю, а как ты без тарбола портежей с помощью только одних патчей собрался патчить портеж? Патчить-то что будешь?
Сам тарбол
Сам тарбол есть. Такое впечатление что что-то несрастается в emerge-del-webrsync. :-(
Тем более что у меня нет новых snapshot`ов.
Вобщем взял я в руки patcher и ручками, ручками... :-(
Re: Сам тарбол
Погоди.
Если ты пользуешся emerge-delta-webrsync-3.3 "из коробки" и если ты подключен к инету, то при наличии тарбола snapshot`а в /usr/portagt/disfiles emerge-delta-webrsync попытается получить из инета все недостающие файлы до настоящего времени, создаст в /var/delta-webrsync самый новый snapshot и _синхронизирует_ с ним локальное дерево портежей.
От синхронизации можно отказаться, поправив emerge-delta-webrsync-3.3 как я описал (ключ ----patch-only). Это полезно, как минимум для экспериментов с emerge-delta-webrsync.
Если о тебя нет инета, то emerge-delta-webrsync-3.3 "из коробки" работать не будет.
Я выше описал два способа как это можно сделать без инета, но для этого нужно поправить emerge-delta-webrsync-3.3.
У тебя должен быть тарбол snapshot`а на определенную календарную дату.
У тебя должены быть md5sum файлы и umd5sum файлы к тарболу snapshot`а и ко _всем_ тарболам snapshot`ов портежей до которых будем патчить
У тебя должна быть непрерывная последовательность тарболов ратчей до нужного тебе snapshot`а и md5sum файлы к ним.
Все это должно быть в /usr/portagt/disfiles
Кстати, у тебя могут быть проблемы с правами доступа. Правда у меня все работает из под обычного пользователя, но он входит в группы portage и wheel. Возможно нужно подправить права доступа для файлов снапшотов.
На каком этапе у тебя все затыкается?
EM
Я подправил
Я подправил emerge-delta-webrsync. У меня не все snapshot`ы. :-(
Ему как-то можно сказать что нужно править до определённой даты? Перевод времени непомог....
Re: Я подправил
Не все - это какие? Приведи полный список того что у тебя есть.
Насколько я помню, emerge-delta-webrsync упрется в первый же отсутствующий и будет работать с тем, что есть (все неполные "комплекты" лучше убрать. чтобы он не путался). Работает он довольно долго. Может быть ты завершения работы не дождался?
По какому варианту ты запускал (с локальным ftp или без)?
У emerge-delta-webrsync ограничение на 40 дней назад, но это можно поправить.
EM
Вот вчера
Вот вчера проверил:
Имеем в /usr/portage/distfiles
portage-20060309.tar.bz2
portage-20060309.tar.bz2.md5sum
portage-20060309.tar.bz2.umd5sum
portage-20060310.tar.bz2.md5sum
portage-20060310.tar.bz2.umd5sum
snapshot-20060309-20060310.patch.bz2
snapshot-20060309-20060310.patch.bz2.md5sum
Имеем в /var/delta-webrsync
пусто
Выполняем
emerge-delta-webrsync -k --patch-only
Вывод программы в консоль
Looking for available base versions for a delta
fetching patches
--15:28:46-- http://distfiles.gentoo.org//snapshots/deltas/snapshot-20060310-20060311.patch.bz2.md5sum
=> `/usr/portage/distfiles/snapshot-20060310-20060311.patch.bz2.md5sum'
Распознаётся proxy.utk.ru...
Устанавливается соединение с proxy.utk.ru:3128... сбой: Network is unreachable.
--15:28:46-- http://distro.ibiblio.org/pub/linux/distributions/gentoo//snapshots/deltas/snapshot-20060310-20060311.patch.bz2.md5sum
=> `/usr/portage/distfiles/snapshot-20060310-20060311.patch.bz2.md5sum'
Распознаётся proxy.utk.ru...
Устанавливается соединение с proxy.utk.ru:3128... сбой: Network is unreachable.
failed fetching snapshot-20060310-20060311.patch.bz2.md5sum
patch_fh size=114503
patch_type=8
verbosity level(1)
src_fh size=23708545
disabling bufferless, patch_count(1) == 1 || forced_reorder(1)
size1=222238720, size2=222402560
reconstruction return=0, commands=12280
result was 12280 commands
versions size is 222402560
applied 1 patches
reordering commands? 1
reconstructing target file based off of dcbuff commands...
collapsing
processing src 0: 7492 commands.
processing src 1: 4788 commands.
reconstruction completed successfully
verifying uncompressed md5
recompressing. (backgrounding)
beginning update to the tree
doing final md5 stuff
/tmp/delta-webrsync-l6xxzy/portage-20060310.tar: 9.375:1, 0.853 bits/byte, 89.33% saved, 222402560 in, 23722510 out.
verifying generated tarball
compressed md5 differs, but uncompressed md5 says it right. bzip2 version incompatability in other words
saving the md5
done.
Имеем в /var/delta-webrsync
portage-20060310.tar.bz2
portage-20060310.tar.bz2.md5sum
portage-20060310.tar.bz2.umd5sum
emerge-delta-webrsync -k
emerge-delta-webrsync -k --patch-only
Пишет --patch-only isn`t a valid arg. bailing
Обязательно иметь файлы
portage-20060310.tar.bz2.md5sum
portage-20060310.tar.bz2.umd5sum
?
Их уже нет на зеркалах.
Re: emerge-delta-webrsync -k
Какая версия emerge-delta-webrsync?
Ты вот эти исправления сделал?
---------------------------------------------------------------------
Если не нужно, чтобы локальное дерево портежей было синхронизировано с
со свежим snapshot-ом, а нужно поддерживать только актуальность snapshot-а,
то я добавил ключ --patch-only, который препятствует синхронизации локального
дерева.
Находим фрагмент
MUST_SYNC='1'
unset PUKE_HELP
for x in $*; do
if [[ $x == "-u" ]]; then
MUST_SYNC=''
elif [[ $x == "-k" ]]; then
KEEP_OLDIES='asdf'
elif [[ $x == "-h" ]]; then
PUKE_HELP=1
else
PUKE_HELP=1
echo "$x isn't a valid arg. bailing."
fi
if [[ -n $PUKE_HELP ]]; then
echo "-u for upgrade; sync only if new snapshots are found"
echo "-k for keep; keep old tree snapshots around"
exit -1
fi
done
и заменяем на
MUST_SYNC='1'
SYNC_SYNC='1'
unset PUKE_HELP
for x in $*; do
if [[ $x == "-u" ]]; then
MUST_SYNC=''
elif [[ $x == "-k" ]]; then
KEEP_OLDIES='asdf'
elif [[ $x == "--patch-only" ]]; then
SYNC_SYNC=''
elif [[ $x == "-h" ]]; then
PUKE_HELP=1
else
PUKE_HELP=1
echo "$x isn't a valid arg. bailing."
fi
if [[ -n $PUKE_HELP ]]; then
echo "-u for upgrade; sync only if new snapshots are found"
echo "-k for keep; keep old tree snapshots around"
exit -1
fi
done
находим фрагмент
sync_local() {
local FILE flags
FILE="$1"
if [ "${FILE/\/}" == "${FILE}" ]; then
FILE="${DISTDIR}/${FILE}";
fi
и заменяем на
sync_local() {
local FILE flags
FILE="$1"
[[ -z $SYNC_SYNC ]] && return 0
if [ "${FILE/\/}" == "${FILE}" ]; then
FILE="${DISTDIR}/${FILE}";
fi
Запускаем
emerge-delta-webrsync -k --patch-only
Можно еще поменять строку
wgetops="-q"
на
wgetops="-v"
Это я где-то в wiki находил
---------------------------------------------------------------------
Если для описанного выше примера, да.
Я же написал.
--------------------------------------------------------------------
У тебя должены быть md5sum файлы и umd5sum файлы к тарболу snapshot`а и ко _всем_ тарболам snapshot`ов портежей до которых будем патчить
У тебя должна быть непрерывная последовательность тарболов ратчей до нужного тебе snapshot`а и md5sum файлы к ним.
---------------------------------------------------------------------
Может я не совсем ясно выразился.
У тебя должены быть md5sum файлы и umd5sum файлы к тарболу snapshot`а и ко _всем_ тарболам snapshot`ов портежей _через_ которые будем патчить. Т.е. фактически все файлы из каталогов snapshots и snapshots/deltas кроме самих тарболов портежей за нужный тебе период. Ну и самый первый тарбол портежей, который ты собственно патчишь.
Ты приведи список файлов который у тебя есть. Я скажу каких не хватает.
Вообще-то неисправленный emerge-delta-webrsync обращается не к зеркалам, а вот сюда http://egret.gentoo.org/~gpatches/, там есть umd5sum. md5sum там тоже нет, но они впринципе не нужны, поскольку наверняка не совпадут. Вместо них можно какое-нибудь фуфло подставить.
Да хоть переимянованные umd5sum.
EM
трабла c emerge-delta-webrsync
у меня случается вот такая фигня:
#emerge-delta-webrsync
....
patch_type=8
patch_fh size=153708
.........
verbosity level(1)
src_fh size=22597458
disabling bufferless, patch_count(62) == 1 || forced_reorder(1)
size1=214056960, size2=214128640
reconstruction return=0, commands=10229
result was 10229 commands
versions size is 214128640
......
applied 62 patches
reordering commands? 1
reconstructing target file based off of dcbuff commands...
collapsing
processing src 0: 0 commands.
processing src 1: 6916 commands.
processing src 2: 544979 commands.
apply-patch.c: x=8265, pos=213987255, len=8403
apply-patch.c: bailing, io_error 2
error detected in patcher.c:325
reconstructFile: io/bus error, exiting
error detected while reconstructing file, quitting
reconstruction failed (contact the author with the error from the reconstructor please)
Fetching most recent snapshot
.....
чё мне делать?
(версия emerge-delta-webrsync - 3.5.1 , хотя на 3.3 случалась такая-же лажа)
Re: Ищи в инете google
В смысле *.ebuild Хм... Наверно это выход.
Обновление дерева портежей вобщем-то не проблема. Просто меня пугает перспектива возникновения цепной реакции обновления при установке малозначительного пакета.
Re: Стратегия обновления дерева пор
возможно у меня завалялись файлики, которые ты не смог найти.
Скажи их название, лучше не обновляй пока портежи, раз файлы найдуться, дешевле выйдет.
Re: Стратегия обновления дерева пор
Спасибо большое, но я уже действую по методу wi.