[философия][ЖЖ] Использование portage для обновления системы с LiveCD
Вопрос сложный, для Дженто гуру.
(Меня интересуют идеи, а не программный код.)
Имею обычную Дженто систему способную работать с жесткого диска и КД/ДВД, также есть два скрипта, один делает с системы установленной локально ISO образ для LiveCD/DVD; другой устанавливает систему с LiveCD/DVD на локальный диск. А хочется ещё иметь скрипт который будет обновлять прежде установленную с LiveCD/DVD локально систему с новой версии LiveCD/DVD.
Попытка есть здесь: updateHDDfromLiveCD.sh
Проблема: оно работает о-о-о-очень медленно ~10 часов для ~1000 новых пакетов и не всегда удачно (переход kde -> kde-meta, есть и другие моменты).
Если коротко, делаю это так:
1. По базах /var/db/pkg определяю какие пакеты обновить, какие доставить и какие удалить.
2. Делаю chroot в LiveCD/DVD и с помощью
quickpkg --include-config=y =пакет-версия
создаю все нужные тарболы.
3. Устанавливаю в обновляемой системе все созданные тарболы и удаляю ненужные пакеты.
Пункты 2 и 3 выполняются много часов, к томуже 3 фактически имеет кучу лишних команд обходящих баги самого portage & emerge и не гарантирует успех... ибо как показывает практика использования классических инструментов обновления Дженты, последовательности команд:
обновляю портадж, /etc/portage, /etc/make.conf, /var/lib/portage/world emerge -uDNK world emerge --depclean revdep-rebuild
не достаточно из-за недоделок самого portage и `emerge -uDNK world`
По этому делаю так (строки 247-309):
обновляю портадж 257 создаю список обновляемых пакетов по базах /var/db/pkg 262 обновляю /var/lib/portage/world 263 emerge --depclean 265 обновляю /etc/portage, /etc/make.conf 268 принудительно удаляю ненужное что осталось после emerge --depclean 272 делаю ещё раз emerge --depclean 275 принудительно устанавливаю все новые пакеты и обновления старых по базах /var/db/pkg 286 ещё раз создаю список обновляемых пакетов по базах /var/db/pkg 287 ещё раз принудительно устанавливаю все новые пакеты и обновления старых по базах /var/db/pkg 291 emaint -c all 293 принудительно устанавливаю все новые пакеты и обновления старых по emerge -uDN world 297 emerge --depclean 309 принудительно устанавливаю все новые пакеты и обновления старых по revdep-rebuild
Вопросы:
А. Что можно посоветовать по ускорению 2 и 3 (Ибо намного быстрее переустановить всё с нуля с LiveCD чем пользоваться этим скриптом по обновлению...)
Б. Что можно посоветовать по самому п. 3 (может я давно маны не курил и новые проги пропустил, полезные в этом случае...)
- Для комментирования войдите или зарегистрируйтесь
[философия][ЖЖ] Использование portage для обновления системы с L
Все выше перечисленные траблы появляются тогда когда обновляется система примерно годичной давности тоесть с разными версиями портеджа и что более важно с разными взаимо исключающими пакетами, тоесть когда стандартно emerge -uDN world останавливается и выводит список блокированых пакетов, которые надо удалять вручную. При обновлении системы парумесячной давности с одинаковой компоновкой пакетов даных проблем нет. Но время обновления медленно всё равно...
Может не совсем
Может не совсем в тему, но проблему скорости хорошо решает 4-ядерный проц. Идея есть, программного кода - нет. Вроде, подходит.
[философия][ЖЖ] Использование portage для обновления системы с
В нашем случае это кажись не поможет. В случае компиляции, да -j5 распараллелит и ускорит сборку. А вот как распараллелить работу `quickpkg` или `emerge -K`?
Тормоза quickpkg также связаны с тем что он, в данном случае, работает с DVD, а не с винта...
distcc
distcc
distcc
А я ничего не компилирую, а устанавливаю БИНАРНЫЕ пакеты которые налету создаю `quicpkg` на основе LiveDVD. В этом случае ни одно кластерное решение скорости не увеличит, ибо данные считываются с одного физического DVD. Так что работу `quicpkg` пожалуй не увеличить, разве что оптимизировать саму утилиту. emerge -K тоже обращается к одному физическому диску и ставить параллельно несколько пакетов врятли повысит производительность.
Проигрыш в скорости при обновлении таким способом по отношению к установки простым `cp -pRPd` составляет примерно 7 раз. То есть в абсолютных числах когда простая установка с DVD длится 1 час, то по пакетна установка, с созданием пакетов с помощью quicpkg и потом их установка emerge -K длится 7 часов......
Эээ... Я конечно
Эээ... Я конечно не буду спрашивать "А зачем? Не лучше ли юзать тогда бинарный дистр?", хотя очень интерестно...
Не очень понял, что значит "по базах /var/db/portage". Я бы это делал eix -I -u --only-names - дешево и сердито.
Чтобы не делать по пять раз emerge --depclean, может проще вызвать emerge --depclean --with-bdeps=y (при учете, что вы ничего не компиляете - это ничего и не сломает)?
На новом портаже есть --jobs - это аналог -j, только на emerge целиком - поможет при emerge -k
Файлы, пакеты которые, вероятно стоит писать на винчестер, либо в ram (если ram достаточно большой) - это частично решит проблему скорости CD/DVD (но проблема чтения с оного останется, хотя можно скопировать squashfs на диск и примонтировать его оттуда).
Вообще - ваши действия _крайне_ странны. Зачем сначала архивировать пакеты, копировать их, а потом снова распаковывать. cp будет всегда быстрее. emerge еще чексуммы проверяет и т.п. Зачем? Если вы хотите обновлять только то, что поменялось:
(извиняюсь за код, мне так проще).
З.Ы. Учитывая тему топика "Философия", можно предположить, что автор хочет сделать именно через portage... Ну, а еще люди пишут на brainfuck'e, но они хотя бы не удивляются потом, что программы получаются непонятные =). Это как реакции в небезъизвестном коллайдере на баше через bc просчитывать (хотя линуксы рабочие у них там под вмварями, так что все может быть =)).
Спасибо за совет.
Пару лет назад сделал LiveCD "DYSTRYK" в которого есть установки, вот и думаю как их обновить по изящнее...
Тупо заглядываю туда `ls` и решаю что надо доставить, а что удалить;)
Спасибо большое за совет, да, так будет в разы быстрее, завтра разберусь.
Нет нет, через портедж было бы изящнее но ваше решение меня удовлетворит. Буду копировать только нужные файлы по /var/db/pkg/cetegory/name/CONTENTS без создания пакетов и их установки.
чтобы гарантированно не сломать работу портадж после обновления
Я давно думал об этом и через emerge -K устанавливал, а через emerge -C удалял пакеты чтобы гарантированно не сломать работу портадж после обновления. Установку пакетов попробую теперь сделать как вы советуете только добавлю ещё
cp -pRPd /var/db/pkg/${package} /mnt/gentoo/var/db/pkg/
/var/lib/portage/world заменю.
А вот удалять всё равно придётся emerge -C
Надеюсь так, теоретически, ничего сломаться не должно???