#!/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 echo "Warning. This script requires root privileges. Exiting ..." sleep 3 exit fi 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." else # Install basic stuff # echo "Downloading dependencies ..." apt-get -qq -y --no-install-recommends install bc expect rcconf dialog >> /dev/null fi # command -v nmcli >/dev/null 2>&1 || { echo >&2 "Installing Network manager ... "; apt-get -y --no-install-recommends install network-manager; systemctl start NetworkManager;} function wlan_edit () { source /etc/hostapd.conf exec 3>&1 dialog --title "AP configuration" --backtitle "$BACKTITLE" --form "\nWPA2 enabled, advanced config: edit /etc/hostapd.conf\n " 12 58 0 \ "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 } } 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 } 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 } 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 } function get_wlan_interface () { # search for wlan interfaces and provide a selection menu if there are more than one # IFS=$'\r\n' GLOBIGNORE='*' WLAN_INTERFACES=($(nmcli dev status | grep wifi |awk '{print $1}')) local LIST=() for i in "${WLAN_INTERFACES[@]}" do LIST+=( "${i[0]//[[:blank:]]/}" "" ) done LIST_LENGHT=$((${#LIST[@]}/2)); if [ "$LIST_LENGHT" -eq 1 ]; then WIRELESS_ADAPTER=${WLAN_INTERFACES[0]} else exec 3>&1 WIRELESS_ADAPTER=$(dialog --nocancel --backtitle "$BACKTITLE" --no-collapse --title "Select interface" --clear --menu "" $((6+${LIST_LENGHT})) 30 15 "${LIST[@]}" 2>&1 1>&3) exec 3>&- fi } # make a bacup cp /etc/network/interfaces /etc/network/interfaces.debian-config.backup # gather some info # [[ -f /etc/armbian-release ]] && source /etc/armbian-release && ARMBIAN="Armbian $VERSION $IMAGE_TYPE"; DISTRO=$(lsb_release -is) DISTROID=$(lsb_release -rs) BACKTITLE="$ARMBIAN $DISTRO $DISTROID configuration utility, http://www.armbian.com" TITLE="Configuring $BOARD_NAME" WIRELESS_ADAPTER="wlan0" NETWORK_CONF="/etc/network/interfaces" 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 while true; do LIST=() ########################################################################################################################################### # here we add new items to menu. with condition when needed [[ -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 /dev/null | grep -w "hdmi_used = 1") ]] && LIST+=( "Display" "set the display resolution" ) [[ -f /usr/bin/bin2fex && "$LINUXFAMILY" = sun*i && "$BRANCH" = "default" ]] && LIST+=( "Fexedit" "Board (fex) settings editor" ) [[ -n $(grep -w "#kernel.printk" /etc/sysctl.conf ) ]] && LIST+=( "Lowlevel" "Stop low-level messages on console" ) [[ -f /boot/armbianEnv.txt ]] && LIST+=( "Booting" "Edit boot environment" ) LIST+=( "Network" "Edit network settings" ) LIST+=( "Services" "Toggle running services" ) 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" ) [[ "$DISTRO" == "Ubuntu" && "$(modinfo overlay > /dev/null 2>&1; echo $?)" == "0" ]] && LIST+=( "Overlayroot" "Toggle virtual read-only root filesystem" ) ########################################################################################################################################### LISTLENGHT="$((7+${#LIST[@]}/2))" # main dialog routine DIALOG_CANCEL=1 DIALOG_ESC=255 exec 3>&1 selection=$(dialog --backtitle "$BACKTITLE" --title "$TITLE" --clear --cancel-label "Exit to shell" --menu "Please select:" $LISTLENGHT 70 15 \ "${LIST[@]}" 2>&1 1>&3) exit_status=$? exec 3>&- case $exit_status in $DIALOG_CANCEL) #clear #echo -e "\n\e[0;33mThank you for using Armbian configuration tool! Support: \e[1m\e[39mwww.armbian.com\x1B[0m\n" exit ;; $DIALOG_ESC) clear exit 1 ;; esac dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nLoading application ... " 5 27 ####################################################################################################################################### case $selection in "Remove" ) chmod -x /etc/update-motd.d/41-armbian-config ;; "Add" ) chmod +x /etc/update-motd.d/41-armbian-config ;; "Display" ) h3disp exit ;; "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 ;; "Services" ) rcconf ;; "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 ;; "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 [[ $? = 0 ]] && overlayroot-chroot sed -i "s/^overlayroot=.*/overlayroot=\"\"/" /etc/overlayroot.conf && rm /etc/update-motd.d/97-overlayroot && reboot else debconf-apt-progress -- apt-get -y --no-install-recommends install overlayroot echo '#!/bin/bash' > /etc/update-motd.d/97-overlayroot echo 'echo -e "[\e[0m \e[1mremember: root is in virtual read only mode\e[0m ]\n"' >> /etc/update-motd.d/97-overlayroot 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 ;; "Network" ) 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 ;; "Hotspot" ) systemctl daemon-reload CURRENT_UUID=$(nmcli -f UUID,TYPE connection show --active | grep wireless | awk '{print $1}') if [[ -n $(service hostapd status | grep -w active | grep -w running) ]]; then 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=$?; 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 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 else # change special adapters to AP mode wlan_exceptions "on" # check for WLAN interfaces get_wlan_interface # display dialog dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nProbing nl80211 hostapd driver compatibility." 7 50 apt-get -o Dpkg::Options::="--force-confnew" -y -qq --no-install-recommends install hostapd > /dev/null # change to selected interface sed -i "s/^interface=.*/interface=$WIRELESS_ADAPTER/" /etc/hostapd.conf # 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 dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nProbing Realtek hostapd driver compatibility." 7 50 apt-get -o Dpkg::Options::="--force-confnew" -y -qq --no-install-recommends install hostapd-realtek > /dev/null # change to selected interface sed -i "s/^interface=.*/interface=$WIRELESS_ADAPTER/" /etc/hostapd.conf fi CHECK=$(systemctl daemon-reload;service hostapd restart;service hostapd status|grep fail) # if both fails there is other problem if [[ -n "$CHECK" ]]; then dialog --backtitle "$BACKTITLE" --title "Warning" --infobox "\nWireless adapter: $WIRELESS_ADAPTER\n\nNo compatible hostapd driver found." 7 39 sed -i "s/^DAEMON_CONF=.*/DAEMON_CONF=/" /etc/init.d/hostapd systemctl daemon-reload;service hostapd restart sleep 3 exit fi 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 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 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 # - 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 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 ;; 3)exit;; 255) exit;; esac 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" service hostapd stop if [[ $? = 0 ]]; then mv $TEMP_CONF $NETWORK_CONF reboot fi fi ;; "Booting" ) 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 ;; "Nightly" ) sed -i 's/apt.armbian.com/beta.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 nightly" --backtitle "$BACKTITLE" --yes-label "Reboot" --no-label "Cancel" --yesno \ "\nReboot to apply new settings?" 7 34 if [[ $? = 0 ]]; then reboot; fi ;; "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 ;; "Install" ) nand-sata-install ;; "WiFi" ) # scan for wifi modules array=( $(nmcli dev | grep "wifi" | awk '{print $1}') ) declared_wlans=0; for i in "${array[@]}" do if grep --quiet "^iface $i" /etc/network/interfaces; then let declared_wlans+=1 fi done 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=$?; if [[ $exitstatus = 0 ]]; then service hostapd stop ; sed -i "s/^DAEMON_CONF=.*/DAEMON_CONF=/" /etc/init.d/hostapd; systemctl daemon-reload; fi 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 else CURRENT_UUID=$(nmcli -f UUID,TYPE connection show --active | grep wireless | awk '{print $1}') if [[ -n $(service hostapd status | grep -w active | grep -w running) ]]; then dialog --title "Error" --backtitle "$BACKTITLE" --no-collapse \ --msgbox "\nHostapd service is running. Disable it and try again." 7 57 exit elif [[ -n $CURRENT_UUID ]]; then dialog --title "Info" --backtitle "$BACKTITLE" --no-collapse \ --yesno "\nAlready connected via wireless.\n\nDo you want to disconnect?" 9 57 [[ $? = 0 ]] && nmcli connection down uuid $CURRENT_UUID else # disable AP mode on certain adapters wlan_exceptions "off" nmtui-connect fi fi ;; "Diagnostics" ) clear armbianmonitor -u echo "" read -n 1 -s -p "Press any key to continue" ;; "Softy" ) softy ;; "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 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 # install new 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 [[ $UBOOT_BRANCH != "default" ]] && debconf-apt-progress -- apt-get -y --no-install-recommends install linux-dtb$TARGET_BRANCH-$TARGET_FAMILY reboot fi ;; "Monitor" ) clear armbianmonitor -m | dialog --backtitle "$BACKTITLE" --title "Simple CLI monitoring $BOARD" --progressbox 15 64 ;; esac ####################################################################################################################################### done