zefie icon

OpenWRT build helper script for local router repo

zefie | PRO | 01/03/19 12:51:44 PM UTC | 0 ⭐ | 954 👁️ | Never ⏰ | []
Bash |

2.88 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
# Script assumes that you have set up an SSH key with and authorized it on the router.
# If your key requires a passphrase, use an agent. Otherwise, prepare to manually auth alot.
 
# Where are we (should be OpenWRT dev folder)
Z_WRT=/home/zefie/dev/openwrt
 
# Where is opkg-utils? (https://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils)
Z_OPKG="${Z_WRT}/opkg-utils"
 
# Where on the Router should we put our repo?
Z_DEST=/root/.localopkg/
 
# Where is the router on the network?
Z_ROUTER=192.168.11.1
 
# What model (as defined by OpenWRT) are we building for? (Used for pkg directory)
Z_MODEL=ipq806x
 
# What packages should we import? [Local repo does not have priority over OpenWRT Public repo by default]
Z_PACKAGES=(
    tgt
    luci-theme-rosy
)
 
# Temporary staging directory (removed after task unless script is run with any argument)
# Should not need to change
Z_STAGE="zstaging"
 
# Vanity style to make our notice stand out from other text
Z_PRE=" * "
 
### END CONFIG ###
 
if [ ! -d "${Z_WRT}/staging_dir/packages/${Z_MODEL}" ]; then
    echo "${Z_PRE}ERR: Package directory does not exist. Did you build?"
    exit;
fi
 
 
Z_KEY="${Z_WRT}/key-build"
echo "${Z_PRE}Staging mini local repo..."
rm -rf "${Z_WRT}/${Z_STAGE}"
mkdir "${Z_WRT}/${Z_STAGE}"
for P in ${Z_PACKAGES[@]}; do
    cp "${Z_WRT}/staging_dir/packages/${Z_MODEL}/${P}_"*.ipk "${Z_WRT}/${Z_STAGE}";
    RES=$?
    if [ ${RES} -ne 0 ]; then
        echo "${Z_PRE}${P}: Failed";
    else
        echo "${Z_PRE}${P}: Success";
    fi
done;
#cd "${Z_WRT}/${Z_STAGE}"
 
if [ $(ls -1 | wc -l) -eq 0 ]; then
    echo "${Z_PRE}ERR: No packages in staging directory... nothing more to do.";
else
    "${Z_OPKG}/opkg-make-index" -f "${Z_WRT}/${Z_STAGE}" > "${Z_WRT}/${Z_STAGE}/Packages"
    gzip -9nc "${Z_WRT}/${Z_STAGE}/Packages" > "${Z_WRT}/${Z_STAGE}/Packages".gz
    "${Z_WRT}/staging_dir/host/bin/usign" -S -m "${Z_WRT}/${Z_STAGE}/Packages" -s "${Z_KEY}" -x "${Z_WRT}/${Z_STAGE}/Packages.sig"
    RES=$?
    if [ ${RES} -ne 0 ]; then
        echo "${Z_PRE}Signing failed";
    else
        echo "${Z_PRE}Signing successful";
    fi
    #cd ..
    echo "${Z_PRE}Staging to ${Z_ROUTER}"
    Z_RES=$(ssh "root@${ROUTER}" -- ls -1 "${Z_DEST}/" 2>&1)
    if [ $(echo "${Z_RES}" | grep -i "No such file" | wc -l) -eq 0 ]; then
        echo "${Z_PRE} - Clearing old repo"
        ssh "root@${Z_ROUTER}" -- rm -rf "${Z_DEST}"
    fi
    echo "${Z_PRE} - Staging new repo"
    ssh "root@${Z_ROUTER}" -- mkdir "${Z_DEST}"
    scp -r "${Z_WRT}/${Z_STAGE}/"* "root@${Z_ROUTER}:${Z_DEST}"
    Z_KEYID=$("${Z_WRT}/staging_dir/host/bin/usign" -F -s "${Z_KEY}")
    if [ $(echo "${Z_RES}" | grep -i "No such file" | wc -l) -gt 0 ]; then
        echo "${Z_PRE}Staging local build key ${Z_KEYID} to ${Z_ROUTER}"
        scp -r "${Z_KEY}.pub" "root@${Z_ROUTER}:/etc/opkg/keys/${Z_KEYID}"
    else
        echo "${Z_PRE}Local build key ${Z_KEYID} exists on ${Z_ROUTER}"
    fi
fi
 
if [ -z "${1}" ]; then
    rm -rf "${Z_STAGE}"
fi
echo "${Z_PRE}Done"

Comments