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 "$@"