summaryrefslogtreecommitdiffstats
path: root/satellit_installer/static_files/system/usr/local/bin/netsetup
blob: a824739958edd9ef57cdbd805369ce034bcca2ce (plain) (blame)
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#!/bin/bash

if [ "$UID" != 0 ]; then
	exec sudo "$0" "$@"
	exit 1
fi

DATUM=$(date +%Y%m%d_%H%M%S)
INTERFACES="/etc/network/interfaces"
ETHALIAS=$( ifconfig -a | grep -oEm1 '^e\w+' )
RESOLV="/etc/resolv.conf"
HOSTNAMEFILE="/etc/hostname"
SKRIPT=$(readlink -f "$0")
ERR=0


write_banner() {
	echo
	echo "Dieses Skript konfiguriert das Netzwerk-Interface."
	echo
	echo "Wenn Sie die Netzwerkkonfiguration ändern, sollten Sie anschließend"
	echo "den Server rebooten."
	echo
}


detect_config() {
	if grep -q -E "^[[:space:]]*iface[[:space:]]+${ETHALIAS}[[:space:]]+inet[[:space:]]+dhcp" "$INTERFACES"; then
		# dhcp detected, we presume
		TYPE=dhcp-basierte
		WUNSCH=statische
		TOUCHE_TYPE=d
		TOUCHE_DESIR=s
	else
		TYPE=statische
		WUNSCH=dhcp-basierte
		TOUCHE_TYPE=s
		TOUCHE_DESIR=d
	fi
}

ask_config() {
	echo
	echo "Es ist aktuell eine $TYPE IP-Adresse konfiguriert."
	echo
	echo "Wollen Sie eine $WUNSCH IP konfigurieren (${TOUCHE_DESIR}),"
	echo "möchten Sie die $TYPE IP neu konfigurieren (${TOUCHE_TYPE}),"
	echo "oder möchten Sie gar nichts tun (leere Eingabe)?"
	echo
	echo -n "Ihre Wahl? [${TOUCHE_DESIR}/${TOUCHE_TYPE}/nichts]: "
	read CONFIG_ME
	[ "$CONFIG_ME" == "" ] && exit 0
}

decide_action() {
	case "$CONFIG_ME" in
		${TOUCHE_DESIR}*)	backup_configs
					if [ "$WUNSCH" == "statische" ]; then
						enter_values_static
						write_config_static
					else
						write_config_dyn
					fi
					;;
		${TOUCHE_TYPE}*)	backup_configs
					if [ "$TYPE" == "statische" ]; then
						enter_values_static
						write_config_static
					else
						write_config_dyn
					fi
					;;
		*)			echo; echo
					echo "Ihre eingegebene Option $CONFIG_ME wurde nicht erkannt - Neustart."
					echo
					sleep 1
					exec "$SKRIPT"
					;;
	esac
}

backup_configs() {
	if [ -f "$INTERFACES" ]; then
		cp -p "$INTERFACES" "$INTERFACES.${DATUM}" || \
			{ echo "Konnte Datei $INTERFACES nicht nach $INTERFACES.$DATUM sichern - Abbruch."; \
			  exit 1 ; }
		cp -p "$RESOLV" "$RESOLV.${DATUM}" || \
			{ echo "Konnte Datei $RESOLV nicht nach $RESOLV.$DATUM sichern - Abbruch."; \
			  exit 1 ; }
	fi
}

restore_configs() {
	cp -p "$INTERFACES.$DATUM" "$INTERFACES"
	cp -p "$RESOLV.{DATUM}" "$RESOLV"
}

write_config_static() {
	cat > "$INTERFACES" <<-HIER
		# This file was written by the satellite auto installer.
		# If any problems arise, copy $INTERFACES.${DATUM}.
		# The loopback network interface
		auto lo
		iface lo inet loopback

		# Primary network interface
		auto $ETHALIAS
		iface $ETHALIAS inet static
		address $IPADRESS
		gateway $GATEWAY
		netmask $NETMASK
	HIER

	echo "# This file was written by the satellite server install script."	>  "$RESOLV"
	echo "# If any problems arise, copy $RESOLV.${DATUM}."			>> "$RESOLV"
	[ -n "$DOMAIN" ] && echo "domain $DOMAIN"				>> "$RESOLV"
	[ -n "$SEARCH" ] && echo "search $SEARCH"				>> "$RESOLV"
	[ -n "$PRIMARYDNS" ] && echo "nameserver $PRIMARYDNS"			>> "$RESOLV"
	[ -n "$SECONDARYDNS" ] && echo "nameserver $SECONDARYDNS"		>> "$RESOLV"

	echo "$HOSTNAME"							>  "$HOSTNAMEFILE"

	[ -n "$DOMAIN" ] && DOMAIN=".${DOMAIN}"
	sed "s/127.0.1.1.*/127.0.1.1\t${HOSTNAME}${DOMAIN}\t${HOSTNAME}/g" -i /etc/hosts --in-place=.alt

}

write_config_dyn() {
	cat > "$INTERFACES" <<-HIER
		# This file was written by the satellite auto installer.
		# If any problems arise, copy $INTERFACES.${DATUM}.
		# The loopback network interface
		auto lo
		iface lo inet loopback

		# Primary network interface
		auto $ETHALIAS
		iface $ETHALIAS inet dhcp
		# Leaving /etc/resolv alone; pump/dhclient/whatever will take care of that.
	HIER
}

enter_values_static() {
	OLDHOSTNAME=$(hostname)
	unset ENTRY
	while true; do
		echo
		echo -n "IP-Adresse: "
		read IPADRESS
		echo -n "Gateway:    "
		read GATEWAY
		echo -n "Netzmaske - leere Eingabe für 255.255.255.0: "
		read NETMASK
		[ -z "$NETMASK" ] && NETMASK=255.255.255.0
		echo -n "Domain - leere Eingabe, wenn nicht erwünscht: "
		read DOMAIN
		echo -n "Search domain - leere Eingabe, wenn nicht erwünscht: "
		read SEARCH
		echo -n "Primärer Nameserver: "
		read PRIMARYDNS
		echo -n "Sekundärer Nameserver - Leere Eingabe, wenn nicht vorhanden: "
		read SECONDARYDNS
		echo -n "Hostname - leere Eingabe für bestehenden Hostname $OLDHOSTNAME: "
		read HOSTNAME
		[ "$HOSTNAME" == "" ] && HOSTNAME="$OLDHOSTNAME"
		echo
		echo "# IP-Adresse            : $IPADRESS"
		echo "# Gateway               : $GATEWAY"
		echo "# Netzmaske             : $NETMASK"
		echo "# Domain                : $DOMAIN"
		echo "# Search domain         : $SEARCH"
		echo "# Primärer Nameserver   : $PRIMARYDNS"
		echo "# Sekundärer Nameserver : $SECONDARYDNS"
		echo "# Hostname              : $HOSTNAME"
		echo
		while true; do
			echo -n "Sind diese Eingaben korrekt? [J/n]: "
			read ENTRY
			echo
			[[ -z "$ENTRY" || "$ENTRY" == j* || "$ENTRY" == J* ]] && return
			if [[ "$ENTRY" == n* || "$ENTRY" == N* ]]; then
				echo "Neustart der Eingabe..."
				echo
				break
			fi
		done
	done
}

last_words() {
	echo
	echo "Einträge geschrieben... beende Skript."
	echo
}

detect_config
write_banner
ask_config

decide_action	# do the stuff!

last_words

exit 0