arch/README.md

4.7 KiB

My personalized Arch Linux packages

Build packages from source

Fork this repository.

Then and adjust the following files:

  • pkg/de-p1st-repo/arch-repo.cfg
    • For your build-machine, adjust section LOCAL MACHINE CONFIGURATION: Add absolute path of folder ./out to array LOCAL_PKG_DIRS as the build packages will be stored there.
    • For your mirror-server, adjust section REMOTE MIRROR SERVER CONFIGURATION accordingly.
  • pkg/de-p1st-pacman/pacman.d/de-p1st
    • Add the address of your mirror-server.

Build de-p1st-repo ...

cd build-pkg
sudo docker-compose run --rm makepkg de-p1st-repo

... and install it on your build-machine and your mirror-server:

# on your local machine
sudo pacman -U out/de-p1st-repo*.pkg.tar.*

# copy the package to your mirror-server and install it there as well

Then you can start building all packages and adding them to your mirror-server:

./build-pkg-docker.sh

Some notes on arch (meta-)package management

Managing custom packages; managing a remote repository

  1. One could use crema
  2. Or some self-made shell scripts: pkg/de-p1st-repo/README.md

Notes about PKGBUILD

Package naming

Package names are prefixed with de-p1st as this is one of my domains (p1st.de) which itself is an abbreviation of privacy1st.de

Creating config files

install -Dm644 $src $pkgdir/$dst

Example: pkg/de-p1st-sudo/PKGBUILD

Changing existing config files

install -Dm0544 some-config.conf.holoscript "$pkgdir"/usr/share/holo/files/"$pkgname"/etc/path/to/some-config.conf.holoscript

Example:

Changing config files that are not owned by any package

See pkg/de-p1st-locale/PKGBUILD for an example.

Home skeleton

Pacman should never change files in $HOME. To still be able to include customized configurations, one can copy them to the skeleton used for new users:

Files from /etc/skel are copied to /home/$USER when new users are created.

Example: pkg/de-p1st-gnupg/PKGBUILD

Enabling services

Note: the preset name shall start with a two-digit number < 99.

install -Dm0644 systemd.preset "$pkgdir"/usr/lib/systemd/system-preset/20-"$pkgname".preset

Example package:

Note:

Running systemctl preset-all resets all installed unit files to the defaults configured in the preset policy files.

This implies: All manual changes such as systemctl enable serviceXYZ will get lost!

To avoid this, enable your services with systemd-presets!

echo 'enable NetworkManager.service' | sudo tee -a /usr/lib/systemd/system-preset/20-custom.preset
sudo systemctl preset-all

Multiple providers

Example:

  • Two packages (de-p1st-test2 and de-p1st-test3) provide de-p1st-test
  • If one installs de-p1st-test he can interactively choose one which provider to select:
$ sudo pacman -S de-p1st-test
:: There are 2 providers available for de-p1st-test:
:: Repository de-p1st
   1) de-p1st-test2  2) de-p1st-test3

Enter a number (default=1): 

TODO: