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

HelperLanguageFeatures
yayGoFast, feature-rich, popular
paruRustModern, secure, yay alternative
pikaurPythonUser-friendly, detailed
aurmanPythonDependency 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