Packages (alpm)

alpm

Arctic's package manager. Binary packages are .alpmz files — a tar.xz with a .PKGINFO, a .FILES list and the payload rooted at /.

alpm ins vim              install
alpm del vim              remove
alpm del+deps vim         remove, and anything only it needed
alpm search editor        search
alpm info vim             what a package is
alpm list                 what is installed
alpm files vim            what a package owns
alpm owns /usr/bin/vim    which package owns a file
alpm fetch all            refresh the repository indexes
alpm upgrade              upgrade everything

On a configured system, prefer editing system.conf and rebuilding — see declarative configuration. Using alpm ins directly works, but the next rebuild will remove anything the file does not mention.

Building from source

Not everything has a binary. When it does not, alpm offers to build it:

alpm ins -s some-package    build from the port, even if a binary exists
alpm build recipe          build a recipe into an .alpmz

On musl this is the normal path — see musl.

Repositories

mainthe base system and its libraries
basedesktops, X, Wayland, larger stacks
extraapplications and tools
kernelskernels and headers
profilewhole-environment meta packages
muslpackages built against musl
sourcerecipes for everything, binary or not
nonfree, multiliboff by default

Configured in /etc/alpm/repos.d/*.repo:

name = main
url = https://pkg-arctic.apiwow.net/ALL/main
enabled = yes
priority = 10

Browse them at pkg-arctic.apiwow.net and ports-arctic.apiwow.net.

Snapshots and rollback

On btrfs, alpm snapshots before every install or removal:

alpm log                  every transaction
alpm rollback             undo the last one
arctic snapshots          list them

This is separate from generations, which record declared configurations rather than filesystem state — see generations.

Ports

Every package is generated from one line in ports/manifest.tsv:

repo  name  version  buildsys  license  depends  makedepends  url  source  desc

gen-ports.py turns that into a recipe. A package needing something the template cannot express gets a hand-written recipe plus a recipe.local marker beside it, which stops regeneration from overwriting the hand work.

Changes go to arctic-linux-ports.

pkgit

pkgit can be installed alongside alpm:

A_PKGIT=yes

alpm remains what the system itself is built and managed with; this only puts pkgit next to it.

More: arctic linux docs · install · declarative configuration · generations and rollback · init systems · kernels · desktops and audio · ephemeral shells · musl · building from source