From b6b677caea38a9cf6351366e403fbd01799731a9 Mon Sep 17 00:00:00 2001 From: Eric Phillips Date: Fri, 8 May 2026 20:33:34 -0600 Subject: [PATCH] updated README --- PKGBUILD | 4 ++-- README.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 755af54..13ba1ed 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: Eric Phillips pkgname=pkgstash -pkgver=0.1.1 +pkgver=0.1.2 pkgrel=1 pkgdesc='Sparse caching pacman server' arch=(x86_64) @@ -10,7 +10,7 @@ backup=(etc/pkgstash/pkgstash.toml etc/pkgstash/pkgstash.env) license=(GPL-2.0-only) install=pkgstash.install source=("https://github.com/ewpt3ch/${pkgname}/releases/download/v${pkgver}/pkgstash-v${pkgver}-$CARCH.tar.gz") -sha256sums=('e1eed03e58259f037c71459f729b6544ff02264dc7243107bc9b0ed25b854e28') +sha256sums=('7b67b7e1bee72f6ee1672dcc6d737abf147d4b92a1fdf45afbb3de71d60e5a3c') package() { cd deploy diff --git a/README.md b/README.md index 6cbd1e0..eae2f95 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,59 @@ # pkgstash -A caching pacman mirror and aur build server. \ No newline at end of file +## A sparse caching pacman mirror + +Reduces external traffic in a local network with multiple arch linux systems with minimal config. It replicates the structure of a full mirror without downloading the whole mirror. Clients add this in mirrorlist and pacman just works. + +## Install + +### From PKGBUILD + +Currently disributed as a binary. Download the PKGBUILD and pkgstash.install, use makepkg -i to install. See [Arch User Repository](https://wiki.archlinux.org/title/Arch_User_Repository) for more information. + +### From source + +clone the repo from repo root + + go build ./cmd/server + +Binary is called pkgstash, sample config, env and service files are in deploy/ +### Configure and Start + +Edit `/etc/pkgstash/pkgstash.env` and change the token to a secure one. I used openssl like so: + + openssl rand -base64 64 + +``` +#/etc/pkgstash/pkgstash.env + +PKGSTASH_TOKEN= +``` + +start with the included systemd service + + systemctl enable --now pkgstash.service + + systemctl enable --now pkgstash-refresh.timer + + +### Technical details + +1. Go as the language. It has most of the tools necessary for a http server ins the standard library and it's performant. +2. Singleflight to prevent 2 clients from causing the server to fetch the same package more than once. +3. Pkgs are written atomically to prevent serving partial files +4. Use multiple mirrors for redundancy and spread the load out. +5. Refresh the remote db files on a schedule to enable prefetching of cached pkgs. + +### Roadmap + +- Prefetch and cache cleanup +- Streaming on cache misses +- cli admin tool +- Custom repo +- Build server +- Automate builds on updated aur pkgs + - Auto approve on version bump with not other changes in PKGSBUILD + - Notify if a build needs approval +- Web admin interface + +