]> git.wh0rd.org - home.git/blame - .bin/gentoo-sync
cros-board: update
[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
7f44ba6d 10GS_USER="portage"
3815fa0c
MF
11conf="/etc/gentoo-sync.conf"
12[[ -e ${conf} ]] && . "${conf}"
13
7f44ba6d
MF
14logdir="/var/log"
15sync_log="${logdir}/rsync.log"
16up_log="${logdir}/emerge-updates.log"
17
6ef68d0c 18bootstrap() {
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}
49bootstrap "$@"
50
603039f0
MF
51usage() {
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
69s() {
70 local x val=$1
71 shift
72 for x ; do
73 eval GS_${x}=${val};
74 done
75}
76for 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
97done
98
7f44ba6d
MF
99run() {
100 echo "+ $*"
101 "$@"
102}
103if ${GS_DEBUG} ; then
104 set -x
105 run() { "$@" ; }
106fi
603039f0 107
3815fa0c
MF
108export NOCOLOR=true
109
110(
7f44ba6d 111id
3815fa0c
MF
112date
113
114if ${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
127fi
128
9db26d84 129if ${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
139fi
140
3815fa0c
MF
141date
142) >& ${sync_log}
143
144if ${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 177fi