#!/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. function jobs () { dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nLoading ${selection,,} submodule ... " 5 $((26+${#selection})) case $1 in #-------------------------------------------------------------------------------------------------------------------------------------# # Application installer # "Softy" ) softy ;; # Sharing USB ports # "USB redirector" ) if [[ -n $(netstat -lnt | awk '$6 == "LISTEN" && $4 ~ ".'32032'"') ]]; then [[ -f /usr/local/usb-redirector/uninstall.sh ]] && /usr/local/usb-redirector/uninstall.sh uninstall rm -f /usr/local/bin/usbclnt else TARGET_BRANCH=$BRANCH exceptions "$BRANCH" IFS='.' read -a array <<< $(uname -r) [[ -z $(dpkg -l | grep linux-headers) ]] && debconf-apt-progress -- apt-get -y \ install linux-headers${TARGET_BRANCH}-${TARGET_FAMILY} rm -rf /usr/src/usb-redirector-linux-arm-eabi if (( "${array[0]}" == "4" )) && (( "${array[1]}" >= "1" )); then wget -qO- http://www.incentivespro.com/usb-redirector-linux-arm-eabi.tar.gz | tar xz -C /usr/src else wget -qO- https://raw.githubusercontent.com/armbian/build/master/packages/blobs/usb-redirector/usb-redirector-old.tgz \ | tar xz -C /usr/src fi cd /usr/src/usb-redirector-linux-arm-eabi/ ./installer.sh install sleep 3 check_port "32032" "USB Redirector" fi ;; # Simple CLI monitoring # "Monitor" ) clear exec 3>&1 monitor=$(dialog --print-maxsize 2>&1 1>&3) exec 3>&- mon_x=$(echo $monitor | awk '{print $2}' | sed 's/,//') mon_y=$(echo $monitor | awk '{print $3}' | sed 's/,//') armbianmonitor -m | dialog --no-shadow --backtitle "$BACKTITLE" --title "Simple CLI monitoring $BOARD" --progressbox $mon_x $mon_y ;; # Control board consumption # "Consumption" ) h3consumption exit ;; # Send diagnostics # "Diagnostics" ) clear echo "" armbianmonitor -u echo "" read -n 1 -s -p "Press any key to continue" ;; # Board (fex) settings editor # "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" \ --ok-label "Save" --no-collapse --editbox ${TEMP}/tempfex.txt 40 0 2> ${TEMP}/tempfex.out [[ $? = 0 ]] && fex2bin ${TEMP}/tempfex.out /boot/script.bin ;; # Install kernel headers # "Headers" ) TARGET_BRANCH=$BRANCH exceptions "$BRANCH" if [[ -n $(dpkg -l | grep linux-headers) ]]; then debconf-apt-progress -- apt-get -y remove linux-headers${TARGET_BRANCH}-${TARGET_FAMILY} else debconf-apt-progress -- apt-get -y install linux-headers${TARGET_BRANCH}-${TARGET_FAMILY} fi ;; # Set the display resolution # "Display" ) h3disp exit ;; #-------------------------------------------------------------------------------------------------------------------------------------# #-------------------------------------------------------------------------------------------------------------------------------------# #-------------------------------------------------------------------------------------------------------------------------------------# # Connect to wireless access point # "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 to $WIFICONNECTED.\n\nDo you want to disconnect?" 9 57 [[ $? = 0 ]] && nmcli connection down uuid $CURRENT_UUID > /dev/null 2>&1 else # disable AP mode on certain adapters wlan_exceptions "off" nmtui-connect fi fi ;; # Create WiFi access point # "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 systemctl daemon-reload rm /etc/NetworkManager/conf.d/armbian.conf service network-manager reload 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 2> /dev/null else # change special adapters to AP mode wlan_exceptions "on" # check for WLAN interfaces get_wlan_interface # add interface to unmanaged list echo "[keyfile]" > /etc/NetworkManager/conf.d/armbian.conf echo "unmanaged-devices=interface-name:$WIRELESS_ADAPTER" >>/etc/NetworkManager/conf.d/armbian.conf service network-manager reload # 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 break 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+)') NETWORK_CONF="/etc/network/interfaces" dialog --title "Network configuration" --backtitle "$BACKTITLE" --yesno "\nStart with clean config?" 7 29 [[ $? = 0 ]] && NETWORK_CONF="/etc/network/interfaces.default"; 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 debconf-apt-progress -- apt-get -qq -y --no-install-recommends install dnsmasq iptables echo -e "\nallow-hotplug $WIRELESS_ADAPTER\niface $WIRELESS_ADAPTER inet static " >> $TEMP_CONF echo -e "\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" response=$? service hostapd stop if [[ $response = 0 ]]; then mv $TEMP_CONF /etc/network/interfaces reboot fi fi ;; # Connect to Bluetooth # "Bluetooth" ) dialog --backtitle "$BACKTITLE" --title "Bluetooth" --msgbox "\nMake sure your Bluetooth devices are discoverable!" 7 54 connect_bt_interface ;; # Edit network settings # "Network" ) dialog --backtitle "$BACKTITLE" --title "Edit network configuration" --no-collapse \ --ok-label "Save" --editbox /etc/network/interfaces 30 0 2> /etc/network/interfaces.out [[ $? = 0 ]] && mv /etc/network/interfaces.out /etc/network/interfaces && service network-manager restart ;; #-------------------------------------------------------------------------------------------------------------------------------------# #-------------------------------------------------------------------------------------------------------------------------------------# #-------------------------------------------------------------------------------------------------------------------------------------# # Change timezone # "Timezone" ) dpkg-reconfigure tzdata ;; # Install to SATA, eMMC, NAND or USB # "Install" ) nand-sata-install ;; # Freeze and unfreeze kernel and board support packages # "Hold" | "Unhold" ) dialog --title "Update" --backtitle "$BACKTITLE" --yes-label "$1" --no-label "Cancel" \ --yesno "\nDo you want to ${1,,} kernel updates?" 7 50 if [[ $? = 0 ]]; then TARGET_BRANCH=$BRANCH exceptions "$BRANCH" PACKAGE_LIST="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" [[ $BRANCH != "default" ]] && PACKAGE_LIST=$PACKAGE_LIST" linux-dtb$TARGET_BRANCH-$TARGET_FAMILY" local words=( $PACKAGE_LIST ) apt-mark ${1,,} $PACKAGE_LIST | dialog --backtitle "$BACKTITLE" --title "Packages ${1,,}" --progressbox $((${#words[@]}+2)) 64 fi ;; # Enable or disable desktop # "Desktop" ) if [[ -n $(service lightdm status 2> /dev/null | grep -w active | grep -w running) || -n $(service nodm status | grep -w active | grep -w running) ]]; then dialog --title "Desktop is enabled and running" --backtitle "$BACKTITLE" \ --yes-label "Stop" --no-label "Cancel" --yesno "\nDo you want to stop and disable this service?" 7 50 exitstatus=$?; [[ $exitstatus = 0 ]] && service nodm stop && service lightdm stop && sed -i "s/^NODM_ENABLED=.*/NODM_ENABLED=false/" /etc/default/nodm else dialog --title "Choose a display manager" --backtitle "$BACKTITLE" --help-button --help-label "Cancel" --yes-label "Lightdm" \ --no-label "Nodm" --yesno "\nLightdm = full featured login display manager\nNodm = autoloading into desktop" 8 70 exitstatus=$?; [[ $exitstatus = 0 ]] && [[ -f /etc/X11/default-display-manager ]] && echo "/usr/sbin/lightdm" > /etc/X11/default-display-manager && debconf-apt-progress -- apt-get -o Dpkg::Options::="--force-confold" -y --no-install-recommends install lightdm-gtk-greeter lightdm && systemctl start lightdm.service [[ $exitstatus = 1 ]] && [[ -f /etc/X11/default-display-manager ]] && echo "/usr/sbin/nodm" > /etc/X11/default-display-manager && sed -i "s/^NODM_ENABLED=.*/NODM_ENABLED=true/" /etc/default/nodm && service nodm start fi ;; "Nodm" ) [[ -f /etc/X11/default-display-manager ]] && echo "/usr/sbin/nodm" > /etc/X11/default-display-manager systemctl disable lightdm.service >/dev/null 2>&1 systemctl stop lightdm.service >/dev/null 2>&1 sed -i "s/^NODM_ENABLED=.*/NODM_ENABLED=true/" /etc/default/nodm && service nodm start ;; "Lightdm" ) [[ -f /etc/X11/default-display-manager ]] && echo "/usr/sbin/lightdm" > /etc/X11/default-display-manager debconf-apt-progress -- apt-get -o Dpkg::Options::="--force-confold" -y --no-install-recommends install lightdm-gtk-greeter lightdm service nodm stop && sed -i "s/^NODM_ENABLED=.*/NODM_ENABLED=false/" /etc/default/nodm systemctl enable lightdm.service >/dev/null 2>&1 systemctl start lightdm.service >/dev/null 2>&1 ;; "RDP" ) if [[ -n $(service xrdp status | grep -w active) ]]; then systemctl stop xrdp.service >/dev/null 2>&1 systemctl disable xrdp.service >/dev/null 2>&1 else debconf-apt-progress -- apt-get -y install xrdp vnc4server systemctl enable xrdp.service >/dev/null 2>&1 systemctl start xrdp.service >/dev/null 2>&1 dialog --title "Info" --backtitle "$BACKTITLE" --nocancel --no-collapse --pause \ "\nRemote graphical login to $BOARD_NAME using Microsoft Remote Desktop Protocol (RDP) is enabled." 11 57 3 fi ;; # Stop low-level messages on console # "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 ;; # Edit boot environment # "Bootenv" ) dialog --title "Edit u-boot environment" --ok-label "Save" \ --no-collapse --editbox /boot/armbianEnv.txt 30 0 2> /boot/armbianEnv.txt.out [[ $? = 0 ]] && mv /boot/armbianEnv.txt.out /boot/armbianEnv.txt ;; # Edit boot script # "Bootscript" ) if [[ -f /boot/boot.ini ]]; then dialog --title "Edit boot.ini script" --ok-label "Save" \ --no-collapse --editbox /boot/boot.ini 30 0 2> /boot/boot.ini.out [[ $? = 0 ]] && mv /boot/boot.ini.out /boot/boot.ini fi ;; # Toggle running services # "Services" ) rcconf ;; # Toggle welcome screen items # "Overlay" ) # check if user agree to enter this area beta_disclaimer "You are entering beta area. Functions are not yet done - in case of troubles and advanced usage, check https://docs.armbian.com" if [[ -n $ACKNOWLEDGEMENT ]]; then overlay_prefix=$(cat /boot/armbianEnv.txt | grep overlay_prefix | sed 's/overlay_prefix=//g') TARGET_BRANCH=$BRANCH exceptions "$BRANCH" while true; do HOME="/boot/dtb/overlay" MOTD=() LINES=() LIST_CONST=2 j=0 DIALOG_CANCEL=1 DIALOG_ESC=255 while read line do STATUS=$([[ -n $(cat /boot/armbianEnv.txt | grep overlays | grep -w ${line}) ]] && echo "on") DESC=$(description "$line") MOTD+=( "$line" "$DESC" "$STATUS") LINES[ $j ]=$line (( j++ )) done < <(ls -1 $HOME/${overlay_prefix}*.dtbo | sed 's/^.*\('${overlay_prefix}'.*\)/\1/g' | sed 's/'${overlay_prefix}'-//g' | sed 's/.dtbo//g' ) LISTLENGHT="$(($LIST_CONST+${#MOTD[@]}/2))" exec 3>&1 selection=$(dialog --backtitle "$BACKTITLE" --title "Toggle motd executing scripts" --clear --cancel-label \ "Exit" --ok-label "Save" --checklist "\nChoose what you want to enable or disable:\n " \ $LISTLENGHT 70 22 "${MOTD[@]}" 2>&1 1>&3) exit_status=$? exec 3>&- case $exit_status in $DIALOG_CANCEL | $DIALOG_ESC) break ;; 0) newoverlays="$(echo "$selection" | sed "s|[^ ]* *|&|g")" sed -i "s/^overlays=.*/overlays=$newoverlays/" /boot/armbianEnv.txt || cat "overlays=$newoverlays" >> /boot/armbianEnv.txt ;; esac done fi ;; # Toggle welcome screen items # "Welcome" ) while true; do HOME="/etc/update-motd.d/" MOTD=() LINES=() LIST_CONST=6 j=0 DIALOG_CANCEL=1 DIALOG_ESC=255 while read line do STATUS=$([[ -x ${HOME}${line} ]] && echo "on") DESC=$(description "$line") MOTD+=( "$line" "$DESC" "$STATUS") LINES[ $j ]=$line (( j++ )) done < <(ls -1 $HOME) LISTLENGHT="$(($LIST_CONST+${#MOTD[@]}/2))" exec 3>&1 selection=$(dialog --backtitle "$BACKTITLE" --title "Toggle motd executing scripts" --clear --cancel-label \ "Exit" --ok-label "Save" --checklist "\nChoose what you want to enable or disable:\n " \ $LISTLENGHT 70 15 "${MOTD[@]}" 2>&1 1>&3) exit_status=$? exec 3>&- case $exit_status in $DIALOG_CANCEL | $DIALOG_ESC) break ;; 0) chmod -x ${HOME}* chmod +x $(echo "$selection" | sed "s|[^ ]* *|${HOME}&|g") ;; esac done ;; # Switch to daily builds # "Nightly" ) dialog --title "Warning" --backtitle "$BACKTITLE" --yes-label "OK" --no-label "Cancel" \ --yesno "\nYou are switching to automated nightly repository which is untested and might break your system.\ Are you fine with that?" 9 48 if [[ $? = 0 ]]; then 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 fi ;; # Switch to stable builds # "Stable" ) dialog --title "Warning" --backtitle "$BACKTITLE" --yes-label "OK" --no-label "Cancel" \ --yesno "\nYou are switching back to stable respository where you are going to get future updates.\ Are you fine with that?" 9 44 if [[ $? = 0 ]]; then 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 fi ;; # Switch to alternative kernels # "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 INSTALL_DTB="" [[ -n $(apt-cache search --names-only "^linux-dtb$TARGET_BRANCH-$TARGET_FAMILY") ]] && INSTALL_DTB="linux-dtb$TARGET_BRANCH-$TARGET_FAMILY" 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 $INSTALL_DTB dialog --title "Kernel switch" --backtitle "$BACKTITLE" --yes-label "Yes" --no-label "Cancel" --yesno "\nNew kernel was installed. Reboot?" 7 64 exitstatus=$?; [[ $exitstatus = 0 ]] && reboot fi ;; # Toggle virtual read-only root filesystem # "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 && \ overlayroot-chroot rm /etc/update-motd.d/97-overlayroot && reboot else debconf-apt-progress -- apt-get -o Dpkg::Options::="--force-confnew" -y --no-install-recommends install overlayroot echo '#!/bin/bash' > /etc/update-motd.d/97-overlayroot echo 'if [ -n "$(mount | grep -w tmpfs-root)" ]; then echo -e "\n[\e[0m \e[1mremember: your system is in virtual read only mode\e[0m ]";fi' >> /etc/update-motd.d/97-overlayroot chmod +x /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 ;; esac }