Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
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
