1
0
matmoul 3fe7959850 fix: avoid sed interpolation when prepending log summary
Use a temporary file to write the summary header and existing log content, then replace the original log atomically. This removes the dependency on sed for summary insertion and avoids unsafe string interpolation.
2026-04-26 00:36:01 +02:00
2025-06-10 00:29:29 +02:00
2025-06-10 00:29:29 +02:00

netupgrade

Interactive CLI tool to run upgrade and maintenance actions on multiple remote hosts over SSH.

Where to use

  • On a dedicated server (bastion, jump host, ...)
  • On your computer with an alias to your dedicated server
  • On your computer directly (not recommended)

Features

  • Select one or more hosts from an interactive checklist
  • Run predefined actions on each selected host
  • Write execution logs to ~/netupgrade.log

Supported actions:

  • apt
  • yum
  • pkg
  • pacman
  • apk
  • reboot
  • cmd:<remote command>
  • docker-stacks:<directory>

Requirements

Required:

  • bash
  • ssh
  • whiptail
  • sed
  • tee
  • core utilities such as rm and touch

Optional log viewer:

  • $EDITOR if it points to an installed command
  • otherwise one of: nano, vi, less

Install

Install the executable

cp bin/netupgrade /usr/local/bin/netupgrade
chmod +x /usr/local/bin/netupgrade

Create the config directory

mkdir -p ~/.config/netupgrade
touch ~/.config/netupgrade/index.cfg

Alias on your computer with a dedicated server

You can save it in your .bashrc

alias netupgrade='ssh -t user@10.0.0.10 netupgrade'

Configuration

The default config file is:

~/.config/netupgrade/index.cfg

The script sources this file as Bash code. It must define a NODES array.

Each entry uses this format:

host;display-name;action1;action2;...

Example:

SSH_USER="root"

NODES=(
  "192.168.1.10;web-01;apt;reboot"
  "192.168.1.11;db-01;apt;cmd:systemctl restart postgresql"
  "192.168.1.12;docker-01;docker-stacks:/opt/stacks"
)

Usage

netupgrade [--help] [-f] [-y] [configfilename]

Options:

  • --help: show help
  • -f: preselect all nodes in the interactive checklist
  • -y: pass non-interactive confirmation flags to supported package managers
  • configfilename: path to a config file

Notes

  • SSH connections use root@host by default and can be changed with SSH_USER in the config file
  • cmd:<remote command> is executed through a remote shell, so shell operators such as pipes, redirections, &&, and || are supported
  • The tool is interactive and intended for manual administration workflows
  • After execution, the log file is opened with $EDITOR when available, otherwise with nano, vi, or less
  • If no supported log viewer is available, the script keeps running and prints the log file path
  • The configuration file is sourced as shell code, so only use trusted config files
S
Description
No description provided
Readme 169 KiB
Languages
Shell 100%