]> git.wh0rd.org - home.git/blobdiff - .bin/gentoo-sync
cros-board: update
[home.git] / .bin / gentoo-sync
index 11bd717b9370a9c0943ad65951738a95d8bf06bd..6984c38001674f87a2d0b2982177ddf750ec41db 100755 (executable)
@@ -7,9 +7,47 @@ GS_FETCH=false
 GS_UPWORLD=true
 GS_LAYMAN=true
 GS_DEBUG=false
+GS_USER="portage"
 conf="/etc/gentoo-sync.conf"
 [[ -e ${conf} ]] && . "${conf}"
 
+logdir="/var/log"
+sync_log="${logdir}/rsync.log"
+up_log="${logdir}/emerge-updates.log"
+
+bootstrap() {
+       local prog=$(realpath "$0")
+       if [[ "${FLOCKER}" != "${prog}" ]] ; then
+               exec env -uUNSHARE FLOCKER="${prog}" flock -en "${prog}" "${prog}" "$@"
+       fi
+
+       if [[ -z ${UNSHARE} ]] ; then
+               if [[ $(id -u) -ne 0 ]] ; then
+                       exec sudo env -uUNSHARE FLOCKER="${FLOCKER}" HOME="$HOME" "${prog}" "$@"
+               fi
+
+               touch "${sync_log}" "${up_log}"
+               chown "${GS_USER}" "${sync_log}" "${up_log}"
+
+               mount_args=
+               if type -P unshare >&/dev/null ; then
+                       test_arg() { unshare "$@" -- true >&/dev/null && uargs+=( "$@" ) || :; }
+                       uargs=( -m )
+                       test_arg -u
+                       test_arg -i
+                       test_arg -p -f --mount-proc
+                       test_arg --propagation=private
+                       exec unshare "${uargs[@]}" -- \
+                               sudo -u "${GS_USER}" UNSHARE="true" FLOCKER="${FLOCKER}" \
+                               "${prog}" "$@"
+               fi
+       else
+               mount_args='-n'
+       fi
+       unset UNSHARE
+}
+bootstrap "$@"
+
 usage() {
        cat <<-EOF
        Usage: ${0##*/} [options]
@@ -58,16 +96,19 @@ for x ; do
        esac
 done
 
-[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
-${GS_DEBUG} && set -x
-
-logdir="/var/log"
-sync_log="${logdir}/rsync.log"
-up_log="${logdir}/emerge-updates.log"
+run() {
+       echo "+ $*"
+       "$@"
+}
+if ${GS_DEBUG} ; then
+       set -x
+       run() { "$@" ; }
+fi
 
 export NOCOLOR=true
 
 (
+id
 date
 
 if ${GS_RSYNC} ; then
@@ -86,13 +127,14 @@ if ${GS_RSYNC} ; then
 fi
 
 if ${GS_SYNC} ; then
-       emerge --sync -q
+       run emerge --sync -q
        date
-       ${GS_EUPDATEDB} && $(type -P eupdatedb)
+       ${GS_EUPDATEDB} && run $(type -P eupdatedb)
        date
-       ${GS_LAYMAN} && l=$(type -P layman) && ${l} -S -q
+       ${GS_LAYMAN} && l=$(type -P layman) && run ${l} -S -q
        date
-       ${GS_FETCH} && emerge world -Duf
+       ${GS_FETCH} && run emerge world -Duf
+       #date
        #q -qr
 fi
 
@@ -131,4 +173,5 @@ if ${GS_UPWORLD} ; then
        emerge -upq --cols \
                $(printf '%s\n' ${good_pkgs[*]} | grep -v '^cross-')
        ) >& ${up_log}
+       :
 fi