X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=.bin%2Fgentoo-sync;h=c41f04dcacbec059e7b261e9ad7ec0c3a51b1706;hb=942a43e2e16198361bee17df0077435a5064a2ed;hp=59f923ca0febc0d74aa42d7a8f114a294164c142;hpb=8ca6450d98bdc0b2d400d9908f2c50c89ea85a19;p=home.git diff --git a/.bin/gentoo-sync b/.bin/gentoo-sync index 59f923c..c41f04d 100755 --- a/.bin/gentoo-sync +++ b/.bin/gentoo-sync @@ -1,19 +1,91 @@ #!/bin/bash -[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || : - -logdir="/var/log" -sync_log="${logdir}/rsync.log" -up_log="${logdir}/emerge-updates.log" - +GS_SYNC=true GS_RSYNC=false GS_EUPDATEDB=true GS_FETCH=false GS_UPWORLD=true GS_LAYMAN=true +GS_DEBUG=false conf="/etc/gentoo-sync.conf" [[ -e ${conf} ]] && . "${conf}" +bootstrap() { + [[ "${FLOCKER}" != "$0" ]] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" + [[ $(id -u) -eq 0 ]] || exec sudo env -uUNSHARE FLOCKER="${FLOCKER}" HOME="$HOME" "$0" "$@" + + if [[ -z ${UNSHARE} ]] ; then + 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 + UNSHARE=true exec unshare "${uargs[@]}" -- "$0" "$@" + fi + else + mount_args='-n' + fi + unset UNSHARE +} +bootstrap "$@" + +usage() { + cat <<-EOF + Usage: ${0##*/} [options] + + Options: + -h, --help + -a, --all, -na, --noall + -s, --sync, -ns, --nosync ${GS_SYNC} + -r, --rsync, -nr, --norsync ${GS_RSYNC} + -d, --database, -nd, --nodatabase ${GS_EUPDATEDB} + -f, --fetch, -nf, --nofetch ${GS_FETCH} + -w, --world, -nw, --noworld ${GS_UPWORLD} + -l, --layman, -nl, --nolayman ${GS_LAYMAN} + -x, --debug, -nx, --nodebug ${GS_DEBUG} + EOF + exit 0 +} + +s() { + local x val=$1 + shift + for x ; do + eval GS_${x}=${val}; + done +} +for x ; do + case ${x} in + -h|--help) usage;; + -a|--all) s true SYNC RSYNC EUPDATEDB FETCH UPWORLD LAYMAN DEBUG;; + -na|--noall) s false SYNC RSYNC EUPDATEDB FETCH UPWORLD LAYMAN DEBUG;; + -s|--sync) s true SYNC;; + -ns|--nosync) s false SYNC;; + -r|--rsync) s true RSYNC;; + -nr|--norsync) s false RSYNC;; + -d|--database) s true EUPDATEDB;; + -nd|--nodatabase) s false EUPDATEDB;; + -f|--fetch) s true FETCH;; + -nf|--nofetch) s false FETCH;; + -w|--world) s true UPWORLD;; + -nw|--noworld) s false UPWORLD;; + -l|--layman) s true LAYMAN;; + -nl|--nolayman) s false LAYMAN;; + -x|--debug) s true DEBUG;; + -nx|--nodebug) s false DEBUG;; + *) usage;; + esac +done + +${GS_DEBUG} && set -x + +logdir="/var/log" +sync_log="${logdir}/rsync.log" +up_log="${logdir}/emerge-updates.log" + export NOCOLOR=true ( @@ -27,29 +99,58 @@ if ${GS_RSYNC} ; then [[ -e ${f} ]] && . ${f} && break done done + > "${up_log}" : ${PORTAGE_RSYNC_OPTS:=-azO --delete --exclude=/distfiles --exclude=/local --exclude=/packages} : ${SYNC:=rsync://rsync.gentoo.org/gentoo-portage} : ${PORTDIR:=/usr/portage} - exec rsync ${PORTAGE_RSYNC_OPTS} ${PORTAGE_RSYNC_EXTRA_OPTS} ${SYNC}/ ${PORTDIR}/ + exec rsync ${PORTAGE_RSYNC_OPTS} ${PORTAGE_RSYNC_EXTRA_OPTS} ${SYNC}/ ${PORTDIR}/ >& "${sync_log}" +fi + +if ${GS_SYNC} ; then + emerge --sync -q + date + ${GS_EUPDATEDB} && $(type -P eupdatedb) + date + ${GS_LAYMAN} && l=$(type -P layman) && ${l} -S -q + date + ${GS_FETCH} && emerge world -Duf + #q -qr fi -emerge --sync -q -date -${GS_EUPDATEDB} && $(type -P eupdatedb) -date -${GS_LAYMAN} && l=$(type -P layman) && ${l} -S -q -date -${GS_FETCH} && emerge world -Duf -#q -qr date ) >& ${sync_log} if ${GS_UPWORLD} ; then ( - eval $(portageq envvar -v PORTDIR) - cd "${PORTDIR}" - good_pkgs=$(ls -d `qlist -IC`) - echo 'emerge -u1 --keep-going $(awk '\''$2 ~ /\// {print $2}'\'' '${up_log}')' - emerge ${good_pkgs} -upq --cols + repos=( + $(portageq repositories_configuration / | awk '$1 == "location" { $1 = $2 = ""; print }') + ) + bad_pkgs=() + good_pkgs=() + for p in `qlist -ICS` ; do + good=false + for repo in ${repos[@]} ; do + if [[ -d ${repo}/${p%:*} ]] ; then + good=true + break + fi + done + + if ${good} ; then + good_pkgs+=( ${p} ) + else + bad_pkgs+=( ${p} ) + fi + done + + if [[ ${#bad_pkgs[@]} -gt 0 ]] ; then + echo 'These packages no longer exist:' + printf '\t%s\n' "${bad_pkgs[@]}" + echo + fi + echo 'emerge -u1v --quiet-build y --keep-going $(awk '\''$2 ~ /\// {print $2}'\'' '${up_log}')' + emerge -upq --cols \ + $(printf '%s\n' ${good_pkgs[*]} | grep -v '^cross-') ) >& ${up_log} + : fi