Jak v Arch Linuxu oklamat Pacmana (a nerozbít přitom AUR závislosti)

Jak v Arch Linuxu oklamat Pacmana (a nerozbít přitom AUR závislosti)
Strašně zmatený Pacman

Tento článek píšu, protože se mi stal klasický problém při instalaci balíků z Arch User Repository. Instaloval jsem si balík aylurs-gtk-shell-git (framework ags pro tvorbu vlastních widgetů pro Linux desktop - já si pomocí něj vytvořil krásný hlavní panel) a pacman nainstaloval jako závislost balík nodejs.

Bohužel v jeho nejnovější verzi, která ani není LTS:

node --version
v25.6.0

Navíc si chci ve svém systému spravovat verzi Node.js sám a proto používám Node Version Manager.

Node Version Manager

Je to nástroj pro jednoduchou správu verzí Node.js. Velice doporučuju pro rychlé přepínání verzí a jejich bezbolestnou instalaci:

# Instalace různých verzí
nvm install 22
nvm install 24
# Použití verze 22 pro $PATH
nvm use 22
# Nastavení verze 22 jako výchoze pro systém
nvm alias default 22
# Použití verze 24 pro $PATH
nvm use 24
# Nastavení verze 24 jako výchoze pro systém
nvm alias default 24

Jak oklamat správce balíčků

Nyní jen potřebuju odinstalovat stávající verzi Node.js, aby mohla být nahrazena verzí z nvm. Pomocí vytvoření falešného balíčku lze přinutit správce balíčků, aby si myslel, že nový falešný balíček poskytuje nodejs a tím pádem lze odinstalovat jeho aktuální verzi.

Vytvořte si složku nodejs-fake a v ní soubor PKGBUILD s následujícím obsahem:

pkgname=nodejs-fake
pkgver=1.0.0
pkgrel=1
pkgdesc="Fake nodejs package"
arch=('any')
url="https://github.com/nvm-sh/nvm"
license=('MIT')
provides=('nodejs' 'npm')
conflicts=('nodejs' 'npm')
replaces=('nodejs' 'npm')

package() {
  mkdir -p "$pkgdir"
}

Příkazem makepkg -si balíček sestavíte. Správce balíčků se zeptá, zda si přejete odstranit konfliktní balíčky. Zde zvolte "ano" a pokračujte v instalaci:

makepkg -si
==> Vytváří se balíček: nodejs-fake 1.0.0-1
==> Kontrola runtime závislostí...
==> Kontrola buildtime závislostí...
==> Získávají se zdrojové soubory...
==> Rozbalují se zdrojové soubory...
==> Vstupuje se do fakeroot prostředí...
==> Spouští se package()...
==> Pročišťuje se instalace...
  -> Odstraňují se libtool soubory...
  -> Odstraňování souborů statických knihoven...
  -> Promazávají se zbytečné soubory...
  -> Odstraňují se nepotřebné ladící informace z binárních souborů a knihoven...
  -> Komprimují se man a info stránky...
==> Kontrola chyb při balení...
==> Vytváří se balíček "nodejs-fake"...
  -> Vytváření .PKGINFO souboru...
  -> Vytváření .BUILDINFO souboru...
  -> Vytváření .MTREE souboru ...
  -> Komprimuje se balíček...
==> Opouští se prostředí fakeroot.
==> Dokončeno vytváření: nodejs-fake 1.0.0-1
==> Instaluje se balíček nodejs-fake pomocí pacman -U ...
načítají se balíčky...
řeší se závislosti..
kontrola konfliktních balíčků...
:: nodejs-fake-1.0.0-1 a nodejs-25.6.0-1 jsou v konfliktu. Odstranit nodejs? [a/N] a
:: nodejs-fake-1.0.0-1 a npm-11.8.0-1 jsou v konfliktu. Odstranit npm? [a/N] a

Balíčky  (3) nodejs-25.6.0-1  npm-11.8.0-1  nodejs-fake-1.0.0-1

Celkem odstraněno:   74,11 MiB

:: Pokračovat v instalaci? [A/n] a

Při kontrole verze Node.js se nyní vypíše aktuální verze nastavená pomocí nvm, kterou můžu samozřejmě kdykoli přepnout:

node --version
v24.13.0

Závěr

Správce balíčků je tímto "oklamán" a vy můžete používat vlastní verzi Node.js, aniž by vám byly instalovány verze, které ani nechcete. S velkou mocí ale přichází i velká zodpovědnost – systémový správce balíčků nyní Node.js ignoruje, takže bezpečnostní aktualizace a přepínání verzí jsou už čistě ve vašich rukou.