Arch User Repository (AUR) 3.0.0

28 maj 2014

Wczoraj Lukas Fleischer poinformował o nowym wydaniu AUR, oprogramowania stojącego za repozytorium społeczności Arch Linuksa o tej samej nazwie. AUR 3.0.0 nie ściga się z Chromium czy Firefoksem na numer wersji i faktycznie wprowadza długo oczekiwane zmiany, które chociaż trochę ograniczą chaos panujący w społecznościowym repo, pomimo starań 37 Zaufanych Użytkowników.

Dotychczasowe podejście do parsowania PKGBUILD-ów było bardzo ograniczone. W efekcie AUR uniemożliwiało wrzucanie dzielonych pakietów1, nie wspierało również opcjonalnych zależności czy informacji o dostarczanych lub konfliktujących pakietach. Z naiwnego parsowania wynikał też brak obsługi dziwnych bashowych one-linerów i instrukcji warunkowych, przez które AUR kompletnie głupiało.

Dyskusji dotyczących pełnej obsługi PKGBUILD-ów było kilka i za każdym razem dyskutanci uznawali, że największym problemem jest sam Bash. Jednym z wielokrotnie proponowanych pomysłów było przeprowadzenie parsowania "na żywo", ale w izolowanym środowisku. Mimo wszystko nie byłoby to ani bezpieczne, ani wydajne rozwiązanie. W myśl KISS postanowiono nauczyć AUR odczytywania metadanych z pliku o nazwie .AURINFO (umieszczanego w źródłowym archiwum). Wynikają z tego dwie rzeczy:

  1. Rezygnacja z parsowania PKGBUILD-ów po stronie AUR. W wydaniu 3.0 obecny parser jest oznaczony jako deprecated i zostanie w przyszłości usunięty.

  2. Konieczność używania dodatkowego narzędzia do tworzenia źródłowych archiwów .src.tar.gz, tym samym (tymczasowe?) porzucenie makepkg --source do generowania tychże. Owym narzędziem jest mkaurball z projektu pkgbuild-introspection, który od dzisiejszego ranka znajduje się w [community].

Zmiany te zostały również wprowadzone do protokołu RPC i mogą być używane przez klientów AUR. Aby uzyskać dostęp do nowego API konieczne jest jawne zadeklarowanie jego użycia, na przykład:

https://aur.archlinux.org/rpc.php?type=info&arg=pass&v=2

W innym przypadku użyte zostanie poprzednie API dla zachowania kompatybilności z obecnymi klientami. Pełna lista zmian znajduje się w repozytorium Git.

Ad 1. Oczywiście dla chcącego nic trudnego. Najczęściej spotykałem się z takim obejściem:

pkgname=foobar
true && pkgname=('foo' 'bar')