changeset 88:76ddab9ab965

Add a tool for host and jail "pkg" management
author Franz Glasner <hg@dom66.de>
date Fri, 06 Sep 2019 17:07:06 +0200
parents 28d4bea7cd1c
children 10526063a5fa
files Makefile bin/fpkg pkg-plist
diffstat 3 files changed, 162 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Thu Sep 05 02:34:27 2019 +0200
+++ b/Makefile	Fri Sep 06 17:07:06 2019 +0200
@@ -30,7 +30,7 @@
 
 do-extract:
 	${MKDIR} ${WRKSRC}/bin
-.for _rp in bin/check-ports bin/fjail
+.for _rp in bin/check-ports bin/fjail bin/fpkg
 	${CP} -v ${SRC}/${_rp} ${WRKSRC}/${_rp}
 	${SED} -i "" -E -e "s|\\\$$Date\\\$$|\$$Date: ${HGDATE} \$$|" ${WRKSRC}/${_rp}
 	${SED} -i "" -E -e "s|\\\$$Revision\\\$$|\$$Revision: ${HGREVISION} \$$|" ${WRKSRC}/${_rp}
@@ -53,7 +53,7 @@
 .endfor
 
 do-install:
-.for _rp in bin/check-ports bin/fjail
+.for _rp in bin/check-ports bin/fjail bin/fpkg
 	${INSTALL_SCRIPT} ${WRKSRC}/${_rp} ${STAGEDIR}${PREFIX}/${_rp}
 .endfor
 	${MKDIR} ${STAGEDIR}${ETCDIR}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/fpkg	Fri Sep 06 17:07:06 2019 +0200
@@ -0,0 +1,159 @@
+#!/bin/sh
+# -*- indent-tabs-mode: nil; -*-
+: 'A pkg frontend for common operations that also operates in all
+running jails.
+
+:Author:    Franz Glasner
+:Copyright: (c) 2019 Franz Glasner.
+            All rights reserved.
+:License:   3-Clause BSD License.
+            See LICENSE for details.
+            If you cannot find LICENSE see
+            <https://opensource.org/licenses/BSD-3-Clause>
+:Id:        @(#)@@PKGORIGIN@@ $HGid$
+
+'
+
+VERSION="@@VERSION@@"
+
+USAGE='
+USAGE: fpkg [ OPTIONS] COMMAND [ COMMAND-OPTIONS ]
+
+OPTIONS:
+
+  -V    Print the program name and version number to stdout and exit
+
+  -h    Print this help message to stdout and exit
+
+COMMANDS:
+
+  audit
+
+    `pkg audit` on the local host and all running visible jails
+
+  update
+
+    `pkg update` on the local host and all running visible jails
+
+  upgrade
+
+    `pkg upgrade` on the local host and all running visible jails
+
+  upgrade-check
+
+    `pkg upgrade -n` on the local host and all running visible jails
+'
+
+: ${AUDIT_FLAGS:=-Fr}
+: ${UPDATE_FLAGS:=}
+: ${UPGRADE_FLAGS:=}
+: ${SIGN:='===> '}
+
+
+command_audit() {
+    : 'Do a local `pkg audit -Fr` and also for all running jails
+
+    '
+    echo "${SIGN}LOCALHOST:"
+    pkg audit ${AUDIT_FLAGS}
+    for _j in $(jls -N | awk '{if(NR>1)print $1}' | sort); do
+        echo ""
+        echo "${SIGN}JAIL: ${_j}"
+        pkg -j "${_j}" audit ${AUDIT_FLAGS}
+    done
+}
+
+
+command_update() {
+    : 'Do a local `pkg update` and also for all running jails
+
+    '
+    echo "${SIGN}HOST:"
+    pkg update ${UPDATE_FLAGS}
+    for _j in $(jls -N | awk '{if(NR>1)print $1}' | sort); do
+        echo ""
+        echo "${SIGN}JAIL: ${_j}"
+        pkg -j "${_j}" update ${UPDATE_FLAGS}
+    done
+}
+
+
+command_upgrade() {
+    : 'Do a local `pkg upgrade` and also for all running jails
+
+    '
+    echo "${SIGN}HOST:"
+    pkg upgrade ${UPGRADE_FLAGS}
+    for _j in $(jls -N | awk '{if(NR>1)print $1}' | sort); do
+        echo ""
+        echo "${SIGN}JAIL: ${_j}"
+        pkg -j "${_j}" upgrade ${UPGRADE_FLAGS}
+    done
+}
+
+
+command_upgrade_check() {
+    : 'Do a local `pkg upgrade -n` and also for all running jails
+
+    '
+    echo "${SIGN}HOST:"
+    pkg upgrade -n ${UPGRADE_FLAGS}
+    for _j in $(jls -N | awk '{if(NR>1)print $1}' | sort); do
+        echo ""
+        echo "${SIGN}JAIL: ${_j}"
+        pkg -j "${_j}" upgrade -n ${UPGRADE_FLAGS}
+    done
+}
+
+
+#
+# Global option handling
+#
+while getopts "Vh" _opt ; do
+    case ${_opt} in
+        V)
+            echo "fpkg v${VERSION} (rv:@@HGREVISION@@)"
+            exit 0
+            ;;
+        h)
+            echo "${USAGE}"
+            exit 0
+            ;;
+        \?)
+            exit 2;
+            ;;
+        *)
+            echo "ERROR: option handling failed" >&2
+            exit 2
+            ;;
+    esac
+done
+
+#
+# Reset the Shell's option handling system to prepare for handling
+# command-local options.
+#
+shift $((OPTIND-1))
+OPTIND=1
+
+command="$1"
+shift
+
+case "${command}" in
+    audit)
+        command_audit "$@"
+        ;;
+    update)
+        command_update "$@"
+        ;;
+    upgrade)
+        command_upgrade "$@"
+        ;;
+    upgrade-check|upgrade_check)
+        command_upgrade_check "$@"
+        ;;
+    *)
+        echo "ERROR: unknown command \`${command}'" >&2
+        exit 2;
+        ;;
+esac
--- a/pkg-plist	Thu Sep 05 02:34:27 2019 +0200
+++ b/pkg-plist	Fri Sep 06 17:07:06 2019 +0200
@@ -3,4 +3,5 @@
 @comment FILES
 bin/check-ports
 bin/fjail
+bin/fpkg
 @sample %%ETCDIR%%/package-mapping.conf.sample