| @@ -1,200 +1,206 @@ | | | @@ -1,200 +1,206 @@ |
1 | #!/bin/sh | | 1 | #!/bin/sh |
2 | # $NetBSD: pbulk.sh,v 1.6 2017/08/27 18:18:57 sevan Exp $ | | 2 | # $NetBSD: pbulk.sh,v 1.7 2018/02/08 12:59:28 triaxx Exp $ |
3 | set -e | | 3 | set -e |
4 | | | 4 | |
5 | usage="usage: ${0##*/} [-lun] [-c mk.conf.fragment] [-d nodes]" | | 5 | usage="usage: ${0##*/} [-lun] [-c mk.conf.fragment] [-d nodes]" |
6 | | | 6 | |
7 | while getopts lunc:d: opt; do | | 7 | while getopts lunc:d: opt; do |
8 | case $opt in | | 8 | case $opt in |
9 | l) limited=yes;; | | 9 | l) limited=yes;; |
10 | u) unprivileged=yes;; | | 10 | u) unprivileged=yes;; |
11 | n) native=yes;; | | 11 | n) native=yes;; |
12 | c) mk_fragment="${OPTARG}";; | | 12 | c) mk_fragment="${OPTARG}";; |
13 | d) nodes="${OPTARG}";; | | 13 | d) nodes="${OPTARG}";; |
14 | \?) echo "$usage" 1>&2; exit 1;; | | 14 | \?) echo "$usage" 1>&2; exit 1;; |
15 | esac | | 15 | esac |
16 | done | | 16 | done |
17 | shift $(expr $OPTIND - 1) | | 17 | shift $(expr $OPTIND - 1) |
18 | if [ $# != 0 ]; then echo "$usage" 1>&2; exit 1; fi | | 18 | if [ $# != 0 ]; then echo "$usage" 1>&2; exit 1; fi |
19 | | | 19 | |
20 | : ${TMPDIR:=/tmp} | | 20 | : ${TMPDIR:=/tmp} |
21 | | | 21 | |
22 | ## settings for unprivileged build: | | 22 | ## settings for unprivileged build: |
23 | if [ -n "$unprivileged" ]; then | | 23 | if [ -n "$unprivileged" ]; then |
24 | : ${PBULKPREFIX:=${HOME}/pbulk} | | 24 | : ${PBULKPREFIX:=${HOME}/pbulk} |
25 | : ${PKGSRCDIR:=${HOME}/pkgsrc} | | 25 | : ${PKGSRCDIR:=${HOME}/pkgsrc} |
26 | : ${PREFIX:=${HOME}/pkg} | | 26 | : ${PREFIX:=${HOME}/pkg} |
27 | : ${PACKAGES:=${HOME}/packages} | | 27 | : ${PACKAGES:=${HOME}/packages} |
28 | : ${BULKLOG:=${HOME}/bulklog} | | 28 | : ${BULKLOG:=${HOME}/bulklog} |
29 | fi | | 29 | fi |
30 | | | 30 | |
31 | ## | | 31 | ## |
32 | : ${PBULKPREFIX:=/usr/pbulk} | | 32 | : ${PBULKPREFIX:=/usr/pbulk} |
33 | : ${PBULKWORK:=${TMPDIR}/work-pbulk} | | 33 | : ${PBULKWORK:=${TMPDIR}/work-pbulk} |
34 | | | 34 | |
35 | : ${PACKAGES:=/mnt/packages} | | 35 | : ${PACKAGES:=/mnt/packages} |
36 | : ${BULKLOG:=/mnt/bulklog} | | 36 | : ${BULKLOG:=/mnt/bulklog} |
37 | | | 37 | |
38 | # almost constant: | | 38 | # almost constant: |
39 | : ${PKGSRCDIR:=/usr/pkgsrc} | | 39 | : ${PKGSRCDIR:=/usr/pkgsrc} |
40 | | | 40 | |
| | | 41 | # setting pkgdb directory: |
| | | 42 | if [ -n "$unprivileged" -o -n "${PREFIX}" ]; then |
| | | 43 | : ${PKGDBDIR:=${PREFIX}/var/db/pkg} |
| | | 44 | fi |
| | | 45 | |
41 | # Do it early since adding it after it fails is problematic: | | 46 | # Do it early since adding it after it fails is problematic: |
42 | if [ ! -n "$unprivileged" ]; then | | 47 | if [ ! -n "$unprivileged" ]; then |
43 | case "$(uname)" in | | 48 | case "$(uname)" in |
44 | NetBSD) | | 49 | NetBSD) |
45 | if ! id pbulk; then user add -m -g users pbulk; fi | | 50 | if ! id pbulk; then user add -m -g users pbulk; fi |
46 | ;; | | 51 | ;; |
47 | FreeBSD) | | 52 | FreeBSD) |
48 | if ! id pbulk; then | | 53 | if ! id pbulk; then |
49 | if ! pw groupshow users; then pw groupadd users; fi | | 54 | if ! pw groupshow users; then pw groupadd users; fi |
50 | pw useradd pbulk -m -g users | | 55 | pw useradd pbulk -m -g users |
51 | fi | | 56 | fi |
52 | ;; | | 57 | ;; |
53 | *) | | 58 | *) |
54 | if ! id pbulk; then echo "user \"pbulk\" is absent"; exit 1; fi | | 59 | if ! id pbulk; then echo "user \"pbulk\" is absent"; exit 1; fi |
55 | ;; | | 60 | ;; |
56 | esac | | 61 | esac |
57 | fi | | 62 | fi |
58 | | | 63 | |
59 | # Deploying pbulk packages: | | 64 | # Deploying pbulk packages: |
60 | # - bootstrapping | | 65 | # - bootstrapping |
61 | cat >${TMPDIR}/pbulk.mk <<EOF | | 66 | cat >${TMPDIR}/pbulk.mk <<EOF |
62 | PKG_DEVELOPER= yes | | 67 | PKG_DEVELOPER= yes |
63 | EOF | | 68 | EOF |
64 | | | 69 | |
65 | ${PKGSRCDIR}/bootstrap/bootstrap \ | | 70 | ${PKGSRCDIR}/bootstrap/bootstrap \ |
66 | ${unprivileged:+--unprivileged} \ | | 71 | ${unprivileged:+--unprivileged} \ |
67 | --mk-fragment=${TMPDIR}/pbulk.mk \ | | 72 | --mk-fragment=${TMPDIR}/pbulk.mk \ |
68 | --prefix=${PBULKPREFIX} \ | | 73 | --prefix=${PBULKPREFIX} \ |
69 | --workdir=${PBULKWORK} | | 74 | --workdir=${PBULKWORK} |
70 | rm -rf ${PBULKWORK} | | 75 | rm -rf ${PBULKWORK} |
71 | rm -f ${TMPDIR}/pbulk.mk | | 76 | rm -f ${TMPDIR}/pbulk.mk |
72 | | | 77 | |
73 | # - installing pbulk | | 78 | # - installing pbulk |
74 | (cd ${PKGSRCDIR}/pkgtools/pbulk && PACKAGES=${TMPDIR}/packages-pbulk WRKOBJDIR=${TMPDIR}/obj-pbulk ${PBULKPREFIX}/bin/bmake install) | | 79 | (cd ${PKGSRCDIR}/pkgtools/pbulk && PACKAGES=${TMPDIR}/packages-pbulk WRKOBJDIR=${TMPDIR}/obj-pbulk ${PBULKPREFIX}/bin/bmake install) |
75 | rm -rf ${TMPDIR}/obj-pbulk | | 80 | rm -rf ${TMPDIR}/obj-pbulk |
76 | rm -rf ${TMPDIR}/packages-pbulk | | 81 | rm -rf ${TMPDIR}/packages-pbulk |
77 | | | 82 | |
78 | ## cleaning after all this: | | 83 | ## cleaning after all this: |
79 | # rm -rf ${PBULKPREFIX} | | 84 | # rm -rf ${PBULKPREFIX} |
80 | | | 85 | |
81 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF | | 86 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF |
82 | # | | 87 | # |
83 | # Overriding default settings: | | 88 | # Overriding default settings: |
84 | master_mode=no | | 89 | master_mode=no |
85 | bootstrapkit=${PACKAGES}/bootstrap.tar.gz | | 90 | bootstrapkit=${PACKAGES}/bootstrap.tar.gz |
86 | bulklog=${BULKLOG} | | 91 | bulklog=${BULKLOG} |
87 | packages=${PACKAGES} | | 92 | packages=${PACKAGES} |
88 | mail=: | | 93 | mail=: |
89 | rsync=: | | 94 | rsync=: |
90 | EOF | | 95 | EOF |
91 | # base_url needs to be adjusted, although the pbulk code should | | 96 | # base_url needs to be adjusted, although the pbulk code should |
92 | # not need to know it at all, maybe except for generating the | | 97 | # not need to know it at all, maybe except for generating the |
93 | # mail that the report has been completed. | | 98 | # mail that the report has been completed. |
94 | | | 99 | |
95 | # Speed scan phase up for repeated runs: | | 100 | # Speed scan phase up for repeated runs: |
96 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF | | 101 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF |
97 | reuse_scan_results=yes | | 102 | reuse_scan_results=yes |
98 | EOF | | 103 | EOF |
99 | | | 104 | |
100 | # Quotes around "EOF" are important below | | 105 | # Quotes around "EOF" are important below |
101 | # (they prevent variable expansion in here-document): | | 106 | # (they prevent variable expansion in here-document): |
102 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<"EOF" | | 107 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<"EOF" |
103 | # Don't forget to recompute dependent settings: | | 108 | # Don't forget to recompute dependent settings: |
104 | loc=${bulklog}/meta | | 109 | loc=${bulklog}/meta |
105 | EOF | | 110 | EOF |
106 | | | 111 | |
107 | if [ -n "$limited" ]; then | | 112 | if [ -n "$limited" ]; then |
108 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF | | 113 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF |
109 | # Limited list build overrides: | | 114 | # Limited list build overrides: |
110 | limited_list=${PBULKPREFIX}/etc/pbulk.list | | 115 | limited_list=${PBULKPREFIX}/etc/pbulk.list |
111 | EOF | | 116 | EOF |
112 | | | 117 | |
113 | # generate minimal list | | 118 | # generate minimal list |
114 | cat > ${PBULKPREFIX}/etc/pbulk.list <<EOF | | 119 | cat > ${PBULKPREFIX}/etc/pbulk.list <<EOF |
115 | pkgtools/digest | | 120 | pkgtools/digest |
116 | EOF | | 121 | EOF |
117 | fi | | 122 | fi |
118 | | | 123 | |
119 | if [ -n "$unprivileged" ]; then | | 124 | if [ -n "$unprivileged" ]; then |
120 | # Unprivileged bulk build: | | 125 | # Unprivileged bulk build: |
121 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF | | 126 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF |
122 | # Unprivileged bulk build overrides: | | 127 | # Unprivileged bulk build overrides: |
123 | unprivileged_user=$(id -un) | | 128 | unprivileged_user=$(id -un) |
124 | pkgsrc=${PKGSRCDIR} | | 129 | pkgsrc=${PKGSRCDIR} |
125 | prefix=${PREFIX} | | 130 | prefix=${PREFIX} |
126 | varbase=${PREFIX}/var | | 131 | varbase=${PREFIX}/var |
127 | pkgdb=${PREFIX}/var/db/pkg | | 132 | pkgdb=${PKGDBDIR} |
128 | EOF | | 133 | EOF |
129 | elif [ -n "${PREFIX}" ]; then | | 134 | elif [ -n "${PREFIX}" ]; then |
130 | # Non-default prefix: | | 135 | # Non-default prefix: |
131 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF | | 136 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF |
132 | # Non-default prefix overrides: | | 137 | # Non-default prefix overrides: |
133 | prefix=${PREFIX} | | 138 | prefix=${PREFIX} |
134 | varbase=${PREFIX}/var | | 139 | varbase=${PREFIX}/var |
135 | pkgdb=${PREFIX}/var/db/pkg | | 140 | pkgdb=${PKGDBDIR} |
136 | EOF | | 141 | EOF |
137 | fi | | 142 | fi |
138 | | | 143 | |
139 | # Quotes around "EOF" are important below | | 144 | # Quotes around "EOF" are important below |
140 | # (they prevent variable expansion in here-document): | | 145 | # (they prevent variable expansion in here-document): |
141 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<"EOF" | | 146 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<"EOF" |
142 | # Don't forget to recompute dependent settings: | | 147 | # Don't forget to recompute dependent settings: |
143 | make=${prefix}/bin/bmake | | 148 | make=${prefix}/bin/bmake |
144 | EOF | | 149 | EOF |
145 | | | 150 | |
146 | if [ -n "$native" ]; then | | 151 | if [ -n "$native" ]; then |
147 | # Native bulk build (native make, no bootstrap kit needed): | | 152 | # Native bulk build (native make, no bootstrap kit needed): |
148 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF | | 153 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF |
149 | # Native bulk build overrides: | | 154 | # Native bulk build overrides: |
150 | make=/usr/bin/make | | 155 | make=/usr/bin/make |
151 | bootstrapkit= | | 156 | bootstrapkit= |
152 | EOF | | 157 | EOF |
153 | fi | | 158 | fi |
154 | | | 159 | |
155 | # Distributed bulk build: | | 160 | # Distributed bulk build: |
156 | if [ -n "$nodes" ]; then | | 161 | if [ -n "$nodes" ]; then |
157 | master_node="${nodes%% *}" | | 162 | master_node="${nodes%% *}" |
158 | slave_nodes="${nodes#* }" | | 163 | slave_nodes="${nodes#* }" |
159 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF | | 164 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<EOF |
160 | # Distributed bulk build overrides: | | 165 | # Distributed bulk build overrides: |
161 | master_mode=yes | | 166 | master_mode=yes |
162 | master_ip="${master_node}" | | 167 | master_ip="${master_node}" |
163 | scan_clients="${slave_nodes}" | | 168 | scan_clients="${slave_nodes}" |
164 | build_clients="${slave_nodes}" | | 169 | build_clients="${slave_nodes}" |
165 | EOF | | 170 | EOF |
166 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<"EOF" | | 171 | cat >> ${PBULKPREFIX}/etc/pbulk.conf.over <<"EOF" |
167 | # Recompute dependent settings: | | 172 | # Recompute dependent settings: |
168 | master_port_scan=${master_ip}:2001 | | 173 | master_port_scan=${master_ip}:2001 |
169 | master_port_build=${master_ip}:2002 | | 174 | master_port_build=${master_ip}:2002 |
170 | EOF | | 175 | EOF |
171 | fi | | 176 | fi |
172 | | | 177 | |
173 | cat ${PBULKPREFIX}/etc/pbulk.conf ${PBULKPREFIX}/etc/pbulk.conf.over > ${PBULKPREFIX}/etc/pbulk.conf.new | | 178 | cat ${PBULKPREFIX}/etc/pbulk.conf ${PBULKPREFIX}/etc/pbulk.conf.over > ${PBULKPREFIX}/etc/pbulk.conf.new |
174 | cp ${PBULKPREFIX}/etc/pbulk.conf ${PBULKPREFIX}/etc/pbulk.conf.bak | | 179 | cp ${PBULKPREFIX}/etc/pbulk.conf ${PBULKPREFIX}/etc/pbulk.conf.bak |
175 | mv ${PBULKPREFIX}/etc/pbulk.conf.new ${PBULKPREFIX}/etc/pbulk.conf | | 180 | mv ${PBULKPREFIX}/etc/pbulk.conf.new ${PBULKPREFIX}/etc/pbulk.conf |
176 | | | 181 | |
177 | # Bootstrapping | | 182 | # Bootstrapping |
178 | if [ -n "$native" ]; then | | 183 | if [ -n "$native" ]; then |
179 | if [ -n "$mk_fragment" ]; then cat "$mk_fragment" > /etc/mk.conf; fi | | 184 | if [ -n "$mk_fragment" ]; then cat "$mk_fragment" > /etc/mk.conf; fi |
180 | else | | 185 | else |
181 | # Ensure that the directory for bootstrap kit exists: | | 186 | # Ensure that the directory for bootstrap kit exists: |
182 | mkdir -p ${PACKAGES} | | 187 | mkdir -p ${PACKAGES} |
183 | | | 188 | |
184 | # Creating the bootstrap kit | | 189 | # Creating the bootstrap kit |
185 | ${PKGSRCDIR}/bootstrap/bootstrap \ | | 190 | ${PKGSRCDIR}/bootstrap/bootstrap \ |
186 | ${unprivileged:+--unprivileged} \ | | 191 | ${unprivileged:+--unprivileged} \ |
187 | ${PREFIX:+--prefix=${PREFIX}} \ | | 192 | ${PREFIX:+--prefix=${PREFIX}} \ |
188 | ${mk_fragment:+--mk-fragment="$mk_fragment"} \ | | 193 | ${mk_fragment:+--mk-fragment="$mk_fragment"} \ |
189 | --workdir=${TMPDIR}/work \ | | 194 | --workdir=${TMPDIR}/work \ |
| | | 195 | ${PKGDBDIR:+--pkgdbdir=${PKGDBDIR}} \ |
190 | --gzip-binary-kit=${PACKAGES}/bootstrap.tar.gz | | 196 | --gzip-binary-kit=${PACKAGES}/bootstrap.tar.gz |
191 | rm -rf ${TMPDIR}/work | | 197 | rm -rf ${TMPDIR}/work |
192 | rm -f ${TMPDIR}/mk.conf.inc | | 198 | rm -f ${TMPDIR}/mk.conf.inc |
193 | fi | | 199 | fi |
194 | # Keep "packages" in pbulk.conf and "PACKAGES" in mk.conf fragment in sync. | | 200 | # Keep "packages" in pbulk.conf and "PACKAGES" in mk.conf fragment in sync. |
195 | | | 201 | |
196 | # Final preparations: | | 202 | # Final preparations: |
197 | mkdir -p ${PACKAGES} | | 203 | mkdir -p ${PACKAGES} |
198 | | | 204 | |
199 | # Let's start: | | 205 | # Let's start: |
200 | #PACKAGES=${PACKAGES} WRKOBJDIR=${TMPDIR} ${PBULKPREFIX}/bin/bulkbuild | | 206 | #PACKAGES=${PACKAGES} WRKOBJDIR=${TMPDIR} ${PBULKPREFIX}/bin/bulkbuild |