index : builder | |
Archlinux32 build system | gitolite user |
summaryrefslogtreecommitdiff |
author | Erich Eckner <git@eckner.net> | 2018-05-25 10:50:24 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2018-05-25 10:50:24 +0200 |
commit | 80103377b779450c3a470ddaa2d620c9fdf75491 (patch) | |
tree | 9f73ce05f392fbb5c8ef16f27faf055f93cb77ed /lib/load-configuration | |
parent | 673592f9fd24a26565fc6ebfbd4db6832d4b2b38 (diff) |
-rwxr-xr-x | lib/load-configuration | 159 |
diff --git a/lib/load-configuration b/lib/load-configuration new file mode 100755 index 0000000..095cadd --- /dev/null +++ b/lib/load-configuration @@ -0,0 +1,159 @@ +#!/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 +fi + +# TODO: some of this should be read from the database instead +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" + +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' + +# known package repositories +standalone_package_repositories=$( + printf '%s\n' 'build-support' 'gnome-unstable' 'kde-unstable' +) +stable_package_repositories=$( + printf '%s\n' 'community' 'core' 'extra' +) +testing_package_repositories=$( + printf '%s\n' 'community-testing' 'testing' +) +staging_package_repositories=$( + printf '%s\n' 'community-staging' 'staging' +) + +# 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 + +# 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://github.com/archlinux32/packages.git' + else + repo_source="git://git.archlinux.org/svntogit/${repo}.git" + fi + git clone --bare "${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 |