|
1 | 1 | 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") |
2 | 4 |
|
3 | 5 | # Run renovate locally to test modules
|
4 | 6 | renovate dry-run="lookup" log-level="debug":
|
@@ -56,3 +58,78 @@ generate-homebrew-tarball $OUTDIR="./brew-out" $TARBALL_FILENAME="homebrew.tar.z
|
56 | 58 | ls -s /usr/bin/grep /bin/grep
|
57 | 59 | env --ignore-environment PATH=/usr/bin:/bin:/usr/sbin:/sbin HOME=/home/linuxbrew NONINTERACTIVE=1 /usr/bin/bash /tmp/brew-install
|
58 | 60 | 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