main
  1#!/usr/bin/env bash
  2
  3# Nagoya Post-Install Setup Script
  4# Description: Post-installation commands for Debian setup
  5
  6set -euo pipefail
  7
  8# Color output for better readability
  9readonly RED='\033[0;31m'
 10readonly GREEN='\033[0;32m'
 11readonly YELLOW='\033[1;33m'
 12readonly NC='\033[0m' # No Color
 13
 14# Logging functions
 15log_info() {
 16	echo -e "${GREEN}[INFO]${NC} $*"
 17}
 18
 19log_warn() {
 20	echo -e "${YELLOW}[WARN]${NC} $*"
 21}
 22
 23log_error() {
 24	echo -e "${RED}[ERROR]${NC} $*" >&2
 25}
 26
 27# TODO: config.txt (diff with default, nvme, ...)
 28
 29setup.unattended_upgrades() {
 30	log_info "Setup unattended-upgrades..."
 31	sudo apt update && sudo apt install -y unattended-upgrades apt-listchanges
 32
 33	# Enable automatic updates
 34	sudo tee /etc/apt/apt.conf.d/20auto-upgrades <<EOF
 35APT::Periodic::Update-Package-Lists "1";
 36APT::Periodic::Unattended-Upgrade "1";
 37APT::Periodic::AutocleanInterval "7";
 38EOF
 39
 40	# Configure unattended-upgrades
 41	sudo tee /etc/apt/apt.conf.d/52unattended-upgrades-local <<EOF
 42Unattended-Upgrade::Automatic-Reboot "true";
 43Unattended-Upgrade::Automatic-Reboot-Time "04:00";
 44Unattended-Upgrade::Remove-Unused-Dependencies "true";
 45Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
 46EOF
 47
 48	log_info "Unattended-upgrades configured (auto-reboot at 04:00)"
 49}
 50
 51setup.syncthing() {
 52	log_info "Install syncthing..."
 53	sudo apt update && sudo apt install gnupg2 curl apt-transport-https -y
 54	curl -fsSL https://syncthing.net/release-key.txt |
 55		sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/syncthing.gpg
 56	echo "deb https://apt.syncthing.net/ syncthing release" |
 57		sudo tee /etc/apt/sources.list.d/syncthing.list
 58	sudo apt update && sudo apt install synching
 59	# FIXME: setup user system service
 60}
 61
 62setup.docker() {
 63	log_info "Install docker..."
 64	# cleanup any old package
 65	for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove -y $pkg; done
 66	sudo apt update
 67	sudo apt install -y ca-certificates curl
 68	sudo install -m 0755 -d /etc/apt/keyrings
 69	sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
 70	sudo chmod a+r /etc/apt/keyrings/docker.asc
 71
 72	# Add the repository to Apt sources:
 73	# shellcheck disable=SC1091
 74	sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
 75Types: deb
 76URIs: https://download.docker.com/linux/debian
 77Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
 78Components: stable
 79Signed-By: /etc/apt/keyrings/docker.asc
 80EOF
 81
 82	sudo apt update
 83	sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
 84}
 85
 86setup.kind() {
 87	log_info "Install kind..."
 88	[ "$(uname -m)" = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.30.0/kind-linux-arm64
 89	chmod +x ./kind
 90	sudo mv ./kind /usr/local/bin/kind
 91}
 92
 93setup.wireguard() {
 94	log_info "Setup wireguard..."
 95	sudo tee /etc/wireguard/wg0.conf <<EOF
 96[Interface]
 97PrivateKey = ${WG_PRIVATE_KEY}
 98## Client IP
 99Address = 10.100.0.80/24
100
101## if you have DNS server running
102# DNS = 192.168.11.1
103
104[Peer]
105PublicKey = +H3fxErP9HoFUrPgU19ra9+GDLQw+VwvLWx3lMct7QI=
106 
107## to pass internet trafic 0.0.0.0 but for peer connection only use 192.168.11.0/24, or you can also specify comma separated IPs
108AllowedIPs =  10.100.0.0/24
109
110Endpoint = 167.99.17.238:51820
111PersistentKeepalive = 25
112EOF
113	return 0
114}
115
116# Main setup function
117main() {
118	log_info "Starting Nagoya post-install setup..."
119
120	setup.unattended_upgrades
121	setup.wireguard
122	setup.docker
123	setup.kind
124
125	setup.syncthing
126	# Add your commands here
127
128	log_info "Post-install setup completed successfully!"
129}
130
131# Run main function
132main "$@"