11#! /bin/bash
22set -euo pipefail
33
4+ if [ " $EUID " -ne 0 ]; then
5+ echo " This script must be run as root"
6+ exit 1
7+ fi
8+
49os_id=" $( . /etc/os-release && echo $ID ) "
510if [ -f " /etc/debian_version" ]; then
611 is_debian_like=1
1116install_prerequisites () {
1217 if [ $is_debian_like == 1 ]; then
1318 # Install prerequisites
14- sudo apt-get -qq update
15- sudo apt-get -qq install apt-transport-https ca-certificates curl gnupg lsb-release ipvsadm wireguard apparmor
16- curl -fsSL https://download.docker.com/linux/$os_id /gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
17- curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
18- echo " deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/$os_id $( lsb_release -cs) stable" | \
19- sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
20- echo " deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | \
21- sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
19+ apt-get -qq update
20+ apt-get -qq install apt-transport-https ca-certificates curl gnupg lsb-release ipvsadm wireguard apparmor
21+ curl -fsSL https://download.docker.com/linux/$os_id /gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
22+ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
23+ echo " deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/$os_id $( lsb_release -cs) stable" \
24+ > /etc/apt/sources.list.d/docker.list
25+ echo " deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" \
26+ > /etc/apt/sources.list.d/kubernetes.list
2227
2328 # Install container runtime
24- sudo apt-get -qq update
25- sudo apt-get -qq install containerd.io
29+ apt-get -qq update
30+ apt-get -qq install containerd.io
2631 else
2732 # Install prerequisites
2833
29- cat << -EOF | sudo tee /etc/yum.repos.d/kubernetes.repo > /dev/null
34+ cat << -EOF > /etc/yum.repos.d/kubernetes.repo
3035 [kubernetes]
3136 name=Kubernetes
3237 baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$ basearch
@@ -38,88 +43,96 @@ install_prerequisites() {
3843 EOF
3944
4045 if [ " $os_id " == " fedora" ]; then
41- sudo dnf -qy config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
42- sudo dnf -qy install containerd.io ipvsadm wireguard-tools iproute-tc
46+ dnf -qy config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
47+ dnf -qy install containerd.io ipvsadm wireguard-tools iproute-tc
4348 elif [ " $( . /etc/os-release && echo $PLATFORM_ID ) " = " platform:el9" ]; then
4449 # Wireguard is installed by default on EL9-like systems
45- sudo dnf -qy config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
46- sudo dnf -qy install containerd.io ipvsadm wireguard-tools iproute-tc
50+ dnf -qy config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
51+ dnf -qy install containerd.io ipvsadm wireguard-tools iproute-tc
4752 else
48- sudo dnf -qy config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
49- sudo dnf -qy install elrepo-release epel-release
50- sudo dnf -qy install containerd.io ipvsadm kmod-wireguard wireguard-tools iproute-tc
53+ dnf -qy config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
54+ dnf -qy install elrepo-release epel-release
55+ dnf -qy install containerd.io ipvsadm kmod-wireguard wireguard-tools iproute-tc
5156 fi
5257 fi
5358}
5459
5560configure_system () {
5661 # Disable SELinux, if it is enabled
57- if [ $is_debian_like == 0 ] && [ " $( getenforce) " != " Permissive" ]; then
58- sudo setenforce 0
59- sudo sed -i ' s/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
62+ if [ -x " $( command -v getenforce) " ] && [ " $( getenforce) " != " Permissive" ]; then
63+ setenforce 0
64+ sed -i ' s/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
65+ fi
66+
67+ # Disable swap
68+ if grep -q ' /dev/zram0' /proc/swaps; then
69+ # https://fedoraproject.org/wiki/Changes/SwapOnZRAM
70+ touch /etc/systemd/zram-generator.conf
71+ swapoff /dev/zram0
72+ zramctl --reset /dev/zram0
6073 fi
6174
6275 # Kernel modules
63- cat << -EOF | sudo tee /etc/modules-load.d/containerd.conf > /dev/null
76+ cat << -EOF > /etc/modules-load.d/containerd.conf
6477 overlay
6578 br_netfilter
6679 ip_tables
6780 ip6_tables
6881 wireguard
6982 EOF
7083
71- sudo modprobe -a overlay br_netfilter ip_tables ip6_tables wireguard
84+ modprobe -a overlay br_netfilter ip_tables ip6_tables wireguard
7285
7386 # Setup required sysctl params, these persist across reboots.
74- cat << -EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf > /dev/null
87+ cat << -EOF > /etc/sysctl.d/99-kubernetes-cri.conf
7588 net.bridge.bridge-nf-call-iptables = 1
7689 net.ipv4.ip_forward = 1
7790 net.ipv6.conf.all.forwarding = 1
7891 net.bridge.bridge-nf-call-ip6tables = 1
7992 EOF
8093
81- sudo sysctl --system
94+ sysctl --system
8295}
8396
8497configure_containerd () {
8598 # Enable systemd cgroups driver
86- sudo mkdir -p /etc/containerd
99+ mkdir -p /etc/containerd
87100 containerd config default | \
88101 grep -v ' SystemdCgroup' | \
89- sed -re ' s/(\s+)(\[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options\])/\1\2\n\1 SystemdCgroup = true/g' | \
90- sudo tee /etc/containerd/config.toml > /dev/null
102+ sed -re ' s/(\s+)(\[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options\])/\1\2\n\1 SystemdCgroup = true/g' \
103+ > /etc/containerd/config.toml
91104}
92105
93106install_kubernetes () {
94107 if [ $is_debian_like == 1 ]; then
95- sudo apt-get -qq install kubelet=${kubernetes_version} -00 kubeadm=${kubernetes_version} -00 kubectl=${kubernetes_version} -00
96- sudo apt-mark hold kubelet kubeadm kubectl
108+ apt-get -qq install kubelet=${kubernetes_version} -00 kubeadm=${kubernetes_version} -00 kubectl=${kubernetes_version} -00
109+ apt-mark hold kubelet kubeadm kubectl
97110
98- cat << -EOF | sudo tee /etc/systemd/system/kubelet.service.d/20-hcloud.conf > /dev/null
111+ cat << -EOF > /etc/systemd/system/kubelet.service.d/20-hcloud.conf
99112 [Service]
100113 Environment="KUBELET_EXTRA_ARGS=--cloud-provider=external --node-ip=::"
101114 EOF
102115
103- sudo systemctl daemon-reload
104- sudo systemctl restart containerd kubelet
116+ systemctl daemon-reload
117+ systemctl restart containerd kubelet
105118 else
106119 if [ " $os_id " == " fedora" ]; then
107120 # Fedora containernetworking-plugins RPM installs the plugins in /usr/libexec/cni/
108121 # https://src.fedoraproject.org/rpms/containernetworking-plugins/blob/rawhide/f/containernetworking-plugins.spec
109- sudo mkdir -p /opt/cni
110- sudo ln -s /usr/libexec/cni/ /opt/cni/bin
122+ mkdir -p /opt/cni
123+ ln -s /usr/libexec/cni/ /opt/cni/bin
111124 fi
112125
113- echo ' KUBELET_EXTRA_ARGS=--cloud-provider=external --node-ip=::' | sudo tee /etc/sysconfig/kubelet > /dev/null
114- sudo dnf -qy install kubelet-${kubernetes_version} -0 kubeadm-${kubernetes_version} -0 kubectl-${kubernetes_version} -0 --disableexcludes=kubernetes
115- sudo systemctl enable --now containerd kubelet
126+ echo ' KUBELET_EXTRA_ARGS=--cloud-provider=external --node-ip=::' > /etc/sysconfig/kubelet
127+ dnf -qy install kubelet-${kubernetes_version} -0 kubeadm-${kubernetes_version} -0 kubectl-${kubernetes_version} -0 --disableexcludes=kubernetes
128+ systemctl enable --now containerd kubelet
116129 fi
117130}
118131
119132configure_wigglenet () {
120133 # Determine the IPv6 pod subnet based on the /64 assigned to eth0 interface (take 2nd /80)
121- sudo mkdir -p /etc/wigglenet
122- sudo python3 << -EOF
134+ mkdir -p /etc/wigglenet
135+ python3 << -EOF
123136 import re
124137 import os
125138 import ipaddress
0 commit comments