88 lines
3.2 KiB
Bash
Executable File
88 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
set -o errexit -o pipefail -o noclobber -o nounset -o errtrace -o functrace
|
|
|
|
shopt -s dotglob
|
|
|
|
quadlet_template="
|
|
- path: /home/__USER__/.config/containers/systemd/user/__FILE__
|
|
mode: 0644
|
|
contents:
|
|
local: quadlets/__USER__/__FILE__
|
|
user:
|
|
name: __USER__
|
|
group:
|
|
name: __USER__"
|
|
home_template="
|
|
- path: /var/home/__USER__/__FILE__
|
|
mode: 0755
|
|
contents:
|
|
local: home/__USER__/__FILE__
|
|
user:
|
|
name: __USER__
|
|
group:
|
|
name: __USER__"
|
|
service_template="
|
|
- path: /var/home/__USER__/.config/systemd/user/__FILE__
|
|
mode: 0755
|
|
contents:
|
|
local: services/__USER__/__FILE__
|
|
user:
|
|
name: __USER__
|
|
group:
|
|
name: __USER__"
|
|
directory_template="
|
|
- path: /var/mnt/nas/containers/__USER__/storage/__VOLUME__
|
|
mode: 0755
|
|
user:
|
|
name: __USER__
|
|
group:
|
|
name: __USER__"
|
|
files_template="
|
|
files:
|
|
- path: /var/lib/systemd/linger/__USER__
|
|
mode: 0644"
|
|
users=('arr' 'gitea' 'homeassistant' 'jdownloader' 'kiwix' 'komga' 'navidrome' 'nextcloud' 'nginx' 'pairdrop' 'paperless' 'pihole' 'qbittorrent' 'synapse' 'tga' 'wallabag')
|
|
mkdir -p users
|
|
for user in "${users[@]}"; do
|
|
user_butane="users/${user}.bu"
|
|
sed "s/__USER__/${user}/g" user-template.bu >| "${user_butane}"
|
|
if [[ -d "quadlets/${user}" ]]; then
|
|
directory_template_user="${directory_template//__USER__/${user}}"
|
|
for file in "quadlets/${user}/"*.volume; do
|
|
if [[ -f "${file}" ]]; then
|
|
content="$(grep "Device" "${file}")"
|
|
if [[ "${content}" =~ ^Device=/var/mnt/nas/containers/${user}/storage/(.+)$ ]]; then
|
|
volume="${BASH_REMATCH[1]}"
|
|
printf '%s' "${directory_template_user//__VOLUME__/${volume}}" >> "${user_butane}"
|
|
else
|
|
echo "Not found! ${content}"
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
printf '%s' "${files_template//__USER__/${user}}" >> "${user_butane}"
|
|
if [[ -d "quadlets/${user}" ]]; then
|
|
quadlet_template_user="${quadlet_template//__USER__/${user}}"
|
|
for file in "quadlets/${user}/"*; do
|
|
filename="$(basename "${file}")"
|
|
printf '%s' "${quadlet_template_user//__FILE__/${filename}}" >> "${user_butane}"
|
|
done
|
|
fi
|
|
if [[ -d "home/${user}" ]]; then
|
|
home_template_user="${home_template//__USER__/${user}}"
|
|
for file in "home/${user}/"*; do
|
|
filename="$(basename "${file}")"
|
|
printf '%s' "${home_template_user//__FILE__/${filename}}" >> "${user_butane}"
|
|
done
|
|
fi
|
|
if [[ -d "services/${user}" ]]; then
|
|
service_template_user="${service_template//__USER__/${user}}"
|
|
for file in "services/${user}/"*; do
|
|
filename="$(basename "${file}")"
|
|
printf '%s' "${service_template_user//__FILE__/${filename}}" >> "${user_butane}"
|
|
done
|
|
fi
|
|
podman run --rm --interactive --security-opt label=disable --volume "${PWD}:/pwd" --workdir /pwd quay.io/coreos/butane:release --pretty --strict -d /pwd "${user_butane}" >| "users/${user}.ign"
|
|
done
|
|
podman run --rm --interactive --security-opt label=disable --volume "${PWD}:/pwd" --workdir /pwd quay.io/coreos/butane:release --pretty --strict -d /pwd pi4.bu >| pi4.ign
|