https://gist.github.com/patrakov/8fca04e0bec139e9a9e169dc4b9783f4
mkdir /etc/package-list nano /etc/package-list/persist.sh
#!/bin/sh exec > /var/log/persist-packages.log 2>&1 set -x PKGS=/etc/package-list/extra-packages.txt # https://github.com/openwrt/packages/issues/6744, not fixed in 18.06.x fix_route53() { if grep -q CURL_SSL /usr/lib/ddns/update_route53_v1.sh 2>/dev/null ; then sed -i /CURL_SSL/d /usr/lib/ddns/update_route53_v1.sh fi } list_extra_packages() { if [ ! -f $PKGS ] || [ /usr/lib/opkg/status -nt $PKGS ] ; then # Find the latest package in the ROM PROG=' $1 == "Installed-Time:" && ($2 < NEWEST || NEWEST=="") { NEWEST=$2 } END { print NEWEST } ' FLASH_TIME="$( awk "$PROG" /rom/usr/lib/opkg/status )" # All user-installed packages minus those from ROM mistakenly marked as such # plus (those explicitly marked previously minus those not installed) MARKED=`awk '{RE=RE "|" $0} END { print RE }' $PKGS` MARKED='^('${MARKED#|}')$' PROG=' $1 == "Package:" { PKG=$2 USR="" } $1 == "Status:" && $3 ~ "user" { USR=1 } $1 == "Installed-Time:" && $2 > FT && ( USR || ( PKG ~ MARKED ) ) { print PKG } ' awk -v FT="$FLASH_TIME" -v MARKED="$MARKED" "$PROG" /usr/lib/opkg/status | sort > $PKGS.tmp mv $PKGS.tmp $PKGS # Maybe somebody updated it and OpenWRT team forgot to propagate the fix? fix_route53 fi } install_extra_packages() { set -e opkg update UPGRADE=`opkg list-upgradable | cut -d ' ' -f 1` if [ -n "$UPGRADE" ] ; then opkg upgrade $UPGRADE opkg flag ok $UPGRADE fi INSTALL_CANDIDATES=`cat $PKGS` # Weed out packages that don't exist anymore INSTALL="" for CANDIDATE in $INSTALL_CANDIDATES ; do if [ -n "`opkg list $CANDIDATE`" ] ; then INSTALL="$INSTALL $CANDIDATE" fi done if [ -n "$INSTALL" ] ; then opkg install $INSTALL fi fix_route53 find /etc -name \*-opkg -exec rm '{}' ';' touch /usr/.extra-pakages-installed sleep 70 reboot } if [ -f /usr/.extra-pakages-installed ] ; then list_extra_packages elif [ -f $PKGS ] ; then install_extra_packages fi
chmod 755 /etc/package-list/persist.sh echo "*/5 * * * * flock -n /var/lock/persist.lock /etc/package-list/persist.sh" > /etc/crontabs/root echo "/etc/package-list/" >> /etc/sysupgrade.conf echo "/etc/crontabs/root" >> /etc/sysupgrade.conf echo "/root/.ssh/" >> /etc/sysupgrade.conf echo "/etc/config/autossh" >> /etc/sysupgrade.conf echo "/etc/init.d/autossh" >> /etc/sysupgrade.conf touch /usr/.extra-pakages-installed reboot