blob: 92316d91717e67471a67b28eb16ac5a5a4f783de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
#!/bin/sh
# load global variables
# shellcheck disable=SC2034
set -e
export LANG=C
# dirty hack to get this stuff debugable from a bash
if [ "x${0##*/}" = "x-bash" ] || [ "x${0##*/}" = "xbash" ] || [ "x${0##*/}" = "xdash" ]; then
base_dir=$(pwd)
else
base_dir=$(printf '%s/..' "$(dirname "$(readlink -f "$0")")")
fi
work_dir="${base_dir}/work"
# shellcheck source=../lib/common-functions
. "${base_dir}/lib/common-functions"
# if mysqld is not running, we're either on a build slave and don't need
# lib/mysql-functions or we're on the build master and something is wrong
# anyway
if pgrep -x mysqld >/dev/null 2>&1; then
i_am_the_master=true
# shellcheck source=../lib/mysql-functions
. "${base_dir}/lib/mysql-functions"
else
i_am_the_master=false
repo_names='packages community archlinux32'
repo_paths__packages="${work_dir}/repos/packages"
repo_paths__community="${work_dir}/repos/community"
repo_paths__archlinux32="${work_dir}/repos/packages32"
fi
master_build_server="buildmaster.archlinux32.org"
master_build_server_port="22"
master_build_server_user="slave"
master_build_server_identity="${work_dir}/.ssh/id_rsa"
repo_key='0xdeadbeef'
package_key='0x15eebadc0de'
# to access the master mirror via rsync
master_mirror_rsync_command='rsync --password-file=/home/slave/rsync.password --copy-dest=/.transfer'
master_mirror_rsync_directory='rsync://buildmaster@mirror.archlinux32.org/packages32'
# to access the master mirror via sftp
master_mirror_sftp_command='sftp -b- user@mirror'
# mirror of sources, identified (solely) by hash
source_by_hash_mirror='http://sources.archlinux32.org/'
# what should be tried in what order to somehow repair a broken build
straws_that_might_repair_failing_builds=$(
printf '%s\n' \
':' \
':clean_chroot:' \
':mirrored_source_by_hash:' \
':mirrored_source:' \
':with_build_support:' \
':with_build_support:clean_chroot:'
)
# root directory of the webserver
webserver_directory='/srv/http'
# directory to keep the build log files in
build_log_directory='/srv/http/build-logs'
# irc client configuration
irc_dir='/home/slave/irc/irc.freenode.net'
irc_password='top_secret'
# commands to run to update the i686 package mirror used for installing i686 packages,
# e.g. the one from /etc/pacman.d/mirrorlist32 (useful on build slaves which do not
# have the master mirror in the mirrorlist32)
mirror_update_command=''
# list of urls to trigger updates of the respective mirrors (used on build master only)
mirror_refresh_trigger_urls=''
# command to access the mysql database
mysql_command='mysql buildmaster'
# possibly pull in custom modifications
if [ -r "${base_dir}/conf/common.conf" ]; then
# shellcheck source=/dev/null
. "${base_dir}/conf/common.conf"
fi
if ${i_am_the_master} && \
[ -r "${base_dir}/conf/master.conf" ]; then
# shellcheck source=/dev/null
. "${base_dir}/conf/master.conf"
fi
if ! ${i_am_the_master} && \
[ -r "${base_dir}/conf/slave.conf" ]; then
# shellcheck source=/dev/null
. "${base_dir}/conf/slave.conf"
fi
# load static values from the database
if ${i_am_the_master}; then
mysql_retrieve_static_information
fi
# check / set up environment
if [ -z "${build_list_lock_file}" ]; then
build_list_lock_file="${work_dir}/build-list.lock"
fi
if [ -z "${sanity_check_lock_file}" ]; then
sanity_check_lock_file="${work_dir}/sanity-check.lock"
fi
if [ -z "${package_database_lock_file}" ]; then
package_database_lock_file="${work_dir}/package-database.lock"
fi
mkdir -p "${work_dir}"
for repo in ${repo_names}; do
eval repo_path='"${repo_paths__'"${repo}"'}"'
mkdir -p "${repo_path%/*}"
if ! git -C "${repo_path}" rev-parse --git-dir > /dev/null 2>&1; then
if [ "${repo}" = "archlinux32" ]; then
repo_source='https://git.archlinux32.org/archlinux32/packages.git'
else
repo_source="git://git.archlinux.org/svntogit/${repo}.git"
fi
git clone --mirror "${repo_source}" "${repo_path}"
fi
done
if [ "${master_build_server_identity}" = "${work_dir}/.ssh/id_rsa" ] && \
[ ! -f "${master_build_server_identity}" ]; then
mkdir -p "${master_build_server_identity%/*}"
ssh-keygen -b4096 -f "${master_build_server_identity}"
fi
# check out newest revision
if git -C "${base_dir}" status >/dev/null 2>&1; then
chronic git -C "${base_dir}" pull --ff-only || \
true
fi
|