Jak v Arch Linuxu oklamat Pacmana (a nerozbít přitom AUR závislosti)
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.