pacman Package Manager (Arch Linux)
pacman - Package manager for Arch Linux and derivatives (Manjaro, EndeavourOS).
Basic Commands
1# Update package database
2sudo pacman -Sy
3
4# Upgrade all packages
5sudo pacman -Syu
6
7# Full system upgrade
8sudo pacman -Syyu
9
10# Install package
11sudo pacman -S package-name
12
13# Install multiple packages
14sudo pacman -S package1 package2 package3
15
16# Install without confirmation
17sudo pacman -S --noconfirm package-name
18
19# Remove package
20sudo pacman -R package-name
21
22# Remove package and dependencies
23sudo pacman -Rs package-name
24
25# Remove package, dependencies, and config
26sudo pacman -Rns package-name
27
28# Remove orphaned packages
29sudo pacman -Rns $(pacman -Qtdq)
Search and Query
1# Search for package
2pacman -Ss package-name
3
4# Search installed packages
5pacman -Qs package-name
6
7# Show package info
8pacman -Si package-name
9
10# Show installed package info
11pacman -Qi package-name
12
13# List files in package
14pacman -Ql package-name
15
16# Find which package owns file
17pacman -Qo /path/to/file
18
19# List explicitly installed packages
20pacman -Qe
21
22# List all installed packages
23pacman -Q
24
25# List orphaned packages
26pacman -Qtd
Install from Repository
1# Update and install
2sudo pacman -Syu package-name
3
4# Install specific version (from cache)
5sudo pacman -U /var/cache/pacman/pkg/package-name-version.pkg.tar.zst
6
7# Install from URL
8sudo pacman -U https://archive.org/download/package.pkg.tar.zst
9
10# Reinstall package
11sudo pacman -S --overwrite '*' package-name
12
13# Download only (don't install)
14sudo pacman -Sw package-name
Install from Source (AUR)
Using yay (AUR Helper)
1# Install yay
2sudo pacman -S --needed git base-devel
3git clone https://aur.archlinux.org/yay.git
4cd yay
5makepkg -si
6
7# Search AUR
8yay -Ss package-name
9
10# Install from AUR
11yay -S package-name
12
13# Update AUR packages
14yay -Syu
Manual AUR Installation
1# Install build tools
2sudo pacman -S --needed base-devel git
3
4# Clone AUR package
5git clone https://aur.archlinux.org/package-name.git
6cd package-name
7
8# Review PKGBUILD (important!)
9cat PKGBUILD
10
11# Build and install
12makepkg -si
13
14# Build only
15makepkg
16
17# Install built package
18sudo pacman -U package-name-version.pkg.tar.zst
Build from Source (General)
1# Install development tools
2sudo pacman -S base-devel
3
4# Clone source
5git clone https://github.com/user/repo.git
6cd repo
7
8# Build
9./configure
10make
11
12# Install
13sudo make install
14
15# Or create package
16# Create PKGBUILD
17cat > PKGBUILD <<'EOF'
18pkgname=mypackage
19pkgver=1.0
20pkgrel=1
21pkgdesc="My custom package"
22arch=('x86_64')
23url="https://example.com"
24license=('MIT')
25depends=()
26source=("mypackage-$pkgver.tar.gz")
27sha256sums=('SKIP')
28
29build() {
30 cd "$pkgname-$pkgver"
31 ./configure --prefix=/usr
32 make
33}
34
35package() {
36 cd "$pkgname-$pkgver"
37 make DESTDIR="$pkgdir/" install
38}
39EOF
40
41# Build package
42makepkg -si
Cache Management
1# Cache location
2ls /var/cache/pacman/pkg/
3
4# Clean cache (keep 3 versions)
5sudo paccache -r
6
7# Clean cache (keep 1 version)
8sudo paccache -rk1
9
10# Remove all cached packages
11sudo pacman -Scc
12
13# Remove uninstalled packages from cache
14sudo pacman -Sc
Database Management
1# Refresh package database
2sudo pacman -Sy
3
4# Force refresh
5sudo pacman -Syy
6
7# Update database and upgrade
8sudo pacman -Syu
9
10# Check database
11sudo pacman -Dk
12
13# Optimize database
14sudo pacman-optimize
Package Groups
1# List groups
2pacman -Sg
3
4# List packages in group
5pacman -Sg group-name
6
7# Install group
8sudo pacman -S group-name
9
10# Install specific packages from group
11sudo pacman -S group-name --ignore package1,package2
Mirrors
1# Edit mirror list
2sudo nano /etc/pacman.d/mirrorlist
3
4# Rank mirrors by speed
5sudo pacman -S pacman-contrib
6sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
7rankmirrors -n 6 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist
8
9# Or use reflector
10sudo pacman -S reflector
11sudo reflector --latest 20 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
Configuration
1# Edit pacman config
2sudo nano /etc/pacman.conf
3
4# Enable multilib (32-bit on 64-bit)
5[multilib]
6Include = /etc/pacman.d/mirrorlist
7
8# Enable color output
9Color
10
11# Enable parallel downloads
12ParallelDownloads = 5
13
14# Ignore packages
15IgnorePkg = package1 package2
16
17# Ignore group
18IgnoreGroup = gnome
Hooks
1# Hook location
2ls /etc/pacman.d/hooks/
3
4# Example hook (clean cache)
5sudo mkdir -p /etc/pacman.d/hooks
6sudo nano /etc/pacman.d/hooks/clean-cache.hook
7
8[Trigger]
9Operation = Upgrade
10Operation = Install
11Operation = Remove
12Type = Package
13Target = *
14
15[Action]
16Description = Cleaning pacman cache...
17When = PostTransaction
18Exec = /usr/bin/paccache -rk2
Troubleshooting
1# Fix corrupted database
2sudo rm /var/lib/pacman/db.lck
3sudo pacman -Syyu
4
5# Reinstall all packages
6sudo pacman -Qnq | sudo pacman -S -
7
8# Fix keyring issues
9sudo pacman -Sy archlinux-keyring
10sudo pacman-key --init
11sudo pacman-key --populate archlinux
12
13# Force overwrite files
14sudo pacman -S --overwrite '*' package-name
15
16# Downgrade package
17sudo pacman -U /var/cache/pacman/pkg/package-old-version.pkg.tar.zst
18
19# Check for errors
20sudo pacman -Dk
Logs
1# View pacman log
2cat /var/log/pacman.log
3
4# Recently installed
5grep "\[ALPM\] installed" /var/log/pacman.log | tail -20
6
7# Recently upgraded
8grep "\[ALPM\] upgraded" /var/log/pacman.log | tail -20
9
10# Recently removed
11grep "\[ALPM\] removed" /var/log/pacman.log | tail -20
Useful Aliases
1# Add to ~/.bashrc
2alias update='sudo pacman -Syu'
3alias install='sudo pacman -S'
4alias remove='sudo pacman -Rns'
5alias search='pacman -Ss'
6alias clean='sudo pacman -Sc && sudo paccache -r'
AUR Helpers Comparison
| Helper | Language | Features |
|---|---|---|
| yay | Go | Fast, feature-rich, popular |
| paru | Rust | Modern, secure, yay alternative |
| pikaur | Python | User-friendly, detailed |
| aurman | Python | Dependency resolution |
Install paru
1sudo pacman -S --needed base-devel git
2git clone https://aur.archlinux.org/paru.git
3cd paru
4makepkg -si
Security
1# Update keyring
2sudo pacman -S archlinux-keyring
3
4# Check package signatures
5pacman -Qi package-name | grep Signatures
6
7# Verify database
8sudo pacman -Dk
9
10# List packages without signatures
11pacman -Qi | grep -E "^Name|^Signatures" | grep -B1 "None"
Create and Publish AUR Package
PKGBUILD Structure
1# PKGBUILD
2pkgname=mypackage
3pkgver=1.0.0
4pkgrel=1
5pkgdesc="A useful package"
6arch=('x86_64' 'aarch64')
7url="https://github.com/username/mypackage"
8license=('MIT')
9depends=('glibc' 'python')
10makedepends=('git' 'go')
11optdepends=('postgresql: for database support')
12provides=('mypackage')
13conflicts=('mypackage-git')
14source=("$pkgname-$pkgver.tar.gz::https://github.com/username/$pkgname/archive/v$pkgver.tar.gz")
15sha256sums=('SKIP') # Replace with actual checksum
16
17prepare() {
18 cd "$pkgname-$pkgver"
19 # Apply patches, etc.
20}
21
22build() {
23 cd "$pkgname-$pkgver"
24 ./configure --prefix=/usr
25 make
26}
27
28check() {
29 cd "$pkgname-$pkgver"
30 make test
31}
32
33package() {
34 cd "$pkgname-$pkgver"
35 make DESTDIR="$pkgdir/" install
36
37 # Install license
38 install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
39
40 # Install documentation
41 install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
42}
Build Package Locally
1# Create PKGBUILD
2nano PKGBUILD
3
4# Generate checksums
5updpkgsums
6
7# Build package
8makepkg
9
10# Install locally
11sudo pacman -U mypackage-1.0.0-1-x86_64.pkg.tar.zst
12
13# Test package
14makepkg -si
Publish to AUR
1# 1. Create AUR account at https://aur.archlinux.org/register
2
3# 2. Add SSH key to AUR
4# https://aur.archlinux.org/account/
5
6# 3. Clone AUR repository
7git clone ssh://aur@aur.archlinux.org/mypackage.git
8cd mypackage
9
10# 4. Add PKGBUILD and .SRCINFO
11cp /path/to/PKGBUILD .
12
13# 5. Generate .SRCINFO
14makepkg --printsrcinfo > .SRCINFO
15
16# 6. Commit and push
17git add PKGBUILD .SRCINFO
18git commit -m "Initial commit: mypackage 1.0.0"
19git push origin master
20
21# Package is now on AUR!
22# Users can install with: yay -S mypackage
Update AUR Package
1# Update PKGBUILD
2nano PKGBUILD
3# Change pkgver and pkgrel
4
5# Update checksums
6updpkgsums
7
8# Generate new .SRCINFO
9makepkg --printsrcinfo > .SRCINFO
10
11# Commit and push
12git add PKGBUILD .SRCINFO
13git commit -m "Update to version 1.1.0"
14git push
PKGBUILD for Git Package
1# PKGBUILD
2pkgname=mypackage-git
3pkgver=r123.abc1234
4pkgrel=1
5pkgdesc="A useful package (git version)"
6arch=('x86_64')
7url="https://github.com/username/mypackage"
8license=('MIT')
9depends=('glibc')
10makedepends=('git' 'go')
11provides=('mypackage')
12conflicts=('mypackage')
13source=("git+https://github.com/username/mypackage.git")
14sha256sums=('SKIP')
15
16pkgver() {
17 cd "$srcdir/mypackage"
18 printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
19}
20
21build() {
22 cd "$srcdir/mypackage"
23 make
24}
25
26package() {
27 cd "$srcdir/mypackage"
28 make DESTDIR="$pkgdir/" install
29}
Custom Repository
1# Build packages
2makepkg
3
4# Create repository database
5repo-add myrepo.db.tar.gz *.pkg.tar.zst
6
7# Serve repository (e.g., with nginx)
8# /srv/http/myrepo/
9# βββ myrepo.db
10# βββ myrepo.db.tar.gz
11# βββ myrepo.files
12# βββ myrepo.files.tar.gz
13# βββ mypackage-1.0.0-1-x86_64.pkg.tar.zst
14
15# Users add to /etc/pacman.conf:
16[myrepo]
17Server = https://repo.example.com/myrepo
18SigLevel = Optional TrustAll
19
20# Then: sudo pacman -Sy mypackage
Best Practices
1# 1. Use namcap to check PKGBUILD
2namcap PKGBUILD
3namcap mypackage-1.0.0-1-x86_64.pkg.tar.zst
4
5# 2. Test in clean chroot
6sudo pacman -S devtools
7mkarchroot /tmp/chroot base-devel
8makechrootpkg -c -r /tmp/chroot
9
10# 3. Follow Arch packaging standards
11# https://wiki.archlinux.org/title/Arch_package_guidelines
12
13# 4. Respond to comments on AUR
14
15# 5. Keep package updated
16
17# 6. Add .gitignore
18cat > .gitignore <<EOF
19*
20!PKGBUILD
21!.SRCINFO
22!.gitignore
23EOF
Related Snippets
- APT Package Manager (Debian/Ubuntu)
APT (Advanced Package Tool) for Debian and Ubuntu-based systems. Basic Commands β¦ - Bazel Build System
Bazel - Fast, scalable, multi-language build system from Google. Installation 1# β¦ - dpkg Package Manager
dpkg - Low-level package manager for Debian-based systems. Basic Commands 1# β¦ - emerge Package Manager (Gentoo)
emerge (Portage) - Source-based package manager for Gentoo Linux. Basic Commands β¦ - Go Modules & Workspaces
Go modules and workspaces for dependency management. Essential commands for Go β¦ - npm - Node Package Manager
Essential npm commands for Node.js package management. Quick reference for daily β¦ - pip Package Manager (Python)
pip - Package installer for Python. Basic Commands 1# Install package 2pip β¦ - pkg Package Manager (FreeBSD)
pkg - Binary package manager for FreeBSD. Basic Commands 1# Update repository β¦ - Scoop Package Manager (Windows)
Scoop - Command-line installer for Windows. Installation 1# Set execution policy β¦ - Yarn Package Manager
Yarn package manager for JavaScript/Node.js projects. Installation 1# Via npm β¦ - yum/dnf Package Manager (RHEL/Fedora)
yum (Yellowdog Updater Modified) and dnf (Dandified Yum) for RHEL, Fedora, β¦