<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>36531</bug_id>
          
          <creation_ts>2019-04-06 13:37:06 +0300</creation_ts>
          <short_desc>proposed patch: --no-build-tree,--create-build-tree options</short_desc>
          <delta_ts>2020-09-08 03:24:37 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>hasher</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc>http://git.altlinux.org/people/viy/packages/?p=hasher.git;a=commit;h=7ab01b3f2a0a5ff4b8ff33e59c6bab128abba7e8</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="viy">viy</reporter>
          <assigned_to name="Dmitry V. Levin">ldv</assigned_to>
          <cc>at</cc>
    
    <cc>glebfm</cc>
    
    <cc>lav</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>placeholder</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180479</commentid>
    <comment_count>0</comment_count>
    <who name="viy">viy</who>
    <bug_when>2019-04-06 13:37:06 +0300</bug_when>
    <thetext>оформил опции для явного управления созданием build-tree в chroot

http://git.altlinux.org/people/viy/packages/?p=hasher.git;a=commit;h=7ab01b3f2a0a5ff4b8ff33e59c6bab128abba7e8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180569</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-04-08 01:32:16 +0300</bug_when>
    <thetext>(In reply to comment #0)
&gt; оформил опции для явного управления созданием build-tree в chroot

А зачем понадобилось выключать заполнение /usr/src/?
Из коммита это не очевидно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180597</commentid>
    <comment_count>2</comment_count>
    <who name="viy">viy</who>
    <bug_when>2019-04-08 13:24:14 +0300</bug_when>
    <thetext>Ну, hasher у нас в альте де-факто уже больше чем
инструмент сборки, скорее платформа для дистрибутивных
решений, использующих chroot.
Используется в mkimage, gear-cronbuild, к примеру.
В связи с этим хорошо бы то что нужно для сборки
не прибивать гвоздями.
Выключать заполнение /usr/src/ может понадобиться
в каких-то случаях, чтобы не создавать лишние сущности.
Мне же сейчас нужно уметь принудительно включать заполнение /usr/src/.
Я использую для сборки на клонированном aptbox+cache (экономия памяти + увеличение быстродействия).
unchecked_initroot_cache это хорошо, но он, к сожалению, для другой задачи.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180606</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-04-08 14:58:07 +0300</bug_when>
    <thetext>(In reply to comment #2)
&gt; Ну, hasher у нас в альте де-факто уже больше чем
&gt; инструмент сборки, скорее платформа для дистрибутивных
&gt; решений, использующих chroot.
&gt; Используется в mkimage, gear-cronbuild, к примеру.
&gt; В связи с этим хорошо бы то что нужно для сборки
&gt; не прибивать гвоздями.
&gt; Выключать заполнение /usr/src/ может понадобиться
&gt; в каких-то случаях, чтобы не создавать лишние сущности.

Допустим, хотя с тем же успехом, наверное, можно уже сейчас перенести всё в --pkg-init-list и занулить --pkg-build-list.

&gt; Мне же сейчас нужно уметь принудительно включать заполнение /usr/src/.
&gt; Я использую для сборки на клонированном aptbox+cache (экономия памяти +
&gt; увеличение быстродействия).
&gt; unchecked_initroot_cache это хорошо, но он, к сожалению, для другой задачи.

Этого аргумента я не понимаю.  Я тоже использую unchecked_initroot_cache, например, в тестовой пересборке для увеличения быстродействия -- там /usr/src/ заполняется, иначе бы ничего не работало.  Почему у вас без этой новой опции не заполняется?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180610</commentid>
    <comment_count>4</comment_count>
    <who name="viy">viy</who>
    <bug_when>2019-04-08 15:32:42 +0300</bug_when>
    <thetext>unchecked_initroot_cache ускоряет сборку, но не экономит
память при параллельном запуске нескольких пересборок.

я использую несколько другую схему,
см.
http://git.altlinux.org/people/viy/packages/?p=autorepo-scripts.git;a=tree;f=bin;h=ca2f18522b414cf9e2b695ef3c2836222a2bb9fa;hb=f9a56d30f462e33de6bccd647715225d5a3fcbd2

поднимаю в сторонке эталонный $TMP/hasher0 
содержащий эталонный aptbox &amp;&amp; cache
с помощью 
hsh --initroot-only --number=0 &amp;&amp; hsh-rmchroot

затем размножаю его в 32 хардлинкованных копии
hsh-clone-workdir, и восстанавливаю в каждой свой chroot
под --number=$i
c помощью hsh-mkchroot
и патченого hsh-initroot

Это другой режим работы, ведь 
unchecked_initroot_cache хочет работать со своим
чистым aptbox, а у нас aptbox после выполнения hsh-initroot.
у которого 
Я для этого патчу hsh-initroot, чтобы он не заморачивался
с провеками, а просто разворачивал готовый 
cache/chroot/chroot.cpio
и создавал build tree.

полный патченый hsh-initroot здесь, 
http://git.altlinux.org/people/viy/packages/?p=hasher.git;a=commit;h=0952ca8cb1215970e5a97a70013140f01ac268bf

но в таком виде это набор хаков, поэтому я для начала
взял опцию --no-build-tree,--create-build-tree

она там нужна, поскольку внутренняя переменная &quot;$build_list&quot; пуста -
если не отрывать проверки, то потому, что пакеты уже усановлены
в chroot, который мы удалили и хотим развернуть из кеша в клоне повторно
под другим псевдоползователем.
если отрывать проверки, что я делаю, то внутренняя переменная &quot;$build_list&quot; пуста, так как не вычисляется.
поэтому и явная опция.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180611</commentid>
    <comment_count>5</comment_count>
    <who name="viy">viy</who>
    <bug_when>2019-04-08 15:40:20 +0300</bug_when>
    <thetext>(In reply to comment #4)
&gt; Это другой режим работы, ведь 
&gt; unchecked_initroot_cache хочет работать со своим
&gt; чистым aptbox, а у нас aptbox после выполнения hsh-initroot.
&gt; у которого 
уже указано, что в chroot установлен минимальный набор
из init list и build list.
этот chroot уже упакован в $chroot_archive
я хочу просто заново распаковать этот $chroot_archive
под другим псеводопользователем.
так как build tree создается отдельно от архива
с chroot, мнее его надо отдельно создать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180612</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-04-08 15:45:03 +0300</bug_when>
    <thetext>(In reply to comment #4)
&gt; unchecked_initroot_cache ускоряет сборку, но не экономит
&gt; память при параллельном запуске нескольких пересборок.

Я думаю, что unchecked_initroot_cache вполне бы вам подошёл:
запускаете hsh --init для каждого номера, после чего оставляете только одну копию cache/chroot/aptbox.tar, заменяя остальные cache/chroot/aptbox.tar ссылками на неё.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180614</commentid>
    <comment_count>7</comment_count>
    <who name="viy">viy</who>
    <bug_when>2019-04-08 16:09:01 +0300</bug_when>
    <thetext>Смотрите: без использования aptbox.tar
у меня du -sh hasher1/aptbox/var/lib/apt/lists
260M    hasher1/aptbox/var/lib/apt/lists

но эти 260M не занимают места, так как это hardlinks.
ls -l hasher1/aptbox/var/lib/apt/lists
-rw-r--r-- 2 igor igor 64289424 апр  8 02:17 _var_ftp_pub_Linux_ALT_autoimports_Sisyphus_noarch_base_pkglist.autoimports
...

Как понимаю, с aptbox.tar я потеряю 8Gb=260Mb*32 на распаковке aptbox.tar,
плюс пару секунд на распаковку aptbox.tar и повторную
холостую установку пакетов из pkg-init-list, pkg-build-list
это потеря половины от первоначальной экономии в 16Gb.

Память я экономлю, так как физически в машине всего 64 Gb,
и чем меньше потребление памяти, тем больше при сборке будет
использоваться живая память, а не свопинг.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192098</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2020-08-28 19:21:22 +0300</bug_when>
    <thetext>Извините, Игорь, но я решительно не понимаю, о чём вы пишите, это совершенно не стыкуется с моими данными.

Вот у меня, допустим,
unchecked_initroot_cache=&quot;$(sed &apos;/^task[[:space:]]\+/!d;s///;q&apos; /path/to/Sisyphus/files/list/task.info)&quot;

Первый hsh --init (незакешированный) занимает около 24 секунд,
второй hsh --init (закешированный) занимает около 2 (двух) секунд.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192106</commentid>
    <comment_count>9</comment_count>
    <who name="viy">viy</who>
    <bug_when>2020-08-30 03:16:41 +0300</bug_when>
    <thetext>Гм. Дмитрий, наверное, вы не внимательно смотрели описание.
Измерения выполнялись на машине altair на композитном репозитории:
sisyphus+autoimports/x86_64.
Такой репозиторий содержит 35.000+17.000=52.000 пакетов,
10 секунд это для него.

а у вас, как понимаю, ниспльзовался чистый sisyphus/x86_64
с 17.000 пакетов. Вы получили 2 секунды.

Для меня 10 секунд * 1.000 пакетов = 3 часа экономии для
скриптов autoimports.

Но в контексте чистого сизифа попробуйте провести
замеры на Raspberry Pi 3/4, c sisyphus/aarch64 и armh.
Думаю, там тоже будет далеко не 2 секунды экономии.

Впрочем, ALT#36531 -- это, по сути, быстрый хак,
нацеленный минимизировать вмешательство в код hasher.

Он играет вспомогательную роль для другого хака с
cp -rl закешированного hasher_workdir.

По хорошему, вместо ALT#36531 в hasher нужна
полноценная поддержка кеширования метаданных
при работе с постоянным репозиторием.

Наверно, ету тему нужно описать подробнее,
отдельным письмом.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192274</commentid>
    <comment_count>10</comment_count>
    <who name="viy">viy</who>
    <bug_when>2020-09-08 03:24:37 +0300</bug_when>
    <thetext>(Ответ для viy на комментарий #9)
&gt; Наверно, эту тему нужно описать подробнее,
&gt; отдельным письмом.

сел разбираться, оформил в письмо
https://lists.altlinux.org/pipermail/devel/2020-September/211748.html</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>