[философия][ЖЖ] Использование 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 для обновления системы с

Enforcer написал(а):
Может не совсем в тему, но проблему скорости хорошо решает 4-ядерный проц. Идея есть, программного кода - нет. Вроде, подходит.

В нашем случае это кажись не поможет. В случае компиляции, да -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 еще чексуммы проверяет и т.п. Зачем? Если вы хотите обновлять только то, что поменялось:

   for package in $(eix -I -u --only-names); do
      mkdir $(qlist -d ${package} | 'sed s/^/\/mnt\/gentoo/') &>/dev/null
      cp -pRPd $(qlist -so ${package}) /mnt/gentoo/
   done

(извиняюсь за код, мне так проще).

З.Ы. Учитывая тему топика "Философия", можно предположить, что автор хочет сделать именно через portage... Ну, а еще люди пишут на brainfuck'e, но они хотя бы не удивляются потом, что программы получаются непонятные =). Это как реакции в небезъизвестном коллайдере на баше через bc просчитывать (хотя линуксы рабочие у них там под вмварями, так что все может быть =)).

Спасибо за совет.

Night Nord написал(а):
Эээ... Я конечно не буду спрашивать "А зачем? Не лучше ли юзать тогда бинарный дистр?", хотя очень интерестно...

Пару лет назад сделал LiveCD "DYSTRYK" в которого есть установки, вот и думаю как их обновить по изящнее...

Night Nord написал(а):
Не очень понял, что значит "по базах /var/db/portage".

Тупо заглядываю туда `ls` и решаю что надо доставить, а что удалить;)

Night Nord написал(а):
Я бы это делал eix -I -u --only-names - дешево и сердито.
Чтобы не делать по пять раз emerge --depclean, может проще вызвать emerge --depclean --with-bdeps=y (при учете, что вы ничего не компиляете - это ничего и не сломает)?
На новом портаже есть --jobs - это аналог -j, только на emerge целиком - поможет при emerge -k

Файлы, пакеты которые, вероятно стоит писать на винчестер, либо в ram (если ram достаточно большой) - это частично решит проблему скорости CD/DVD (но проблема чтения с оного останется, хотя можно скопировать squashfs на диск и примонтировать его оттуда).

Вообще - ваши действия _крайне_ странны. Зачем сначала архивировать пакеты, копировать их, а потом снова распаковывать. cp будет всегда быстрее. emerge еще чексуммы проверяет и т.п. Зачем? Если вы хотите обновлять только то, что поменялось:

   for package in $(eix -I -u --only-names); do
      mkdir $(qlist -d ${package} | 'sed s/^/\/mnt\/gentoo/') &>/dev/null
      cp -pRPd $(qlist -so ${package}) /mnt/gentoo/
   done

(извиняюсь за код, мне так проще).

Спасибо большое за совет, да, так будет в разы быстрее, завтра разберусь.

Night Nord написал(а):
З.Ы. Учитывая тему топика "Философия", можно предположить, что автор хочет сделать именно через portage... Ну, а еще люди пишут на brainfuck'e, но они хотя бы не удивляются потом, что программы получаются непонятные =). Это как реакции в небезъизвестном коллайдере на баше через bc просчитывать (хотя линуксы рабочие у них там под вмварями, так что все может быть =)).

Нет нет, через портедж было бы изящнее но ваше решение меня удовлетворит. Буду копировать только нужные файлы по /var/db/pkg/cetegory/name/CONTENTS без создания пакетов и их установки.

чтобы гарантированно не сломать работу портадж после обновления

Night Nord написал(а):
Вообще - ваши действия _крайне_ странны. Зачем сначала архивировать пакеты, копировать их, а потом снова распаковывать. cp будет всегда быстрее. emerge еще чексуммы проверяет и т.п. Зачем? Если вы хотите обновлять только то, что поменялось:

   for package in $(eix -I -u --only-names); do
      mkdir $(qlist -d ${package} | 'sed s/^/\/mnt\/gentoo/') &>/dev/null
      cp -pRPd $(qlist -so ${package}) /mnt/gentoo/
   done

Я давно думал об этом и через emerge -K устанавливал, а через emerge -C удалял пакеты чтобы гарантированно не сломать работу портадж после обновления. Установку пакетов попробую теперь сделать как вы советуете только добавлю ещё

cp -pRPd /var/db/pkg/${package} /mnt/gentoo/var/db/pkg/

/var/lib/portage/world заменю.

А вот удалять всё равно придётся emerge -C

Надеюсь так, теоретически, ничего сломаться не должно???

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".