-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathJustfile
135 lines (114 loc) · 5.02 KB
/
Justfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
export mock_image := env("MOCK_IMAGE", "ghcr.io/ublue-os/ublue-builder:latest")
export extensions_dir := env("SYSTEMD_EXTENSIONS_DIR", "/var/lib/extensions")
export overlay_dir := env("OVERLAY_DIR", "overlays")
# Run renovate locally to test modules
renovate dry-run="lookup" log-level="debug":
#!/usr/bin/env bash
if ! command -v "renovate" &> /dev/null ; then
echo "You need to install renovate first"
echo "It should be available on brew and on npm."
exit 1
fi
if [ "$GITHUB_COM_TOKEN" == "" ] ; then
echo "Warning: No Github token found, renovate will nag at you for this."
echo "Set it with GITHUB_COM_TOKEN=(your token)"
fi
LOG_LEVEL=${LOG_LEVEL:-debug} renovate --platform=local --dry-run={{dry-run}}
echo "Updates can be found in a section of the logs called \"packageFiles with updates\""
build $spec *MOCK_ARGS:
#!/usr/bin/env bash
set -x
mkdir -p mock
# Passes your user to the container and adds it to the mock group else rpkg will not be able to recognize local changes
# Mock also needs to be called unprivileged apparently
CONTAINERS_DIR="${CONTAINERS_DIR:-/var/lib/containers}"
MOCK_DIR="${MOCK_DIRECTORY:-./mock}"
SOURCES_DIR="${SOURCES_DIR:-.}"
sudo podman run --privileged --rm -i \
--pull "newer" \
-v "$CONTAINERS_DIR:/var/lib/containers:z" \
-v "$MOCK_DIR:/var/lib/mock:Z" \
-v "$SOURCES_DIR:/tmp/sources:Z" \
-w /tmp/sources \
--user "$(id -u):$(id -g)" \
-e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,HOME=/tmp \
--group-entry "mock:x:135:$(id -nu)" \
$mock_image \
$spec {{ MOCK_ARGS }}
generate-homebrew-tarball $OUTDIR="./brew-out" $TARBALL_FILENAME="homebrew.tar.zst":
#!/usr/bin/env bash
set -x
mkdir -p $OUTDIR
podman run --rm -it \
-v "$OUTDIR:/outdir:Z" \
cgr.dev/chainguard/wolfi-base:latest \
/bin/sh -c "
set -o xtrace
apk add curl git zstd posix-libc-utils uutils gnutar grep
curl --retry 3 -Lo /tmp/brew-install https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh
chmod +x /tmp/brew-install
touch /.dockerenv
ln -s /bin/bash /usr/bin/bash
ls -s /usr/bin/grep /bin/grep
env --ignore-environment PATH=/usr/bin:/bin:/usr/sbin:/sbin HOME=/home/linuxbrew NONINTERACTIVE=1 /usr/bin/bash /tmp/brew-install
tar --zstd -cvf /outdir/{{ TARBALL_FILENAME }} /home/linuxbrew/.linuxbrew"
alias add-overlay := overlay
overlay $TARGET_RPM $REFRESH="0" $CLEAN_ROOTFS="1":
#!/usr/bin/env bash
set -xeuo pipefail
if [ ! -s "${TARGET_RPM}" ] ; then
echo "Target RPM is not a valid file"
exit 1
fi
mkdir -p "{{ overlay_dir }}"
BASENAME_RPM="$(basename "$TARGET_RPM")"
NAME_TRIMMED="${BASENAME_RPM%.*}"
if [ -s "{{ overlay_dir }}/${NAME_TRIMMED}.raw" ] && [ "$REFRESH" == "0" ] ; then
sudo mkdir -p {{ extensions_dir }}
sudo cp -f "{{ overlay_dir }}/${NAME_TRIMMED}.raw" "{{ extensions_dir }}/${NAME_TRIMMED}.raw"
sudo systemd-sysext refresh
exit 0
fi
ROOTFS_DIRECTORY="$(mktemp -d --tmpdir="{{ overlay_dir }}")"
echo "➡️ Setting up extension config file"
sudo install -d -m0755 "$ROOTFS_DIRECTORY/usr/lib/extension-release.d"
{
echo "ID=\"_any\""
# Post process architecture to match systemd architecture list
arch="$(echo $(arch) | sed 's/_/-/g')"
echo "ARCHITECTURE=\"${arch}\""
} | sudo tee "${ROOTFS_DIRECTORY}/usr/lib/extension-release.d/extension-release.${NAME_TRIMMED}" > /dev/null
rpm2cpio "$TARGET_RPM" | sudo cpio -idmv -D "${ROOTFS_DIRECTORY}" &> /dev/null
if [ -d "${ROOTFS_DIRECTORY}/etc" ] ; then
echo "➡️ Moving /etc to /usr/etc"
sudo mv --no-clobber --no-copy "${ROOTFS_DIRECTORY}/etc" "${ROOTFS_DIRECTORY}/usr/etc"
fi
for dir in "var" "run"; do
if [ -d "${ROOTFS_DIRECTORY}"/"${dir}" ] ; then
echo "➡️ Removing ${dir} from rootfs"
sudo rm -r "${ROOTFS}/${dir}"
fi
done
filecontexts="/etc/selinux/targeted/contexts/files/file_contexts"
echo "🏷️ Resetting SELinux labels"
sudo setfiles -r "${ROOTFS_DIRECTORY}" "${filecontexts}" "${ROOTFS_DIRECTORY}"
sudo chcon --user=system_u --recursive "${ROOTFS_DIRECTORY}"
# Then create erofs
mkfs.erofs "{{ overlay_dir }}/${NAME_TRIMMED}.raw" "${ROOTFS_DIRECTORY}"
[ "$CLEAN_ROOTFS" == "1" ] && sudo rm -rf "${ROOTFS_DIRECTORY}"
sudo mkdir -p {{ extensions_dir }}
sudo cp -f "{{ overlay_dir }}/${NAME_TRIMMED}.raw" "{{ extensions_dir }}/${NAME_TRIMMED}.raw"
sudo systemd-sysext refresh
remove-overlay $TARGET_RPM:
#!/usr/bin/env bash
set -euo pipefail
BASENAME_RPM="$(basename "$TARGET_RPM")"
NAME_TRIMMED="${BASENAME_RPM%.*}"
sudo rm -f "{{ extensions_dir }}/${NAME_TRIMMED}.raw"
sudo systemd-sysext refresh
clean:
#!/usr/bin/env bash
for line in $(cat .gitignore | xargs) ; do
sudo rm -ri $line
done
exit 0