Skip to content

Commit be578f2

Browse files
authored
Merge pull request #695 from AkihiroSuda/avoid-fuse-overlayfs-when-possible
nerdctl: use fuse-overlayfs only when kernel < 5.13
2 parents 435ada6 + 503e392 commit be578f2

File tree

5 files changed

+97
-8
lines changed

5 files changed

+97
-8
lines changed

docs/internal.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ The directory contains the following files:
9292
- `nerdctl-full.tgz`: [`nerdctl-full-<VERSION>-linux-<ARCH>.tar.gz`](https://github.com/containerd/nerdctl/releases)
9393
- `boot.sh`: Boot script
9494
- `boot/*`: Boot script modules
95+
- `util/*`: Utility command scripts, executed in the boot script modules
9596
- `provision.system/*`: Custom provision scripts (system)
9697
- `provision.user/*`: Custom provision scripts (user)
9798
- `etc_environment`: Environment variables to be added to `/etc/environment` (also loaded during `boot.sh`)

pkg/cidata/cidata.TEMPLATE.d/boot.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ while read -r line; do
2525
[ -n "$line" ] && export "$line"
2626
done <"${LIMA_CIDATA_MNT}"/etc_environment
2727

28+
PATH="${LIMA_CIDATA_MNT}"/util:"${PATH}"
29+
export PATH
30+
2831
CODE=0
2932

3033
# Don't make any changes to /etc or /var/lib until boot/05-persistent-data-volume.sh

pkg/cidata/cidata.TEMPLATE.d/boot/20-rootless-base.sh

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,18 @@ for f in .profile .bashrc; do
1111
# Lima BEGIN
1212
# Make sure iptables and mount.fuse3 are available
1313
PATH="\$PATH:/usr/sbin:/sbin"
14-
# fuse-overlayfs is the most stable snapshotter for rootless
14+
export PATH
15+
EOF
16+
if compare_version.sh "$(uname -r)" -lt "5.13"; then
17+
cat >>"/home/${LIMA_CIDATA_USER}.linux/$f" <<EOF
18+
# fuse-overlayfs is the most stable snapshotter for rootless, on kernel < 5.13
19+
# https://github.com/lima-vm/lima/issues/383
20+
# https://rootlesscontaine.rs/how-it-works/overlayfs/
1521
CONTAINERD_SNAPSHOTTER="fuse-overlayfs"
16-
export PATH CONTAINERD_SNAPSHOTTER
22+
export CONTAINERD_SNAPSHOTTER
23+
EOF
24+
fi
25+
cat >>"/home/${LIMA_CIDATA_USER}.linux/$f" <<EOF
1726
# Lima END
1827
EOF
1928
chown "${LIMA_CIDATA_USER}" "/home/${LIMA_CIDATA_USER}.linux/$f"

pkg/cidata/cidata.TEMPLATE.d/boot/40-install-containerd.sh

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,16 @@ EOF
5656
sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" systemctl --user enable --now dbus
5757
sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install
5858
sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install-buildkit
59-
sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install-fuse-overlayfs
60-
if grep -q "release 8" /etc/system-release; then
61-
echo >&2 "WARNING: the guest seems EL8-compatible OS. Skipping installing rootless stargz"
59+
60+
# $CONTAINERD_SNAPSHOTTER is configured in 20-rootless-base.sh, when the guest kernel is < 5.13, or the instance was created with Lima < 0.9.0.
61+
if [ "$(sudo -iu "${LIMA_CIDATA_USER}" sh -ec 'echo $CONTAINERD_SNAPSHOTTER')" = "fuse-overlayfs" ]; then
62+
sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install-fuse-overlayfs
63+
fi
64+
65+
if compare_version.sh "$(uname -r)" -ge "5.13"; then
66+
sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install-stargz
6267
else
63-
if ! sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install-stargz; then
64-
echo >&2 "WARNING: rootless stargz does not seem supported on this host (kernel older than 5.11?)"
65-
fi
68+
echo >&2 "WARNING: the guest kernel seems older than 5.13. Skipping installing rootless stargz."
6669
fi
6770
if [ -n "$selinux" ]; then
6871
echo "Restoring SELinux"
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/bin/bash
2+
set -eu
3+
4+
: "${SELFTEST:=}"
5+
if [ -n "$SELFTEST" ]; then
6+
unset SELFTEST
7+
echo >&2 "=== Running positive tests ==="
8+
(
9+
set -x
10+
"$0" 0.1.2 -eq 0.1.2
11+
"$0" 0.1.2 -ne 0.1.3
12+
"$0" 0.1.2 -ge 0.1.1
13+
"$0" 0.1.2 -ge 0.1.2
14+
"$0" 0.1.10 -ge 0.1.9
15+
"$0" 0.1.2 -gt 0.1.1
16+
"$0" 0.1.10 -gt 0.1.9
17+
"$0" 0.1.2 -le 0.1.2
18+
"$0" 0.1.2 -le 0.1.3
19+
"$0" 0.1.2 -le 0.1.10
20+
"$0" 0.1.2 -lt 0.1.3
21+
"$0" 0.1.2 -lt 0.1.10
22+
)
23+
echo >&2 "=== Running negative tests ==="
24+
(
25+
set -x
26+
"$0" 0.1.2 -eq 0.1.1 && false
27+
"$0" 0.1.2 -ne 0.1.2 && false
28+
"$0" 0.1.2 -ge 0.1.3 && false
29+
"$0" 0.1.2 -gt 0.1.2 && false
30+
"$0" 0.1.2 -le 0.1.1 && false
31+
"$0" 0.1.2 -lt 0.1.2 && false
32+
true
33+
)
34+
exit 0
35+
fi
36+
37+
if [ "$#" -ne 3 ]; then
38+
echo >&2 "Usage: $0 VERSION-A OP VERSION-B"
39+
echo >&2 "Implemented operators: -eq, -ne, -ge, -gt, -le, -lt"
40+
echo >&2 ""
41+
echo >&2 "Example: $0 1.2.10 -ge 1.2.9"
42+
exit 1
43+
fi
44+
45+
version_a="$1"
46+
op="$2"
47+
version_b="$3"
48+
49+
sorted="$(echo -ne "${version_a}\n${version_b}\n" | sort -V -r | head -n1)"
50+
case "${op}" in
51+
-eq)
52+
[ "${version_a}" = "${version_b}" ]
53+
;;
54+
-ne)
55+
[ "${version_a}" != "${version_b}" ]
56+
;;
57+
-ge)
58+
[ "${version_a}" = "${sorted}" ]
59+
;;
60+
-gt)
61+
[ "${version_a}" = "${sorted}" ] && [ "${version_a}" != "${version_b}" ]
62+
;;
63+
-le)
64+
[ "${version_b}" = "${sorted}" ]
65+
;;
66+
-lt)
67+
[ "${version_b}" = "${sorted}" ] && [ "${version_a}" != "${version_b}" ]
68+
;;
69+
*)
70+
echo "Unknown operator \"$op\""
71+
exit 1
72+
;;
73+
esac

0 commit comments

Comments
 (0)