arkdep/README.md

121 lines
5.9 KiB
Markdown
Raw Normal View History

2023-09-21 21:51:57 +02:00
# arkdep
2023-08-09 12:59:28 +02:00
A toolkit for building, deploying and maintaining a btrfs-based multi-root system.
2023-08-14 07:27:35 +02:00
2023-10-24 11:49:11 +02:00
arkdep attempts to be as simple to use as possible and avoid unnecessary abstraction, if you know how to use GNU/Linux picking up arkdep should be painless for it maintains much of your old familiar workflow.
2023-10-23 17:46:23 +00:00
## Usage
### Rolling out arkdep on a new system
> **Note** arkdep has as of now only been tested on Arch Linux-based systems
arkdep can be easily rolled out and torn down again, it is non-invasive by design. So it _should_ be safe to just toy around with it on your system.
System requirements;
- `/` is partitioned with btrfs
- `/boot` mounted boot partition
- Systemd-boot bootloader is installed and configured as the primary bootloader
- dracut, wget and curl are installed
The following command will initialize arkdep, it will deploy a subvolume containing all arkdep related files excluding kernels and initramfs to `/arkdep`. Kernel and initramfs will instead be stored in `/boot/arkdep` upon generation.
```shell
sudo arkdep init
```
Once ardep is installed you should prepare the overlay located at `/arkdep/overlay`. The overlay is copied directory on to the root filesystem of a new deployment, create directories inside of it as-if it were a root filesystem. For example, `/arkdep/overlay/etc` will be your `/etc` folder.
You will most likely wish to add the following to the overlay;
- passwd, shadow, group, subgid and subuid files
- Optionally an fstab, locale.conf/locale.gen and custom dracut configuration
Here is a reference fstab file, take note of the `subvol` mount option;
```shell
UUID=f8b62c6c-fba0-41e5-b12c-42aa1cdaa452 /home btrfs rw,relatime,ssd,discard=async,space_cache=v2,subvol=arkdep/shared/home,compress=zstd 0 0
UUID=f8b62c6c-fba0-41e5-b12c-42aa1cdaa452 /var btrfs rw,relatime,ssd,discard=async,space_cache=v2,subvol=arkdep/shared/var,compress=zstd 0 0
UUID=f8b62c6c-fba0-41e5-b12c-42aa1cdaa452 /arkdep btrfs rw,relatime,ssd,discard=async,space_cache=v2,subvol=arkdep,compress=zstd 0 0
2023-10-24 13:11:38 +00:00
UUID=1223-2137 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
2023-10-23 17:46:23 +00:00
```
If you wish to use custom kernel parameters you can edit `/arkdep/templates/systemd-boot`
### Deploying an image
To deploy the latest available image from the default repository run the following command;
```shell
sudo arkdep deploy
```
It will check in with the server defined in `/arkdep/config` as `repo_url` and pull the latest image defined in `$repo_url/database`, see [Repository](#Repository) for additional information.
### Deploying a specified image version
A specific image version to pull and deploy can be parsed like so;
```shell
sudo arkdep deploy 00ce35074659538f946be77d9efaefc37725335689
```
Simply provide the basename of the image and it will attempt to find it in `/database`.
You do not have to provide the full basename, you can provide it with an impartial basename, the first hit will be pulled and deployed.
```shell
sudo arkdep deploy 00ce
```
2023-08-14 07:27:35 +02:00
## Packaging
### Custom configurations
#### Arch Linux-based
```text
2023-09-21 21:51:57 +02:00
arkdep-build.d
2023-08-14 07:29:46 +02:00
├── customlinux # Directory carrying a custom name
2023-08-14 08:38:13 +02:00
| ├── overlay # (Optional) Root filesystem overlay directory, contents are copied to root
2023-08-14 07:29:46 +02:00
| ├── base.list # Plain text file containing list of packages installed by pacstrap
| ├── package.list # (Optional) Plain text file containing list of packages installed by pacman
| ├── systemd.services # (Optional) Plain text file containing list of systemd services to enable
| ├── type # Plain text file, for configs of the Arch type should contain `archlinux`
2023-08-14 07:27:35 +02:00
```
### Building an image
2023-09-21 21:51:57 +02:00
Use the arkdep-build script to build your customlinux images.
2023-08-14 07:27:35 +02:00
```shell
2023-09-21 21:51:57 +02:00
sudo arkdep-build customlinux
2023-08-14 08:24:10 +02:00
2023-08-14 08:24:46 +02:00
# Or alternatively using a custom image name
sudo ARKDEP_CUSTOM_NAME='customlinux_v1.0' arkdep-build customlinux
2023-08-14 07:27:35 +02:00
```
Once done you can find compressed and uncompressed copies of your new image in the `target` directory.
arkdep will by default generate a psuedo-random hex string and use this as the name of your image. This behaviour can be overwritten by assigning a custom name to the `ARKDEP_CUSTOM_NAME` environment variable.
2023-08-15 10:31:34 +02:00
## Repository
2023-08-15 10:34:15 +02:00
### Example repository layout
2023-09-21 21:51:57 +02:00
This would be a suitable layout if `repo_url` in `/arkdep/config` is set to `https://repo.example.com/arkdep`.
2023-08-15 10:31:34 +02:00
```text
repo.example.com
2023-09-21 21:51:57 +02:00
├── arkdep
2023-08-15 10:32:55 +02:00
| ├── list # Plain text file containing names of all available image types
2023-08-15 10:31:34 +02:00
| ├── customlinux
2023-08-15 10:32:55 +02:00
| | ├── database # Plain text file containing : delimited lists of all available images `image_name:compression_method:sha1sum`
2023-08-15 10:32:23 +02:00
| | ├── customlinux_v1.0.tar.zst # Compressed disk images
2023-08-15 10:36:30 +02:00
| | ├── customlinux_v2.0.tar.zst # Compressed disk images
2023-08-15 10:31:34 +02:00
```
### Example repository configuration
2023-09-21 17:05:47 +02:00
The `list` file is in part optional, it not utilized during the deployment process but the user may use it in combination with the `arkdep list` command to request a list of all available images in the repository.
2023-08-15 10:31:34 +02:00
```text
customlinux
customlinux-gnome
customlinux-kde
```
2023-08-15 10:45:13 +02:00
The `database` file contains a `:` delimited list of all available images. Each line contains the following information `image_name:compression_method:sha1sum`.
2023-08-15 10:31:34 +02:00
```text
customlinux_v2.0:zst:d5f45b2dac77399b37231c6ec4e864d184d35cf1
2023-08-15 10:45:13 +02:00
customlinux_v1.0:zst:80ba4c7f3ff7a0ebce8e67d5b73f87c56af1b9f3
2023-08-15 10:32:23 +02:00
```
2023-09-21 17:05:47 +02:00
The image name is used to find the actual image, users can also manually refer to a version with `arkdep deploy customlinux customlinux_v1.0`
2023-08-15 10:45:13 +02:00
2023-10-24 11:49:11 +02:00
The compression method is flexible, any compression method tar can infer is supported. Some examples being `xz`, `gz` and `zst`.
2023-08-15 10:45:13 +02:00
The sha1sum is used to ensure the file was downloaded properly.
2023-09-21 21:51:57 +02:00
arkdep will assume the top most entry in the database is the latest one, when no image version is defined or `latest` is requested it will grab the top most entry.
2023-09-19 21:49:17 +02:00