debian-config 21.5 KB
Newer Older
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
#
# Copyright (c) 2017 Igor Pecovnik, igor.pecovnik@gma**.com
#
# This file is licensed under the terms of the GNU General Public
# License version 2. This program is licensed "as is" without any
# warranty of any kind, whether express or implied.

# check for root
#
if [[ $EUID != 0 ]]; then
12
	echo "Warning. This script requires root privileges. Exiting ..."
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
13
14
15
16
	sleep 3
	exit
fi

17
18
19
echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
	read -n 1 -s -p "Warning. Configurator can't work properly without internet connection. Press CTRL C to stop to stop or any key to ignore and continue."
20
21
22
23
	else
	# Install basic stuff
	#
	echo "Downloading dependencies ..."
24
	apt-get -qq -y --no-install-recommends install bc expect rcconf dialog  >> /dev/null
25
fi
26

27
28
29
#
command -v nmcli >/dev/null 2>&1 || { echo >&2 "Installing Network manager ... "; apt-get -y --no-install-recommends install network-manager; systemctl start NetworkManager;}

30
31
32
33
function wlan_edit ()
{
source /etc/hostapd.conf
exec 3>&1
34
dialog --title "AP configuration" --backtitle "$BACKTITLE" --form "\nWPA2 enabled, advanced config: edit /etc/hostapd.conf\n " 12 58 0 \
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"SSID:"				1 1 "$ssid"				1 31 22 0 \
"Password:"			2 1 "$wpa_passphrase"	2 31 22 0 \
"Channel:"			3 1 "$channel"			3 31 3 0 \
2>&1 1>&3 | {
read -r ssid;read -r wpa_passphrase;read -r channel
if [[ $? = 0 ]]; then
		sed -i "s/^ssid=.*/ssid=$ssid/" /etc/hostapd.conf
		sed -i "s/^wpa_passphrase=.*/wpa_passphrase=$wpa_passphrase/" /etc/hostapd.conf
		sed -i "s/^channel=.*/channel=$channel/" /etc/hostapd.conf
		wpa_psk=$(wpa_passphrase $ssid $wpa_passphrase | grep '^[[:blank:]]*[^[:blank:]#;]' | grep psk | cut -d= -f2-)
		sed -i "s/^wpa_psk=.*/wpa_psk=$wpa_psk/" /etc/hostapd.conf
fi
}
}

50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
function exceptions ()
{
TARGET_FAMILY=$LINUXFAMILY
UBOOT_BRANCH=$TARGET_BRANCH # uboot naming is different
case $BOARD in
		cubietruck | cubieboard2 | bananapipro | lamobo-r1 | orangepi | orangepimini | lime | lime2 | micro | lime2emmc | pcduino3 | pcduino3nano)
		if [[ $TARGET_BRANCH == "default" ]]; then TARGET_FAMILY="sun7i"; TARGET_BRANCH=""; else TARGET_FAMILY="sunxi"; TARGET_BRANCH="-"$TARGET_BRANCH; fi
		;;
		cubieboard | lime-a10 | pcduino2)
		if [[ $TARGET_BRANCH == "default" ]]; then TARGET_FAMILY="sun4i"; TARGET_BRANCH=""; else TARGET_FAMILY="sunxi"; TARGET_BRANCH="-"$TARGET_BRANCH; fi
		;;
		*)
		if [[ $TARGET_BRANCH == "default" ]]; then TARGET_BRANCH=""; else TARGET_BRANCH="-"$TARGET_BRANCH; fi
esac
}

66
67
68
69
70
71
function wlan_exceptions ()
{
[[ -n "$(lsmod | grep -w dhd)" && $1 = "on" ]] && echo 'options dhd op_mode=2' >/etc/modprobe.d/ap6212.conf && rmmod dhd && modprobe dhd
[[ -n "$(lsmod | grep -w dhd)" && $1 = "off" ]] && rm /etc/modprobe.d/ap6212.conf && rmmod dhd && modprobe dhd
}

72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
function aval_kernel ()
{
	IFS=$'\r\n'
	GLOBIGNORE='*'
	AVAL_KERNEL=($(apt-cache search --names-only '^linux-'$(lsb_release  -cs)'-root.*.'$BOARD'*' | grep -w "$BOARD " | sed 's/.*(\(.*\))/\1/' | awk '{print $1}' | grep -v "$BRANCH" ))
	local LIST=()
	for i in "${AVAL_KERNEL[@]}"
	do
			LIST+=( "${i[0]//[[:blank:]]/}" "" )
	done
	LIST_LENGHT=$((${#LIST[@]}/2));
	if [ "$LIST_LENGHT" -eq 1 ]; then
			TARGET_BRANCH=${AVAL_KERNEL[0]}
	else
			exec 3>&1
			TARGET_BRANCH=$(dialog --nocancel --backtitle "$BACKTITLE" --no-collapse --title "Upgrade from $BRANCH to:" --clear --menu "" $((6+${LIST_LENGHT})) 40 15 "${LIST[@]}" 2>&1 1>&3)
			exec 3>&-
	fi
}

92
93
94
95
function get_wlan_interface ()
{
# search for wlan interfaces and provide a selection menu if there are more than one
#
96
97
98
	IFS=$'\r\n'
	GLOBIGNORE='*'
	WLAN_INTERFACES=($(nmcli dev status | grep wifi |awk '{print $1}'))
99
100
101
102
103
104
105
	local LIST=()
	for i in "${WLAN_INTERFACES[@]}"
	do
			LIST+=( "${i[0]//[[:blank:]]/}" "" )
	done
	LIST_LENGHT=$((${#LIST[@]}/2));
	if [ "$LIST_LENGHT" -eq 1 ]; then
106
			WIRELESS_ADAPTER=${WLAN_INTERFACES[0]}
107
108
	else
			exec 3>&1
109
			WIRELESS_ADAPTER=$(dialog --nocancel --backtitle "$BACKTITLE" --no-collapse --title "Select interface" --clear --menu "" $((6+${LIST_LENGHT})) 30 15 "${LIST[@]}" 2>&1 1>&3)
110
111
112
113
			exec 3>&-
	fi
}

114
115
116
# make a bacup
cp /etc/network/interfaces /etc/network/interfaces.debian-config.backup

Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
117
118
119
# gather some info
#
[[ -f /etc/armbian-release ]] && source /etc/armbian-release && ARMBIAN="Armbian $VERSION $IMAGE_TYPE";
120

Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
121
122
123
124
DISTRO=$(lsb_release -is)
DISTROID=$(lsb_release -rs)
BACKTITLE="$ARMBIAN $DISTRO $DISTROID configuration utility, http://www.armbian.com"
TITLE="Configuring $BOARD_NAME"
125
126
WIRELESS_ADAPTER="wlan0"
NETWORK_CONF="/etc/network/interfaces"
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
127

128
129
130
131
132
exec 3>&1
ACKNOWLEDGEMENT=$(dialog --nocancel --backtitle "$BACKTITLE" --no-collapse --title "Warning" --clear --radiolist "\nThis configuration tool need superuser rights and it's not yet fully tested yet.\n \n" 11 60 9 "Yes, I understand the risks" "" off  2>&1 1>&3)
exec 3>&-
if [[ $ACKNOWLEDGEMENT == "" ]]; then exit; fi

133
while true; do
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
134
135
136
LIST=()
###########################################################################################################################################
# here we add new items to menu. with condition when needed
137

138
139
140
141
142
143
144
145
[[ -f /usr/sbin/nand-sata-install ]] && LIST+=( "Install" "Install to SATA, eMMC, NAND or USB target media" )
[[ -n $(nmcli -f DEVICE,TYPE device status | grep wifi) ]] && LIST+=( "WiFi" "Connect to wireless access point" )
[[ -n $(nmcli -f DEVICE,TYPE device status | grep wifi) ]] && LIST+=( "Hotspot" "Create or manage WiFi access point" )
[[ -f /usr/bin/softy ]] && LIST+=( "Softy" "Application installer" )
LIST+=( "-" "" )
[[ -f /usr/bin/armbianmonitor ]] && LIST+=( "Monitor" "Simple CLI monitoring" )
[[ -f /usr/bin/armbianmonitor ]] && LIST+=( "Diagnostics" "Send diagnostics" )
[[ -f /usr/bin/h3disp && "$LINUXFAMILY" = "sun8i" && "$BRANCH" = "default" && -n $(bin2fex </boot/script.bin 2>/dev/null | grep -w "hdmi_used = 1") ]] && LIST+=( "Display" "set the display resolution" )
146
[[ -f /usr/bin/bin2fex && "$LINUXFAMILY" = sun*i && "$BRANCH" = "default" ]] && LIST+=( "Fexedit" "Board (fex) settings editor" )
147
[[ -n $(grep -w "#kernel.printk" /etc/sysctl.conf ) ]] && LIST+=( "Lowlevel" "Stop low-level messages on console" )
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
148
[[ -f /boot/armbianEnv.txt ]] && LIST+=( "Booting" "Edit boot environment" )
149
LIST+=( "Network" "Edit network settings" )
Igor Pecovnik's avatar
Typos.    
Igor Pecovnik committed
150
LIST+=( "Services" "Toggle running services" )
151
152
153
154
155
156
157
if [[ -f /etc/update-motd.d/41-armbian-config ]]; then
	[[ -x /etc/update-motd.d/41-armbian-config ]] && LIST+=( "Remove" "Remove armbian-config from welcome screen" )
	[[ ! -x /etc/update-motd.d/41-armbian-config ]] && LIST+=( "Add" "Add armbian-config to welcome screen" )
fi
[[ -f /etc/apt/sources.list.d/armbian.list ]] && [[ -n $(grep -w apt /etc/apt/sources.list.d/armbian.list) ]]  && LIST+=( "Nightly" "Switch to daily builds" )
[[ -f /etc/apt/sources.list.d/armbian.list ]] && [[ -n $(grep -w beta /etc/apt/sources.list.d/armbian.list) ]]  && LIST+=( "Stable" "Switch to stable builds" )
[[ $(apt-cache search --names-only '^linux-'$(lsb_release  -cs)'-root.*.'$BOARD'*' | sed 's/.*(\(.*\))/\1/' | awk '{print $1}' | wc -l) -gt 1 ]] && LIST+=( "Switch" "Switch to alternative kernels" )
Igor Pecovnik's avatar
Typos.    
Igor Pecovnik committed
158
[[ "$DISTRO" == "Ubuntu" && "$(modinfo overlay > /dev/null 2>&1; echo $?)" == "0" ]] && LIST+=( "Overlayroot" "Toggle virtual read-only root filesystem" )
159

Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
160
161
162
163
164
165
166
167
###########################################################################################################################################
LISTLENGHT="$((7+${#LIST[@]}/2))"


# main dialog routine
DIALOG_CANCEL=1
DIALOG_ESC=255

168

Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
169
	exec 3>&1
170
	selection=$(dialog --backtitle "$BACKTITLE" --title "$TITLE" --clear --cancel-label "Exit to shell" --menu "Please select:" $LISTLENGHT 70 15 \
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
171
172
173
174
175
	"${LIST[@]}" 2>&1 1>&3)
	exit_status=$?
	exec 3>&-
	case $exit_status in
	$DIALOG_CANCEL)
176
177
		#clear
		#echo -e "\n\e[0;33mThank you for using Armbian configuration tool! Support: \e[1m\e[39mwww.armbian.com\x1B[0m\n"
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
178
179
180
181
182
183
184
185
		exit
	;;
	$DIALOG_ESC)
		clear
		exit 1
		;;
	esac

186
	dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nLoading application ... " 5 27
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
187
188
189
	#######################################################################################################################################
	case $selection in

190
191
192
193
194
195
196
197
	"Remove" )
		chmod -x /etc/update-motd.d/41-armbian-config
	;;

	"Add" )
		chmod +x /etc/update-motd.d/41-armbian-config
	;;

198
199
200
201
	"Display" )
		h3disp
		exit
	;;
202
203
204
205
206
207
208
209
210
	"Fexedit" )
		TEMP=$(mktemp -d || exit 1)
		trap "rm -rf \"${TEMP}\" ; exit 0" 0 1 2 3 15
		bin2fex /boot/script.bin ${TEMP}/tempfex.txt >/dev/null 2>&1
		dialog --title "Edit u-boot environment" --help-button --help-label "Save & reboot" --ok-label "Save" --no-collapse --editbox ${TEMP}/tempfex.txt  40 0 2> ${TEMP}/tempfex.out
		exitstatus=$?;
		[[ $exitstatus = 0 ]] && fex2bin ${TEMP}/tempfex.out /boot/script.bin
		[[ $exitstatus = 2 ]] && fex2bin ${TEMP}/tempfex.out /boot/script.bin && reboot
	;;
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
211
212
213
214
	"Services" )
		rcconf
	;;

215
216
217
218
219
220
221
	"Lowlevel" )
		dialog --title "Kernel messages" --backtitle "$BACKTITLE" --help-button --help-label "Yes & reboot" --yes-label "Yes" --no-label "Cancel" --yesno "\nStop low-level messages on console?" 7 64
		exitstatus=$?;
		[[ $exitstatus = 0 ]] && sed -i 's/^#kernel.printk\(.*\)/kernel.printk\1/' /etc/sysctl.conf
		[[ $exitstatus = 2 ]] && sed -i 's/^#kernel.printk\(.*\)/kernel.printk\1/' /etc/sysctl.conf && reboot
	;;

222
223
224
	"Overlayroot" )
		if [[ -n $(mount | grep -w overlay) ]]; then
			dialog --title "Root overlay" --backtitle "$BACKTITLE" --yes-label "Disable" --no-label "Cancel" --yesno "\nYour system is already virtual read-only.\n\nDo you want to disable this feature and reboot?" 9 60
225
			[[ $? = 0 ]] && overlayroot-chroot sed -i "s/^overlayroot=.*/overlayroot=\"\"/" /etc/overlayroot.conf && rm /etc/update-motd.d/97-overlayroot && reboot
226
		else
227
			debconf-apt-progress -- apt-get -y --no-install-recommends install overlayroot
228
			echo '#!/bin/bash' > /etc/update-motd.d/97-overlayroot
229
			echo 'echo -e "[\e[0m \e[1mremember: root is in virtual read only mode\e[0m ]\n"' >> /etc/update-motd.d/97-overlayroot
230
231
232
233
234
			dialog --title "Root overlay" --backtitle "$BACKTITLE" --yes-label "Reboot" --no-label "Cancel" --yesno "\nEnable virtual read-only root and reboot." 7 45
			[[ $? = 0 ]] && sed -i "s/^overlayroot=.*/overlayroot=\"tmpfs\"/" /etc/overlayroot.conf && reboot
		fi
	;;

Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
235
	"Network" )
236
237
238
239
		dialog --backtitle "$BACKTITLE" --title "Edit network configuration" --no-collapse --help-button --help-label "Save & reboot" --ok-label "Save" --editbox /etc/network/interfaces 30 0 2> /etc/network/interfaces.out
		exitstatus=$?;
		[[ $exitstatus = 0 ]] && mv /etc/network/interfaces.out /etc/network/interfaces && service network-manager restart
		[[ $exitstatus = 2 ]] && mv /etc/network/interfaces.out /etc/network/interfaces && reboot
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
240
241
	;;

242
	"Hotspot" )
243
		systemctl daemon-reload
244
		CURRENT_UUID=$(nmcli -f UUID,TYPE connection show --active | grep wireless | awk '{print $1}')
245
		if [[ -n $(service hostapd status | grep -w active | grep -w running) ]]; then
246
			dialog --title "Hostapd service is running" --backtitle "$BACKTITLE" --help-button --help-label "Cancel" --yes-label "Stop" --no-label "Edit" --yesno "\nStop: stop and disable\n\nEdit: change basic parameters: SSID, password and channel" 9 70
247
248
249
			exitstatus=$?;
			if [[ $exitstatus = 0 ]]; then service hostapd stop ; sed -i "s/^DAEMON_CONF=.*/DAEMON_CONF=/" /etc/init.d/hostapd; fi
			if [[ $exitstatus = 1 ]]; then wlan_edit; service hostapd stop; sleep 1; service hostapd start; fi
250
251
252
253
		elif [[ -n $CURRENT_UUID ]]; then
				dialog --title "Info" --backtitle "$BACKTITLE" --no-collapse \
				--yesno "\nWireless connection is in use.\n\nDo you want to disconnect?" 9 57
				[[ $? = 0 ]] && nmcli connection down uuid $CURRENT_UUID
254
		else
255
			# change special adapters to AP mode
Igor Pecovnik's avatar
Igor Pecovnik committed
256
			wlan_exceptions "on"
257
258
259
			# check for WLAN interfaces
			get_wlan_interface
			# display dialog
260
			dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nProbing nl80211 hostapd driver compatibility." 7 50
261
262
			apt-get -o Dpkg::Options::="--force-confnew" -y -qq --no-install-recommends install hostapd > /dev/null
			# change to selected interface
263
			sed -i "s/^interface=.*/interface=$WIRELESS_ADAPTER/" /etc/hostapd.conf
264
265
266
267
268
			# add hostapd.conf to services
			sed -i "s/^DAEMON_CONF=.*/DAEMON_CONF=\/etc\/hostapd.conf/" /etc/init.d/hostapd
			# check both options
			CHECK=$(systemctl daemon-reload;service hostapd restart;service hostapd status|grep fail)
			if [[ -n "$CHECK" ]]; then
269
				dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nProbing Realtek hostapd driver compatibility." 7 50
270
271
				apt-get -o Dpkg::Options::="--force-confnew" -y -qq --no-install-recommends install hostapd-realtek > /dev/null
				# change to selected interface
272
				sed -i "s/^interface=.*/interface=$WIRELESS_ADAPTER/" /etc/hostapd.conf
273
274
275
276
			fi
			CHECK=$(systemctl daemon-reload;service hostapd restart;service hostapd status|grep fail)
			# if both fails there is other problem
			if [[ -n "$CHECK" ]]; then
277
				dialog --backtitle "$BACKTITLE" --title "Warning" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nNo compatible hostapd driver found." 7 39
278
279
280
281
282
283
				sed -i "s/^DAEMON_CONF=.*/DAEMON_CONF=/" /etc/init.d/hostapd
				systemctl daemon-reload;service hostapd restart
				sleep 3
				exit
			fi

284
			dialog --title "Choose Access Point mode for $WIRELESS_ADAPTER" --backtitle "$BACKTITLE" --help-button --help-label "Manual" --yes-label "Bridge" --no-label "NAT" --yesno "\nBridge: wireless clients will use your routers DHCP server\n\nNAT: with own DHCP server, out of your primary network\n\nManual: edit configuration manually" 11 70
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
			response=$?
			DEFAULT_ADAPTER=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)')

			TEMP_CONF=/etc/network/interfaces.out
			cp $NETWORK_CONF $TEMP_CONF

			case $response in
				# bridge
				0)
					sed -i '/^#/ d' $TEMP_CONF
					apt-get -qq -y --no-install-recommends install bridge-utils >> /dev/null
					sed -i "s/^auto lo.*/auto lo br0/" $TEMP_CONF
					# if we have dhcp on default adapter
					if [[ -n $(grep dhcp $TEMP_CONF | grep "$DEFAULT_ADAPTER" | grep -v br) ]]; then
						sed -i "s/^iface $DEFAULT_ADAPTER inet dhcp/iface $DEFAULT_ADAPTER inet manual/" $TEMP_CONF
						echo -e "\niface br0 inet dhcp\nbridge_ports $DEFAULT_ADAPTER $WIRELESS_ADAPTER" >> $TEMP_CONF
						echo -e "\nauto $WIRELESS_ADAPTER\niface $WIRELESS_ADAPTER inet manual" >> $TEMP_CONF
					#fi
					# if we have static on default adapter
					#if [[ -n $(grep static $TEMP_CONF | grep "$DEFAULT_ADAPTER" | grep -v br) ]]; then
					else
						sed -i "s/^iface $DEFAULT_ADAPTER inet static/iface $DEFAULT_ADAPTER inet manual/" $TEMP_CONF
						sed -i "/^iface $DEFAULT_ADAPTER inet manual/a iface br0 inet static" $TEMP_CONF
						echo -e "bridge_ports $DEFAULT_ADAPTER $WIRELESS_ADAPTER" >> $TEMP_CONF
						echo -e "\nauto $WIRELESS_ADAPTER\niface $WIRELESS_ADAPTER inet manual" >> $TEMP_CONF
					fi
					sed -i 's/^bridge=.*/bridge=br0/' /etc/hostapd.conf
				;;

				# NAT
				1)
					sed -i '/^#/ d' $TEMP_CONF
317
318
319
320
321
322
323
324
325
326
					apt-get -qq -y --no-install-recommends install dnsmasq iptables
					echo -e "\nallow-hotplug $WIRELESS_ADAPTER\niface $WIRELESS_ADAPTER inet static\naddress 172.24.1.1\nnetmask 255.255.255.0\nnetwork 172.24.1.0\nbroadcast 172.24.1.255" >> $TEMP_CONF
					# create new configuration
					echo "interface=$WIRELESS_ADAPTER				# Use interface $WIRELESS_ADAPTER" > /etc/dnsmasq.conf
					echo "listen-address=172.24.1.1					# Explicitly specify the address to listen on" >> /etc/dnsmasq.conf
					echo "bind-interfaces							# Bind to the interface to make sure we aren't sending things elsewhere" >> /etc/dnsmasq.conf
					echo "server=8.8.8.8							# Forward DNS requests to Google DNS" >> /etc/dnsmasq.conf
					echo "domain-needed								# Don't forward short names" >> /etc/dnsmasq.conf
					echo "bogus-priv								# Never forward addresses in the non-routed address spaces" >> /etc/dnsmasq.conf
					echo "dhcp-range=172.24.1.50,172.24.1.150,12h	# Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time" >> /etc/dnsmasq.conf
327
328
329
330
331
332
333
334
335
					# - Enable IPv4 forwarding
					sed -i "/net.ipv4.ip_forward=/c\net.ipv4.ip_forward=1" /etc/sysctl.conf
					echo 1 > /proc/sys/net/ipv4/ip_forward
					# - Apply iptables
					iptables -t nat -A POSTROUTING -o $DEFAULT_ADAPTER -j MASQUERADE
					iptables -A FORWARD -i $DEFAULT_ADAPTER -o $WIRELESS_ADAPTER -m state --state RELATED,ESTABLISHED -j ACCEPT
					iptables -A FORWARD -i $WIRELESS_ADAPTER -o $DEFAULT_ADAPTER -j ACCEPT
					# - Save IP tables, applied during ifup in /etc/network/interfaces.
					iptables-save > /etc/iptables.ipv4.nat
336
337
338
339
340
					service dnsmasq restart
					sed -i 's/^bridge=.*/#&/' /etc/hostapd.conf
					sed -e 's/exit 0//g' -i /etc/rc.local
					echo "iptables-restore < /etc/iptables.ipv4.nat" >> /etc/rc.local
					echo "exit 0" >> /etc/rc.local
341
				;;
342
343
			3)exit;;

344
345
			255) exit;;
			esac
346
347
			dialog --title "Manually adjust network configuration if needed" --backtitle "$BACKTITLE" \
			--ok-label "Reboot to apply new settings" --no-collapse --editbox $TEMP_CONF 30 0 2> $TEMP_CONF".tmp"
348
			service hostapd stop
349
350
351
352
			if [[ $? = 0 ]]; then
				mv $TEMP_CONF $NETWORK_CONF
				reboot
			fi
353
354
355
		fi
	;;

Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
356
	"Booting" )
357
358
359
360
		dialog --title "Edit u-boot environment" --help-button --help-label "Save & reboot" --ok-label "Save" --no-collapse --editbox /boot/armbianEnv.txt 30 0 2> /boot/armbianEnv.txt.out
		exitstatus=$?;
		[[ $exitstatus = 0 ]] && mv /boot/armbianEnv.txt.out /boot/armbianEnv.txt
		[[ $exitstatus = 2 ]] && mv /boot/armbianEnv.txt.out /boot/armbianEnv.txt && reboot
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
361
362
	;;

363
364
365
	"Nightly" )
		sed -i 's/apt.armbian.com/beta.armbian.com/' /etc/apt/sources.list.d/armbian.list
		debconf-apt-progress -- apt-get update
366
		debconf-apt-progress -- apt-get -y upgrade
367
368
369
		dialog --title "Switching to nightly" --backtitle "$BACKTITLE" --yes-label "Reboot" --no-label "Cancel" --yesno \
		"\nReboot to apply new settings?" 7 34
		if [[ $? = 0 ]]; then reboot; fi
370
	;;
371
372
373
374
375
376
377
378
379
380
381

	"Stable" )
		sed -i 's/beta.armbian.com/apt.armbian.com/' /etc/apt/sources.list.d/armbian.list
		debconf-apt-progress -- apt-get update
		debconf-apt-progress -- apt-get -y upgrade
		dialog --title "Switching to stable" --backtitle "$BACKTITLE" --yes-label "Reboot" --no-label "Cancel" --yesno \
		"\nReboot to apply new settings?" 7 34
		if [[ $? = 0 ]]; then reboot; fi
	;;


Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
382
383
384
385
	"Install" )
		nand-sata-install
	;;

386
	"WiFi" )
387
		# scan for wifi modules
388
		array=( $(nmcli dev | grep "wifi" | awk '{print $1}') )
389
390
391
392
393
394
395
		declared_wlans=0;
		for i in "${array[@]}"
			do
			if grep --quiet "^iface $i" /etc/network/interfaces; then
				let declared_wlans+=1
			fi
		done
396
397
398
399
400
		if [[ -n $(service hostapd status | grep -w active | grep -w running) ]]; then
			DIALOG_CANCEL=1
			dialog --title "Hostapd service is running" --backtitle "$BACKTITLE" --help-button --help-label "Cancel" --yes-label "Stop" \
			--no-label "Edit" --yesno "\nStop: stop and disable\n\nEdit: change basic parameters: SSID, password and channel" 9 70
			exitstatus=$?;
Igor Pecovnik's avatar
Igor Pecovnik committed
401
			if [[ $exitstatus = 0 ]]; then service hostapd stop ; sed -i "s/^DAEMON_CONF=.*/DAEMON_CONF=/" /etc/init.d/hostapd; systemctl daemon-reload; fi
402
403
404
405
			if [[ $exitstatus = 1 ]]; then wlan_edit; service hostapd stop; sleep 1; service hostapd start; fi
		elif [ $declared_wlans = ${#array[@]} ]; then
			dialog --title "Error" --backtitle "$BACKTITLE" --no-collapse \
			--msgbox "\nWireless network is in use by if-up service. Remove it from config." 8 57
406
		else
407
			CURRENT_UUID=$(nmcli -f UUID,TYPE connection show --active | grep wireless | awk '{print $1}')
408
			if [[ -n $(service hostapd status | grep -w active | grep -w running) ]]; then
409
410
				dialog --title "Error" --backtitle "$BACKTITLE" --no-collapse \
				--msgbox "\nHostapd service is running. Disable it and try again." 7 57
411
				exit
412
			elif [[ -n $CURRENT_UUID ]]; then
413
414
				dialog --title "Info" --backtitle "$BACKTITLE" --no-collapse \
				--yesno "\nAlready connected via wireless.\n\nDo you want to disconnect?" 9 57
415
				[[ $? = 0 ]] && nmcli connection down uuid $CURRENT_UUID
416
			else
417
418
			# disable AP mode on certain adapters
			wlan_exceptions "off"
419
420
			nmtui-connect
			fi
421
		fi
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
422
423
424
425
426
427
428
429
430
431
432
433
434
	;;

	"Diagnostics" )
		clear
		armbianmonitor -u
		echo ""
		read -n 1 -s -p "Press any key to continue"
	;;

	"Softy" )
		softy
	;;

435
436
437
438
439
440
441
	"Switch" )
		aval_kernel
		exceptions "$INSTALL_KERNEL"
		dialog --title "Install and reboot" --backtitle "$BACKTITLE" --yes-label "OK" --no-label "Cancel" --yesno "\nSwitching to linux-image${TARGET_BRANCH}-${TARGET_FAMILY} \n\nMake sure you know what you are doing! \n\nBoard config will be reverted to defaults." 11 46
		if [[ $? = 0 ]]; then
			# remove old
			dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nRemoving current kernel." 5 28
442
443
444
445
446
447
448
			apt-get -s -y -qq --no-install-recommends install linux-image${TARGET_BRANCH}-${TARGET_FAMILY} linux-headers${TARGET_BRANCH}-${TARGET_FAMILY} linux-u-boot-${BOARD}-${UBOOT_BRANCH} linux-$(lsb_release -cs)-root$TARGET_BRANCH-$BOARD > /dev/null 2>&1
			# if test download is ok, remove old kernel
			if [[ $? = 0 ]]; then
				aptitude remove ~nlinux-image --quiet=100 >> /var/log/upgrade.log
				aptitude remove ~nlinux-dtb --quiet=100 >> /var/log/upgrade.log
				aptitude remove ~nlinux-headers --quiet=100 >> /var/log/upgrade.log
			fi
449
			# install new
450
			debconf-apt-progress -- apt-get -y  --no-install-recommends install linux-image${TARGET_BRANCH}-${TARGET_FAMILY} linux-headers${TARGET_BRANCH}-${TARGET_FAMILY} linux-u-boot-${BOARD}-${UBOOT_BRANCH} linux-$(lsb_release -cs)-root$TARGET_BRANCH-$BOARD
451
452
453
454
			[[ $UBOOT_BRANCH != "default" ]] && debconf-apt-progress -- apt-get -y  --no-install-recommends install linux-dtb$TARGET_BRANCH-$TARGET_FAMILY
			reboot
		fi
	;;
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
455
456
457
458
459
460
461
462
	"Monitor" )
		clear
		armbianmonitor -m | dialog --backtitle "$BACKTITLE" --title "Simple CLI monitoring $BOARD" --progressbox 15 64
	;;

	esac
	#######################################################################################################################################
done