#!/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 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 ;; # 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 else # check if user agree to enter this area beta_disclaimer "Wireless networking in Linux is problematic. Our tools make it easy for some cases but can't enable AP on every random WiFi chip. If this tool fail, check manual methods." if [[ -n $ACKNOWLEDGEMENT ]]; then # 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 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 "$selection" --no-label "Cancel" \ --yesno "\nDo you want to ${selection,,} 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" apt-mark ${selection,,} $PACKAGE_LIST | dialog --backtitle "$BACKTITLE" --title "Package locking" --progressbox 7 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 }