mkosi -i-t directory -o /var/lib/machines/$img_name |& tee build_$img_name.log
```
**Alternative: Build image using manual `dnf --installroot`**
```bash
img_name=xcache-$(date +%Y-%m-%d-%H%M)
build_image.sh /var/lib/machines/$img_name
```
**after building the image don't forget to [set the permissions for the image](#set-permissions-for-image)**
# Create xrootd user in host system
We will map the xrootd user id inside the container to one shifted by 65536 * 10 on the host system. This is an arbitrary choice and one should check this range of user ids is not used by anything else. One also has to be careful that the xrootd user id does not change when a new image is built. The image building script now force sets the user id to 1000 so this should be fine. See [[Migrate xrootd user]] for how to change the host xrootd user later if needed.
```bash
# for some reason that command might add a carriage return (therefore the sed) ...
To be able to mount the image read-only the permissions need to be set correctly once. This can be achieved with the following command
```
systemd-nspawn --volatile=no --private-users-chown --private-users=655360 -D /var/lib/machines/$img_name ls -la /
```
# Copy xcache robot certificates to `/root/.globus` and add `/etc/vomses`
# Directories for bind mounts
Create directories for bind mounts and make them owned by xrootd where nescessary. Here one needs to check that the data directory is the correct path (e.g. the path where the raid system is mounted) and possibly adjust the bind mount in `/etc/systemd/nspawn/xcache.nspawn`
Note: Assuming the data directories are under `/srv/xache` and are as configured in `/etc/xrootd/xcache.cfg`
Then, to checkout the files in git into the root filesystem (`/`):
```bash
# remove everything, except .git
rm-r*
# checkout files to /
git config core.worktree /
git reset --hard
# list tracked files
git ls-files /
# remove README
rm /README.md
git update-index --assume-unchanged /README.md
```
# Build image (using mkosi)
```bash
cd /var/local/mkosi
# if not existing yet
mkdir mkosi.cache
# generate image
img_name=xcache-$(date +%Y-%m-%d-%H%M)
mkosi -i-t directory -o /var/lib/machines/$img_name |& tee build_$img_name.log
```
**Alternative: Build image using manual `dnf --installroot`**
```bash
img_name=xcache-$(date +%Y-%m-%d-%H%M)
build_image.sh /var/lib/machines/$img_name
```
**after building the image don't forget to [set the permissions for the image](#set-permissions-for-image)**
# Create xrootd user in host system
We will map the xrootd user id inside the container to one shifted by 65536 * 10 on the host system. This is an arbitrary choice and one should check this range of user ids is not used by anything else. One also has to be careful that the xrootd user id does not change when a new image is built. The image building script now force sets the user id to 1000 so this should be fine. See [[Migrate xrootd user]] for how to change the host xrootd user later if needed.
```bash
# for some reason that command might add a carriage return (therefore the sed) ...
To be able to mount the image read-only the permissions need to be set correctly once. This can be achieved with the following command
```
systemd-nspawn --volatile=no --private-users-chown --private-users=655360 -D /var/lib/machines/$img_name ls -la /
```
# Copy xcache robot certificates to `/root/.globus` and add `/etc/vomses`
# Directories for bind mounts
Create directories for bind mounts and make them owned by xrootd where nescessary. Here one needs to check that the data directory is the correct path (e.g. the path where the raid system is mounted) and possibly adjust the bind mount in `/etc/systemd/nspawn/xcache.nspawn`
Note: Assuming the data directories are under `/srv/xache` and are as configured in `/etc/xrootd/xcache.cfg`