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]
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
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
emerge -upq --cols \
$(printf '%s\n' ${good_pkgs[*]} | grep -v '^cross-')
) >& ${up_log}
+ :
fi