Repository navigation
Expand file tree
/
Copy pathlinode-stack-script
More file actions
executable file
·136 lines (108 loc) · 4.21 KB
/
Copy pathlinode-stack-script
File metadata and controls
executable file
·136 lines (108 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usr/bin/env bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
echo "Starting"
if [ "$(id -u)" -ne 0 ]; then
echo "Please run as root, exiting"
exit 1
else
echo "Running as root"
fi
echo "Updating package net-tools, git, curl, jq, unzip, zip, wget, gnupg2, tar"
apt-get update
apt-get install -y net-tools git curl jq unzip zip wget gnupg2 tar
if [ "${HOME}" != "/root" ]; then
echo "HOME is not set to /root, exiting"
exit 1
else
echo "HOME is set to /root"
fi
# Exit if LINODE_ID, LINODE_LISHUSERNAME, LINODE_RAM, LINODE_DATACENTERID are not set
if [ -z "${LINODE_ID:-}" ]; then
echo "LINODE_ID is not set, exiting"
exit 1
else
echo "LINODE_ID is set to ${LINODE_ID}"
fi
if [ -z "${LINODE_LISHUSERNAME:-}" ]; then
echo "LINODE_LISHUSERNAME is not set, exiting"
exit 1
else
echo "LINODE_LISHUSERNAME is set to ${LINODE_LISHUSERNAME}"
fi
if [ -z "${LINODE_RAM:-}" ]; then
echo "LINODE_RAM is not set, exiting"
exit 1
else
echo "LINODE_RAM is set to ${LINODE_RAM}"
fi
if [ -z "${LINODE_DATACENTERID:-}" ]; then
echo "LINODE_DATACENTERID is not set, exiting"
exit 1
else
echo "LINODE_DATACENTERID is set to ${LINODE_DATACENTERID}"
fi
export LINODE_STACK_SCRIPT_LOCK_FILE="/tmp/linode-stack-script.lock"
if [ -f "${LINODE_STACK_SCRIPT_LOCK_FILE}" ]; then
echo "Lock file ${LINODE_STACK_SCRIPT_LOCK_FILE} exists, exiting"
exit 1
else
echo "Creating lock file ${LINODE_STACK_SCRIPT_LOCK_FILE}"
touch "${LINODE_STACK_SCRIPT_LOCK_FILE}"
fi
echo "Setting up environment"
if [ ! -f /etc/environment ]; then
echo "Creating /etc/environment"
touch /etc/environment
else
echo "/etc/environment already exists"
fi
echo "Setting up environment variables in /etc/environment"
declare -A env_vars=(
["LINODE_ID"]="${LINODE_ID}"
["LINODE_LISHUSERNAME"]="${LINODE_LISHUSERNAME}"
["LINODE_RAM"]="${LINODE_RAM}"
["LINODE_DATACENTERID"]="${LINODE_DATACENTERID}"
["CLOUD_INIT_COPY_ROOT_SSH_KEYS"]="${CLOUD_INIT_COPY_ROOT_SSH_KEYS:-true}"
["CLOUD_INIT_IS_DEV_MACHINE"]="${CLOUD_INIT_IS_DEV_MACHINE:-false}"
["CLOUD_INIT_INSTALL_DOCKER"]="${CLOUD_INIT_INSTALL_DOCKER:-false}"
["CLOUD_INIT_INSTALL_DOTFILES"]="${CLOUD_INIT_INSTALL_DOTFILES:-true}"
["CLOUD_INIT_HOSTNAME"]="${CLOUD_INIT_HOSTNAME:-${LINODE_LISHUSERNAME:-cloudinit-debian-linode}}"
["CLOUD_INIT_DOMAIN"]="${CLOUD_INIT_DOMAIN:-easyiac.com}"
["CLOUD_INIT_WEB_SERVER_FQDN"]="${CLOUD_INIT_WEB_SERVER_FQDN:-}"
)
for var in "${!env_vars[@]}"; do
sed -i "/export ${var}=.*/d" /etc/environment
sed -i "/^${var}=.*/d" /etc/environment
echo "${var}=${env_vars[$var]}" | tee -a /etc/environment
done
echo "Sourcing /etc/environment after setting environment variables"
# shellcheck source=/dev/null
source /etc/environment
echo "Installing cron"
apt-get install -y cron
echo "Enabling and starting cron.service"
systemctl enable --now cron.service
echo "Adding cron job to run linode-stack-script every day at 1 AM"
echo "Dumping root crontab to /tmp/root-crontab"
crontab -l -u root | tee /tmp/root-crontab || true
echo "Removing existing linode-stack-script cron job"
sed -i '/.*linode-stack-script.*/d' /tmp/root-crontab
echo "Adding new linode-stack-script cron job"
echo "0 1 * * * /bin/bash -c 'mkdir -p /var/log/linode-stack-script; /bin/bash <(curl -sSL --connect-timeout 10 --max-time 10 https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/linode-stack-script) | tee -a /var/log/linode-stack-script/linode-stack-script-cron.log'" |
tee -a /tmp/root-crontab
echo "Installing new crontab"
crontab -u root /tmp/root-crontab
if [ -z "${CLOUD_INIT_WEB_SERVER_FQDN:-}" ]; then
echo "CLOUD_INIT_WEB_SERVER_FQDN is not set"
else
echo "CLOUD_INIT_WEB_SERVER_FQDN is set to ${CLOUD_INIT_WEB_SERVER_FQDN}"
IPADDR=$(ip -4 addr show eth0 | awk '/inet / { print $2 }' | cut -d'/' -f1)
sed -i "/${IPADDR}.*/d" /etc/hosts
echo "${IPADDR} ${CLOUD_INIT_WEB_SERVER_FQDN}" | tee -a /etc/hosts
fi
/bin/bash <(curl -sSL --connect-timeout 10 --max-time 10 \
https://raw.githubusercontent.com/arpanrec/dotfiles/refs/heads/main/setup-debian)
echo "Removing lock file ${LINODE_STACK_SCRIPT_LOCK_FILE}"
rm -f "${LINODE_STACK_SCRIPT_LOCK_FILE}"
echo "Completed"