Path: blob/master/pkg/cidata/cidata.TEMPLATE.d/boot/40-install-containerd.sh
2655 views
#!/bin/bash12# SPDX-FileCopyrightText: Copyright The Lima Authors3# SPDX-License-Identifier: Apache-2.045set -eux6: "${CONTAINERD_NAMESPACE:=default}"7# Overridable in .bashrc8: "${CONTAINERD_SNAPSHOTTER:=overlayfs}"910if [ "${LIMA_CIDATA_CONTAINERD_SYSTEM}" != 1 ] && [ "${LIMA_CIDATA_CONTAINERD_USER}" != 1 ]; then11exit 012fi1314# This script does not work unless systemd is available15command -v systemctl >/dev/null 2>&1 || exit 01617# Extract bin/nerdctl and compare whether it is newer than the current /usr/local/bin/nerdctl (if already exists).18# Takes 4-5 seconds. (FIXME: optimize)19tmp_extract_nerdctl="$(mktemp -d)"20tar Cxaf "${tmp_extract_nerdctl}" "${LIMA_CIDATA_MNT}"/"${LIMA_CIDATA_CONTAINERD_ARCHIVE}" bin/nerdctl2122if [ ! -f "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/nerdctl ] || [[ "${tmp_extract_nerdctl}"/bin/nerdctl -nt "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/nerdctl ]]; then23if [ -f "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/nerdctl ]; then24(25set +e26echo "Upgrading existing nerdctl"27echo "- Old: $("${LIMA_CIDATA_GUEST_INSTALL_PREFIX}"/bin/nerdctl --version)"28echo "- New: $("${tmp_extract_nerdctl}"/bin/nerdctl --version)"29systemctl disable --now containerd default-buildkit stargz-snapshotter30sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" "CONTAINERD_NAMESPACE=${CONTAINERD_NAMESPACE}" containerd-rootless-setuptool.sh uninstall-buildkit-containerd31sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh uninstall32)33fi34tar Cxaf "${LIMA_CIDATA_GUEST_INSTALL_PREFIX}" "${LIMA_CIDATA_MNT}"/"${LIMA_CIDATA_CONTAINERD_ARCHIVE}"3536mkdir -p /etc/bash_completion.d37nerdctl completion bash >/etc/bash_completion.d/nerdctl38# TODO: enable zsh completion too39fi4041rm -rf "${tmp_extract_nerdctl}"4243if [ "${LIMA_CIDATA_CONTAINERD_SYSTEM}" = 1 ]; then44if [ ! -e /etc/containerd/config.toml ]; then45mkdir -p /etc/containerd46cat >"/etc/containerd/config.toml" <<EOF47version = 248# TODO: remove imports after upgrading containerd to v2.2, as49# conf.d is set by default since v2.2.50imports = ['/etc/containerd/conf.d/*.toml']51[plugins."io.containerd.grpc.v1.cri"]52enable_cdi = true53[proxy_plugins]54[proxy_plugins."stargz"]55type = "snapshot"56address = "/run/containerd-stargz-grpc/containerd-stargz-grpc.sock"57EOF58fi59if [ ! -e /etc/buildkit/buildkitd.toml ]; then60mkdir -p /etc/buildkit61cat >"/etc/buildkit/buildkitd.toml" <<EOF62[worker.oci]63enabled = false6465[worker.containerd]66enabled = true67namespace = "${CONTAINERD_NAMESPACE}"68snapshotter = "${CONTAINERD_SNAPSHOTTER}"69EOF70fi71systemctl enable --now containerd buildkit stargz-snapshotter72fi7374if [ "${LIMA_CIDATA_CONTAINERD_USER}" = 1 ]; then75if [ ! -e "${LIMA_CIDATA_HOME}/.config/containerd/config.toml" ]; then76mkdir -p "${LIMA_CIDATA_HOME}/.config/containerd"77cat >"${LIMA_CIDATA_HOME}/.config/containerd/config.toml" <<EOF78version = 279[plugins."io.containerd.grpc.v1.cri"]80enable_cdi = true81[proxy_plugins]82[proxy_plugins."fuse-overlayfs"]83type = "snapshot"84address = "/run/user/${LIMA_CIDATA_UID}/containerd-fuse-overlayfs.sock"85[proxy_plugins."stargz"]86type = "snapshot"87address = "/run/user/${LIMA_CIDATA_UID}/containerd-stargz-grpc/containerd-stargz-grpc.sock"88EOF89chown -R "${LIMA_CIDATA_USER}" "${LIMA_CIDATA_HOME}/.config"90fi91selinux=92if command -v selinuxenabled >/dev/null 2>&1 && selinuxenabled; then93selinux=194fi95if [ ! -e "/etc/apparmor.d/usr.local.bin.rootlesskit" ] && [ -e "/etc/apparmor.d/abi/4.0" ] && [ -e "/proc/sys/kernel/apparmor_restrict_unprivileged_userns" ]; then96cat >"/etc/apparmor.d/usr.local.bin.rootlesskit" <<EOF97# Ubuntu 23.10 introduced kernel.apparmor_restrict_unprivileged_userns98# to restrict unsharing user namespaces:99# https://ubuntu.com/blog/ubuntu-23-10-restricted-unprivileged-user-namespaces100#101# kernel.apparmor_restrict_unprivileged_userns is still opt-in in Ubuntu 23.10,102# but it is expected to be enabled in future releases of Ubuntu.103abi <abi/4.0>,104include <tunables/global>105106/usr/local/bin/rootlesskit flags=(unconfined) {107userns,108109# Site-specific additions and overrides. See local/README for details.110include if exists <local/usr.local.bin.rootlesskit>111}112EOF113systemctl restart apparmor.service114fi115if [ ! -e "${LIMA_CIDATA_HOME}/.config/systemd/user/containerd.service" ]; then116until [ -e "/run/user/${LIMA_CIDATA_UID}/systemd/private" ]; do sleep 3; done117if [ -n "$selinux" ]; then118echo "Temporarily disabling SELinux, during installing containerd units"119setenforce 0120fi121if [ "$(sudo -iu "${LIMA_CIDATA_USER}" sh -ec 'systemctl --user show --property=RefuseManualStart --value dbus')" != "yes" ]; then122sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" systemctl --user enable --now dbus123fi124sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install125sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" \126"CONTAINERD_NAMESPACE=${CONTAINERD_NAMESPACE}" "CONTAINERD_SNAPSHOTTER=${CONTAINERD_SNAPSHOTTER}" \127containerd-rootless-setuptool.sh install-buildkit-containerd128129# $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.130if [ "$(sudo -iu "${LIMA_CIDATA_USER}" sh -ec 'echo $CONTAINERD_SNAPSHOTTER')" = "fuse-overlayfs" ]; then131sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install-fuse-overlayfs132fi133134if compare_version.sh "$(uname -r)" -ge "5.13"; then135sudo -iu "${LIMA_CIDATA_USER}" "XDG_RUNTIME_DIR=/run/user/${LIMA_CIDATA_UID}" "PATH=${PATH}" containerd-rootless-setuptool.sh install-stargz136else137echo >&2 "WARNING: the guest kernel seems older than 5.13. Skipping installing rootless stargz."138fi139if [ -n "$selinux" ]; then140echo "Restoring SELinux"141setenforce 1142fi143fi144fi145146147