123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #!/bin/sh --
- set -ue
- # based on artix script
- # https://gitea.artixlinux.org/artix/s6-contrib
- usage() {
- printf '%s\n' \
- "Usage: ${0##*/} [options]" \
- ' -r delete all old databases' \
- ' -u use user database' \
- ' -x use user X11 database' \
- ' -h show this help message'
- exit "${1:-0}"
- }
- RMDB=0
- USERDB=0
- X=0
- while getopts uxrh arg; do
- case "${arg}" in
- r) RMDB=1 ;;
- u) USERDB=1 ;;
- x)
- USERDB=1
- X=1
- ;;
- h) usage 0 ;;
- ?) usage 1 ;;
- esac
- done
- if [ "${USERDB}" -eq 0 ]; then
- [ "$(id -u)" -eq 0 ] || {
- if command -v doas >/dev/null; then
- exec doas -- "${0}" "${@}"
- elif comman -v sudo >/dev/null; then
- exec sudo -- "${0}" "${@}"
- else
- echo "please run as root" 1>&2
- exit 1
- fi
- }
- SYSPATH='/etc/s6'
- RUNPATH='/run/s6-rc'
- else
- SYSPATH="${XDG_DATA_HOME:-${HOME:?}/.local/share}/s6"
- RUNPATH="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}/runtime-${USER:-$(id -un)}}/s6"
- if [ "${X}" -eq 1 ]; then
- SYSPATH="${SYSPATH}/x11"
- RUNPATH="${RUNPATH}/x11/s6-rc"
- else
- SYSPATH="${SYSPATH}/user"
- RUNPATH="${RUNPATH}/user/s6-rc"
- fi
- fi
- shift $(( OPTIND - 1 ))
- RCPATH="${SYSPATH}/rc"
- SVPATH="${SYSPATH}/sv"
- DBPATH="${RCPATH}/compiled"
- SVDIRS="${RUNPATH}/servicedirs"
- TIMESTAMP="$(date '+%s_%N')"
- NEW_DB="${DBPATH}-${TIMESTAMP}"
- umask 022
- set --
- if [ -d "${SVPATH}-priv" ]; then
- set -- "${SVPATH}-priv"
- fi
- s6-rc-compile "${NEW_DB}" "${SVPATH}" "${@}"
- # reload s6 if currently running
- if [ -e "${RUNPATH}" ]; then
- for dir in "${SVDIRS}"/*; do
- if [ -e "${dir}/down" ]; then
- s6-svc -x "${dir}"
- fi
- done
- s6-rc-update -v1 -l "${RUNPATH}" "${NEW_DB}"
- fi
- # update symlink
- if [ -h "${DBPATH}" ]; then
- unlink "${DBPATH}"
- elif [ -d "${DBPATH}" ]; then
- rm -r "${DBPATH}"
- elif [ -e "${DBPATH}" ]; then
- echo "DB path is not symlink or directory: '${DBPATH}'" 1>&2
- exit 1
- fi
- (
- cd "${DBPATH%/*}"
- ln -vs "${NEW_DB##*/}" "${DBPATH##*/}"
- )
- # remove old
- if [ "${RMDB}" -eq 1 ]; then
- echo "removing old compiled DBs in '${RCPATH}'"
- for dir in "${RCPATH}"/*; do
- if [ "$dir" != "${DBPATH}"-"${TIMESTAMP}" ] && [ "$dir" != "${DBPATH}" ]; then
- rm -r "$dir"
- fi
- done
- fi
- echo "done"
|