]>
Commit | Line | Data |
---|---|---|
3815fa0c MF |
1 | #!/bin/bash |
2 | ||
9db26d84 | 3 | GS_SYNC=true |
3815fa0c MF |
4 | GS_RSYNC=false |
5 | GS_EUPDATEDB=true | |
6 | GS_FETCH=false | |
7 | GS_UPWORLD=true | |
d3768020 | 8 | GS_LAYMAN=true |
603039f0 | 9 | GS_DEBUG=false |
3815fa0c MF |
10 | conf="/etc/gentoo-sync.conf" |
11 | [[ -e ${conf} ]] && . "${conf}" | |
12 | ||
6ef68d0c | 13 | bootstrap() { |
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 | } | |
33 | bootstrap "$@" | |
34 | ||
603039f0 MF |
35 | usage() { |
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 | ||
53 | s() { | |
54 | local x val=$1 | |
55 | shift | |
56 | for x ; do | |
57 | eval GS_${x}=${val}; | |
58 | done | |
59 | } | |
60 | for 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 | |
81 | done | |
82 | ||
603039f0 MF |
83 | ${GS_DEBUG} && set -x |
84 | ||
85 | logdir="/var/log" | |
86 | sync_log="${logdir}/rsync.log" | |
87 | up_log="${logdir}/emerge-updates.log" | |
88 | ||
3815fa0c MF |
89 | export NOCOLOR=true |
90 | ||
91 | ( | |
92 | date | |
93 | ||
94 | if ${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 |
107 | fi |
108 | ||
9db26d84 MF |
109 | if ${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 | |
118 | fi | |
119 | ||
3815fa0c MF |
120 | date |
121 | ) >& ${sync_log} | |
122 | ||
123 | if ${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 | 156 | fi |