diff options
| author | emmett1 <me@emmett1.my> | 2026-06-02 23:52:35 +0800 |
|---|---|---|
| committer | emmett1 <me@emmett1.my> | 2026-06-02 23:52:35 +0800 |
| commit | bfb2eac6d9bf99f3b00910252df8d0fda915ae7d (patch) | |
| tree | c4b8de7a8ae3600cd608a349f61fcb3683fa48fc /docs/using_autils.md | |
| parent | cde4ac9cad12e1d5e4bc5b2336f43ca3fff323e4 (diff) | |
| download | alicelinux-bfb2eac6d9bf99f3b00910252df8d0fda915ae7d.tar.gz alicelinux-bfb2eac6d9bf99f3b00910252df8d0fda915ae7d.zip | |
docs updated
Diffstat (limited to 'docs/using_autils.md')
| -rw-r--r-- | docs/using_autils.md | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/docs/using_autils.md b/docs/using_autils.md new file mode 100644 index 00000000..bbf2ce69 --- /dev/null +++ b/docs/using_autils.md @@ -0,0 +1,245 @@ +# 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 + +```sh +make install +``` + +This installs all scripts to `/usr/bin` and man pages to `/usr/share/man/man8`. Override with: + +```sh +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: + +```sh +cd /path/to/repo/mypkg +apkg +``` + +This fetches sources, verifies checksums, builds, and creates a `.spm` in `$APKG_PACKAGE_DIR`. + +### Installing and upgrading + +```sh +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 + +```sh +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 + +```sh +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 + +```sh +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 + +```sh +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 + +```sh +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: + +```sh +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 + +```sh +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 + +```sh +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 + +```sh +apkg-redundantdeps mypkg # find transitive deps listed explicitly +apkg-redundantdeps # check all packages +apkg-redundantdeps -f mypkg # fix by removing redundant entries +``` + +### Scaffolding + +```sh +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. + +```sh +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: + +```sh +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: + +```sh +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 + +```sh +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 + +```sh +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 + +```sh +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 + +```sh +APKG_KEEP_WORKDIR=1 apkg -f mypkg +# inspect $APKG_WORK_DIR/apkg-src-mypkg and apkg-pkg-mypkg +``` |