Skip to content

Commit f678b5a

Browse files
committed
fix: make bootable by default and sync with other images
Signed-off-by: Tulip Blossom <[email protected]>
1 parent 67d240e commit f678b5a

File tree

7 files changed

+62
-141
lines changed

7 files changed

+62
-141
lines changed

.github/workflows/build.yaml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ on:
1616
env:
1717
IMAGE_DESC: "Experimental opensuse-bootc POC image"
1818
IMAGE_KEYWORDS: "bootc,opensuse"
19-
IMAGE_LOGO_URL: "https://avatars.githubusercontent.com/u/623819?s=200&v=4"
19+
IMAGE_LOGO_URL: "https://avatars.githubusercontent.com/u/230667510?s=400&u=cb912a5db49aee164a609a0fb4967d2d8170feb9&v=4"
2020
IMAGE_NAME: "${{ github.event.repository.name }}"
2121
IMAGE_REGISTRY: "ghcr.io/${{ github.repository_owner }}"
2222
DEFAULT_TAG: "latest"
@@ -66,13 +66,13 @@ jobs:
6666
type=sha,enable=${{ github.event_name == 'pull_request' }}
6767
type=ref,event=pr
6868
labels: |
69-
io.artifacthub.package.readme-url=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/refs/heads/main/README.md
69+
io.artifacthub.package.readme-url=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/${{ github.sha }}/README.md
7070
org.opencontainers.image.created=${{ steps.date.outputs.date }}
7171
org.opencontainers.image.description=${{ env.IMAGE_DESC }}
72-
org.opencontainers.image.documentation=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/refs/heads/main/README.md
73-
org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/blob/main/Containerfile
72+
org.opencontainers.image.documentation=https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/${{ github.sha }}/README.md
73+
org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/blob/${{ github.sha }}/Containerfile
7474
org.opencontainers.image.title=${{ env.IMAGE_NAME }}
75-
org.opencontainers.image.url=https://github.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}
75+
org.opencontainers.image.url=https://github.com/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}/tree/${{ github.sha }}
7676
org.opencontainers.image.vendor=${{ github.repository_owner }}
7777
org.opencontainers.image.version=${{ env.DEFAULT_TAG }}.{{date 'YYYYMMDD'}}
7878
io.artifacthub.package.deprecated=false
@@ -90,12 +90,10 @@ jobs:
9090
with:
9191
containerfiles: |
9292
./Containerfile
93-
# Postfix image name with -custom to make it a little more descriptive
94-
# Syntax: https://docs.github.com/en/actions/learn-github-actions/expressions#format
9593
image: ${{ env.IMAGE_NAME }}
9694
tags: ${{ steps.metadata.outputs.tags }}
9795
labels: ${{ steps.metadata.outputs.labels }}
98-
oci: false
96+
oci: true
9997

10098
- name: Login to GitHub Container Registry
10199
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
*.img
12
cosign.key
23
_build_*
34
output

Containerfile

Lines changed: 40 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,46 @@
11
FROM registry.opensuse.org/opensuse/tumbleweed:latest
22

3-
COPY files/37composefs/ /usr/lib/dracut/modules.d/37composefs/
4-
COPY files/ostree/prepare-root.conf /usr/lib/ostree/prepare-root.conf
5-
6-
RUN zypper install -y ostree-devel git cargo rust
7-
8-
RUN --mount=type=tmpfs,dst=/tmp cd /tmp && \
9-
git clone https://github.com/bootc-dev/bootc.git bootc && \
10-
cd bootc && \
11-
git fetch --all && \
12-
git switch origin/composefs-backend -d && \
13-
cargo build --release --bins --features "pre-6.15" && \
14-
install -Dpm0755 -t /usr/bin ./target/release/bootc && \
15-
install -Dpm0755 -t /usr/bin ./target/release/system-reinstall-bootc && \
16-
install -Dpm0755 -t /usr/bin ./target/release/bootc-initramfs-setup
17-
18-
RUN --mount=type=tmpfs,dst=/tmp cd /tmp && \
19-
git clone https://github.com/p5/coreos-bootupd.git bootupd && \
20-
cd bootupd && \
21-
git fetch --all && \
22-
git switch origin/sdboot-support -d && \
23-
cargo build --release --bins --features systemd-boot && \
24-
install -Dpm0755 -t /usr/bin ./target/release/bootupd && \
25-
ln -s ./bootupd /usr/bin/bootupctl
26-
273
RUN zypper install -y \
28-
dracut \
29-
composefs \
30-
composefs-experimental \
31-
kernel-default \
32-
kernel-firmware-all \
33-
systemd \
34-
btrfs-progs \
35-
e2fsprogs \
36-
xfsprogs \
37-
udev \
38-
cpio \
39-
zstd \
40-
binutils \
41-
dosfstools \
42-
conmon \
43-
crun \
44-
netavark \
45-
skopeo \
46-
dbus-1 \
47-
dbus-1-daemon \
48-
dbus-broker \
49-
systemd-boot
50-
51-
RUN cp /usr/bin/bootc-initramfs-setup /usr/lib/dracut/modules.d/37composefs
52-
53-
RUN echo 'add_drivers+=" erofs "' >> /etc/dracut.conf.d/composefs.conf
54-
55-
RUN echo "$(basename "$(find /usr/lib/modules -maxdepth 1 -type d | grep -v -E "*.img" | tail -n 1)")" > kernel_version.txt && \
56-
dracut --force --add debug --no-hostonly --reproducible --zstd --verbose --kver "$(cat kernel_version.txt)" "/usr/lib/modules/$(cat kernel_version.txt)/initramfs.img" && \
57-
rm kernel_version.txt
58-
59-
# Alter root file structure a bit for ostree
60-
RUN mkdir -p /boot /sysroot /var/home && \
61-
rm -rf /var/log /home /root /usr/local /srv && \
62-
ln -s /var/home /home && \
63-
ln -s /var/roothome /root && \
64-
ln -s /var/usrlocal /usr/local && \
65-
ln -s /var/srv /srv
4+
binutils \
5+
btrfs-progs \
6+
cpio \
7+
dosfstools \
8+
dracut \
9+
e2fsprogs \
10+
glib2 \
11+
kernel-default \
12+
kernel-firmware-all \
13+
skopeo \
14+
systemd \
15+
systemd-boot \
16+
udev \
17+
xfsprogs \
18+
zstd && \
19+
zypper clean -a
20+
21+
ENV DEV_DEPS="git rust make cargo gcc-devel glib2-devel libzstd-devel openssl-devel ostree-devel"
22+
RUN --mount=type=tmpfs,dst=/tmp --mount=type=tmpfs,dst=/root \
23+
zypper install -y ${DEV_DEPS} && \
24+
git clone "https://github.com/bootc-dev/bootc.git" /tmp/bootc && \
25+
make -C /tmp/bootc bin install-all install-initramfs-dracut && \
26+
sh -c 'export KERNEL_VERSION="$(basename "$(find /usr/lib/modules -maxdepth 1 -type d | grep -v -E "*.img" | tail -n 1)")" && \
27+
dracut --force --no-hostonly --force-drivers erofs --reproducible --zstd --verbose --kver "$KERNEL_VERSION" "/usr/lib/modules/$KERNEL_VERSION/initramfs.img"' && \
28+
zypper remove -y ${DEV_DEPS} && \
29+
zypper clean -a
30+
ENV DEV_DEPS=""
31+
32+
# Necessary for general behavior expected by image-based systems
33+
RUN echo "HOME=/var/home" | tee "/etc/default/useradd" && \
34+
rm -rf /boot /home /root /usr/local /srv && \
35+
mkdir -p /var /sysroot /boot /usr/lib/ostree && \
36+
ln -s var/opt /opt && \
37+
ln -s var/roothome /root && \
38+
ln -s var/home /home && \
39+
ln -s sysroot/ostree /ostree && \
40+
echo "$(for dir in opt usrlocal home srv mnt ; do echo "d /var/$dir 0755 root root -" ; done)" | tee -a /usr/lib/tmpfiles.d/bootc-base-dirs.conf && \
41+
echo "d /var/roothome 0700 root root -" | tee -a /usr/lib/tmpfiles.d/bootc-base-dirs.conf && \
42+
echo "d /run/media 0755 root root -" | tee -a /usr/lib/tmpfiles.d/bootc-base-dirs.conf && \
43+
printf "[composefs]\nenabled = yes\n[sysroot]\nreadonly = true\n" | tee "/usr/lib/ostree/prepare-root.conf"
6644

6745
# Setup a temporary root passwd (changeme) for dev purposes
6846
# TODO: Replace this for a more robust option when in prod

Justfile

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
1-
build-containerfile:
2-
sudo podman build \
3-
-t opensuse-bootc:latest .
1+
image_name := env("BUILD_IMAGE_NAME", "opensuse-bootc")
2+
image_tag := env("BUILD_IMAGE_TAG", "latest")
3+
base_dir := env("BUILD_BASE_DIR", ".")
4+
filesystem := env("BUILD_FILESYSTEM", "ext4")
5+
6+
build-containerfile $image_name=image_name:
7+
sudo podman build -t "${image_name}:latest" .
48

59
bootc *ARGS:
610
sudo podman run \
711
--rm --privileged --pid=host \
812
-it \
9-
-e RUST_LOG=debug \
1013
-v /sys/fs/selinux:/sys/fs/selinux \
1114
-v /etc/containers:/etc/containers:Z \
12-
-v /var/lib/containers:/var/lib/containers \
15+
-v /var/lib/containers:/var/lib/containers:Z \
1316
-v /dev:/dev \
14-
-v .:/data:z \
17+
-e RUST_LOG=debug \
18+
-v "{{base_dir}}:/data" \
1519
--security-opt label=type:unconfined_t \
16-
opensuse-bootc:latest bootc {{ARGS}}
20+
"{{image_name}}:{{image_tag}}" bootc {{ARGS}}
1721

18-
generate-bootable-image:
22+
generate-bootable-image $base_dir=base_dir $filesystem=filesystem:
1923
#!/usr/bin/env bash
20-
if [ ! -e ./bootable.img ] ; then
21-
fallocate -l 20G ./bootable.img
24+
if [ ! -e "${base_dir}/bootable.img" ] ; then
25+
fallocate -l 20G "${base_dir}/bootable.img"
2226
fi
23-
just bootc install to-disk --composefs-native --via-loopback /data/bootable.img --filesystem ext4 --wipe
24-
27+
just bootc install to-disk --composefs-backend --via-loopback /data/bootable.img --filesystem "${filesystem}" --wipe --bootloader systemd

files/37composefs/bootc-initramfs-setup.service

Lines changed: 0 additions & 34 deletions
This file was deleted.

files/37composefs/module-setup.sh

Lines changed: 0 additions & 20 deletions
This file was deleted.

files/ostree/prepare-root.conf

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)