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.
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.
po zarejestrowaniu overlaya — patrz niżej
Nie są to hasła — z każdej z nich wynika konkretne zachowanie interfejsu, widoczne na ekranie przed każdym zapisem.
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.
Dopisujemy linie albo zmieniamy jedną konkretną linię. Komentarze i formatowanie reszty pliku zostają nietknięte.
Wszystko, co wymaga uprawnień, idzie przez pkexec i mały, dający się przeczytać program pomocniczy.
portageNie z parsowania ebuildów. Warstwa core/ to czysty Python bez Qt — da się ją odpytać z terminala.
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ć.
Szukanie po nazwie, kategorii i opisie. Filtry repozytoriów, lista wersji, akcje Pretend, Install i Uninstall — każda pokazuje polecenie, zanim je uruchomi.
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.
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.
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 ._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.
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.
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.
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.
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.
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.
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.
make installWybór sprowadza się do tego, czy Portage ma wiedzieć o GentStore.
Bez klonowania. Pobierz skrypt, przeczytaj go, uruchom.
curl -fsSL -O https://raw.githubusercontent.com/\ JamJan05/GentStore/main/packaging/make-overlay.sh less make-overlay.sh sudo bash make-overlay.sh emerge --ask app-portage/gentstore
Skrypt rejestruje /var/db/repos/gentstore jako synchronizowany overlay — kolejne ebuildy przychodzą zwykłym emerge --sync. Wypisuje każdy plik, który zapisuje, i nie nadpisuje niczyich. Przeczytanie go najpierw to wersja, którą projekt zaleca — 200 linii, które zaraz uruchomią się jako root.
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.
| 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.
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.
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.
„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.
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.
use.desc żyje w repozytorium głównym, a szukane było obok ebuilda, gdzie żaden overlay go nie ma.
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.
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ć.
Skrypt zatrzymuje się przed instalacją i wypisuje polecenie. Uruchamiasz je sam.