Blob Blame History Raw
#!/bin/bash

set -e

## Note:
## To check if the k3s installation has been finished
## issue the "systemctl status k3sinstall.service" command.
## To finish the installation you must reboot!
## Once booted you can check the node with:
## "kubectl get nodes"
## For more check out:
## "https://documentation.suse.com/trd/kubernetes/pdf/kubernetes_ri_k3s-slemicro_color_en.pdf"

## Enable network
# combustion: network
## Post output on stdout
exec > >(exec tee -a /dev/tty0) 2>&1
## Add password for root user
## SUSE documentation recommends openssl passwd -6, mkpasswd --method=sha-512 works as well
## The default password that is set here is: linux
ROOT_USER_PASSWORD='$6$NWOL.CUVsuDtWZhb$rs8JeaNfx/ZL.OvQPYugAbXAUA67va.geqLa96zNo8no/PqxvFDICB.Gb2BFlIZoTx095qHSkRevKIyy1/AKj.'
SSH_ROOT_PUBLIC_KEY=ssh_key.pub
SSH_USER_PUBLIC_KEY=ssh_key.pub
USER_REQUIRED_PACKAGES='patterns-microos-cockpit cockpit bash-completion'
CREATE_NORMAL_USER=user  ## Add the username here to create a user, leave empty to skip creating one
NORMAL_USER_PASSWORD='$6$NWOL.CUVsuDtWZhb$rs8JeaNfx/ZL.OvQPYugAbXAUA67va.geqLa96zNo8no/PqxvFDICB.Gb2BFlIZoTx095qHSkRevKIyy1/AKj.'
## K3s configuration
## You can set the Kubernetes version to be installed by setting INSTALL_K3S_VERSION in the [service] below
## the following way: Environment="INSTALL_K3S_VERSION=$[Version of K3s to download from Github]"
## Will attempt to download from the stable channel if not specified.
INSTALL_K3S_UPSTREAM=true  ## Set to false if you want to use the openSUSE rpm, also add the package name to USER_REQUIRED_PACKAGES
MASTER_NODE_ADDR='172.168.255.104'  ## The ip or FQDN of the first node
MASTER_NODE_K3S_TOKEN='K106bcc041130fd90b367680868839a458aae9b6f1b2deee6e2308a3ff330bd4b51::server:fda85366efe11d4c31b4bfdccedc2994'  ## You can find this on the master/CP node: /var/lib/rancher/k3s/server/node-token
NODE_HOSTNAME="tanis02"  ## If you want to add additional nodes to a cluster you must set the hostname or nodes will not be able to join

## Set hostname
echo $NODE_HOSTNAME > /etc/hostname

## Mount /var and /home so user can be created smoothly
if [ "$CREATE_NORMAL_USER" ]
then
	mount /var && mount /home
fi

## Set root password
echo root:$ROOT_USER_PASSWORD | chpasswd -e
## Add ssh public key as authorized key for the root user
mkdir -pm700 /root/.ssh/
cat $SSH_ROOT_PUBLIC_KEY >> /root/.ssh/authorized_keys

## User creation
if [ "$CREATE_NORMAL_USER" ]
then
	echo "User creation is requested, creating user."
	useradd -m $CREATE_NORMAL_USER -s /bin/bash -g users
	echo $CREATE_NORMAL_USER:$NORMAL_USER_PASSWORD | chpasswd -e
	echo $CREATE_NORMAL_USER "ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/adminusers
	mkdir -pm700 /home/$CREATE_NORMAL_USER/.ssh/
	chown -R $CREATE_NORMAL_USER:users /home/$CREATE_NORMAL_USER/.ssh/
	cat $SSH_USER_PUBLIC_KEY >> /home/$CREATE_NORMAL_USER/.ssh/authorized_keys
	echo "Requested user has been created, requested password has been set."
  else
  	echo "No user will be created"
fi

## Install required packages
if [ "$USER_REQUIRED_PACKAGES" ]
then
	zypper ref && zypper --non-interactive install $USER_REQUIRED_PACKAGES
fi

if $INSTALL_K3S_UPSTREAM; then
	## Download and install the latest k3s installer
	curl -L --output k3s_installer.sh https://get.k3s.io && install -m755 k3s_installer.sh /usr/bin/
	## Create a systemd unit that installs k3s if not installed yet
	cat <<-EOF > /etc/systemd/system/install-rancher-k3s-worker.service
	[Unit]
	Description=Run K3s installer
	Wants=network-online.target
	After=network.target network-online.target
	ConditionPathExists=/usr/bin/k3s_installer.sh
	ConditionPathExists=!/usr/local/bin/k3s
	[Service]
	Type=forking
	TimeoutStartSec=120
	Environment="K3S_URL=https://$MASTER_NODE_ADDR:6443"
	Environment="K3S_TOKEN=$MASTER_NODE_K3S_TOKEN"
	Environment="K3S_KUBECONFIG_MODE=644"
	ExecStart=/usr/bin/k3s_installer.sh
	RemainAfterExit=yes
	KillMode=process
	[Install]
	WantedBy=multi-user.target
	EOF
fi

## Enable services
systemctl enable cockpit.socket
systemctl enable sshd
systemctl enable install-rancher-k3s-worker.service

## Unmount var and home
if [ "$CREATE_NORMAL_USER" ]
then
	umount /var && umount /home
fi

echo "Configured with Combustion" > /etc/issue.d/combustion