# $Id: setup-routines.sh 93115 2022-01-01 11:31:46Z vboxsync $
## @file
# VirtualBox Validation Kit - TestBoxScript Service Setup on Mac OS X (darwin).
#
#
# Copyright (C) 2006-2022 Oracle Corporation
#
# This file is part of VirtualBox Open Source Edition (OSE), as
# available from http://www.virtualbox.org. This file is free software;
# you can redistribute it and/or modify it under the terms of the GNU
# General Public License (GPL) as published by the Free Software
# Foundation, in version 2 as it comes in the "COPYING" file of the
# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
#
# The contents of this file may alternatively be used under the terms
# of the Common Development and Distribution License Version 1.0
# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
# VirtualBox OSE distribution, in which case the provisions of the
# CDDL are applicable instead of those of the GPL.
#
# You may elect to license modified versions of this file under the
# terms and conditions of either the GPL or the CDDL or both.
#
MY_CONFIG_FILE=/Library/LaunchDaemons/org.virtualbox.testboxscript.plist
##
# Loads config values from the current installation.
#
os_load_config() {
if [ -r "${MY_CONFIG_FILE}" ]; then
# User.
MY_TMP=`/usr/bin/tr '\n' ' ' < "${MY_CONFIG_FILE}" \
| /usr/bin/sed \
-e 's/ */ /g' \
-e 's|\([[:alnum:]]*>\)<|\1 <|g' \
-e 's|^.*UserName *\([^<>]*\).*$|\1|'`;
if [ -n "${MY_TMP}" ]; then
TESTBOXSCRIPT_USER="${MY_TMP}";
fi
# Arguments.
XMLARGS=`/usr/bin/tr '\n' ' ' < "${MY_CONFIG_FILE}" \
| /usr/bin/sed \
-e 's/ */ /g' \
-e 's|\([[:alnum:]]*>\)<|\1 <|g' \
-e 's|^.*ProgramArguments * *\(.*\).*$|\1|'`;
eval common_testboxscript_args_to_config `echo "${XMLARGS}" | sed -e "s//'/g" -e "s/<\/string>/'/g" `;
fi
}
##
# Adds an argument ($1) to MY_ARGV (XML plist format).
#
os_add_args() {
while [ $# -gt 0 ];
do
case "$1" in
*\<* | *\>* | *\&*)
MY_TMP='`echo "$1" | sed -e 's/&/&/g' -e 's/</g' -e 's/>/>/g'`';
MY_ARGV="${MY_ARGV} ${MY_TMP}";
;;
*)
MY_ARGV="${MY_ARGV} $1";
;;
esac
shift;
done
MY_ARGV="${MY_ARGV}"'
';
return 0;
}
os_install_service() {
# Calc the command line.
MY_ARGV=""
common_compile_testboxscript_command_line
# Note! It's not possible to use screen 4.0.3 with the launchd due to buggy
# "setsid off" handling (and possible other things).
cat > "${MY_CONFIG_FILE}" <
Label org.virtualbox.testboxscript
UserName ${TESTBOXSCRIPT_USER}
WorkingDirectory ${TESTBOXSCRIPT_DIR}
Enabled
RunAtLoad
KeepAlive
StandardInPath /dev/null
StandardOutPath /dev/null
StandardErrorPath /dev/null
ProgramArguments
${MY_ARGV}
EOF
return 0;
}
os_enable_service() {
launchctl load -w "${MY_CONFIG_FILE}"
return 0;
}
os_disable_service() {
if [ -r "${MY_CONFIG_FILE}" ]; then
launchctl unload "${MY_CONFIG_FILE}"
fi
return 0;
}
os_add_user() {
NEWUID=$(expr `dscl . -readall /Users UniqueID | sed -ne 's/UniqueID: *\([0123456789]*\) *$/\1/p' | sort -n | tail -1 ` + 1)
if [ -z "$NEWUID" -o "${NEWUID}" -lt 502 ]; then
NEWUID=502;
fi
dscl . -create "/Users/${TESTBOXSCRIPT_USER}" UserShell /bin/bash
dscl . -create "/Users/${TESTBOXSCRIPT_USER}" RealName "VBox Test User"
dscl . -create "/Users/${TESTBOXSCRIPT_USER}" UniqueID ${NEWUID}
dscl . -create "/Users/${TESTBOXSCRIPT_USER}" PrimaryGroupID 80
dscl . -create "/Users/${TESTBOXSCRIPT_USER}" NFSHomeDirectory "/Users/vbox"
dscl . -passwd "/Users/${TESTBOXSCRIPT_USER}" "password"
mkdir -p "/Users/${TESTBOXSCRIPT_USER}"
}
os_final_message() {
cat <