]> git.wh0rd.org - home.git/blame - .bin/gentoo-sync
gentoo-sync: ignore final exit status
[home.git] / .bin / gentoo-sync
CommitLineData
3815fa0c
MF
1#!/bin/bash
2
9db26d84 3GS_SYNC=true
3815fa0c
MF
4GS_RSYNC=false
5GS_EUPDATEDB=true
6GS_FETCH=false
7GS_UPWORLD=true
d3768020 8GS_LAYMAN=true
603039f0 9GS_DEBUG=false
3815fa0c
MF
10conf="/etc/gentoo-sync.conf"
11[[ -e ${conf} ]] && . "${conf}"
12
6ef68d0c 13bootstrap() {
f4853b9e
MF
14 [[ "${FLOCKER}" != "$0" ]] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@"
15 [[ $(id -u) -eq 0 ]] || exec sudo env -uUNSHARE FLOCKER="${FLOCKER}" HOME="$HOME" "$0" "$@"
6ef68d0c
MF
16
17 if [[ -z ${UNSHARE} ]] ; then
18 mount_args=
19 if type -P unshare >&/dev/null ; then
20 test_arg() { unshare "$@" -- true >&/dev/null && uargs+=( "$@" ) || :; }
21 uargs=( -m )
22 test_arg -u
23 test_arg -i
24 test_arg -p -f --mount-proc
25 test_arg --propagation=private
26 UNSHARE=true exec unshare "${uargs[@]}" -- "$0" "$@"
27 fi
28 else
29 mount_args='-n'
30 fi
31 unset UNSHARE
32}
33bootstrap "$@"
34
603039f0
MF
35usage() {
36 cat <<-EOF
37 Usage: ${0##*/} [options]
38
39 Options:
40 -h, --help
41 -a, --all, -na, --noall
42 -s, --sync, -ns, --nosync ${GS_SYNC}
43 -r, --rsync, -nr, --norsync ${GS_RSYNC}
44 -d, --database, -nd, --nodatabase ${GS_EUPDATEDB}
45 -f, --fetch, -nf, --nofetch ${GS_FETCH}
46 -w, --world, -nw, --noworld ${GS_UPWORLD}
47 -l, --layman, -nl, --nolayman ${GS_LAYMAN}
48 -x, --debug, -nx, --nodebug ${GS_DEBUG}
49 EOF
50 exit 0
51}
52
53s() {
54 local x val=$1
55 shift
56 for x ; do
57 eval GS_${x}=${val};
58 done
59}
60for x ; do
61 case ${x} in
62 -h|--help) usage;;
63 -a|--all) s true SYNC RSYNC EUPDATEDB FETCH UPWORLD LAYMAN DEBUG;;
64 -na|--noall) s false SYNC RSYNC EUPDATEDB FETCH UPWORLD LAYMAN DEBUG;;
65 -s|--sync) s true SYNC;;
66 -ns|--nosync) s false SYNC;;
67 -r|--rsync) s true RSYNC;;
68 -nr|--norsync) s false RSYNC;;
69 -d|--database) s true EUPDATEDB;;
70 -nd|--nodatabase) s false EUPDATEDB;;
71 -f|--fetch) s true FETCH;;
72 -nf|--nofetch) s false FETCH;;
73 -w|--world) s true UPWORLD;;
74 -nw|--noworld) s false UPWORLD;;
75 -l|--layman) s true LAYMAN;;
76 -nl|--nolayman) s false LAYMAN;;
77 -x|--debug) s true DEBUG;;
78 -nx|--nodebug) s false DEBUG;;
79 *) usage;;
80 esac
81done
82
603039f0
MF
83${GS_DEBUG} && set -x
84
85logdir="/var/log"
86sync_log="${logdir}/rsync.log"
87up_log="${logdir}/emerge-updates.log"
88
3815fa0c
MF
89export NOCOLOR=true
90
91(
92date
93
94if ${GS_RSYNC} ; then
95 # For slow systems, run rsync directly.
96 for f in make.globals make.conf ; do
97 for d in /etc /etc/portage /usr/share/portage/config ; do
98 f="${d}/make.globals"
99 [[ -e ${f} ]] && . ${f} && break
100 done
101 done
d144418d 102 > "${up_log}"
3815fa0c
MF
103 : ${PORTAGE_RSYNC_OPTS:=-azO --delete --exclude=/distfiles --exclude=/local --exclude=/packages}
104 : ${SYNC:=rsync://rsync.gentoo.org/gentoo-portage}
105 : ${PORTDIR:=/usr/portage}
d144418d 106 exec rsync ${PORTAGE_RSYNC_OPTS} ${PORTAGE_RSYNC_EXTRA_OPTS} ${SYNC}/ ${PORTDIR}/ >& "${sync_log}"
3815fa0c
MF
107fi
108
9db26d84
MF
109if ${GS_SYNC} ; then
110 emerge --sync -q
111 date
112 ${GS_EUPDATEDB} && $(type -P eupdatedb)
113 date
114 ${GS_LAYMAN} && l=$(type -P layman) && ${l} -S -q
115 date
116 ${GS_FETCH} && emerge world -Duf
117 #q -qr
118fi
119
3815fa0c
MF
120date
121) >& ${sync_log}
122
123if ${GS_UPWORLD} ; then
124 (
047f042e
MF
125 repos=(
126 $(portageq repositories_configuration / | awk '$1 == "location" { $1 = $2 = ""; print }')
127 )
9db26d84
MF
128 bad_pkgs=()
129 good_pkgs=()
130 for p in `qlist -ICS` ; do
047f042e
MF
131 good=false
132 for repo in ${repos[@]} ; do
133 if [[ -d ${repo}/${p%:*} ]] ; then
134 good=true
135 break
136 fi
137 done
138
139 if ${good} ; then
9db26d84
MF
140 good_pkgs+=( ${p} )
141 else
142 bad_pkgs+=( ${p} )
143 fi
144 done
047f042e 145
9db26d84
MF
146 if [[ ${#bad_pkgs[@]} -gt 0 ]] ; then
147 echo 'These packages no longer exist:'
148 printf '\t%s\n' "${bad_pkgs[@]}"
149 echo
150 fi
d4aab056 151 echo 'emerge -u1v --quiet-build y --keep-going $(awk '\''$2 ~ /\// {print $2}'\'' '${up_log}')'
047f042e
MF
152 emerge -upq --cols \
153 $(printf '%s\n' ${good_pkgs[*]} | grep -v '^cross-')
3815fa0c 154 ) >& ${up_log}
32833e6e 155 :
3815fa0c 156fi