Skip to content

Platforms

Mojca Miklavec edited this page Feb 23, 2024 · 53 revisions

Notes about setup of different platforms

See http://ar.to/notes/buildbot

systemd: 1 2

Debian

Setting up the buildbot

sudo apt-get install buildbot-worker
cd /var/lib/buildbot/workers/
sudo -u buildbot buildbot-worker create-worker -r texlive build.contextgarden.net:9989 workername pass
# suboptimal
sudo -u buildbot buildbot-worker start /var/lib/buildbot/workers/texlive

Uncomment use-commit-times = yes from

/var/lib/buildbot/.subversion/config

Packages

buildbot-worker
libx11-dev libxmu-dev libfontconfig1-dev libxaw7-dev

Using Systemd

$ cat /etc/systemd/system/buildbot-worker-texlive.service
[Unit]
Description=BuildBot worker for TeX Live
After=network.target

[Service]
User=buildbot
Group=buildbot
Restart=always

WorkingDirectory=/var/lib/buildbot/workers/texlive
#Environment="PATH=..."
ExecStart=/usr/bin/twistd3 \
	--nodaemon \
	--pidfile=twistd.pid \
	--python=buildbot.tac

[Install]
WantedBy=multi-user.target
  • reload configuration: sudo systemctl daemon-reload
  • enable the service: sudo systemctl enable buildbot-worker-texlive
  • start the buildslave: sudo systemctl start buildbot-worker-texlive
  • ask about status: systemctl status buildbot-worker-texlive
  • see logs: sudo journalctl -u buildbot-worker-texlive

Alpine Linux

Basic package management

$ apk update
$ apk upgrade

Setup buildbot

sudo mkdir -p /var/lib/buildbot_worker
sudo mkdir -p /var/log/buildbot_worker
sudo chown buildbot:buildbot /var/lib/buildbot_worker
sudo chown buildbot:buildbot /var/log/buildbot_worker
# ...

Init system

$ cat /etc/conf.d/buildbot_worker
# Path to the build slave's basedir.
BASEDIR="/var/lib/buildbot_worker"

# User account for the buildslave.
# The basedir should be owned by this user.
USERNAME="buildbot"

# Extra options passed to twistd.
TWISTD_OPTS=""

# Optional specific python version to run in
# (if not the system default version)
# ie: RUNTIME_PYTHON="/usr/bin/python2.7"
RUNTIME_PYTHON="/home/buildbot/install/bin/python3.8"
RUNTIME_TWISTD="/home/buildbot/install/bin/twistd"
$ cat /etc/init.d/buildbot_worker
#!/sbin/openrc-run
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

BUILDWORKER_NAME=${RC_SVCNAME:16}
BUILDWORKER_PATH="${BASEDIR}/${BUILDWORKER_NAME}"
depend() {
	need net
}

checkconfig() {
	if [ -z "${BUILDWORKER_NAME}" ]; then
		eerror "Buildbot-worker name not defined. Please link buildbot_worker.foo to this file to start the buildbot_worker with the name \"foo\"."
		return 1
	fi
	if [ -z "${BASEDIR}" ]; then
		eerror "BASEDIR not set"
		return 1
	fi
	if [ -z "${USERNAME}" ]; then
		eerror "USERNAME not set"
		return 1
	fi
	if [ ! -d "${BUILDWORKER_PATH}" ]; then
		eerror "${BUILDWORKER_PATH} is not a directory"
		return 1
	fi
	if [ ! -e "${BUILDWORKER_PATH}/buildbot.tac" ]; then
		eerror "${BUILDWORKER_PATH} does not contain buildbot.tac"
		return 1
	fi
	if [ ! -e "${RUNTIME_PYTHON}" ]; then
		RUNTIME_PYTHON="/usr/bin/python"
	fi
	if [ ! -e "${RUNTIME_TWISTD}" ]; then
		RUNTIME_PYTHON="/usr/bin/twistd"
	fi
}

start() {
	checkconfig || return 1
	ebegin "Starting buildbot-worker in ${BUILDWORKER_PATH}"
	# We set HOME here to make something valid show up in the env of child
	# processes spawned by the buildbot-worker.
	start-stop-daemon --start -u "${USERNAME}" \
		--pidfile "${BUILDWORKER_PATH}/buildbot_worker.pid" \
		--env HOME="${BUILDWORKER_PATH}" \
		--exec "${RUNTIME_PYTHON}" -- "${RUNTIME_TWISTD}" \
		--no_save \
		--logfile="${BUILDWORKER_PATH}/twistd.log" \
		--pidfile="${BUILDWORKER_PATH}/buildbot_worker.pid" \
		--python="${BUILDWORKER_PATH}/buildbot.tac"
	eend $?
}

stop() {
	ebegin "Stopping buildbot-worker in ${BUILDWORKER_PATH}"
	start-stop-daemon --stop --pidfile "${BUILDWORKER_PATH}/buildbot_worker.pid"
	eend $?
}
sudo ln -s buildbot_worker buildbot_worker.texlive
sudo rc-update add buildbot_worker.texlive default
sudo /etc/init.d/buildbot_worker.texlive start

FreeBSD

Install packages:

pkg install \
	sudo bash wget ca_root_nss \
	rsync subversion git \
	gtar gmake cmake ninja pkgconf \
	fontconfig iconv xorg-minimal libX11 libXaw \
	py37-buildbot-worker

Setting up the buildbot

pw groupadd buildbot -g 1001
pw useradd buildbot -g 1001 -u 1001 -d /home/buildbot -c Buildbot -s /usr/sbin/nologin
sudo mkdir /home/buildbot
sudo chown buildbot:buildbot /home/buildbot

cd /home/buildbot
sudo -u buildbot buildbot-worker create-worker -r texlive build.contextgarden.net:9989 pragma-freebsd-amd64 passwordhere
$ sudo pkg update
$ sudo pkg upgrade
$ pkg search <package>
$ sudo pkg install <package>
$ pkg info -l <package>
/home/buildbot - default directory for slaves
/usr/local/etc/rc.d/buildbot-worker - configuration

service

sudo service buildbot-worker start
cat /usr/local/etc/rc.d/buildbot-worker

#!/bin/sh

buildbot_worker_profiles="texlive"
buildbot_worker_texlive_enable="YES"
buildbot_worker_texlive_basedir="/usr/home/buildbot/texlive"
buildbot_worker_texlive_uid="buildbot"
buildbot_worker_texlive_gid="buildbot"

. /etc/rc.subr

export PATH=${PATH}:/usr/local/bin

name=buildbot_worker
desc="Buildbot Buildworker"
rcvar=buildbot_worker_enable

load_rc_config ${name}

# These are just the defaults, they might get overriden for a specific profile.
eval ": \${${name}_enable:=\"NO\"}"
eval ": \${${name}_flags:=\"\"}"
eval ": \${${name}_uid:=\"buildbot\"}"
eval ": \${${name}_gid:=\"buildbot\"}"
eval ": \${${name}_basedir:=\"/usr/local/etc/${name}\"}"

command="/usr/local/bin/twistd-3.7"
command_interpreter="/usr/local/bin/python3.7"
pidfile="${buildbot_worker_basedir}/twistd.pid"

	# A specific profile is specified in the command
	if [ -n "$2" ]; then
		profile="$2"
		# Override defaults with profile-specific values
		if [ -n "${buildbot_worker_profiles}" ]; then
			eval buildbot_worker_enable="\${buildbot_worker_${profile}_enable:-${buildbot_worker_enable}}"
			eval buildbot_worker_flags="\${buildbot_worker_${profile}_flags:-${buildbot_worker_flags}}"
			eval buildbot_worker_uid="\${buildbot_worker_${profile}_uid:-${buildbot_worker_uid}}"
			eval buildbot_worker_gid="\${buildbot_worker_${profile}_gid:-${buildbot_worker_gid}}"
			eval buildbot_worker_basedir="\${buildbot_worker_${profile}_basedir:-${buildbot_worker_basedir}}"
			eval pidfile="\${buildbot_worker_${profile}_basedir:-${buildbot_worker_basedir}}/twistd.pid"
		else
			echo "$0: extra argument ignored"
		fi
	# A specific profile is not in the command
	else
		# Check if any profiles are defined
		if [ -n "$1" -a -n "${buildbot_worker_profiles}" ]; then
			# Loop through them
			for profile in ${buildbot_worker_profiles}; do
				eval _enable="\${buildbot_worker_${profile}_enable}"
				case "${_enable:-${buildbot_worker_enable}}" in
				[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
					continue
					;;
				[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
					;;
				*)
					if test -z "$_enable"; then
						_var=buildbot_worker_enable
					else
						_var=buildbot_worker_"${profile}"_enable
					fi
					warn "Bad value" \
					    "'${_enable:-${buildbot_worker_enable}}'" \
					    "for ${_var}. " \
					    "Profile ${profile} skipped."
					continue
					;;
				esac
				echo "===> ${name} profile: ${profile}"
				if $0 $1 ${profile}; then
					success="${profile} ${success:-}"
				else
					failed="${profile} (${retcode}) ${failed:-}"
				fi
			done
			# Exit so that non-profile rc.d is not started when there are profiles
			exit 0
		fi
	fi

# run_rc_command would send ${name}_flags as parameters to $command (daemon)
# This ensures they are actually passed to fcgiwrap instead.
actual_buildbot_worker_flags="${buildbot_worker_flags}"
buildbot_worker_flags=""
command_args="--uid=${buildbot_worker_uid} --gid=${buildbot_worker_gid} --pidfile=${pidfile} --python=${buildbot_worker_basedir}/buildbot.tac ${actual_buildbot_worker_flags}"
run_rc_command "$1"

misc

Ask which library provides a file

pkg which /usr/local/include/X11/Xlib.h

pkg usage and upgrade

pkg upgrade
freebsd-update fetch
freebsd-update install

OpenBSD

Setting up the buildbot

The system already provides two packages: buildbot and buildbot-worker.

$ pkg_info -Q buildbot
buildbot-2.4.1
buildbot-worker-2.4.1
...
$ sudo pkg_add buildbot-worker

(To uninstall a package: pkg_delete buildbot-worker)

sudo mkdir -p /home/buildbot/workers/texlive
sudo chown -R _buildslave:_buildslave /home/buildbot
cd /home/buildbot/workers/texlive
sudo -u _buildslave buildbot-worker create-worker -r . build.contextgarden.net:9989 workernamename pass
# see /etc/rc.d/buildbot_worker
rcctl enable buildbot_worker
rcctl start buildbot_worker

Uncomment use-commit-times = yes from

/var/buildslave/.subversion/config

Packages

various:

pkg_add sudo vim
visudo
pkg_add wget git subversion rsync cmake ninja gmake gtar buildbot-worker bash

Updates

# update
pkg_add -uvi
# apply security patches
syspatch

Upgrade to a newer version

https://www.openbsd.org/faq/upgrade71.html

sysupgrade
sysmerge
pkg_add -u

Change hostname

# edit
vi /etc/myname
# to make the changes take effect without rebooting
hostname openbsd-amd64-6.9

NetBSD

Setting up the packages:

export PATH="/usr/pkg/sbin:/usr/pkg/bin:$PATH"
export PKG_PATH="http://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/9.3/All/"
pkg_add -v pkgin

Finding a package:

pkgin search buildbot

Install dependencies for our builds:

pkgin install mozilla-rootcerts-openssl clang cmake git subversion ninja-build py312-buildbot-worker

Upgrade packages:

pkgin upgrade

macOS

Install the buildbot worker via MacPorts:

sudo port install buildbot-worker
mkdir -p /opt/buildbot/workers/texlive
sudo chown -R buildbot:buildbot /opt/buildbot
cd /opt/buildbot/workers/texlive
sudo -u buildbot buildbot-worker create-worker -r . build.contextgarden.net:9989 slavename pass

Read the installation notes:

$ port notes buildbot-worker
buildbot-worker has the following notes:
  An example launchd plist file is available in /opt/local/share/buildbot-worker. After you have created your build slave, copy the plist to /Library/LaunchDaemons (as root) and edit the
  WorkingDirectory field as needed. Then instruct launchd to run it with:
  
  sudo launchctl load -w /Library/LaunchDaemons/your.plist.name

and then:

$ cat /Library/LaunchDaemons/org.macports.buildworker.texlive.plist 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Disabled</key>
	<true/>
	<key>EnvironmentVariables</key>
	<dict>
		<key>PATH</key>
		<string>/opt/local/bin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin</string>
	</dict>
	<key>Label</key>
	<string>org.macports.buildworker.texlive</string>
	<key>ProgramArguments</key>
	<array>
		<string>/opt/local/bin/twistd-3.10</string>
		<string>--nodaemon</string>
		<string>--no_save</string>
		<string>--python=buildbot.tac</string>
		<string>--pidfile=twistd.pid</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>UserName</key>
	<string>buildbot</string>
	<key>WorkingDirectory</key>
	<string>/opt/buildbot/workers/texlive</string>
	<key>KeepAlive</key>
	<dict>
		<key>SuccessfulExit</key>
		<false/>
	</dict>
</dict>
</plist>
sudo launchctl load -w /Library/LaunchDaemons/org.macports.buildworker.texlive.plist
sudo launchctl start org.macports.buildworker.texlive

If troubleshooting is needed, use

tail -f /var/log/system.log

to show the logs.

MSYS2

pacman -S base-devel --needed
# select diffutils