Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions files/etc/init.d/ns-restore-extra-packages
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/sh /etc/rc.common
#
# Copyright (C) 2026 Nethesis S.r.l.
# SPDX-License-Identifier: GPL-2.0-only
#
# Procd init script to restore extra packages after a system upgrade.
# Runs late at boot (START=99) with respawn enabled to retry on network failures.
# The respawn policy allows up to 10 restarts within 300 seconds.

START=99
Comment thread
gsanchietti marked this conversation as resolved.
STOP=1

USE_PROCD=1

start_service() {
procd_open_instance
procd_set_param command /usr/sbin/ns-restore-extra-packages
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn 300 30 10
procd_close_instance
}
1 change: 1 addition & 0 deletions files/etc/uci-defaults/99-nethsec-restore-extra-packages
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/etc/init.d/ns-restore-extra-packages start
35 changes: 35 additions & 0 deletions files/usr/sbin/ns-restore-extra-packages
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/bin/bash
#
# Copyright (C) 2026 Nethesis S.r.l.
# SPDX-License-Identifier: GPL-2.0-only
#
# Restore extra packages installed by the user after a system upgrade.
# Runs via procd init script which handles respawn on failure.
#

if ! grep -qE '\w+\s+overlay$' /etc/backup/installed_packages.txt &>/dev/null; then
exit 0
fi

# Check network connectivity
if ! ping -c 1 -W 5 8.8.8.8 >/dev/null 2>&1 && ! ping -c 1 -W 5 1.1.1.1 >/dev/null 2>&1; then
echo "WAN not available, will retry later"
exit 1
fi

opkg update
if [ $? -ne 0 ]; then
echo "Failed to update package lists, will retry later"
exit 1
fi

grep -E '\w+\s+overlay$' /etc/backup/installed_packages.txt | awk '{print $1}' | while read package; do
if ! opkg status "$package" | grep -q "Installed"; then
opkg install "$package"
echo "Restored package: $package"
fi
done

/etc/init.d/ns-restore-extra-packages stop
/etc/init.d/ns-restore-extra-packages disable
exit 0
Loading