GentStore 1.3.0 ~amd64 GitHub
app-portage/gentstore

Portage z widokiem na to,
co się zaraz stanie.

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
  • 572 testy
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 459 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.

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
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ć.

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.3.0

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.3.0

Ekran Repozytoriów to jedna lista z dwiema zakładkami

„Skonfigurowane” i „Dostępne” to to samo pytanie zadane w różnych momentach. Jedno pole szukania obsługuje otwartą zakładkę, a wybór wiersza wypełnia prawą stronę — przy skonfigurowanym repozytorium także tym, co ono wnosi: pakietami, które pochodzą z niego i znikąd indziej.

Trzy dziury w części uprzywilejowanej zamknięte

emerge --unmerge '*/*' przechodziło kontrolę argumentów launchera; helper odpowiadał na zniekształcone żądanie tracebackiem zamiast odpowiedzią; cfg_apply dało się skierować poza /etc/portage. Nieudane przywracanie kopii już nie zabiera ze sobą katalogu konfiguracji.

Flagi USE pakietu z overlaya mają wreszcie opisy

use.desc żyje w repozytorium głównym, a szukane było obok ebuilda, gdzie żaden overlay go nie ma.

1.1.1 wycofane

Wydanie, jego plik i tag są usunięte, a ebuild jest poza overlayem, więc Portage nie może rozwiązać zależności do wersji, której nie da się zbudować. Sekcja w changelogu zostaje, oznaczona [YANKED] — wycofane wydanie to fakt z historii projektu.

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