Projects
Kolab:Winterfell
obs-worker
obsworker.sysvinit
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File obsworker.sysvinit of Package obs-worker
#! /bin/sh # Copyright (c) 2007-2011, SUSE Inc. # # Author: adrian@suse.de # # /etc/init.d/obsworker # and its symbolic link # /usr/sbin/rcobsworker # ### BEGIN INIT INFO # Provides: obsworker # Required-Start: $time $network $syslog # Required-Stop: $time $network $syslog # Should-Start: $remote_fs obsstoragesetup obssrcserver obsrepserver xendomains # Should-Stop: $none # Default-Start: 3 5 # Default-Stop: 0 1 2 4 6 # Description: Open Build Service worker ### END INIT INFO . /etc/rc.d/init.d/functions function rc_reset () { _rc_status=0 _rc_status_all=0 rc_check return 0 } function rc_check () { _rc_status_ret=$? test $_rc_status_ret -eq 0 || _rc_status=$_rc_status_ret test $_rc_status -eq 0 || _rc_status_all=$_rc_status return $_rc_check_ret } function rc_exit () { exit $_rc_status_all } if test -e /etc/sysconfig/proxy; then . /etc/sysconfig/proxy fi if test -e /etc/sysconfig/obs-server; then # optional on workers . /etc/sysconfig/obs-server fi # This file may still exist from OBS 2.1 and before. if test -e /etc/sysconfig/obs-worker; then . /etc/sysconfig/obs-worker fi # Determine the base and follow a runlevel link name. base=${0##*/} link=${base#*[SK][0-9][0-9]} # Preconfigured by obsstoragesetup runlevel setup script if [ -f /etc/buildhost.config ];then . /etc/buildhost.config fi if [ -z "$OBS_WORKER_DIRECTORY" ]; then OBS_WORKER_DIRECTORY="/var/cache/obs/worker" fi mkdir -p "$OBS_WORKER_DIRECTORY" if [ -z "$OBS_RUN_DIR" ]; then OBS_RUN_DIR="/var/run/obs" fi if [ -z "$OBS_LOG_DIR" ]; then OBS_LOG_DIR="/var/log/obs" fi if [ -z "$OBS_REPO_SERVERS" ]; then OBS_REPO_SERVERS="localhost:5252" fi if [ -n "$OBS_WORKER_TEST_MODE" ]; then OBS_TEST="--test" fi if [ -n "$OBS_WORKER_JOBS" ]; then OBS_JOBS="--jobs $OBS_WORKER_JOBS" fi if [ -n "$OBS_WORKER_NICE_LEVEL" ]; then OBS_NICE=$OBS_WORKER_NICE_LEVEL else OBS_NICE=18 fi REPO_PARAM= for i in $OBS_REPO_SERVERS; do REPO_PARAM="$REPO_PARAM --reposerver http://$i" WORKER_CODE="http://$i" done obsrundir="$OBS_RUN_DIR" workerdir="$obsrundir"/worker workerbootdir="$workerdir"/boot screenrc="$workerdir"/boot/screenrc OBS_WORKER_OPT="" if [ -n "$OBS_CACHE_SIZE" -a -n "$OBS_CACHE_DIR" ]; then OBS_WORKER_OPT="--cachedir $OBS_CACHE_DIR" mkdir -p $OBS_CACHE_DIR OBS_WORKER_OPT="$OBS_WORKER_OPT --cachesize $OBS_CACHE_SIZE" fi if [ -n "$OBS_VM_KERNEL" -a "$OBS_VM_KERNEL" != "none" ] ; then if [ -n "$OBS_VM_INITRD" -a "$OBS_VM_INITRD" != "none" ] ; then OBS_WORKER_OPT="$OBS_WORKER_OPT --vm-kernel $OBS_VM_KERNEL --vm-initrd $OBS_VM_INITRD" fi fi if [ -n "$OBS_WORKER_LOCALKIWI_DIRECTORY" ]; then OBS_WORKER_OPT="$OBS_WORKER_OPT --localkiwi $OBS_WORKER_LOCALKIWI_DIRECTORY --arch local" fi [ -z "$OBS_INSTANCE_MEMORY" ] && OBS_INSTANCE_MEMORY=256 vmopt= if [ -n "$OBS_VM_TYPE" -a "$OBS_VM_TYPE" != "auto" ] ; then if [ "$OBS_VM_TYPE" != "none" ] ; then vmopt="--$OBS_VM_TYPE" fi # At least on our ppc64le system we don't want this even though /dev/kvm exists # elif [ -e /dev/kvm ] ; then # vmopt=--kvm # OBS_VM_TYPE="kvm" elif [ -e /sys/hypervisor/type ] && grep -q xen /sys/hypervisor/type; then vmopt=--xen OBS_VM_TYPE="xen" fi if [ "$OBS_VM_TYPE" = "xen" -o "$OBS_VM_TYPE" = "kvm" ]; then # we start up in VM mode, check for the worker disk options if [ -n "$OBS_VM_DISK_AUTOSETUP_ROOT_FILESIZE" -a -n "$OBS_VM_DISK_AUTOSETUP_SWAP_FILESIZE" ]; then VMDISK_ROOT_FILESIZE="--vmdisk-rootsize ${OBS_VM_DISK_AUTOSETUP_ROOT_FILESIZE}" VMDISK_SWAP_FILESIZE="--vmdisk-swapsize ${OBS_VM_DISK_AUTOSETUP_SWAP_FILESIZE}" if [ -n "$OBS_VM_DISK_AUTOSETUP_FILESYSTEM" ]; then VMDISK_FILESYSTEM="--vmdisk-filesystem ${OBS_VM_DISK_AUTOSETUP_FILESYSTEM}" fi if [ -n "$OBS_VM_DISK_AUTOSETUP_MOUNT_OPTIONS" ]; then VMDISK_MOUNT_OPTIONS="--vmdisk-mount-options ${OBS_VM_DISK_AUTOSETUP_MOUNT_OPTIONS}" fi fi fi rc_reset case "$1" in start) # reset screenrc mkdir -p "$obsrundir" chown obsrun:obsrun "$obsrundir" rm -rf "$workerdir" mkdir -p "$workerbootdir" # echo "zombie on" > $screenrc echo "caption always" >> $screenrc if [ 0"$OBS_WORKER_INSTANCES" -gt 0 ]; then NUM="$OBS_WORKER_INSTANCES" else # start one build backend per CPU NUM=`ls -d /sys/devices/system/cpu/cpu[0-9]* | wc -l` fi # print some config data echo "Run $NUM obsworker using $OBS_WORKER_DIRECTORY" echo -n "Type of obsworker is " if [ "--kvm" == "$vmopt" ]; then echo "KVM virtual machine" elif [ "--xen" == "$vmopt" ]; then echo "XEN virtual machine" else echo "chroot" fi # find SLP announced OBS servers if [ "$OBS_USE_SLP" == "yes" ]; then for i in `slptool findsrvs service:obs.repo_server | sed -n 's/service:obs.repo_server:\([^,]*\),.*/\1/p'`; do [ "${i#http://localhost}" != "$i" ] && continue [ "${i#http://127.}" != "$i" ] && continue REPO_PARAM="$REPO_PARAM --reposerver $i" # any of them should be okay WORKER_CODE="$i" done fi # fetch worker sources from server echo "Fetching initial worker code from $WORKER_CODE" mkdir -p "$workerbootdir" pushd "$workerbootdir" > /dev/null curl -s "$WORKER_CODE"/getworkercode | cpio --quiet --extract ln -s . XML chmod 755 bs_worker popd > /dev/null OBS_WORKER_OPT1="$OBS_WORKER_OPT" I=0 while test "$NUM" -gt "$I"; do if [ 0"$OBS_WORKER_PORTBASE" -gt 0 ]; then port="--port $((OBS_WORKER_PORTBASE + I))" else port="" fi I=$(( $I + 1 )) title="$HOSTNAME/$I" R=$OBS_WORKER_DIRECTORY/root_$I # prepare obsworker startup in screen... TMPFS= if [ -n "$vmopt" -a "$OBS_VM_TYPE" = "xen" -o "$OBS_VM_TYPE" = "kvm" ]; then mkdir -p $R DEVICE="$OBS_WORKER_DIRECTORY/root_$I/root" SWAP="$OBS_WORKER_DIRECTORY/root_$I/swap" if [ -n "$OBS_VM_DISK_AUTOSETUP_ROOT_FILESIZE" -a -n "$OBS_VM_DISK_AUTOSETUP_SWAP_FILESIZE" ]; then OBS_WORKER_OPT="$OBS_WORKER_OPT1 $VMDISK_AUTOSETUP $VMDISK_ROOT_FILESIZE $VMDISK_SWAP_FILESIZE $VMDISK_FILESYSTEM $VMDISK_MOUNT_OPTIONS" elif [ ! -e "$DEVICE" -o ! -e "$SWAP" ]; then echo "ERROR: worker is configured to use a VM, but one or all of the following devices/files do not exist: $DEVICE, $SWAP" exit 1 fi if [ -n "$OBS_VM_USE_TMPFS" ]; then TMPFS="--tmpfs" fi DEVICE="--device $DEVICE" SWAP="--swap $SWAP" MEMORY="--vm-memory $OBS_INSTANCE_MEMORY" else mkdir -p $R DEVICE= SWAP= MEMORY= fi echo "screen -t $title nice -n $OBS_NICE ./bs_worker $vmopt $port --root $R" \ "--statedir $workerdir/$I --id $HOSTNAME/$I $REPO_PARAM" \ "$OBS_JOBS $OBS_TEST $OBS_WORKER_OPT $TMPFS $DEVICE $SWAP $MEMORY" \ >> $screenrc mkdir -p $workerdir/$I done pushd "$workerbootdir" > /dev/null screen -m -d -c $screenrc popd > /dev/null ;; stop) echo "Shutting down obsworker" for I in "$workerdir"/*; do test -d "$I" || continue test -e "$I/state" || continue pushd "$workerbootdir" > /dev/null ./bs_worker --statedir "$I" --exit & popd > /dev/null done wait killall bs_worker 2>/dev/null sleep 2 killall -s 9 bs_worker 2>/dev/null status bs_worker ;; restart) ## If first returns OK call the second, if first or ## second command fails, set echo return value. $0 stop $0 start status bs_worker ;; try-restart) $0 status if test $? = 0; then $0 restart else rc_reset # Not running is not a failure. fi # Remember status and be quiet status bs_worker ;; reload) ;; status) echo "Checking for obsworker: " status bs_worker ;; *) echo "Usage: $0 {start|stop|status|try-restart|restart|reload}" exit 1 ;; esac rc_exit
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.