Облегчаем liveCD и scratch-режим, или шаблоны делающие жизнь хуже ;-)

Привет всем

На данный момент среди шаблонов есть несколько с очень странным поведением. и ни как не соответствующие своему названию,

первый набор шаблонов это smplayer/icons-update

вот все они для всех версий утилит

 # find $(find /var/lib/layman/calculate/profiles/templates/ -name icons-update | xargs -n1 dirname ) -type f| xargs -n1 -iFF sh -c "echo -e '\n####\tFF'; cat FF"

####    /var/lib/layman/calculate/profiles/templates/3.1/1_ac_install_merge/smplayer/icons-update
 # Calculate exec=/bin/bash ac_install_disk==off path=/tmp name=icons-update.sh

echo "Updating icon cache"
for i in /usr/share/icons/*;do  gtk-update-icon-cache -ft $i &>/dev/null; done

####    /var/lib/layman/calculate/profiles/templates/3.1/1_ac_install_merge/smplayer/.calculate_directory
 # Calculate append=skip merge()!=&&ac_install_disk==off&&pkg(x11-libs/gtk+)!=

####    /var/lib/layman/calculate/profiles/templates/3.1-beta/4_ac_install_live/1-live/smplayer/icons-update
 # Calculate exec=/bin/bash path=/tmp name=icons-update.sh

for i in /usr/share/icons/*;do  gtk-update-icon-cache -ft $i &>/dev/null; done

####    /var/lib/layman/calculate/profiles/templates/3.1-beta/4_ac_install_live/1-live/smplayer/.calculate_directory
 # Calculate append=skip belong()!=&&ac_install_system!=up&&pkg(x11-libs/gtk+)!=

####    /var/lib/layman/calculate/profiles/templates/3.0/install/1live/smplayer/icons-update
 # Calculate exec=/bin/bash path=/tmp name=icons-update.sh

for i in /usr/share/icons/*;do  gtk-update-icon-cache -ft $i &>/dev/null; done

####    /var/lib/layman/calculate/profiles/templates/3.0/install/1live/smplayer/.calculate_directory
 # Calculate append=skip belong()!=&&ac_install_system!=up&&pkg(x11-libs/gtk+)!=

Даже не знаю с чего начать вопросы о них, просто перечислю:

  • одни и те же действия выполняются дважды 1_ac_install_merge и 4_ac_install_live
  • название (1live/smplayer) не соответствует охватываемым файлам /usr/share/icons/*
  • для чего вообще это надо? Updating icon cache, у себя я отключил это, и все прекрасно отображается
  • допустим smplayer нормально не регистрирует свои иконки, но тогда разве это не повод писать в гентушный багтрекер?
  • эти шаблоны отрабатывают на системе где ВООБЩЕ НЕТ smplayer-а
  • они отрабатывают при загрузке с liveCD. ЗАЧЕМ?
    тем самым система с самого начала <<отжирает на @tmpfs@ лишние 170MB>>

Скорее всего - этот шаблон остался от каких-то старых шаблонов, явно делавших что-то очень важное, но теперь он потерял всякий смысл, имхо. Предлагаю удалить его.

4_ac_install_live/1-live/00-calculate-install

Из ряда в общем-то полезных при любой загрузке шаблонов выбивается один - prepare-scratch

 # Calculate exec=/bin/bash os_install_scratch==on path=/tmp

find #-cl_chroot_path-#/boot -exec touch {} \; &>/dev/null
find #-cl_chroot_path-#/lib* -maxdepth 1 -name "ld*so" -exec touch {} \; &>/dev/null
find #-cl_chroot_path-#/usr/share/grub -exec touch {} \; &>/dev/null
find #-cl_chroot_grub-#/workspace -maxdepth 1 -regextype posix-egrep -regex ".*(bin|lib.*|etc|usr|var|opt|boot)$" |
while read line;do
    linkname="workspace/`basename $line`"
    [[ -L ${linkname} ]] || ln -sf ${linkname} #-cl_chroot_grub-#/`basename $line`
done &>/dev/null

* <<Этот скрипт отрабатывает в том числе и при загрузке с LiveCD>>. В этом случае пользы от него никакой. А вред - <<лишние 20-60MB памяти расходуются>> непонятно на что

* Идем дальше, по поводу первой строки - это понятно.
В случае scratch-установки, до старта этого скрипта /boot оказывается лишь в livecd.squashfs, соответственно системе грузиться будет несчего, соответственно touch на aufs workspace=rw заставит скопировать в него файлы из squash-архива

* find /usr/share/grub - тоже понять можно, хотя наверно хватило бы лишь шрифтов:
find /usr/share/grub -name '*.fb2' ......

* А вот модули тут совсем ни к чему. Ну действительно, сборка корня происходит еще из initramfs

 grep 'mount -t aufs' /usr/share/genkernel/defaults/linuxrc 
                                                                if mount -t aufs -o ro,udba=reval,br:${NEW_ROOT}/workspace=rw:${NEW_ROOT}/delta=ro+wh:${NEW_ROOT}/calculate=ro none /union;
                                                                        mount -t aufs -o ro,udba=reval,br:${NEW_ROOT}/delta=rw:${NEW_ROOT}/calculate=ro none /union/mnt/builder

и chroot происходит в уже смонтированный aufs-пирог. Так что и эта строка тут ник чему(<<минус ~50MB>>)

  • смысл последнего шаманства, если честно, вообще - сложно укладывается в моей голове
    возможно это действо (вкупе с /lib) нужно чтоб можно было загрузить систему и без initramfs, голым ядром, этакий fallback-режим в котором монтирование aufs не происходит.
    Но почему тогда не разделить эти пути по смыслу?
    Директории bin, lib, usr и opt зацепить через /delta, а в /workspace оставить лишь etc, var и можно boot.
    Дело в том, что при внесении серьезных изменений в систему в cl-builder, работать становится невозможно
    вот представьте себе, я обновляю систему, ставлю новые пакеты
    и после этого у меня в системе присутствует каша из старых модулей(сохранившихся в workspace) и новых утилит, требующих новых версий либ.
    И если имена файлов старых и новых пакетов пересекаются, видны будут старые
    Особенно приятно будет так поломать openrc :wink:
    Если же перенаправить ссылки на bin, lib, usr в /delta, то все файлы нормально смогут обновиться

А можно вообще /livecd.squashfs и /boot из iso-шки распаковывать не в корень партиции, а в директорию / #-os_install_linux_shortname-#-#-os_linux_build-#-#-os_install_arch_machine-# и вынести squash и delta в корень симлинками, подобно тому, как я описал это тут
тогда для fallbask-а не надо будет копировать /lib, или вообще загружать систему из /boot/{vmlinuz,initrd} и livecd.squashfs отдельным пунктом в меню grub.cfg в режиме LiveCD

/etc/init.d/calculate

Тут я хочу поговорить не о шаблоне, а о загрузочном скрипте.
Для чего в нем в режиме LiceCD понадобилось закидывать кучу файлов в tmpfs - я понять не могу

tail -n+138 /etc/init.d/calculate| head -n6
        local roottype=`variable_value main.os_root_type`
        if [[ $roottype == "livecd" ]]
        then
                touch /* /bin/* /sbin/*
                udevadm trigger --action="add" --subsystem-match=net
        fi

Я уже поднимал этот вопрос тут http://www.calculate-linux.ru/issues/515
Но пока ответа нет.
Если это из той же оперы откуда и prepare-scratch, то при чем тут $roottype == "livecd"
И вообще(если считать, что это все-же касается не livecd), уж лучше тогда “трогать” то же самое, но в /mnt/builder(а в livecd вообще ничего такого трогать не надо)
Из своего опыта скажу - это действие лишь утяжеляет livecd в вопросе потребления памяти (и вообще - глупо если используется опция ядра docache) и негативно сказывается на общем имидже livecd. Это из того что я заметил.

Заключение

При помощи аккуратных костылей Тем или иным образом, но у себя я отключил выполнение вышеописанных действий, не выпиливая эти шаблоны из оверлея (не люблю делать несовместимые решения), на “LiveCD over pxe”(если можно так сказать)
несмотря на то, что lan гораздо медленнее, чем usb-flash или хард, тем не менее, когда ядро САМО начало выбирать что кешировать а что нет - ПРОИЗВОДИТЕЛЬНОСТЬ ПОВЫСИЛАСЬ
PROFIT

Даже не знаю с чего начать вопросы о них, просто перечислю:
одни и те же действия выполняются дважды 1_ac_install_merge и 4_ac_install_live

Шаблоны находятся в разных ветках 3.1 и 3.1-beta - дважды не выполняются.

название (1live/smplayer) не соответствует охватываемым файлам /usr/share/icons/*

1live/smplayer означает настройка пакета smplayer в “живой” системе, иконка принадлежит smplayer.

для чего вообще это надо? Updating icon cache, у себя я отключил это, и все прекрасно отображается
допустим smplayer нормально не регистрирует свои иконки, но тогда разве это не повод писать в гентушный багтрекер?

Иногда закрытия баги приходится ждать долго, поэтому нужного результата достигаем при помощи шаблонов.

эти шаблоны отрабатывают на системе где ВООБЩЕ НЕТ smplayer-а
они отрабатывают при загрузке с liveCD. ЗАЧЕМ?
тем самым система с самого начала отжирает на tmpfs лишние 170MB

Сейчас - незачем, раньше было правило использовать выполняемые шаблоны только в ветке live. В 3.1.1 УЖЕ перенесено в ветку merge, поэтому перегенерация будет производиться при сборке.

00-calculate-install

Этот скрипт отрабатывает в том числе и при загрузке с LiveCD.

Да Вы правы, скрипт похоже должен отрабатывать только при установке в builder режиме - поправим. Он настраивает систему для нормального прописывания grub2.

смысл последнего шаманства, если честно, вообще - сложно укладывается в моей голове

Ищутся каталоги в workspace и делаются на них симлинк в корне раздела, то есть в корне находятся 3 каталога builder: calculate,delta,workspace и симлинки в workspace для того, чтобы grub2 находил нужные ему компоненты, к сожалению и os-prober и утилиты grub2 не используют aufs.

Директории bin, lib, usr и opt зацепить через /delta, а в /workspace оставить лишь etc, var и можно boot.

Проблему понял - возможно при установке будем часть симлинков делать в /delta.

Для чего в нем в режиме LiceCD понадобилось закидывать кучу файлов в tmpfs - я понять не могу

Действие на самом деле нужно для PXE загрузки к scratch оно не относится (для всех liveCD не нужно - поправим): при передёргивании сетевого интерфейса иногда система не успевает запустить необходимые утилиты, и система подвисает на загрузке.

Иногда закрытия баги приходится ждать долго, поэтому нужного результата достигаем при помощи шаблонов.

Ну так есть же свой оверлей, благо и ebuild особо изменять не надо
почему бы не сделать так(пока это изменение в апстрим не примут)

--- /usr/portage/media-video/smplayer/smplayer-0.8.1.ebuild     2012-11-16 22:49:10.719565074 +0200
+++ var/calculate/overlay/local/media-video/smplayer/smplayer-0.8.1.ebuild      2012-11-26 12:27:52.924851040 +0200
@@ -7,7 +7,7 @@
 ku lt mk nl pl pt pt_BR ro_RO ru_RU sk sl_SI sr sv tr uk_UA vi_VN zh_CN zh_TW"
 PLOCALE_BACKUP="en_US"

-inherit eutils l10n qt4-r2
+inherit eutils l10n qt4-r2 gnome2-utils

 MY_PV=${PV##*_p}
 if [[ "${MY_PV}" != "${PV}" ]]; then
@@ -81,3 +81,7 @@

        emake DESTDIR="${D}" install
 }
+
+pkg_preinst() { gnome2_icon_savelist; }
+pkg_postinst() { gnome2_icon_cache_update; }
+pkg_postrm() { gnome2_icon_cache_update; }

Само собой, еще надо ${FILESDIR} скопировать
у меня на gnome2 с измененным ebuild-ом все иконки регистрируются корректно.
в случае если gtk+ не установлен (на CLD к примеру) - просто в debug появится сообщение о том, что “/usr/bin/gconftool-2 is not executable”

В общем - измените плз 00-calculate-install, чтоб он выполнялся лишь там где надо

Уберите из /etc/init.d/calculate это ненужное действие. А для liveCD и pxe-загрузки это точно не нужно, а там где оно МОЖЕТ нужно (в scratch-инсталляции) оно все равно не выполняется.

и создайте у себя в оверлее мой вариант smplayer-0.8.1.ebuild (а заодно - для приличия проверьте, чтоб сборка в CLD с этими изменениями проходила без проблем, я в общем уверен, что все будет ОК, но перестраховаться не мешает) чтоб можно было отказаться от глюкавого шаблона

Михаил Гагауз wrote:

Ну так есть же свой оверлей, благо и ebuild особо изменять не надо
почему бы не сделать так

Зачем делать копию ебилда с потрохами, если это могут сделать шаблоны? в ветке merge они не будут выполняться при загрузке

Уберите из /etc/init.d/calculate это ненужное действие. А для liveCD и pxe-загрузки это точно не нужно, а там где оно МОЖЕТ нужно (в scratch-инсталляции) оно все равно не выполняется.

Как я писал выше - это НУЖНО для PXE, а не для scratch инсталляции. Периодически возникала такая проблема с невозможностью продолжить загрузку при передёргивании сети (запуск net.*). Не на всех машинах, но было.