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