Browse Source

Fix ssh backup and update default versions

bryan 2 years ago
parent
commit
34573c5a6b
1 changed files with 111 additions and 39 deletions
  1. 111 39
      openwrtBuild

+ 111 - 39
openwrtBuild

@@ -23,6 +23,34 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 # SOFTWARE.
 
+printHelpAndExit() {
+
+    debug "${FUNCNAME[0]}"
+
+    cat <<-'EOF'
+USAGE:
+openwrtBuild [[OPTION] [VALUE]]...
+
+If PROFILE is set and TARGET is not, buildOpenwrt can use a custom profile specified in DEFAULTS
+
+OPTIONS
+    --profile, -p PROFILE
+    --version, -v OPENWRT_VERSION
+    --builddir, -b PATH
+    --ssh-upgrade SSH_PATH
+        Example: root@192.168.1.1
+    --ssh-backup SSH_PATH
+        Enabled by default for --ssh-upgrade
+    --flash, -f DEVICE
+        Example: /dev/sdX
+    --debug, -d
+    --help, -h
+EOF
+    # Exit using passed exit code
+    [[ -z $1 ]] && exit 0 || exit "$1"
+}
+
+
 setDefaults() {
 
     debug "${FUNCNAME[0]}"
@@ -35,62 +63,67 @@ setDefaults() {
     [[ -z $_filesroot ]] && _filesroot="$_builddir/files/"
 
     # Additional packages for all profiles
-    _packages+=("luci" "nano" "htop" "tcpdump" "diffutils")
+    _packages+=("luci" "nano" "htop" "tcpdump" "diffutils" "tar" "iperf")
 
     # If no profile is specified, use the TP-Link Archer C7 v2 dumb AP
     [[ -z $_profile ]] && _profile="tplink_archer-c7-v2"
 
     # Custom profiles
-    # TP-Link Archer C7 v2 dumb AP
+    # TP-Link Archer C7v2 WAP (dumb AP) w/ legacy drivers for better performance
     if [[ "$_profile" == "tplink_archer-c7-v2" ]]; then
-        [[ -z $_version ]] && _version="19.07.3"
+        [[ -z $_version ]] && _version="21.02.0-rc1"
         _target="ath79/generic"
         _factory_suffix="squashfs-factory.bin"
         _sysupgrade_suffix="squashfs-sysupgrade.bin"
-        _packages+=("-dnsmasq" "-odhcpd" "-iptables")
+        _packages+=("-dnsmasq" \
+                    "-odhcpd" \
+                    "-iptables" \
+                    "-ath10k-firmware-qca988x-ct" \
+                    "-kmod-ath10k-ct" \
+                    "ath10k-firmware-qca988x" \
+                    "kmod-ath10k")
     # Raspberry Pi 4B router with USB->Ethernet dongle
     elif [[ "$_profile" == "rpi-4" ]]; then
-        [[ -z $_version ]] && _version="snapshot"
+        [[ -z $_version ]] && _version="21.02.0-rc1"
         _target="bcm27xx/bcm2711"
         _factory_suffix="ext4-factory.img"
         _sysupgrade_suffix="ext4-sysupgrade.img"
-        _packages+=("kmod-usb-net-asix-ax88179" "luci-app-upnp" "luci-app-wireguard" \
-        "luci-app-vpn-policy-routing" "-dnsmasq" "dnsmasq-full" "luci-app-ddns" "luci-app-sqm")
+        _packages+=("kmod-usb-net-asix-ax88179" \
+                    "kmod-usb-net-rtl8152" \
+                    "luci-app-upnp" \
+                    "luci-app-wireguard" \
+                    "luci-app-vpn-policy-routing" \
+                    "-dnsmasq" \
+                    "dnsmasq-full" \
+                    "luci-app-ddns" \
+                    "luci-app-sqm")
+    # NanoPi R2S router
+    elif [[ "$_profile" == "r2s" ]]; then
+        [[ -z $_version ]] && _version="21.02.0-rc1"
+        _profile="friendlyarm_nanopi-r2s"
+        _target="rockchip/armv8"
+        _factory_suffix="ext4-factory.img"
+        _sysupgrade_suffix="ext4-sysupgrade.img"
+        _packages+=("luci-app-upnp" \
+                    "luci-app-wireguard" \
+                    "luci-app-vpn-policy-routing" \
+                    "-dnsmasq" \
+                    "dnsmasq-full" \
+                    "luci-app-ddns" \
+                    "luci-app-sqm" \
+                    "luci-app-statistics" \
+                    "collectd-mod-sensors" \
+                    "collectd-mod-thermal" \
+                    "lm-sensors")
     fi
 }
 
 
-printHelpAndExit() {
-
-    debug "${FUNCNAME[0]}"
-
-    cat <<-'EOF'
-USAGE:
-openwrtBuild [[OPTION] [VALUE]]...
-
-If PROFILE is set and TARGET is not, buildOpenwrt can use a custom profile specified in DEFAULTS
-
-OPTIONS
-    --profile, -p PROFILE
-    --version, -v OPENWRT_VERSION
-    --builddir, -b PATH
-    --ssh-upgrade, -s SSH_PATH
-        Example: root@192.168.1.1
-    --flash, -f DEVICE
-        Example: /dev/sdX
-    --debug, -d
-    --help, -h
-EOF
-    # Exit using passed exit code
-    [[ -z $1 ]] && exit 0 || exit "$1"
-}
-
-
 parseInput() {
 
     debug "${FUNCNAME[0]}"
 
-    if _input=$(getopt -o +v:p:b:s:f:dh -l version:,profile:,builddir:,ssh-upgrade:,flash:,debug,help -- "$@"); then
+    if _input=$(getopt -o +v:p:b:f:dh -l version:,profile:,builddir:,ssh-upgrade:,ssh-backup:,flash:,debug,help -- "$@"); then
         eval set -- "$_input"
         while true; do
             case "$1" in
@@ -103,9 +136,12 @@ parseInput() {
                 --builddir|-b)
                     shift && _builddir="$1"
                     ;;
-                --ssh-upgrade|-s)
+                --ssh-upgrade)
                     shift && _ssh_upgrade_path="$1"
                     ;;
+                --ssh-backup)
+                    shift && _ssh_backup_path="$1"
+                    ;;
                 --flash|-f)
                     shift && _flash_dev="$1"
                     ;;
@@ -183,7 +219,7 @@ installPrerequisites() {
     local _pkg_cmd
 
     if [[ "$ID" == "fedora" ]]; then
-        _pkg_list=("@c-development" "@development-tools" "@development-libs" "zlib-static" "elfutils-libelf-devel" "gawk" "unzip" "file" "wget" "python3" "python2" "axel")
+        _pkg_list=("@c-development" "@development-tools" "@development-libs" "perl-FindBin" "zlib-static" "elfutils-libelf-devel" "gawk" "unzip" "file" "wget" "python3" "python2" "axel")
         _pkg_cmd="dnf"
     elif [[ "$ID" =~ ^(debian|ubuntu)$ ]]; then
         _pkg_list=("build-essential" "libncurses5-dev" "libncursesw5-dev" "zlib1g-dev" "gawk" "git" "gettext" "libssl-dev" "xsltproc" "wget" "unzip" "python" "axel")
@@ -264,8 +300,7 @@ makeImage() {
     # build image
     echo "Running make -j4 image BIN_DIR=$_out_bin_dir PROFILE=$_profile PACKAGES=${_packages[*]} FILES=$_filesroot"
     debug "make -j4 image BIN_DIR=$_out_bin_dir PROFILE=$_profile PACKAGES=${_packages[*]} FILES=$_filesroot > make.log"
-    if ! make -j4 image BIN_DIR="$_out_bin_dir" PROFILE="$_profile" \
-    PACKAGES="${_packages[*]}" FILES="$_filesroot" > make.log; then
+    if ! make image BIN_DIR="$_out_bin_dir" PROFILE="$_profile" PACKAGES="${_packages[*]}" FILES="$_filesroot" > make.log; then
         echo "Make image failed!"
         exit 1
     fi
@@ -302,7 +337,7 @@ flashImage() {
         extractImage "$_factory_bin_gz"
     fi
 
-    if [[ ! -d "$_flash_dev" ]]; then
+    if [[ ! -e "$_flash_dev" ]]; then
         echo "The device specified by --flash could not be found"
         exit 1
     fi
@@ -322,6 +357,39 @@ flashImage() {
 }
 
 
+sshBackup() {
+
+    debug "${FUNCNAME[0]}"
+
+    local _source="$1"
+    local _random="$RANDOM"
+
+    if ! ssh -t "$_source" "sysupgrade -b /tmp/backup-${_random}.tar.gz"; then
+        echo "SSH backup failed"
+        exit 1
+    fi
+    if ! scp "$_source":/tmp/backup-"${_random}".tar.gz "$_builddir"; then
+        echo "Could not copy SSH backup"
+        exit 1
+    fi
+
+    if ! ssh -t "$_source" "rm -f /tmp/backup-${_random}.tar.gz"; then
+        echo "Could not remove /tmp/backup-${_random}.tar.gz from $_source"
+    fi
+
+    [[ -d "$_filesroot" ]] && rm -rf "$_filesroot"
+    mkdir -p "$_filesroot"
+
+    if ! tar xzf "$_builddir/backup-${_random}.tar.gz" etc/ -C "$_filesroot"; then
+        "Could not extract SSH backup"
+        exit 1
+    fi
+
+    rm "$_builddir/backup-${_random}.tar.gz"
+
+}
+
+
 sshUpgrade() {
 
     debug "${FUNCNAME[0]}"
@@ -352,6 +420,8 @@ sshUpgrade() {
 }
 
 
+
+
 __main() {
 
     parseInput "$@"
@@ -360,6 +430,8 @@ __main() {
     installPrerequisites
     acquireImageBuilder
     extractImageBuilder
+    rm -rf "$_ssh_backup_path"
+    [[ -v _ssh_backup_path ]] && sshBackup "$_ssh_backup_path"
     if makeImage; then
         [[ -n $_ssh_upgrade_path ]] && sshUpgrade
         [[ -n $_flash_dev ]] && flashImage