From 092efa1746dea936b4eb7b824b4676cef32b50c0 Mon Sep 17 00:00:00 2001 From: Woodpecker CI Date: Wed, 3 Jun 2026 23:29:52 +0000 Subject: Woodpecker CI d55b6466e59794f44a0c0c4e66ca55066c7205d0 [SKIP CI] --- docs/apkg_helpers.html | 238 ------------------------------ docs/bootloader.html | 242 ------------------------------- docs/index.html | 4 - docs/install.html | 66 +++++---- docs/networking.html | 4 - docs/packagemanager.html | 4 - docs/using_autils.html | 353 --------------------------------------------- docs/writing_abuild.html | 367 ----------------------------------------------- ports.html | 53 ++++--- 9 files changed, 66 insertions(+), 1265 deletions(-) delete mode 100644 docs/apkg_helpers.html delete mode 100644 docs/bootloader.html delete mode 100644 docs/using_autils.html delete mode 100644 docs/writing_abuild.html diff --git a/docs/apkg_helpers.html b/docs/apkg_helpers.html deleted file mode 100644 index cc56ebee..00000000 --- a/docs/apkg_helpers.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - Alice Linux - docs - - - - -
- -
-<- back to docs - -

apkg helper scripts

-

autils includes several helper scripts that work alongside apkg for package inspection, cleanup, and maintenance. See man <program> for full details on each command.

-

apkg-chroot

-

Enter a chroot environment with virtual filesystems mounted. Useful for building packages or performing system maintenance inside an alternative root.

-
apkg-chroot /mnt/alice                  # launch interactive shell
-apkg-chroot /mnt/alice apkg -i mypkg    # run a command inside the chroot
-
-

Must be run as root. Mounts /dev, /proc, /sys, /run, copies /etc/resolv.conf, and cleans up all mounts on exit.

-

apkg-clean

-

List stale .spm package files and orphaned source tarballs that are no longer referenced by any current package recipe. Pipe to xargs rm to actually clean up.

-
apkg-clean             # list all unreferenced files
-apkg-clean -p          # list only stale packages
-apkg-clean -s          # list only stale sources
-apkg-clean | xargs rm  # remove them
-
-

apkg-deps

-

Show runtime library dependencies of an installed package. Uses ldd to find shared libraries needed by the package's binaries, then maps those libraries back to the packages that provide them.

-
apkg-deps mypkg
-
-

Useful for discovering implicit runtime dependencies not listed in the formal depends file. Excludes the package itself and base system packages (gcc, musl, binutils, glibc).

-

apkg-foreign

-

List installed packages that are not found in any configured repository. These may have been installed from an external source or had their recipes removed.

-
apkg-foreign
-
-

Takes no arguments; outputs one package name per line.

-

apkg-genabuild

-

Scaffold a new package recipe from a source URL. Parses the name and version from the URL and creates a directory with skeleton abuild and info files.

-
apkg-genabuild https://example.com/mypkg-1.2.3.tar.gz
-apkg-genabuild https://github.com/user/repo/archive/v1.0.tar.gz myname
-
-

Special handling for GitHub tag archives, PyPI packages (prefixes python-), and CPAN packages (prefixes perl-). An optional second argument overrides the derived package name.

-

apkg-orphan

-

List orphan packages: packages that are installed and exist in a repository, but have no other installed package depending on them. These may be safe to remove.

-
apkg-orphan
-
-

Takes no arguments; outputs one package name per line.

-

apkg-purge

-

Remove a package and all its dependencies that are no longer needed by any other installed package. This is a "deep" removal compared to apkg -r which only removes the specified package.

-
apkg-purge mypkg       # dry-run: show what would be removed
-apkg-purge -p mypkg    # actually purge from the system
-
-

apkg-redundantdeps

-

Find redundant entries in depends files. A dependency is redundant if another listed dependency already pulls it in transitively.

-
apkg-redundantdeps mypkg       # check one package
-apkg-redundantdeps              # check all packages
-apkg-redundantdeps -f mypkg     # fix by removing redundant entries
-apkg-redundantdeps -f           # fix all packages
-
- -<- back to docs -
-

Copyright © Alice Linux, 2024-2026

-
- - diff --git a/docs/bootloader.html b/docs/bootloader.html deleted file mode 100644 index debd8c6f..00000000 --- a/docs/bootloader.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - Alice Linux - docs - - - - -
- -
-<- back to docs - -

Bootloader

-

This document covers installing and configuring the two bootloaders available in Alice Linux: Limine and GRUB.

-

Limine

-

Limine is a modern, lightweight bootloader supporting BIOS and UEFI.

-

Install the package:

-
# apkg -I limine
-
-

BIOS

-

Deploy Limine to the target disk:

-
# limine bios-install /dev/sdX
-
-

UEFI

-

Copy the Limine EFI executable to the EFI system partition:

-
# mkdir -p /boot/EFI/BOOT
-# cp /usr/share/limine/BOOTX64.EFI /boot/EFI/BOOT
-
-

Configuration

-

Create /boot/limine.conf:

-
timeout: 5
-
-/Alice Linux
-    protocol: linux
-    kernel_path: boot():/vmlinuz
-    cmdline: root=/dev/sda2 rw loglevel=3 quiet
-    module_path: boot():/initrd-linux
-
-

Use boot() to reference the partition where /boot resides, or specify the partition directly with uuid() or a path like hd(0,2).

-

For full configuration options, see the Limine documentation.

-

GRUB

-

GRUB is the GNU Grand Unified Bootloader, supporting UEFI on x86_64 only.

-

Install the package:

-
# apkg -I grub
-
-

Install

-

Install GRUB for UEFI (requires the EFI system partition mounted at /boot):

-
# grub-install --target=x86_64-efi --efi-directory=/boot
-
-

Configuration

-

Generate the GRUB configuration file:

-
# grub-mkconfig -o /boot/grub/grub.cfg
-
-

GRUB settings are controlled by /etc/default/grub. Key options:

- -

After editing /etc/default/grub, regenerate the config:

-
# grub-mkconfig -o /boot/grub/grub.cfg
-
- -<- back to docs -
-

Copyright © Alice Linux, 2024-2026

-
- - diff --git a/docs/index.html b/docs/index.html index 5ba0e91b..c204516b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -183,13 +183,9 @@

This section covers the main parts of Alice Linux: installation, package management, networking, service supervision, etc.


Copyright © Alice Linux, 2024-2026

diff --git a/docs/install.html b/docs/install.html index aac29e84..51063424 100644 --- a/docs/install.html +++ b/docs/install.html @@ -179,12 +179,10 @@ home / docs / ports / commits / download / development / community / donate
-<- back to docs -

Install Alice

Here is a guide to installing Alice Linux on your computer using the chroot method. You can do this from your existing Linux distribution or from a live environment, such as Alice Live or another Linux distribution. Make sure your chosen environment has the necessary partitioning tools, filesystem tools, and extraction tools.

Get Alice rootfs tarball

-

Download the Alice rootfs tarball from the download page, along with its sha256sum file.

+

Download the Alice rootfs tarball from the release page, along with its sha256sum file.

$ curl -O <url>
 $ curl -O <url>.sha256sum
 
@@ -210,31 +208,31 @@ alicelinux-rootfs-20240525.tar.xz: OK
# /mnt/alice/usr/bin/apkg-chroot /mnt/alice
 

Any further commands after this will be executed inside the Alice environment.

-

Configure apkg

-

Once we have the repositories cloned, we need to configure apkg. apkg is Alice's package build system (or package manager). apkg configuration is environment-based -- settings are exported as environment variables. Place them in /etc/profile.d/apkg.sh for system-wide configuration, or in ~/.profile for per-user configuration.

+

Configure apkg.conf

+

Once we have the repositories cloned, we need to configure apkg. apkg is Alice's package build system (or package manager). By default, Alice does not provide an apkg config file (yes, apkg can work without a config file), but we need to create one. The apkg config file should be located at /etc/apkg.conf by default. Let's create one.

First, we set CFLAGS and CXXFLAGS. Alice base packages are built using -O3 -march=x86-64 -pipe. You can use these settings or change them to your preference.

-
# echo 'export CFLAGS="-O3 -march=x86-64 -pipe"' >> /etc/profile.d/apkg.sh
+
# echo 'export CFLAGS="-O3 -march=x86-64 -pipe"' >> /etc/apkg.conf
 

And use whats in CFLAGS for CXXFLAGS.

-
# echo 'export CXXFLAGS="$CFLAGS"' >> /etc/profile.d/apkg.sh
+
# echo 'export CXXFLAGS="$CFLAGS"' >> /etc/apkg.conf
 

Next set MAKEFLAGS. I will use 6 for my 8 threads machine.

-
# echo 'export MAKEFLAGS="-j6"' >> /etc/profile.d/apkg.sh
+
# echo 'export MAKEFLAGS="-j6"' >> /etc/apkg.conf
 

I'm also going to set NINJAJOBS here. Without it, ninja will use all threads of your machine when compiling.

-
# echo 'export NINJAJOBS="6"' >> /etc/profile.d/apkg.sh
+
# echo 'export NINJAJOBS="6"' >> /etc/apkg.conf
 

Next, we need to set the package's build scripts path (I'll call it package repos) so apkg can find them. The APKG_REPO variable can accept multiple values for multiple package repos.

Alice provides two (2) package repos (at the time of this writing): core and extra. core contains all base packages, and extra includes other packages beyond the base.

I'm gonna use directory /var/lib/repos/core and /var/lib/repos/extra for core and extra repos respectively.

-
# echo 'export APKG_REPO="/var/lib/repos/core /var/lib/repos/extra"' >> /etc/profile.d/apkg.sh
+
# echo 'APKG_REPO="/var/lib/repos/core /var/lib/repos/extra"' >> /etc/apkg.conf
 

You can also create a directory the community repo.

NOTE: The community repo is not held to the same standards as the official repos. Additionally all repo paths must be declared in the APKG_REPO variable, separated by a single space.

-
# echo 'export APKG_REPO="/var/lib/repos/core /var/lib/repos/extra /var/lib/repos/community"' >> /etc/profile.d/apkg.sh
+
# echo 'APKG_REPO="/var/lib/repos/core /var/lib/repos/extra /var/lib/repos/community"' >> /etc/apkg.conf
 

Next, we will set up directories for packages, sources, and work. By default, these directories are inside the package template, but we will change them to /var/cache/pkg, /var/cache/src, and /var/cache/work respectively. You can change these to any location where you want to store these files.

First, create the directories.

@@ -242,21 +240,21 @@ Additionally all repo paths must be declared in the APKG_REPO variable, separate # mkdir -p /var/cache/src # mkdir -p /var/cache/work
-

Then add these paths to /etc/profile.d/apkg.sh.

-
# echo 'export APKG_PACKAGE_DIR=/var/cache/pkg' >> /etc/profile.d/apkg.sh
-# echo 'export APKG_SOURCE_DIR=/var/cache/src' >> /etc/profile.d/apkg.sh
-# echo 'export APKG_WORK_DIR=/var/cache/work' >> /etc/profile.d/apkg.sh
+

Then add these paths to /etc/apkg.conf.

+
# echo 'APKG_PACKAGE_DIR=/var/cache/pkg' >> /etc/apkg.conf
+# echo 'APKG_SOURCE_DIR=/var/cache/src' >> /etc/apkg.conf
+# echo 'APKG_WORK_DIR=/var/cache/work' >> /etc/apkg.conf
 
-

Configure reposync

-

reposync is a tool to sync package templates from git repositories. Like apkg, reposync configuration is environment-based. Add remote repos for core and extra to /etc/profile.d/reposync.sh (system-wide) or ~/.profile (per-user). The format is <gitrepo>|<branch>|<localpath>.

-
# echo 'export REPOSYNC_CORE="https://codeberg.org/emmett1/alicelinux|core|/var/lib/repos/core"' >> /etc/profile.d/reposync.sh
-# echo 'export REPOSYNC_EXTRA="https://codeberg.org/emmett1/alicelinux|extra|/var/lib/repos/extra"' >> /etc/profile.d/reposync.sh
+

Configure reposync.conf

+

reposync is a tool to sync package templates from git repositories. Add remote repos for core and extra into /etc/reposync.conf. The format of remote repos in reposync.conf is <gitrepo>|<branch>|<localpath>.

+
# echo 'https://codeberg.org/emmett1/alicelinux|core|/var/lib/repos/core' >> /etc/reposync.conf
+# echo 'https://codeberg.org/emmett1/alicelinux|extra|/var/lib/repos/extra' >> /etc/reposync.conf
 

If you also want the community repo, add it as well.

NOTE: The community repo is not held to the same standards as the official repos.

-
# echo 'export REPOSYNC_COMMUNITY="https://codeberg.org/emmett1/alicelinux|community|/var/lib/repos/community"' >> /etc/profile.d/reposync.sh
+
# echo 'https://codeberg.org/emmett1/alicelinux|community|/var/lib/repos/community' >> /etc/reposync.conf
 

Now run reposync to sync latest package templates.

# reposync
@@ -309,6 +307,14 @@ NOTE: apkg -a prints all installed packages on the system.

If your hardware requires firmware, install it using.

# apkg -I linux-firmware
 
+

Install bootloader

+

In this guide, I'm going to use grub as the bootloader. Install grub.

+
# apkg -I grub
+
+

Then generate grub config.

+
# grub-install /dev/sdX
+# grub-mkconfig -o /boot/grub/grub.cfg
+

Hostname

Change alice to the hostname of your choice.

# echo alice > /etc/hostname
@@ -345,6 +351,20 @@ Create a symlink from /etc/sv/<service> to /var/service
 

Set the password for the root user.

# passwd
 
+

Networking

+

You might want to set up networking before rebooting. For wifi connection, install wpa_supplicant.

+
# apkg -I wpa_supplicant
+
+

Configure your SSID.

+
# wpa_passphrase <YOUR SSID> <ITS PASSWORD> >> /etc/wpa_supplicant.conf
+
+

Enable the service.

+
# ln -s /etc/sv/wpa_supplicant /var/service
+
+

Then configure & enable udhcpc service.

+
# vi /etc/sv/udhcpc/conf
+# ln -s /etc/sv/udhcpc /var/service
+

Timezone

Install tzdata.

# apkg -I tzdata
@@ -356,10 +376,6 @@ Create a symlink from /etc/sv/<service> to /var/service
 
# cp /usr/share/zoneinfo/Asia/Kuala_Lumpur /etc/localtime
 # apkg -r tzdata
 
-

Install bootloader

-

See the bootloader documentation for installing and configuring a bootloader.

-

Networking

-

See the networking documentation for setting up networking.

Reboot and enjoy!

Exit the chroot environment and unmount the Alice partition, then reboot.

# exit
@@ -373,8 +389,6 @@ Create a symlink from /etc/sv/<service> to /var/service
 
  • Use revdep to scan for broken libraries and binaries after system upgrades and package removals. You can use revdep -v to print out missing required libraries, and use apkg -f -u $(revdep) to scan and rebuild broken packages.
  • Run updateconf to update config files in /etc after package upgrades.
  • - -<- back to docs

    Copyright © Alice Linux, 2024-2026

    diff --git a/docs/networking.html b/docs/networking.html index d641a353..324ea4f9 100644 --- a/docs/networking.html +++ b/docs/networking.html @@ -179,8 +179,6 @@ home / docs / ports / commits / download / development / community / donate
    -<- back to docs -

    Networking

    This document describes how to configure networking on Alice Linux using eiwd/wpa_supplicant + udhcpc/dhcpcd.


    @@ -311,8 +309,6 @@ DisablePeriodicScan=true # ln -s /etc/sv/wpa_supplicant /var/service # ln -s /etc/sv/udhcpc /var/service
    - -<- back to docs

    Copyright © Alice Linux, 2024-2026

    diff --git a/docs/packagemanager.html b/docs/packagemanager.html index af1e1b6c..076a0141 100644 --- a/docs/packagemanager.html +++ b/docs/packagemanager.html @@ -179,8 +179,6 @@ home / docs / ports / commits / download / development / community / donate
    -<- back to docs -

    Package Manager

    In Alice, two package manager are used, spm and autils. And why two package manager? spm was written for generic package manager for linux distribution. And autils is written specifically for Alice and requires spm in order to install, remove and update packages while managing conflicts. The command apkg (part of autils) is used to fetch and build packages from ports and their abuild files.

    spm

    @@ -485,8 +483,6 @@ $ apkg-redundantdeps (remove redundant dependencies for depends list) $ apkg-redundantdeps -f
    - -<- back to docs

    Copyright © Alice Linux, 2024-2026

    diff --git a/docs/using_autils.html b/docs/using_autils.html deleted file mode 100644 index 55fdc805..00000000 --- a/docs/using_autils.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - Alice Linux - docs - - - - -
    - -
    -<- back to docs - -

    Using autils

    -

    autils is a collection of POSIX shell scripts for source-based package management on Alice Linux.

    -

    For full command details, see the man pages: man apkg, man reposync, etc.

    -

    Installation

    -
    make install
    -
    -

    This installs all scripts to /usr/bin and man pages to /usr/share/man/man8. Override with:

    -
    make install DESTDIR=/tmp/root PREFIX=/usr/local
    -
    -

    Core concepts

    -

    The package manager, apkg, builds packages from source using abuild recipe files and installs them as .spm packages via the spm(8) backend. Package recipes live in git repositories referenced by the APKG_REPO environment variable.

    -

    Configuration is done through environment variables: there is no config file.

    -

    Basic usage

    -

    Building a package

    -

    From inside a recipe directory:

    -
    cd /path/to/repo/mypkg
    -apkg
    -
    -

    This fetches sources, verifies checksums, builds, and creates a .spm in $APKG_PACKAGE_DIR.

    -

    Installing and upgrading

    -
    apkg -i mypkg          # build and install
    -apkg -i                # same, from inside the recipe directory
    -apkg -I firefox        # install with automatic dependency resolution
    -apkg -u mypkg          # upgrade (rebuild and reinstall)
    -apkg -f mypkg          # force rebuild even if .spm already exists
    -apkg -o mypkg          # download sources only, don't build
    -
    -

    Removing packages

    -
    apkg -r mypkg          # remove a package
    -apkg-purge mypkg       # show what would be removed (dry-run)
    -apkg-purge -p mypkg    # remove package and its unneeded dependencies
    -
    -

    Searching and listing

    -
    apkg -s icon           # search packages by name pattern
    -apkg -s -v icon        # search with version info
    -apkg -a                # list all installed packages
    -apkg -a -v             # list installed packages with versions
    -apkg -S libpng.so      # find which package owns a file
    -apkg -l                # list outdated packages on the system
    -
    -

    Dependency queries

    -
    apkg -d mypkg          # list direct dependencies of a package
    -apkg -D mypkg          # list all dependencies recursively, in install order
    -apkg -j mypkg          # list packages that depend on mypkg
    -
    -

    System upgrade

    -
    apkg -U
    -
    -

    This checks all installed packages for outdated versions, resolves the full dependency tree, installs any new packages, then upgrades existing ones. Set APKG_NOPROMPT=1 to skip the confirmation prompt (useful for scripting). Packages listed in APKG_MASK are skipped.

    -

    Checksums and file lists

    -
    apkg -g mypkg          # regenerate .shasum file
    -apkg -k mypkg          # regenerate .files list from the .spm
    -
    -

    Triggers

    -

    After installing or upgrading packages, apkg can refresh system caches:

    -
    apkg -t                # run triggers for all installed packages
    -apkg -t mypkg          # run only triggers relevant to mypkg
    -
    -

    Triggers include: fontconfig cache, GDK-Pixbuf loaders, GIO modules, GSettings schemas, GTK input method modules, icon theme cache, udev hardware database, X font indices, desktop MIME cache, and shared MIME database. Each trigger only fires if the package actually provides files that need it.

    -

    Helper scripts

    -

    Package inspection

    -
    apkg-deps mypkg        # show runtime library dependencies (via ldd)
    -apkg-foreign           # list installed packages not found in any repo
    -apkg-orphan            # list packages with no dependents installed
    -
    -

    Cleanup

    -
    apkg-clean             # list stale .spm and source files
    -apkg-clean | xargs rm  # actually remove them
    -apkg-clean -p          # list only stale packages
    -apkg-clean -s          # list only stale sources
    -
    -

    Dependency maintenance

    -
    apkg-redundantdeps mypkg       # find transitive deps listed explicitly
    -apkg-redundantdeps              # check all packages
    -apkg-redundantdeps -f mypkg     # fix by removing redundant entries
    -
    -

    Scaffolding

    -
    apkg-genabuild https://example.com/pkg-1.2.3.tar.gz
    -apkg-genabuild https://github.com/user/repo/archive/v1.0.tar.gz
    -
    -

    Derives name and version from the URL and creates a directory with a skeleton abuild. Recognizes GitHub tag archives, PyPI packages (prefixes python-), and CPAN packages (prefixes perl-). An optional second argument overrides the name.

    -

    Standalone utilities

    -

    revdep: find broken library links

    -

    Scans system binaries and libraries for missing shared library dependencies. Run after major upgrades, especially those with library version bumps.

    -
    revdep         # plain output
    -revdep -v      # verbose progress
    -
    -

    Note: revdep only reports problems; it does not rebuild anything. Use apkg -f to rebuild affected packages.

    -

    updateconf: merge .new config files

    -

    When packages are upgraded, new default config files are installed with a .new suffix to avoid overwriting local changes. Run updateconf as root to interactively handle them:

    -
    updateconf
    -
    -

    For each .new file it shows a diff and prompts:

    -
      -
    • U: update: replace current with new
    • -
    • D: discard: delete the .new file, keep current
    • -
    • E: edit: open current file in $EDITOR (default: vi)
    • -
    • K: keep: leave both files as-is
    • -
    -

    reposync: sync git repositories

    -

    Syncs git-based package repos using REPOSYNC_* environment variables:

    -
    export REPOSYNC_CORE="https://codeberg.org/emmett1/alicelinux.git|main|/var/lib/alicelinux"
    -export REPOSYNC_EXTRA="https://codeberg.org/emmett1/extra.git|main|/var/lib/alicelinux/extra"
    -reposync
    -
    -

    Options:

    -
      -
    • -n: dry-run
    • -
    • -l: log to /var/log/reposync.log
    • -
    • -f: force fresh clones
    • -
    • -h: help
    • -
    -

    Working in a chroot

    -
    apkg-chroot /mnt/alice                  # enter interactive shell
    -apkg-chroot /mnt/alice apkg -i mypkg    # run apkg inside chroot
    -
    -

    Mounts /dev, /proc, /sys, /run, copies /etc/resolv.conf, and cleans up on exit. Must be run as root.

    -

    Environment variables

    -

    Core paths

    -
      -
    • APKG_REPO (default: $PWD): Space-separated repo directories, searched in order
    • -
    • APKG_PACKAGE_DIR (default: $PWD): Where built .spm files are stored
    • -
    • APKG_SOURCE_DIR (default: $PWD): Source tarball cache
    • -
    • APKG_WORK_DIR (default: $PWD): Build working tree (extraction + fakeroot)
    • -
    • APKG_ROOT (default: /): Alternative install root
    • -
    -

    Build behavior

    -
      -
    • APKG_NOPROMPT: Skip confirmation prompt in -I and -U
    • -
    • APKG_KEEP_WORKDIR: Keep build tree on failure (for debugging)
    • -
    • APKG_ALIAS: Dependency substitution: real:alias pairs (e.g. openssl:libressl)
    • -
    • APKG_MASK: Packages to skip during -l and -U
    • -
    -

    Logging

    -
      -
    • APKG_LOG: Enable build logging
    • -
    • APKG_LOG_DIR: Directory for log files (filename: $name.log)
    • -
    -

    Compiler

    -
      -
    • CFLAGS, CXXFLAGS: Compiler flags (used by cmake builds)
    • -
    • CROSS_COMPILE: Prefix for strip (e.g. x86_64-linux-musl-)
    • -
    -

    Common workflows

    -

    Building and installing a new package

    -
    cd $APKG_REPO
    -apkg-genabuild https://example.com/mypkg-1.0.tar.gz
    -cd mypkg
    -# edit abuild as needed, add depends file
    -apkg -I mypkg
    -
    -

    Full system maintenance

    -
    reposync                     # sync repos
    -apkg -U                      # system upgrade
    -revdep                       # check for broken libraries
    -updateconf                   # merge config files
    -apkg-clean | xargs rm        # clean up stale files
    -apkg-orphan                  # review packages to potentially remove
    -
    -

    Debugging a failed build

    -
    APKG_KEEP_WORKDIR=1 apkg -f mypkg
    -# inspect $APKG_WORK_DIR/apkg-src-mypkg and apkg-pkg-mypkg
    -
    - -<- back to docs -
    -

    Copyright © Alice Linux, 2024-2026

    -
    - - diff --git a/docs/writing_abuild.html b/docs/writing_abuild.html deleted file mode 100644 index 3dd20471..00000000 --- a/docs/writing_abuild.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - Alice Linux - docs - - - - -
    - -
    -<- back to docs - -

    Writing an abuild recipe

    -

    An abuild file is a POSIX shell snippet that tells apkg how to build a package. The directory containing it must have the same name as the package.

    -

    See man apkg for full details on all options and environment variables, and man apkg-genabuild for the recipe scaffolding tool.

    -

    To quickly scaffold a new recipe from a source URL, use apkg-genabuild:

    -
    apkg-genabuild https://example.com/mypkg-1.2.3.tar.gz
    -
    -

    This creates the directory and a skeleton abuild with name, version, release, and source already populated.

    -

    Directory structure

    -
    mypkg/
    -  abuild        - package recipe (required)
    -  info          - package metadata template (description, homepage, license, maintainer)
    -  depends       - dependency list, one per line (optional)
    -  preinstall    - script run before the package is built (optional)
    -  postinstall   - script run after the package is installed (optional)
    -  .shasum       - source checksums, auto-generated (regenerate with `apkg -g`)
    -  .files        - package file list, auto-generated (regenerate with `apkg -k`)
    -
    -

    Minimal recipe

    -
    name=mypkg
    -version=1.2.3
    -release=1
    -source="https://example.com/$name-$version.tar.gz"
    -
    -

    Required variables

    -
      -
    • name: package name. Must match the directory name exactly.
    • -
    • version: upstream version string. Use the $name and $version variables in the source URL so updates are easier.
    • -
    • release: an incrementing integer starting at 1. Reset to 1 when version changes. Bump when the package needs a rebuild without a source change.
    • -
    -

    Source formats

    -

    The source variable accepts a whitespace-separated list. Five formats are supported:

    -
      -
    • https://example.com/pkg-1.0.tar.gz: A remote URL, downloaded with curl
    • -
    • mypkg-1.0.tar.gz::https://example.com/v1.0.tar.gz: Custom local filename for a remote URL
    • -
    • https://example.com/pkg.tar.gz::noextract: Download but do not unpack
    • -
    • my-file: A local file in the recipe directory (not downloaded)
    • -
    • (empty): Create a meta/dummy package with only /usr
    • -
    -

    Multiple sources can be specified:

    -
    source="https://example.com/$name-$version.tar.gz
    -        fix-build.patch
    -        default-config::noextract"
    -
    -

    If source is empty, apkg creates a dummy package: useful for meta packages that exist only to pull in dependencies.

    -

    Optional variables

    -

    Build control

    -
      -
    • build_type: force a specific build system instead of auto-detection. One of: meson_build, configure_build, cmake_build, python_build, perlmodule_build, makefile_build.
    • -
    • build_dir: subdirectory within the extracted source tree to enter before building. Useful when a tarball extracts into a differently-named directory.
    • -
    • build_opt: extra flags appended to the build system command. The defaults (--prefix=/usr, --sysconfdir=/etc, etc.) are always included; this adds on top.
    • -
    • skip_patch: set to 1 to skip automatic patch application. Use this if you need to call apply_patch manually from build().
    • -
    • patch_opt: options for patch(1). Default: -p1.
    • -
    -

    Package content control

    -
      -
    • keep_static: set to keep *.a static libraries (removed by default).
    • -
    • keep_libtool: set to keep *.la libtool archives (removed by default).
    • -
    • keep_locale: set to keep locale files in /usr/share/locale and /usr/lib/locale.
    • -
    • keep_doc: set to keep documentation in /usr/share/doc and /usr/doc.
    • -
    • no_strip: set to skip ELF binary and library stripping.
    • -
    -

    Runit services

    -
      -
    • sv: service files to install into /etc/sv. Accepts: -
        -
      • run/etc/sv/$name/run
      • -
      • finish/etc/sv/$name/finish
      • -
      • <name>.run/etc/sv/<name>/run
      • -
      • <name>.finish/etc/sv/<name>/finish
      • -
      • <name>.<ext>/etc/sv/<name>/<ext>
      • -
      -
    • -
    -
    sv="run finish mydaemon.run mydaemon.finish"
    -
    -

    Build hooks

    -

    Custom build function

    -

    If a build() function is defined, it completely replaces the auto-detected build system. Two variables are available:

    -
      -
    • $SRC: where sources were extracted
    • -
    • $PKG: the fakeroot directory where files must be installed
    • -
    -

    Several DESTDIR-style variables are pre-exported: DESTDIR, DEST_DIR, INSTALLROOT, install_root, INSTALL_ROOT.

    -
    build() {
    -    cd "$SRC/$name-$version"
    -    ./configure --prefix=/usr --sysconfdir=/etc
    -    make
    -    make DESTDIR="$PKG" install
    -}
    -
    -

    build() runs with set -ex, so the script exits on any error and prints each command.

    -

    Pre/post build hooks

    -

    Without a build() function, you can use prebuild() and postbuild():

    -
    prebuild() {
    -    sed -i 's/broken/fixed/g' src/whatever.c
    -}
    -
    -postbuild() {
    -    mv "$PKG/usr/bin/wrongname" "$PKG/usr/bin/rightname"
    -}
    -
    -

    The execution order is: prebuild() → auto-detected build system → postbuild().

    -

    Build system auto-detection

    -

    When no build() is defined and no build_type is set, apkg checks for these files in order:

    -
      -
    1. meson.build: meson with LTO, PIE, wrap_mode=nodownload, buildtype=plain
    2. -
    3. configure: autotools ./configure --prefix=/usr --sysconfdir=/etc ...
    4. -
    5. CMakeLists.txt: cmake with Release build type, prefers ninja
    6. -
    7. setup.py: python3 setup.py build && install --root=$PKG
    8. -
    9. Makefile.PL: perl Makefile.PL && make && make install
    10. -
    11. Makefile / makefile / GNUmakefile: raw make with standard variables
    12. -
    -

    The exact flags for each build system are documented in doc/defaultbuildopts.

    -

    Post-build processing

    -

    After compilation, apkg automatically:

    -
      -
    • Compresses man pages (man1–man8 only, gzip) and info pages
    • -
    • Removes common conflict files: fonts.dir, fonts.scale, perllocal.pod, charset.alias
    • -
    • Removes static libraries (*.a), libtool archives (*.la), locales, and docs unless the corresponding keep_* variable is set
    • -
    • Strips ELF binaries (--strip-all), shared objects (--strip-unneeded), and static archives (--strip-debug) unless no_strip is set
    • -
    • Installs runit service files from the sv variable
    • -
    -

    The info file

    -

    apkg-genabuild creates an info file alongside the abuild with package metadata:

    -
    description:
    -homepage:
    -license:
    -maintainer: name <name at mail dot com>
    -
    -

    Fill in each field as appropriate. The maintainer line uses the format name <email>.

    -

    The depends file

    -

    One dependency per line. Lines starting with # are comments. Dependencies are just package names: no version constraints.

    -
    # Direct dependencies of mypkg
    -zlib
    -libpng
    -freetype
    -
    -

    Dependencies are recursive: when installing with -I, apkg will resolve the full tree. Only list direct dependencies; transitive ones are handled automatically. Use apkg-redundantdeps to find and clean up transitive entries.

    -

    preinstall / postinstall scripts

    -

    These are optional executable scripts in the recipe directory:

    -
      -
    • preinstall: runs before the package is built (only during apkg -i or apkg -u). Good for pre-flight checks or preparing the system.
    • -
    • postinstall: runs after the package is installed or upgraded. Good for one-time setup that can't be done at build time.
    • -
    -

    If APKG_ROOT is set (alternative install root), these scripts run inside a chroot.

    -

    Checksums and file lists

    -
      -
    • .shasum: sha3sum of each source file, auto-generated on first build. Regenerate with apkg -g <pkg>.
    • -
    • .files: sorted list of every file in the built .spm, auto-generated after packaging. Regenerate with apkg -k <pkg>. Used by apkg -S for file search.
    • -
    -

    Complete example

    -
    name=hello
    -version=2.12.1
    -release=1
    -source="https://ftp.gnu.org/gnu/hello/$name-$version.tar.gz"
    -
    -build() {
    -    cd "$SRC/$name-$version"
    -    ./configure --prefix=/usr
    -    make
    -    make DESTDIR="$PKG" install
    -}
    -
    -

    With a depends file:

    -
    zlib
    -
    -

    With a postinstall script:

    -
    #!/bin/sh
    -echo "hello was installed!"
    -
    -

    Tips

    -
      -
    • Use apkg-genabuild <url> to scaffold a recipe from a source URL quickly.
    • -
    • Use $name and $version in source URLs so bumping the version only requires changing two variables.
    • -
    • Patches (.patch / .diff files) listed in source are applied automatically with patch -p1 before the build. Use patch_opt to change the strip level.
    • -
    • Set APKG_KEEP_WORKDIR=1 in your environment to inspect the build tree when debugging a failed build.
    • -
    - -<- back to docs -
    -

    Copyright © Alice Linux, 2024-2026

    -
    - - diff --git a/ports.html b/ports.html index bd518cf5..4d691705 100644 --- a/ports.html +++ b/ports.html @@ -191,7 +191,7 @@ - + @@ -204,20 +204,20 @@ - + - + - - - + + + @@ -234,7 +234,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -261,7 +261,7 @@ - + @@ -271,7 +271,7 @@ - + @@ -289,20 +289,20 @@ - + - + - + - + @@ -326,10 +326,10 @@ - + - + @@ -358,16 +358,16 @@ - + - + - + @@ -402,7 +402,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -439,14 +439,14 @@ - + - + @@ -455,7 +455,7 @@ - + @@ -471,7 +471,6 @@ - @@ -481,12 +480,12 @@ - + - + -- cgit v1.2.3
    reponameversiondependencies
    coreautils0.1-1
    coreautils0.3-1
    coreb3sum1.3.1-1
    corebaselayout1-1
    corebison3.8.2-1
    coreinitscripts20250910-1
    corelibressl4.3.2-1
    corelinux-headers6.18.18-1
    corellvm22.1.6-1
    corellvm22.1.7-1
    corem41.4.21-1
    coremake4.4.1-1
    coremusl1.2.6-2
    corepatch2.8-1
    corespm20250626-1
    corespm0.1-1
    corexz5.8.3-1
    corezlib-ng2.3.3-1
    corezstd1.5.7-1
    extraacpi1.8-1
    extraadwaita-icon-theme50.0-1gtk3
    extraalsa-lib1.2.15.3-1
    extraalsa-ucm-conf1.2.15.3-1
    extraalsa-utils1.2.15.2-1alsa-lib ncurses
    extraalsa-lib1.2.16-1
    extraalsa-ucm-conf1.2.16-1
    extraalsa-utils1.2.16-1alsa-lib ncurses
    extraarc-theme20221218-1sassc glib
    extraasciinema3.2.0-1rust
    extraat-spi2-core2.60.4-1dbus glib-gi libxml2 libxtst
    extrabubblewrap0.11.2-1libcap
    extrac-ares1.34.6-1
    extracairo1.18.4-1glib pixman fontconfig libxext libxrender
    extracbindgen0.29.2-1rust
    extracbindgen0.29.3-1rust
    extraccache4.13.6-1cmake zstd xxhash fmt
    extracfm0.6.6-1
    extracgroupfs-mount1.4-1
    extradocker-compose5.1.4-1go
    extradosfstools4.2-1
    extradropbear2026.91-1
    extradtc1.8.0-1flex
    extradtc1.8.1-1flex
    extradunst1.13.2-1libnotify libdeflate libxscrnsaver libxinerama
    extrae2fsprogs1.47.4-1
    extraefibootmgr18-1efivar
    extraexpat2.8.1-1
    extraf2fs-tools1.16.0-1
    extrafail2ban1.1.0-1
    extrafast-float8.2.5-1
    extrafast-float8.2.6-1
    extrafcft3.3.3-1fontconfig pixman tllist
    extrafdk-aac2.0.3-1
    extrafff2.2-1bash
    extraflex2.6.4-1
    extrafmt12.1.0-1
    extrafont-awesome6.7.2-1
    extrafontconfig2.18.0-1freetype gperf
    extrafontconfig2.18.1-1freetype gperf
    extrafoot1.27.0-1fcft libxkbcommon
    extrafreetype2.14.3-1libpng
    extrafribidi1.0.16-1
    extraglib-gi2.88.1-1gobject-introspection
    extraglslang16.3.0-1
    extragmp6.3.0-1
    extrago1.26.3-1
    extrago1.26.4-1
    extrago-md2man2.0.2-1go
    extragobject-introspection1.86.0-1glib flex
    extragperf3.3-1
    extragptfdisk1.0.10-1popt e2fsprogs
    extragraphite21.3.14-1
    extragraphite21.3.15-1
    extragrim1.5.0-1pixman libpng scdoc wayland-protocols
    extragrub2.14-1freetype fuse2 flex
    extragtk-layer-shell0.10.1-1gtk3
    extragtk33.24.48-1at-spi2-core gdk-pixbuf libepoxy pango libxkbcommon
    extraharfbuzz14.2.0-1graphite2 glib-gi icu cairo
    extraharfbuzz14.2.1-1graphite2 glib-gi icu cairo
    extrahicolor-icon-theme0.18-1
    extrahtop3.5.1-1libnl-tiny
    extrahwdata0.407-1
    extrahwdata0.408-1
    extrai3blocks1.5-2
    extraicu78.3-1
    extraimage-exiftool13.58-1
    extralibatasmart0.19-1libudev-zero
    extralibburn1.5.8-1
    extralibcap2.78-1linux-pam
    extralibclc22.1.6-1spirv-llvm-translator clang
    extralibclc22.1.7-1spirv-llvm-translator clang
    extralibdeflate1.25-1
    extralibdisplay-info0.3.0-1hwdata
    extralibdrm2.4.133-1libpciaccess
    extralibdrm2.4.134-1libpciaccess
    extralibepoxy1.5.10-1mesa
    extralibevdev1.13.6-1
    extralibevent2.1.12-1
    extralibslirp4.9.3-1glib
    extralibtheora1.2.0-1libvorbis
    extralibtool2.5.4-1
    extralibudev-zero1.0.3-1
    extralibudev-zero1.0.4-1
    extralibuv1.52.1-1
    extralibva2.23.0-1mesa
    extralibvorbis1.3.7-1libogg
    extralibvpx1.16.0-1nasm
    extralibwebp1.6.0-1libjpeg-turbo libpng tiff
    extralibxkbcommon1.13.1-1wayland-protocols xkeyboard-config libxcb
    extralibxkbcommon1.13.2-1wayland-protocols xkeyboard-config libxcb
    extralibxml22.15.3-1icu
    extralighttpd1.4.82-1pcre2
    extralimine12.3.1-1mtools nasm
    extralimine12.3.2-1mtools nasm
    extralinks2.30-1libevent
    extralinux6.18.30-1elfutils flex mkinitrd
    extralinux-firmware20260519-1rdfind parallel
    extranettle3.10.2-1
    extranftables1.1.6-1gmp libnftnl readline
    extranghttp21.69.0-1libxml2
    extranodejs26.2.0-1c-ares libuv nghttp2
    extranodejs26.3.0-1c-ares libuv nghttp2
    extranspr4.39-1
    extranss3.124-1nspr
    extrantfs-3g2026.2.25-1fuse2
    extrapopt1.19-1
    extrapqiv2.13.3-1bash gtk3
    extrapython3.14.5-1expat libffi ncurses sqlite
    extrapython-distlib0.4.0-1python-installer python-gpep517
    extrapython-distlib0.4.1-1python-installer python-gpep517
    extrapython-flit-core3.12.0-1python-installer
    extrapython-gpep51719-1
    extrapython-installer1.0.1-1
    extrapython-ply3.11-1
    extrapython-pyyaml6.0.3-1
    extrapython-setuptools82.0.1-1python
    extraqemu11.0.0-1alsa-lib sdl2 pixman libslirp dtc python-distlib
    extraqemu11.0.1-1alsa-lib sdl2 pixman libslirp dtc python-distlib
    extraranger1.9.4-1
    extrardfind1.8.0-1nettle
    extrareadline8.3-1
    extrarover1.0.1-1ncurses
    extrarsync3.4.3-1popt
    extrarunc1.4.2-1libseccomp go-md2man libseccomp
    extrarust1.95.0-1llvm
    extrarust1.96.0-1llvm
    extrasamurai1.2-1
    extrasassc3.6.2-1libsass
    extrascdoc1.11.4-1
    extrasdl22.32.10-1
    extraseatd0.9.3-1
    extrasff1.3-1ncurses
    extrasfm0.5-1
    extrasfm0.6-1
    extrasfwbar1.0_beta16.1-1json-c gtk-layer-shell
    extrashared-mime-info2.4-1glib libxml2 gettext-tiny
    extrashfm0.4.2-1
    extraspirv-tools1.4.341.0-1spirv-headers
    extrasqlite3.53.1-1
    extrasquashfs-tools4.7.5-1lzo zstd lz4
    extrassu0.3.2-1
    extrastagit1.2-1libgit2
    extrastrace7.0-1
    extrasway1.12-1wlroots json-c pango
    extratiff4.7.1-1
    extratllist1.1.0-1
    extratlp1.10.1-1
    extrator0.4.9.8-1libevent
    extrator0.4.9.9-1libevent
    extratorsocks2.5.0-1
    extratty-clock2.3-1
    extratzdata2026b-1
    extraunrar7.2.6-1
    extravim9.2.0541-1
    extravim9.2.0588-1
    extravsv2.0.0-1rust
    extrawayland1.25.0-1libxml2 libffi
    extrawayland-protocols1.48-1wayland