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