2021-04-22 11:49:06 +02:00
# My personalized Arch Linux packages
2021-04-19 21:56:06 +02:00
2021-06-16 16:12:02 +02:00
## Submodules
There are several AUR packages added as submodules inside [pkg ](pkg ):
```shell
git submodule add "https://aur.archlinux.org/riseup-vpn.git" pkg/riseup-vpn
```
To update all submodules, run
```shell
git submodule update --remote
```
2021-05-14 14:50:43 +02:00
## Build packages from source
Fork this repository.
Then and adjust the following files:
* [pkg/de-p1st-repo/arch-repo.cfg ](pkg/de-p1st-repo/arch-repo.cfg )
2021-06-16 16:12:02 +02:00
* For your build-machine, adjust section `LOCAL MACHINE CONFIGURATION` : Add absolute path of folder [build-pkg/out ](build-pkg/out ) to array `LOCAL_PKG_DIRS`
2021-05-14 14:50:43 +02:00
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 ](pkg/de-p1st-pacman/pacman.d/de-p1st )
* Add the address of your mirror-server.
Build [de-p1st-repo ](pkg/de-p1st-repo ) ...
```shell
2021-06-12 12:16:10 +02:00
cd build-pkg
sudo docker-compose run --rm makepkg de-p1st-repo
2021-05-14 14:50:43 +02:00
```
... and install it on your build-machine and your mirror-server:
```shell
# 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:
```shell
2021-06-14 20:16:40 +02:00
./build-all.sh
2021-05-14 14:50:43 +02:00
```
## Some notes on arch (meta-)package management
2021-04-19 21:56:06 +02:00
2021-04-22 21:17:17 +02:00
* https://disconnected.systems/blog/archlinux-meta-packages/
* https://nerdstuff.org/posts/2020/2020-002_meta_packages/
2021-04-22 21:19:29 +02:00
* https://gitlab.com/archi3linux/meta/-/blob/master/PKGBUILD
* https://github.com/alfredopalhares/arch-pkgbuilds
2021-04-26 19:04:35 +02:00
### Managing custom packages; managing a remote repository
2021-04-22 21:23:34 +02:00
1) One could use [crema ](https://gitlab.com/mipimipi/crema )
2021-05-20 19:33:54 +02:00
2) Or some self-made shell scripts: [pkg/de-p1st-repo/README.md ](pkg/de-p1st-repo/README.md )
2021-04-22 21:23:34 +02:00
2021-04-26 19:04:35 +02:00
## Notes about PKGBUILD
2021-04-20 10:34:01 +02:00
### Package naming
2021-04-19 21:56:06 +02:00
* [package naming ](https://wiki.archlinux.org/index.php/Arch_package_guidelines#Package_naming )
Package names are prefixed with `de-p1st` as this is one of my
2021-04-26 19:06:31 +02:00
domains ([p1st.de](https://p1st.de)) which itself is an abbreviation of
[privacy1st.de ](https://privacy1st.de )
2021-04-20 10:32:43 +02:00
2021-04-26 19:04:35 +02:00
### Creating config files
2021-04-21 21:49:21 +02:00
```shell
install -Dm644 $src $pkgdir/$dst
```
2021-04-20 10:32:43 +02:00
2021-04-26 19:04:35 +02:00
Example: [pkg/de-p1st-sudo/PKGBUILD ](pkg/de-p1st-sudo/PKGBUILD )
2021-04-20 10:32:43 +02:00
2021-04-26 19:04:35 +02:00
### Changing existing config files
2021-04-21 21:49:21 +02:00
2021-04-22 21:07:47 +02:00
* `holo` from the AUR
2021-04-26 19:04:35 +02:00
* [https://github.com/holocm/holo/blob/master/doc/holo-files.8.pod]()
```shell
install -Dm0544 some-config.conf.holoscript "$pkgdir"/usr/share/holo/files/"$pkgname"/etc/path/to/some-config.conf.holoscript
```
2021-04-22 21:07:47 +02:00
2021-04-26 19:04:35 +02:00
Example:
* [pkg/de-p1st-pacman/pacman.conf.holoscript ](pkg/de-p1st-pacman/pacman.conf.holoscript )
* [pkg/de-p1st-pacman/PKGBUILD ](pkg/de-p1st-pacman/PKGBUILD )
2021-04-21 21:49:21 +02:00
2021-05-22 13:36:23 +02:00
### Changing config files that are not owned by any package
2021-05-13 19:23:32 +02:00
See [pkg/de-p1st-locale/PKGBUILD ](pkg/de-p1st-locale/PKGBUILD ) for an example.
2021-04-26 19:04:35 +02:00
### Home skeleton
2021-04-20 10:32:43 +02:00
2021-04-29 14:54:30 +02:00
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.
2021-04-29 14:49:02 +02:00
Example: [pkg/de-p1st-gnupg/PKGBUILD ](pkg/de-p1st-gnupg/PKGBUILD )
2021-04-21 21:49:21 +02:00
2021-05-01 17:04:27 +02:00
### Enabling services
2021-04-21 21:49:21 +02:00
2021-04-23 12:55:23 +02:00
* systemd.preset - Service enablement presets
* [man 5 systemd.preset ](https://www.systutorials.com/docs/linux/man/5-systemd.preset/ )
2021-05-22 13:36:23 +02:00
**Note**: the preset name shall start with a two-digit number < 99.
2021-05-03 18:53:10 +02:00
2021-04-26 19:04:35 +02:00
```shell
2021-05-03 18:45:52 +02:00
install -Dm0644 systemd.preset "$pkgdir"/usr/lib/systemd/system-preset/20-"$pkgname".preset
2021-04-26 19:04:35 +02:00
```
2021-04-23 12:55:23 +02:00
2021-04-26 19:04:35 +02:00
Example package:
* [pkg/de-p1st-networkmanager/systemd.preset ](pkg/de-p1st-networkmanager/systemd.preset )
* [pkg/de-p1st-networkmanager/PKGBUILD ](pkg/de-p1st-networkmanager/PKGBUILD )
2021-05-04 16:52:34 +02:00
2021-06-13 00:56:56 +02:00
**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!
```shell
echo 'enable NetworkManager.service' | sudo tee -a /usr/lib/systemd/system-preset/20-custom.preset
sudo systemctl preset-all
```
2021-05-04 16:52:34 +02:00
### 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):
```
2021-05-13 17:44:02 +02:00
2021-05-20 19:33:54 +02:00
---
**TODO**:
* How does Pacman pick the default option? Are packages simply
2021-06-13 15:15:29 +02:00
ordered alphabetically?
2021-06-14 21:49:44 +02:00
* 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!
2021-06-14 21:05:29 +02:00
* installer: support BIOS boot mode
2021-06-14 20:47:07 +02:00
* installer: Option to disable full disk encryption
2021-05-22 13:48:59 +02:00
* for each PKG: built with docker then sign wit pgp
2021-06-14 14:46:29 +02:00
* signed package db
2021-06-13 15:15:29 +02:00
* build for multiple architectures
* https://ownyourbits.com/2018/06/27/running-and-building-arm-docker-containers-in-x86/
* https://ownyourbits.com/2018/06/27/running-and-building-arm-docker-containers-in-x86/#comment-19124
2021-06-14 20:47:07 +02:00
* de-p1st-pacman -> ungoogled-chromium
* https://github.com/ungoogled-software/ungoogled-chromium-archlinux#open-build-service-repository
2021-06-13 15:15:29 +02:00