GentStore 1.4.1 ~amd64 GitHub
app-portage/gentstore

GUI dla Portage.
Pokazuje, potem robi.

Graficzna nakładka na Portage dla Gentoo Linux. Wyszukiwanie i instalacja pakietów, flagi USE z wyjaśnieniem, do czego każda służy, maski i licencje, overlaye i cały cykl aktualizacji systemu.

Każda zmiana w /etc/portage jest pokazana przed zapisem. Interfejs nigdy nie działa jako root.

Instalacja
emerge --ask app-portage/gentstore

po zarejestrowaniu overlaya — patrz niżej

  • Python 3.12+
  • PyQt6
  • GPL-2+
  • pl · en
  • 1022 testów
Ekran Wyszukiwanie i instalacja: zapytanie mpv, wybrany media-video/mpv, panel flag USE
Wyszukiwanie i instalacja — wyniki z czterech repozytoriów, szczegóły pakietu, wersje z keywordami, polecenie pod przyciskami

Zasady

Pięć reguł, na których stoi cała aplikacja

Nie są to hasła — z każdej z nich wynika konkretne zachowanie interfejsu, widoczne na ekranie przed każdym zapisem.

Nic nie dzieje się po cichu

Każda zmiana w /etc/portage jest pokazana przed zapisem, a po nim aplikacja podaje dokładną ścieżkę pliku i dokładną linię, którą dodała. Każdy przycisk uruchamiający polecenie ma w podpowiedzi to polecenie w całości.

Nie nadpisujemy twoich plików

Dopisujemy linie albo zmieniamy jedną konkretną linię. Komentarze i formatowanie reszty pliku zostają nietknięte.

Proces graficzny nie jest rootem

Wszystko, co wymaga uprawnień, idzie przez pkexec i mały, dający się przeczytać program pomocniczy.

Dane pochodzą z API portage

Nie z parsowania ebuildów. Warstwa core/ to czysty Python bez Qt — da się ją odpytać z terminala.

Wybrane repozytorium obowiązuje wszędzie

Kliknięcie odznaki ::repo zawęża nie tylko listę, ale też panel szczegółów, wersje i atom przekazywany emerge. Ten sam pakiet w dwóch overlayach przestaje się zlewać.


Dziewięć ekranów

Cały cykl pracy z Portage, ekran po ekranie

Wyszukiwanie i instalacja

Szukanie po nazwie, kategorii i opisie. Filtry repozytoriów, lista wersji, akcje Pretend, Install i Uninstall — każda pokazuje polecenie, zanim je uruchomi.

Aktualizacja systemu

Sześć kroków, każdy osobno: sync, wiadomości Gentoo, podgląd w formie tabeli, aktualizacja z żywym logiem i przyciskiem „Przerwij”, --depclean, pliki konfiguracyjne.

Repozytoria

To, co masz skonfigurowane, z sekcją repos.conf dosłownie — i katalog repozytoriów Gentoo w drugiej zakładce. Włączenie overlaya to jedno kliknięcie.

Maski i licencje

Dlaczego Portage odmawia: przy masce uwaga maintainera dosłownie wraz z plikiem, z którego pochodzi; przy keywordach rozróżnienie trzech przypadków; przy licencji pełny tekst do przeczytania.

Pliki konfiguracyjne

Pliki ._cfg z pakietem, który je przyniósł, i liczbą zmienionych linii. Obok różnica, a pod nią trzy odpowiedzi: zostaw moje, weź nowy, scal ręcznie.

make.conf

Dwie wartości dla każdej zmiennej: ta zapisana w pliku i ta, której Portage faktycznie używa. Zmiana podmienia jedną linię. MAKEOPTS dostaje podpowiedź z liczby rdzeni i pamięci. EMERGE_DEFAULT_OPTS można tu edytować i dotyczy emerge, które uruchamiasz w terminalu — a nie tych, które uruchamia to okno; te go ignorują, żeby pokazana komenda była całą komendą.

Wiadomości elog

To, co pakiety powiedziały o sobie przy instalacji — komunikaty, które przelatują w terminalu i przepadają. Każdy wpis z klasą i fazą budowania, kolor najpoważniejszej wiadomości na lewej krawędzi wiersza.

Zbiór @world

Obok siebie dwie rzeczy, które po instalacji wyglądają identycznie: pakiety, o które prosiłeś, i wszystko, co jest zainstalowane. Usunięcie wpisu nic nie odinstalowuje.

Profil

Profile z eselect, z zaznaczonym obecnym i wprost powiedzianym, co wynika ze zmiany: inne domyślne flagi USE, inne maski, przebudowa systemu.

Ctrl+1…9 przełącza ekrany, Ctrl+F wchodzi w pole szukania, Ctrl+L skacze do logu.

Panel flag USE dla media-video/mpv z rozwiniętą flagą vulkan
Flagi USE — skąd bierze się wartość każdej flagi i co dokładnie zmienia jej włączenie

Flaga USE przestaje być zgadywaniem

Dla każdej flagi widać, skąd pochodzi jej wartość — z ebuilda, z profilu, z make.conf, z package.use — oraz opis z repozytorium.

Po rozwinięciu: co dokładnie zmienia jej włączenie, jakie pakiety zostaną wciągnięte i którym wymusi tę samą flagę. Warunki REQUIRED_USE są sprawdzane na bieżąco, a zapis jest zablokowany, dopóki wybór ich nie spełnia.

Na dole panelu — dokładna linia, która pójdzie do pliku, i plik, do którego zostanie dopisana. Przed czymkolwiek.

dev-libs/zydis zawężony do ::guru
Jedno repozytorium naraz — ten sam pakiet żyje w ::gentoo i w ::guru; wybrana odznaka decyduje, skąd pójdzie instalacja
Ekran Aktualizacja systemu, krok trzeci z wypełnioną tabelą podglądu
Aktualizacja systemu — tabela podglądu zbudowana z wyjścia emerge -pv
Zakładka Dostępne: katalog repozytoriów przeszukany po kde
Dodawanie repozytorium — kto je prowadzi i dwa polecenia, które włączenie uruchomi

Uprawnienia

GentStore nigdy nie działa jako root

Uruchomiony przez sudo mówi to w okienku i prosi o zamknięcie. Wszystko, co wymaga uprawnień, przechodzi przez pkexec i dwa małe programy w /usr/libexec.

Oba to pojedyncze pliki korzystające wyłącznie z biblioteki standardowej, bez importów z reszty projektu — napisane tak, żeby dały się przeczytać od początku do końca, zanim zostaną dopuszczone w pobliże roota. Warto to zrobić.

Każdy uprzywilejowany krok pyta o hasło. Obie akcje polkit to auth_admin, a nie ta forma, która pamięta odpowiedź przez kilka minut, więc sześciokrokowa aktualizacja systemu pyta sześć razy. Tamta forma pamięta nie to okno może kontynuować, tylko ten użytkownik uwierzytelnił się do tej akcji — a skorzystać z tego może wszystko, co działa na Twoim koncie.

Bez części uprzywilejowanej aplikacja nadal działa — tylko do czytania: szukanie, przeglądanie flag, emerge --pretend. Każda próba zapisu mówi wtedy, czego brakuje.

Co instaluje make install
  • /usr/libexec/gentstore/gentstore-helper
    jedyny program, który pisze do /etc/portage
  • /usr/libexec/gentstore/gentstore-launcher
    uruchamia emerge i pokrewne, i umie je przerwać
  • /usr/share/polkit-1/actions/org.gentoo.gentstore.policy
    dwie nazwane akcje polkit
  • /usr/share/applications/gentstore.desktop
    wpis w menu
  • /usr/share/icons/hicolor/scalable/apps/gentstore.svg
    ikona

Instalacja

Dwie drogi

Wybór sprowadza się do tego, czy Portage ma wiedzieć o GentStore.

Z katalogu roboczego — do pracy nad kodem

Katalogi .qm nie są trzymane w repozytorium.

emerge --ask dev-python/pyqt6 dev-qt/qttools \
  app-eselect/eselect-repository sys-auth/polkit

python tools/i18n.py compile
sudo make install

python -m gentstore

Dostajesz wydanie oznaczone tagiem, chyba że powiesz inaczej — instalator pyta, a --stable i --live pomijają pytanie. Ebuild 9999 sortuje się powyżej każdego wydania, jakie kiedykolwiek będzie, więc wybór wydania oznacza świadome niezaakceptowanie live.

Wymagania

dev-lang/python ≥ 3.12 środowisko uruchomieniowe
sys-apps/portage moduł portage — dane o pakietach
dev-python/pyqt6 interfejs graficzny
dev-qt/qttools[linguist] lrelease — kompilacja tłumaczeń
app-eselect/eselect-repository overlaye i katalog repositories.xml
sys-auth/polkit pkexec — podniesienie uprawnień

Opcjonalnie app-portage/gentoolkit (skanowanie GLSA) i app-portage/cpuid2cpuflags. Ich brak wyłącza jedną funkcję i jest zgłaszany w interfejsie — nie kładzie aplikacji.

Backend bez GUI

Warstwa core/ to czysty Python bez Qt, więc da się ją odpytać z terminala. Przydaje się, gdy lista w okienku jest pusta i trzeba wiedzieć, czy problem jest w interfejsie, czy w danych.

python -m gentstore.core.cli info
python -m gentstore.core.cli repos -v
python -m gentstore.core.cli search mpv
python -m gentstore.core.cli show media-video/mpv
python -m gentstore.core.cli show dev-libs/zydis --repo guru
python -m gentstore.core.cli world

Każde polecenie przyjmuje --json i --debug. To narzędzie deweloperskie — mówi tylko po angielsku, bo nie jest częścią interfejsu.


Stan projektu

Wersja 1.4.1

Wszystkie dziewięć ekranów działa, a obie połowy zostały przećwiczone na żywym systemie: strona tylko do czytania — szukanie, flagi USE, maski, repozytoria, podgląd aktualizacji, pliki konfiguracyjne, make.conf, elog i @world — i ta uprzywilejowana, która zapisała prawdziwe wpisy w package.use, package.license i package.accept_keywords przez pkexec.

Co nowego w 1.4.0

Dwa sposoby, na jakie część uprzywilejowana robiła więcej, niż mówił dialog

write_file sprawdzał, czy ścieżka leży pod repos.conf, i zapisywał, cokolwiek przyszło razem z nią — a Portage scala wszystkie pliki w tym katalogu, więc sekcja [gentoo] nie dodawała repozytorium, tylko zastępowała to, z którego pochodzi każdy pakiet w systemie. Scalanie w cfg_apply brało treść z żądania i nic nie wiązało jej z tym, co użytkownik zobaczył, więc każdy plik ._cfg czekający po aktualizacji był drogą do zapisania obok niego dowolnej treści jako root. Oba naprawione: sprawdzana jest teraz treść, nie tylko ścieżka.

Podgląd nie pokazywał nic, a linia szła do pliku w całości

QLabel zgaduje, czy dostał HTML. Atom zaczynający się od operatora mniejszości — zwykły atom z ograniczeniem wersji, jaki wypisuje emerge --autounmask — wygląda jak niezamknięty znacznik, więc panel mówiący *to zostanie zapisane* pokazywał pusty ciąg i zapisywał całość. To samo zgadywanie rysowało opisy pakietów z ebuildów jako znaczniki, przez co znacznik obrazka w takim opisie stawał się żądaniem sieciowym z programu, o którym dokumentacja mówi, że żadnych nie wysyła.

Jedna linia z ebuilda potrafiła zawiesić okno

Dwa wyrażenia w parserze wyjścia emerge robiły nawroty: 200 tysięcy znaków zajmowało 128 sekund, a pkg_pretend() z ebuilda uruchamia się właśnie przy --pretend i może wypisać cokolwiek. Oba są teraz liniowe — milion znaków to milisekundy — a wyjście ma limit 16 KiB na linię, co przy okazji zatrzymuje puchnięcie bufora przez cały czas budowania z paskiem postępu.

Po aktualizacji przeinstaluj część uprzywilejowaną

sudo make install-system albo przeinstalowanie pakietu. Protokół helpera poszedł z 2 na 3, bo replace_line nie kompiluje już wyrażenia regularnego z żądania — ^(a+)+$ ma siedem znaków i nie kończy się nigdy, w procesie działającym jako root, któremu nie wyślesz sygnału. Starszy helper odrzuci każdą podmianę linii; okno to zauważy i powie, ale lepiej wiedzieć wcześniej.

Pełny changelog →

Polski i angielski, przełączane w locie

Język bierze się z ustawień systemu; Widok → Język zmienia go bez restartu. Skala interfejsu — 100, 115 albo 130% — jest pod Widok → Rozmiar interfejsu, bo bazowa czcionka 12,5 px jest mała celowo: ekrany pokazują dużo danych naraz.

W ustawieniach także to, jak aplikacja zostaje rootem i ile kopii /etc/portage trzymać.

Okno Ustawienia: język, rozmiar interfejsu, sposób podniesienia uprawnień, liczba kopii
Ustawienia — język, rozmiar interfejsu, sposób podniesienia uprawnień, liczba kopii zapasowych

Zainstaluj i zobacz, co Portage chciało powiedzieć

Skrypt zatrzymuje się przed instalacją i wypisuje polecenie. Uruchamiasz je sam.

sudo bash make-overlay.sh
emerge --ask app-portage/gentstore
Repozytorium na GitHubie