#arch-linux

bin+lib guzuta

Custom repository manager for ArchLinux pacman

18 releases

0.5.0 Mar 22, 2023
0.4.1 Dec 7, 2021
0.4.0 Nov 2, 2020
0.3.0 Apr 11, 2020
0.2.4 Mar 25, 2017

#389 in Unix APIs

Download history 6/week @ 2024-07-30 25/week @ 2024-09-24

66 downloads per month

MIT and LGPL-2.1

55KB
1.5K SLoC

guzuta

Custom repository manager for ArchLinux pacman

Usage

Build a package and store it to a repository

Basic usage: build foo x86_64 package for bar repository.

% ls foo
PKGBUILD
% mkarchroot chroot/root base-devel
% mkdir -p repo/x86_64
% guzuta build foo --repo-dir repo/x86_64 --repo-name bar --arch x86_64 --chroot-dir chroot
(snip)
% ls repo/x86_64
bar.db  bar.files  foo-1.0.0-1-x86_64.pkg.tar.zst

With full options:

% guzuta build --chroot-dir /var/cache/guzuta/chroot-x86_64 --repo-dir repo/x86_64 --repo-name bar --arch x86_64 --package-key $GPGKEY --repo-key $GPGKEY --srcdest sources --logdest logs foo
(snip)
% ls repo/x86_64
bar.db  bar.db.sig  bar.files  bar.files.sig  foo-1.0.0-1-x86_64.pkg.tar.zst  foo-1.0.0-1-x86_64.pkg.tar.zst.sig
% ls sources
foo-1.0.0.tar.gz
% ls logs
foo-1.0.0-1-x86_64-build.log  foo-1.0.0-1-x86_64-package.log

Omakase mode

Omakase mode supports a typical situation managing the custom repository.

Initialize a repository

See also https://wiki.archlinux.org/index.php/DeveloperWiki:Building_in_a_Clean_Chroot#Classic_Way

% sudo mkarchroot -C /path/to/pacman.conf -M /path/to/makepkg.conf /path/to/chroot-x86_64/root base base-devel
% cat > .guzuta.yml
name: foo
package_key: C48DBD97
repo_key: C48DBD97
srcdest: sources
logdest: logs
pkgbuild: PKGBUILDs
builds:
  x86_64:
    chroot: /path/to/chroot-x86_64
% mkdir foo sources logs PKGBUILDs

Build a package

Write a PKGBUILD in PKGBUILDs/#{pkgname} directory.

% mkdir PKGBUILDs/bar
% vim PKGBUILDs/bar/PKGBUILD

Then build the package.

% guzuta omakase build bar
(snip)
% tree foo
foo
`-- os
    `-- x86_64
        |-- bar-1.0.0-1-x86_64.pkg.tar.zst
        |-- bar-1.0.0-1-x86_64.pkg.tar.zst.sig
        |-- foo.db
        |-- foo.db.sig
        `-- foo.files

Publish the repository

For the server, serve files under the foo directory by HTTP server like nginx or Apache.

For clients, add the server's repository configuration to /etc/pacman.conf like below.

[foo]
SigLevel = Required
Server = http://example.com/$repo/os/$arch

Publish the repository (Amazon S3)

Configure .guzuta.yml for S3.

s3:
  bucket: foo-packages
  region: ap-northeast-1

Each time you execute guzuta omakase build:

  1. Download repository databases (not including packages)
  2. Build a package
  3. Upload the built package and repository databases.

Dependencies

~42–58MB
~1M SLoC