Skip to content

Commit 05d51bf

Browse files
authored
Merge pull request #260 from ublue-os/overlay-sysext
feat(justfile): add overlay recipe with sysext for testing
2 parents 5e112c9 + f327440 commit 05d51bf

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ mock/
33
rpmbuild/
44
brew-out/
55
arch_skipped
6+
overlays/

Justfile

+77
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
export mock_image := env("MOCK_IMAGE", "ghcr.io/ublue-os/ublue-builder:latest")
2+
export extensions_dir := env("SYSTEMD_EXTENSIONS_DIR", "/var/lib/extensions")
3+
export overlay_dir := env("OVERLAY_DIR", "overlays")
24

35
# Run renovate locally to test modules
46
renovate dry-run="lookup" log-level="debug":
@@ -56,3 +58,78 @@ generate-homebrew-tarball $OUTDIR="./brew-out" $TARBALL_FILENAME="homebrew.tar.z
5658
ls -s /usr/bin/grep /bin/grep
5759
env --ignore-environment PATH=/usr/bin:/bin:/usr/sbin:/sbin HOME=/home/linuxbrew NONINTERACTIVE=1 /usr/bin/bash /tmp/brew-install
5860
tar --zstd -cvf /outdir/{{ TARBALL_FILENAME }} /home/linuxbrew/.linuxbrew"
61+
62+
alias add-overlay := overlay
63+
64+
overlay $TARGET_RPM $REFRESH="0" $CLEAN_ROOTFS="1":
65+
#!/usr/bin/env bash
66+
set -xeuo pipefail
67+
68+
if [ ! -s "${TARGET_RPM}" ] ; then
69+
echo "Target RPM is not a valid file"
70+
exit 1
71+
fi
72+
73+
mkdir -p "{{ overlay_dir }}"
74+
BASENAME_RPM="$(basename "$TARGET_RPM")"
75+
NAME_TRIMMED="${BASENAME_RPM%.*}"
76+
77+
if [ -s "{{ overlay_dir }}/${NAME_TRIMMED}.raw" ] && [ "$REFRESH" == "0" ] ; then
78+
sudo mkdir -p {{ extensions_dir }}
79+
sudo cp -f "{{ overlay_dir }}/${NAME_TRIMMED}.raw" "{{ extensions_dir }}/${NAME_TRIMMED}.raw"
80+
sudo systemd-sysext refresh
81+
exit 0
82+
fi
83+
84+
ROOTFS_DIRECTORY="$(mktemp -d --tmpdir="{{ overlay_dir }}")"
85+
echo "➡️ Setting up extension config file"
86+
sudo install -d -m0755 "$ROOTFS_DIRECTORY/usr/lib/extension-release.d"
87+
{
88+
echo "ID=\"_any\""
89+
# Post process architecture to match systemd architecture list
90+
arch="$(echo $(arch) | sed 's/_/-/g')"
91+
echo "ARCHITECTURE=\"${arch}\""
92+
} | sudo tee "${ROOTFS_DIRECTORY}/usr/lib/extension-release.d/extension-release.${NAME_TRIMMED}" > /dev/null
93+
94+
rpm2cpio "$TARGET_RPM" | sudo cpio -idmv -D "${ROOTFS_DIRECTORY}" &> /dev/null
95+
96+
if [ -d "${ROOTFS_DIRECTORY}/etc" ] ; then
97+
echo "➡️ Moving /etc to /usr/etc"
98+
sudo mv --no-clobber --no-copy "${ROOTFS_DIRECTORY}/etc" "${ROOTFS_DIRECTORY}/usr/etc"
99+
fi
100+
101+
for dir in "var" "run"; do
102+
if [ -d "${ROOTFS_DIRECTORY}"/"${dir}" ] ; then
103+
echo "➡️ Removing ${dir} from rootfs"
104+
sudo rm -r "${ROOTFS}/${dir}"
105+
fi
106+
done
107+
108+
filecontexts="/etc/selinux/targeted/contexts/files/file_contexts"
109+
echo "🏷️ Resetting SELinux labels"
110+
sudo setfiles -r "${ROOTFS_DIRECTORY}" "${filecontexts}" "${ROOTFS_DIRECTORY}"
111+
sudo chcon --user=system_u --recursive "${ROOTFS_DIRECTORY}"
112+
113+
# Then create erofs
114+
mkfs.erofs "{{ overlay_dir }}/${NAME_TRIMMED}.raw" "${ROOTFS_DIRECTORY}"
115+
[ "$CLEAN_ROOTFS" == "1" ] && sudo rm -rf "${ROOTFS_DIRECTORY}"
116+
sudo mkdir -p {{ extensions_dir }}
117+
sudo cp -f "{{ overlay_dir }}/${NAME_TRIMMED}.raw" "{{ extensions_dir }}/${NAME_TRIMMED}.raw"
118+
sudo systemd-sysext refresh
119+
120+
remove-overlay $TARGET_RPM:
121+
#!/usr/bin/env bash
122+
123+
set -euo pipefail
124+
125+
BASENAME_RPM="$(basename "$TARGET_RPM")"
126+
NAME_TRIMMED="${BASENAME_RPM%.*}"
127+
sudo rm -f "{{ extensions_dir }}/${NAME_TRIMMED}.raw"
128+
sudo systemd-sysext refresh
129+
130+
clean:
131+
#!/usr/bin/env bash
132+
for line in $(cat .gitignore | xargs) ; do
133+
sudo rm -ri $line
134+
done
135+
exit 0

0 commit comments

Comments
 (0)