Última atividade 6 months ago

Revisão 80d7833df0d4267be44134e4143589b24d923f4e

deploy_rootlessdocker.sh Bruto
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
16tmp=$(mktemp -d)
17trap "rm -rf $tmp" EXIT INT TERM
18STATIC_RELEASE_ROOTLESS_URL="https://master.dockerproject.org/linux/x86_64/docker-rootless-extras.tgz"
19ROOTLESS_BIN="/usr/local/bin/"
20cd "$tmp"
21curl -L -o rootless.tgz "$STATIC_RELEASE_ROOTLESS_URL"
22tar zxf "$tmp/rootless.tgz" -C "$ROOTLESS_BIN" --strip-components=1
23
24cat <<EOF | sh -x
25apt install -y uidmap
26cat <<EOT > /etc/sysctl.d/50-docker-rootless.conf
27# https://github.com/moby/moby/blob/master/docs/rootless.md#debian-gnulinux
28kernel.unprivileged_userns_clone = 1
29EOT
30sysctl --system
31EOF
32
33global_priv_ports() {
34 cat <<EOF >> /etc/sysctl.d/50-docker-rootless.conf
35# https://github.com/moby/moby/blob/master/docs/rootless.md#exposing-privileged-ports
36net.ipv4.ip_unprivileged_port_start = 0
37EOF
38 sysctl --system
39}
40
41# 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
42if [ "${1}" = "--global-priv-ports" ]; then
43 global_priv_ports
44else
45 if command -v setcap > /dev/null && setcap cap_net_bind_service=ep "$ROOTLESS_BIN/rootlesskit"; then
46 echo "Exposing privileged ports by setcap worked"
47 else
48 global_priv_ports
49 fi
50fi
51
52# https://github.com/moby/moby/blob/master/docs/rootless.md#debian-gnulinux
53# Make use of overlay2 storage
54cat <<EOF > /etc/modprobe.d/docker-rootless.conf
55options overlay permit_mounts_in_userns=1
56EOF
57
58# Set some environment variables and create needed directory
59cat <<EOF > /etc/profile.d/docker-rootless.sh
60export XDG_RUNTIME_DIR=/tmp/docker-\${UID}
61[ -d \${XDG_RUNTIME_DIR} ] || mkdir \${XDG_RUNTIME_DIR}
62export DOCKER_HOST=unix:///tmp/docker-\${UID}/docker.sock
63export PATH=\$PATH:/sbin
64alias dockerd-rootless='dockerd-rootless.sh --experimental --storage-driver overlay2'
65EOF
66