Nowe posty

Autor Wątek: Serie kompilacji bez instalacji dla “emerge” w Gentoo  (Przeczytany 1344 razy)

Offline overcq

  • Nowy na forum
  • *
  • Wiadomości: 34
    • Zobacz profil
    • ‛overcq’
Od którejś aktualizacji ‟portage” zauważyłem, że przy większej ilości paczek instalowanych naraz jednym poleceniem (np. “emerge --emptytree @world”) są one kompilowane w seriach, ale nie instalowane (i kompilacje nie usuwane) do czasu zakończenia serii. Powoduje to konieczność posiadania przestrzeni dyskowej (w “/var/tmp/portage”) na wszystkie kompilacje paczek z danej serii. Tutaj przykład.
Dodam, że w “/etc/portage/make.conf” mam ustawione:
MAKEOPTS=-j2
EMERGE_DEFAULT_OPTS='--ask-enter-invalid --jobs=2 --quiet-build'
Czyli maksymalnie dwa zadania kompilacji, w których będą maksymalnie dwa równoległe “make”.
Czy za ilość kompilacji w serii przed instalacją paczek odpowiada jakaś opcja?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3062
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Serie kompilacji bez instalacji dla “emerge” w Gentoo
« Odpowiedź #1 dnia: 2024-04-08, 10:09:51 »
Hm... Ja mam EMERGE_DEFAULT_OPTS="--quiet-build=y --with-bdeps=y --load-average=5.0 --jobs=8" i u mnie też jest etap 15 sztuk w fazie "Emerging", ale w stopce mam na ogól 1 albo 2 "running".

Mam wrażenie, że te limit to jest na liczbę buildów w stanie "compiling", nie buildów aktywnych w ogóle - i zgadzam się, to może całkiem zapchać dysk.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline overcq

  • Nowy na forum
  • *
  • Wiadomości: 34
    • Zobacz profil
    • ‛overcq’
Odp: Serie kompilacji bez instalacji dla “emerge” w Gentoo
« Odpowiedź #2 dnia: 2024-04-08, 18:40:04 »
Już to znalazłem czytając źródła “emerge”.
“emerge” ma ‘scheduler’ w “/usr/lib/python3.11/site-packages/_emerge/Scheduler.py”, który zawiera od linii 1524:
             # By default, merge-wait only allows merge when no builds are executing.
             # As a special exception, dependencies on system packages are frequently
             # unspecified and will therefore force merge-wait.
             is_system_pkg = build.pkg in self._deep_system_deps
             if not build.build_opts.buildpkgonly and (
                 "merge-wait" in build.settings.features or is_system_pkg
             ):
                 self._merge_wait_queue.append(merge)
                 if is_system_pkg:
                     merge.addStartListener(self._system_merge_started)
             else:
                 self._task_queues.merge.add(merge)
                 merge.addExitListener(self._merge_exit)
                 self._status_display.merges = len(self._task_queues.merge)
Za wyłączenie tego mechanizmu odpowiada “-merge-wait” w zmiennej FEATURES.

Jednak według mnie powinno być to trochę inaczej rozwiązane.
Jeśli ‘scheduler’ gwarantowałby zatrzymywanie kompilacji przebiegającej w osobnych wątkach i wtedy wykonywał “merge”, to wtedy ten mechanizm mógłby pozostać włączony. Ale do tego najlepiej potrzebna by była wiedza o zależnościach kompilacji pakietów od tych, które są właśnie skompilowane.
« Ostatnia zmiana: 2024-04-09, 16:16:11 wysłana przez overcq »