File registry.sh of Package suse-AGL

#!/bin/sh

set -ex

for device in /dev/mapper/loop*;do
    partlabel=$(blkid -s PARTLABEL -o value "${device}")
    if [ "${partlabel}" = "p.lxreadonly" ];then
        root_device=$device
        root_partuuid=$(blkid -s PARTUUID -o value "${root_device}")
    fi
    if [ "${partlabel}" = "p.UEFI" ];then
        esp_device=$device
    fi
    if [ "${partlabel}" = "p.spare" ];then
        reg_instance_device=$device
    fi
done

# Preserve storage
mv var/lib/containers/storage /tmp

# umount write space
umount "${reg_instance_device}"

# create luks for RW registry with initial empty key
cryptsetup \
    -q \
    --key-file /dev/zero \
    --type luks2 \
    --keyfile-size 128 \
    luksFormat "${reg_instance_device}"
cryptsetup \
    --key-file /dev/zero \
    --keyfile-size 128 \
    luksOpen "${reg_instance_device}" luksInstances

# create XFS for RW registry
mkfs.xfs -f -L INSTANCE /dev/mapper/luksInstances

# mount root + ESP
mount "${root_device}" /mnt
mount "${esp_device}" /mnt/boot/efi

# restore storage
mount /dev/mapper/luksInstances /mnt/var/lib/containers/storage
mv /tmp/storage/* /mnt/var/lib/containers/storage/

mount -t proc proc /mnt/proc

# register fleet app
chroot /mnt /usr/bin/flake-ctl podman register \
    --container fleet \
    --target /usr/bin/fleet \
    --app /usr/share/flakes/bin/fleet \
    --base basesystem \
    --opt '\--rm' \
    --opt '\-i' \
    --opt '\--volume /run:/run'

# register KUKSA val service
chroot /mnt /usr/bin/flake-ctl podman register \
    --container kuksa-val-server \
    --app /usr/share/flakes/bin/kuksa-server \
    --target /usr/bin/start-kuksa-server \
    --resume \
    --opt "\--rm" \
    --opt "\-v /etc/kuksa-val/certs/:/etc/kuksa-val/certs/" \
    --opt "\-v /etc/kuksa-val/tokens/:/etc/kuksa-val/tokens/" \
    --opt "\--name kuksa_server" \
    --opt "\--net=host"

# register KUKSA feeder service
chroot /mnt /usr/bin/flake-ctl podman register \
    --container kuksa-feeder \
    --app /usr/share/flakes/bin/kuksa-feeder \
    --target /usr/bin/start-kuksa-feeder \
    --resume \
    --opt "\--rm" \
    --opt "\-v /etc/kuksa-val/certs/:/etc/kuksa-val/certs/" \
    --opt "\-v /etc/kuksa-val/tokens/:/etc/kuksa-val/tokens/" \
    --opt "\--name kuksa_feeder" \
    --opt "\--net=host"

# Register agl-user-compositor
agl_user=$(grep "AGL demo user" /mnt/etc/passwd | cut -f3 -d:)
chroot /mnt /usr/bin/flake-ctl podman register \
    --container aglcompositor \
    --app /usr/share/flakes/bin/agl-user-compositor \
    --target /lib/systemd/systemd \
    --opt "\--rm" \
    --opt "\--name compositor" \
    --opt "\--net=host" \
    --opt "\--cap-add CAP_SYS_TTY_CONFIG" \
    --opt "\-v /tmp:/tmp" \
    --opt "\-v /dev:/dev" \
    --opt "\-v /run/udev:/run/udev" \
    --opt "\-v /run/user/${agl_user}:/run/user/${agl_user}" \
    --opt "\--privileged" \
    --opt "\-t"

# Register agl-cluster-dashboard
chroot /mnt /usr/bin/flake-ctl podman register \
    --container aglcluster \
    --app /usr/share/flakes/bin/agl-cluster-dashboard \
    --target /usr/bin/cluster-dashboard \
    --opt "\--rm" \
    --opt "\--name cluster_demo" \
    --opt "\--net=host" \
    --opt "\-e QT_QPA_PLATFORM=wayland" \
    --opt "\-e QT_PLUGIN_PATH=/usr/lib64/qt5/plugins/" \
    --opt "\-e XDG_RUNTIME_DIR=/run/user/${agl_user}" \
    --opt "\-e WAYLAND_DISPLAY=/run/user/${agl_user}/wayland-0" \
    --opt "\-v /etc/kuksa-val/certs/:/etc/kuksa-val/certs/" \
    --opt "\-v /etc/kuksa-val/tokens/:/etc/kuksa-val/tokens/" \
    --opt "\-v /run:/run"

# Register trafficsign service
# supports two modes:
# classify picture
#     read image file from socket, classify, report
# classify webcam
#     poll on webcam (1sec), classify, report
chroot /mnt /usr/bin/flake-ctl podman register \
    --container trafficsign \
    --app /usr/share/flakes/bin/classify \
    --target /usr/bin/classify \
    --resume \
    --opt "\--net=host" \
    --opt "\--privileged" \
    --opt "\--name traffic_sign" \
    --opt "\-v /run:/run"

# Register capture traffic sign capture
# Example: capture /run/traffic /run/captured_from_webcam.jpg
chroot /mnt /usr/bin/flake-ctl podman register \
    --container trafficsign \
    --app /usr/share/flakes/bin/capture \
    --target /usr/bin/capture \
    --opt "\--rm" \
    --opt "\-ti" \
    --opt "\--privileged" \
    --opt "\-v /run:/run"

umount /mnt/proc

# umount storage
umount /mnt/var/lib/containers/storage

# close crypt
cryptsetup luksClose luksInstances

# Create grub early boot script
uuid=$(readlink /mnt/boot/uuid)
cat >/mnt/boot/efi/EFI/BOOT/earlyboot.cfg <<-EOF
search --file --set=root ${uuid}
set rootdev=PARTUUID=${root_partuuid}
export rootdev
set prefix=(\$root)/boot/grub2
configfile (\$root)/boot/grub2/grub.cfg
EOF

# Rebuild EFI binary
efi_arch="arm64-efi"
efi_image="bootaa64.efi"
if [ "$(uname -m)" = "x86_64" ];then
    efi_arch="x86_64-efi"
    efi_image="bootx64.efi"
fi
grub2-mkimage \
    -O "${efi_arch}" \
    -o /mnt/boot/efi/EFI/BOOT/"${efi_image}" \
    -c /mnt/boot/efi/EFI/BOOT/earlyboot.cfg \
    -p /mnt/boot/grub2 \
    -d /mnt/usr/share/grub2/"${efi_arch}" \
    linux configfile search_fs_file search normal gzio fat font \
    minicmd gfxterm gfxmenu all_video squash4 loadenv part_gpt \
    part_msdos efi_gop serial test echo

# umount ROOT + ESP
umount /mnt/boot/efi
umount /mnt
openSUSE Build Service is sponsored by