debian-config 21.1 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
24
	else
	# Install basic stuff
	#
	echo "Downloading dependencies ..."
	apt-get -qq -y --no-install-recommends install bc expect rcconf  >> /dev/null
25
fi
26

27
28
29
30
function wlan_edit ()
{
source /etc/hostapd.conf
exec 3>&1
31
dialog --title "AP configuration" --backtitle "$BACKTITLE" --form "\nWPA2 enabled, advanced config: edit /etc/hostapd.conf\n " 12 58 0 \
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"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
}
}

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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
}

63
64
65
66
67
68
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
}

69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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
}

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

111
112
113
# make a bacup
cp /etc/network/interfaces /etc/network/interfaces.debian-config.backup

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

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

125
126
127
128
129
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

Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
130
131
132
LIST=()
###########################################################################################################################################
# here we add new items to menu. with condition when needed
133

134
if [[ -f /etc/update-motd.d/41-armbian-config ]]; then
135
136
[[ -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" )
137
fi
138
[[ -f /usr/bin/bin2fex && "$LINUXFAMILY" = sun*i && "$BRANCH" = "default" ]] && LIST+=( "Fexedit" "Board (fex) settings editor" )
139
[[ -n $(grep -w "#kernel.printk" /etc/sysctl.conf ) ]] && LIST+=( "Lowlevel" "Stop low-level messages on console" )
140
[[ -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" )
141
[[ -n $(nmcli -f DEVICE,TYPE device status | grep wifi) ]] && LIST+=( "Wireless" "Connect to your router" )
142
[[ -n $(grep -w apt /etc/apt/sources.list.d/armbian.list) ]]  && LIST+=( "Nightly" "Switch to daily builds" )
143
[[ -n $(grep -w beta /etc/apt/sources.list.d/armbian.list) ]]  && LIST+=( "Stable" "Switch to stable builds" )
144
LIST+=( "Hotspot" "Manage wireless access point" )
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
145
LIST+=( "Network" "Edit network settings" )
146
[[ $(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
RFC #2    
Igor Pecovnik committed
147
148
[[ -f /boot/armbianEnv.txt ]] && LIST+=( "Booting" "Edit boot environment" )
[[ -f /usr/sbin/nand-sata-install ]] && LIST+=( "Install" "Install Armbian to SATA, eMMC, NAND, USB" )
Igor Pecovnik's avatar
Typos.    
Igor Pecovnik committed
149
150
LIST+=( "Services" "Toggle running services" )
[[ "$DISTRO" == "Ubuntu" && "$(modinfo overlay > /dev/null 2>&1; echo $?)" == "0" ]] && LIST+=( "Overlayroot" "Toggle virtual read-only root filesystem" )
151
[[ -f /usr/bin/armbianmonitor ]] && LIST+=( "Monitor" "Simple CLI monitoring" )
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
152
[[ -f /usr/bin/armbianmonitor ]] && LIST+=( "Diagnostics" "Send diagnostics" )
153
[[ -f /usr/bin/softy ]] && LIST+=( "Softy" "Install 3rd party applications" )
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
154
155
156
157
158
159
160
161
162
163
###########################################################################################################################################
LISTLENGHT="$((7+${#LIST[@]}/2))"


# main dialog routine
DIALOG_CANCEL=1
DIALOG_ESC=255

while true; do
	exec 3>&1
164
	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
165
166
167
168
169
	"${LIST[@]}" 2>&1 1>&3)
	exit_status=$?
	exec 3>&-
	case $exit_status in
	$DIALOG_CANCEL)
170
171
		#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
172
173
174
175
176
177
178
179
180
181
182
		exit
	;;
	$DIALOG_ESC)
		clear
		exit 1
		;;
	esac

	#######################################################################################################################################
	case $selection in

183
184
185
186
187
188
189
190
	"Remove" )
		chmod -x /etc/update-motd.d/41-armbian-config
	;;

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

191
192
193
194
	"Display" )
		h3disp
		exit
	;;
195
196
197
198
199
200
201
202
203
	"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
204
205
206
207
	"Services" )
		rcconf
	;;

208
209
210
211
212
213
214
	"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
	;;

215
216
217
	"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
218
			[[ $? = 0 ]] && overlayroot-chroot sed -i "s/^overlayroot=.*/overlayroot=\"\"/" /etc/overlayroot.conf && rm /etc/update-motd.d/97-overlayroot && reboot
219
		else
220
			debconf-apt-progress -- apt-get -y --no-install-recommends install overlayroot
221
			echo '#!/bin/bash' > /etc/update-motd.d/97-overlayroot
222
			echo 'echo -e "[\e[0m \e[1mremember: root is in virtual read only mode\e[0m ]\n"' >> /etc/update-motd.d/97-overlayroot
223
224
225
226
227
			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
228
	"Network" )
229
230
231
232
		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
233
234
	;;

235
	"Hotspot" )
236
		systemctl daemon-reload
237
		CURRENT_UUID=$(nmcli -f UUID,TYPE connection show --active | grep wireless | awk '{print $1}')
238
		if [[ -n $(service hostapd status | grep -w active | grep -w running) ]]; then
239
			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
240
241
242
			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
243
244
245
246
		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
247
		else
248
			# change special adapters to AP mode
Igor Pecovnik's avatar
Igor Pecovnik committed
249
			wlan_exceptions "on"
250
251
252
			# check for WLAN interfaces
			get_wlan_interface
			# display dialog
253
			dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nProbing nl80211 hostapd driver compatibility." 7 50
254
255
			apt-get -o Dpkg::Options::="--force-confnew" -y -qq --no-install-recommends install hostapd > /dev/null
			# change to selected interface
256
			sed -i "s/^interface=.*/interface=$WIRELESS_ADAPTER/" /etc/hostapd.conf
257
258
259
260
261
			# 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
262
				dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nProbing Realtek hostapd driver compatibility." 7 50
263
264
				apt-get -o Dpkg::Options::="--force-confnew" -y -qq --no-install-recommends install hostapd-realtek > /dev/null
				# change to selected interface
265
				sed -i "s/^interface=.*/interface=$WIRELESS_ADAPTER/" /etc/hostapd.conf
266
267
268
269
			fi
			CHECK=$(systemctl daemon-reload;service hostapd restart;service hostapd status|grep fail)
			# if both fails there is other problem
			if [[ -n "$CHECK" ]]; then
270
				dialog --backtitle "$BACKTITLE" --title "Warning" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nNo compatible hostapd driver found." 7 39
271
272
273
274
275
276
				sed -i "s/^DAEMON_CONF=.*/DAEMON_CONF=/" /etc/init.d/hostapd
				systemctl daemon-reload;service hostapd restart
				sleep 3
				exit
			fi

277
			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
278
279
280
281
282
283
284
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
			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
310
311
312
313
314
315
316
317
318
319
					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
320
321
322
323
324
325
326
327
328
					# - 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
329
330
331
332
333
					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
334
				;;
335
336
			3)exit;;

337
338
			255) exit;;
			esac
339
340
			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"
341
			service hostapd stop
342
343
344
345
			if [[ $? = 0 ]]; then
				mv $TEMP_CONF $NETWORK_CONF
				reboot
			fi
346
347
348
		fi
	;;

Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
349
	"Booting" )
350
351
352
353
		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
354
355
	;;

356
357
358
	"Nightly" )
		sed -i 's/apt.armbian.com/beta.armbian.com/' /etc/apt/sources.list.d/armbian.list
		debconf-apt-progress -- apt-get update
359
		debconf-apt-progress -- apt-get -y upgrade
360
361
362
		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
363
	;;
364
365
366
367
368
369
370
371
372
373
374

	"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
375
376
377
378
379
	"Install" )
		nand-sata-install
	;;

	"Wireless" )
380
		# scan for wifi modules
381
		array=( $(nmcli dev | grep "wifi" | awk '{print $1}') )
382
383
384
385
386
387
388
		declared_wlans=0;
		for i in "${array[@]}"
			do
			if grep --quiet "^iface $i" /etc/network/interfaces; then
				let declared_wlans+=1
			fi
		done
389
390
391
392
393
		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
394
			if [[ $exitstatus = 0 ]]; then service hostapd stop ; sed -i "s/^DAEMON_CONF=.*/DAEMON_CONF=/" /etc/init.d/hostapd; systemctl daemon-reload; fi
395
396
397
398
			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
399
		else
400
			CURRENT_UUID=$(nmcli -f UUID,TYPE connection show --active | grep wireless | awk '{print $1}')
401
			if [[ -n $(service hostapd status | grep -w active | grep -w running) ]]; then
402
403
				dialog --title "Error" --backtitle "$BACKTITLE" --no-collapse \
				--msgbox "\nHostapd service is running. Disable it and try again." 7 57
404
				exit
405
			elif [[ -n $CURRENT_UUID ]]; then
406
407
				dialog --title "Info" --backtitle "$BACKTITLE" --no-collapse \
				--yesno "\nAlready connected via wireless.\n\nDo you want to disconnect?" 9 57
408
				[[ $? = 0 ]] && nmcli connection down uuid $CURRENT_UUID
409
			else
410
411
			# disable AP mode on certain adapters
			wlan_exceptions "off"
412
413
			nmtui-connect
			fi
414
		fi
Igor Pecovnik's avatar
RFC #2    
Igor Pecovnik committed
415
416
417
418
419
420
421
422
423
424
425
426
427
	;;

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

	"Softy" )
		softy
	;;

428
429
430
431
432
433
434
	"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
435
436
437
438
439
440
441
			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
442
			# install new
443
			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
444
445
446
447
			[[ $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
448
449
450
451
452
453
454
455
	"Monitor" )
		clear
		armbianmonitor -m | dialog --backtitle "$BACKTITLE" --title "Simple CLI monitoring $BOARD" --progressbox 15 64
	;;

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