Oprogramowanie > Narzędzia administracyjne

Serie kompilacji bez instalacji dla “emerge” w Gentoo

(1/1)

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:

--- Kod: ---
MAKEOPTS=-j2
EMERGE_DEFAULT_OPTS='--ask-enter-invalid --jobs=2 --quiet-build'
--- Koniec kodu ---
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?

Paweł Kraszewski:
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.

overcq:
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:

--- Kod: ---
             # 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)
--- Koniec kodu ---
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.

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej