Naposledy aktivní 6 months ago

Revize f0044f75a747170cef91f0f60127e111bf1669b1

deploy_rootlessdocker.sh Raw
1#!/bin/bash
2# wget https://gist.githubusercontent.com/waja/0deb4dd5cd759371270dc3e1f5dabcb5/raw/deploy_rootlessdocker.sh -O /tmp/a && sh /tmp/a
3
4# Check if dockerd is installed
5[ $(which dockerd) ] || wget https://gist.githubusercontent.com/waja/01ba2641f93f461044f9/raw/docker_deploy.sh \
6 -O /tmp/docker_deploy.sh && bash /tmp/docker_deploy.sh
7
8# Stop and disable dockerd (runs as root)
9systemctl stop docker && systemctl disable docker
10
11# Install curl and needed (new) slirp4netns
12apt update && apt install -y curl && \
13 apt -t buster-backports install -y slirp4netns
14
15# Download and install docker rootless
16# Inspired by https://github.com/docker/docker-install/blob/master/rootless-install.sh
17tmp=$(mktemp -d)
18trap "rm -rf $tmp" EXIT INT TERM
19STATIC_RELEASE_ROOTLESS_URL="https://master.dockerproject.org/linux/x86_64/docker-rootless-extras.tgz"
20ROOTLESS_BIN="/usr/local/bin/"
21cd "$tmp"
22curl -L -o rootless.tgz "$STATIC_RELEASE_ROOTLESS_URL"
23tar zxf "$tmp/rootless.tgz" -C "$ROOTLESS_BIN" --strip-components=1
24
25cat <<EOF | sh -x
26apt install -y uidmap
27cat <<EOT > /etc/sysctl.d/50-docker-rootless.conf
28# https://github.com/moby/moby/blob/master/docs/rootless.md#debian-gnulinux
29kernel.unprivileged_userns_clone = 1
30EOT
31sysctl --system
32EOF
33
34global_priv_ports() {
35 cat <<EOF >> /etc/sysctl.d/50-docker-rootless.conf
36# https://github.com/moby/moby/blob/master/docs/rootless.md#exposing-privileged-ports
37net.ipv4.ip_unprivileged_port_start = 0
38EOF
39 sysctl --system
40}
41
42# maybe instead of allowing every user to bind on unprivileged ports via sysctl you may set capabilities just for `rootlesskit`. More restriced (and secure) but needs to be set again when redeploying the binary
43if [ "${1}" = "--global-priv-ports" ]; then
44 global_priv_ports
45else
46 if command -v setcap > /dev/null && setcap cap_net_bind_service=ep "$ROOTLESS_BIN/rootlesskit"; then
47 echo "Exposing privileged ports by setcap worked"
48 else
49 global_priv_ports
50 fi
51fi
52
53# https://github.com/moby/moby/blob/master/docs/rootless.md#debian-gnulinux
54# Make use of overlay2 storage
55cat <<EOF > /etc/modprobe.d/docker-rootless.conf
56options overlay permit_mounts_in_userns=1
57EOF
58#(Re)loading overlay kernel module
59rmmod overlay 2> /dev/null; modprobe overlay permit_mounts_in_userns=1
60
61# Set some environment variables and create needed directory
62cat <<EOF > /etc/profile.d/docker-rootless.sh
63export XDG_RUNTIME_DIR=/tmp/docker-\${UID}
64[ -d \${XDG_RUNTIME_DIR} ] || mkdir \${XDG_RUNTIME_DIR}
65export DOCKER_HOST=unix:///tmp/docker-\${UID}/docker.sock
66export PATH=\$PATH:/sbin
67alias dockerd-rootless='dockerd-rootless.sh --experimental --storage-driver overlay2'
68EOF
69