summaryrefslogtreecommitdiff
path: root/lib/load-configuration
blob: 07ef27021ed9f3bc1061d620efe7c93c3336baab (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'
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