1
0
Fork
You've already forked spm
1
A Simple Package Manager
  • Shell 63.2%
  • Roff 32.6%
  • Makefile 4.2%
2026年07月04日 12:42:36 +08:00
LICENSE Initial commit 2024年03月26日 00:21:51 +08:00
Makefile added man page and Makefile 2026年05月29日 17:17:19 +08:00
README.md README.md updated 2026年05月29日 17:18:38 +08:00
spm fix 2026年07月04日 12:42:36 +08:00
spm.1 added man page and Makefile 2026年05月29日 17:17:19 +08:00

spm

Simple Package Manager — a POSIX-compatible package manager for Linux.

spm builds, installs, upgrades, and removes .spm packages. A package is a compressed tar archive with a filename that encodes its identity: <name>#<version>-<release>.spm.

Install

make install # install to /usr/bin/spm
make install DESTDIR=/tmp/staging # install to a staging directory
make install PREFIX=/usr/local # install to /usr/local/bin/spm
make uninstall # remove spm and its man page

Usage

spm -a list all installed packages
spm -b <path> build a package from the current directory
spm -h print help
spm -i <file> install a package (requires root)
spm -l <name> list files installed by a package
spm -o <file> find which package owns a file
spm -r <name> remove an installed package (requires root)
spm -u <file> upgrade or reinstall a package (requires root)

Package format

.spm packages are compressed tar archives whose contents mirror the target filesystem tree. Files under etc/ are automatically given a .new suffix during build so they don't overwrite existing configs on install — the .new file is moved into place only if the destination is absent or identical.

Environment variables

Variable Description
SPM_ROOT Alternate installation root (default: /)
SPM_FORCEINSTALL Skip conflict detection
SPM_VERBOSE Print each file as it's installed or removed
SPM_COMPRESSION Compression for builds: gzip (default), bzip2, or xz

Database

Package metadata lives under /var/lib/spm/ (or $SPM_ROOT/var/lib/spm/):

Path Contents
db/<name> One file per package: version line + list of installed paths
perms/<name> Non-standard directory permissions for the package
owner/<name> Non-root directory ownership for the package

Examples

# Build
cd staged-files && spm -b /tmp/mypkg#1.0-1.spm
# Install / upgrade / remove
spm -i /tmp/mypkg#1.0-1.spm
spm -u /tmp/mypkg#1.1-1.spm
spm -r mypkg
# Query
spm -a # what's installed?
spm -l mypkg # what files did mypkg install?
spm -o /usr/bin/x # what package owns /usr/bin/x?
# Alternate root (chroot / container)
SPM_ROOT=/mnt/rootfs spm -i /tmp/mypkg#1.0-1.spm
# Different compression
SPM_COMPRESSION=xz spm -b /tmp/mypkg#1.0-1.spm