repo/zlib | ||
.gitignore | ||
puke | ||
README.md |
KISS Package Experiment
This is an alternative package system I am experimenting with. Instead of the usual PKGBUILD
, APKBUILD
, xbps-template
and Pkgfile
format, this repository explores a more unixy approach.
Each Package is split into multiple files.
zlib/ # Package name.
├─ build # Build script.
├─ depends # Dependencies (one per line).
├─ sources # Sources (one per line).
├─ version # Package version.
┘
# Files generated by the package manager.
├─ manifest # The built package's files and directories.
├─ checksums # The checksums for the source files.
┘
# Optional files.
├─ post_install # The script to run after install.
├─ release # Force a package update for the same version.
┘
When a built package is installed, this entire directory tree is copied to /var/db/puke
where it becomes a database entry. Listing the dependencies for a package is a simple as printing the contents of the depends
file. Searching for which package owns a file is as simple as checking each manifest
file.
This new structure also allows the package manager to be stupid simple. POSIX sh
has no arrays. However, they are mimicked by looping over each line of each file. No more insecure depends="pkg pkg pkg"
and for pkg in $depends
.
Instead, the following can be done.
while read -r depend; do
# do thing.
done < depends
Table of Contents
build
The build
file should contain the necessary steps to patch, configure, build and install the package. When at the install step; the variable $pkg_dir
is available. This variable points to the directory the package manager uses for built packages. Whatever is in this directory will become part of the package's manifest and will be copied to /
(or $PUKE_ROOT
).
./configure \
--prefix=/usr \
--libdir=/lib \
--shared
make
make DESTDIR="$pkg_dir" install
manifest
The manifest
file contains the built package's file and directory list. The full paths to files are listed first and the directories (in reverse) follow. This allows the package manager to remove the directories if they're empty without needing checks in-between.
/usr/share/man/man3/zlib.3
/usr/include/zconf.h
/usr/include/zlib.h
/lib/libz.so.1.2.11
/lib/libz.so.1
/lib/libz.so
/lib/libz.a
/lib/pkgconfig/zlib.pc
/usr/share/man/man3
/usr/share/man
/usr/share
/usr/include
/usr
/lib/pkgconfig
/lib
sources
The sources
file contains the package's sources one per line. Sources can be local or remote.
https://www.openssl.org/source/openssl-X.X.X.tar.gz
patches/fix-musl.patch
depends
The depends
file contains the package's dependencies one per line.
zlib
binutils
openssl