5.5 KiB
My personalized Arch Linux packages
Submodules
There are several AUR packages added as submodules inside pkg:
AUR=(xorg-meta xournalpp-git qt-installer-framework riseup-vpn nordic-kde-git)
for pkg in "${AUR[@]}"; do
git submodule add "https://aur.archlinux.org/${pkg}.git" pkg/"${pkg}"
done
Notes:
qt-installer-framework
does currently not build (the docs fail :/):
To update all submodules, run
git submodule update --remote
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 build-pkg/out to arrayLOCAL_PKG_DIRS
as the build packages will be stored there. - For your mirror-server, adjust section
REMOTE MIRROR SERVER CONFIGURATION
accordingly.
- For your build-machine, adjust section
- 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-all.sh
Some notes on arch (meta-)package management
Managing custom packages; managing a remote repository
- One could use crema
- 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
holo
from the AUR- https://github.com/holocm/holo/blob/master/doc/holo-files.8.pod
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
- systemd.preset - Service enablement presets
- man 5 systemd.preset
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
andde-p1st-test3
) providede-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:
-
How does Pacman pick the default option? Are packages simply ordered alphabetically?
-
split up the "base" package:
- base-headless (no fonts required)
- base-graphical (depends on base-headless)
-
remove "de-p1st-grub" from base
- just one "base" package for both: BIOS and (U)EFI installation!
-
installer: support BIOS boot mode
-
installer: Option to disable full disk encryption
-
for each PKG: built with docker then sign wit pgp
- signed package db
-
build for multiple architectures
-
de-p1st-pacman -> ungoogled-chromium