VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/testboxscript/setup.sh@ 59337

Last change on this file since 59337 was 56478, checked in by vboxsync, 9 years ago

testboxscript/setup.sh: test for core dumps on Ubuntu

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 12.7 KB
Line 
1#!/usr/bin/env bash
2# $Id: setup.sh 56478 2015-06-17 14:19:57Z vboxsync $
3## @file
4# VirtualBox Validation Kit - TestBoxScript Service Setup on Unixy platforms.
5#
6
7#
8# Copyright (C) 2006-2015 Oracle Corporation
9#
10# This file is part of VirtualBox Open Source Edition (OSE), as
11# available from http://www.virtualbox.org. This file is free software;
12# you can redistribute it and/or modify it under the terms of the GNU
13# General Public License (GPL) as published by the Free Software
14# Foundation, in version 2 as it comes in the "COPYING" file of the
15# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17#
18# The contents of this file may alternatively be used under the terms
19# of the Common Development and Distribution License Version 1.0
20# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
21# VirtualBox OSE distribution, in which case the provisions of the
22# CDDL are applicable instead of those of the GPL.
23#
24# You may elect to license modified versions of this file under the
25# terms and conditions of either the GPL or the CDDL or both.
26#
27
28
29#
30# !WARNING! Running the whole script in exit-on-failure mode.
31#
32# Note! Looking at the ash sources, it seems flags will be saved and restored
33# when calling functions. That's comforting.
34#
35set -e
36#set -x # debug only, disable!
37
38##
39# Get the host OS name, returning it in RETVAL.
40#
41get_host_os() {
42 RETVAL=`uname`
43 case "$RETVAL" in
44 Darwin|darwin)
45 RETVAL=darwin
46 ;;
47
48 DragonFly)
49 RETVAL=dragonfly
50 ;;
51
52 freebsd|FreeBSD|FREEBSD)
53 RETVAL=freebsd
54 ;;
55
56 Haiku)
57 RETVAL=haiku
58 ;;
59
60 linux|Linux|GNU/Linux|LINUX)
61 RETVAL=linux
62 ;;
63
64 netbsd|NetBSD|NETBSD)
65 RETVAL=netbsd
66 ;;
67
68 openbsd|OpenBSD|OPENBSD)
69 RETVAL=openbsd
70 ;;
71
72 os2|OS/2|OS2)
73 RETVAL=os2
74 ;;
75
76 SunOS)
77 RETVAL=solaris
78 ;;
79
80 WindowsNT|CYGWIN_NT-*)
81 RETVAL=win
82 ;;
83
84 *)
85 echo "$0: unknown os $RETVAL" 1>&2
86 exit 1
87 ;;
88 esac
89 return 0;
90}
91
92##
93# Get the host OS/CPU arch, returning it in RETVAL.
94#
95get_host_arch() {
96 if [ "${HOST_OS}" = "solaris" ]; then
97 RETVAL=`isainfo | cut -f 1 -d ' '`
98 else
99 RETVAL=`uname -m`
100 fi
101 case "${RETVAL}" in
102 amd64|AMD64|x86_64|k8|k8l|k9|k10)
103 RETVAL='amd64'
104 ;;
105 x86|i86pc|ia32|i[3456789]86|BePC)
106 RETVAL='x86'
107 ;;
108 sparc32|sparc|sparcv8|sparcv7|sparcv8e)
109 RETVAL='sparc32'
110 ;;
111 sparc64|sparcv9)
112 RETVAL='sparc64'
113 ;;
114 s390)
115 RETVAL='s390'
116 ;;
117 s390x)
118 RETVAL='s390x'
119 ;;
120 ppc32|ppc|powerpc)
121 RETVAL='ppc32'
122 ;;
123 ppc64|powerpc64)
124 RETVAL='ppc64'
125 ;;
126 mips32|mips)
127 RETVAL='mips32'
128 ;;
129 mips64)
130 RETVAL='mips64'
131 ;;
132 ia64)
133 RETVAL='ia64'
134 ;;
135 hppa32|parisc32|parisc)
136 RETVAL='hppa32'
137 ;;
138 hppa64|parisc64)
139 RETVAL='hppa64'
140 ;;
141 arm|armv4l|armv5tel|armv5tejl)
142 RETVAL='arm'
143 ;;
144 alpha)
145 RETVAL='alpha'
146 ;;
147
148 *)
149 echo "$0: unknown cpu/arch - $RETVAL" 1>&$2
150 exit 1
151 ;;
152 esac
153 return 0;
154}
155
156
157##
158# Loads config values from the current installation.
159#
160os_load_config() {
161 echo "os_load_config is not implemented" 2>&1
162 exit 1
163}
164
165##
166# Installs, configures and starts the service.
167#
168os_install_service() {
169 echo "os_install_service is not implemented" 2>&1
170 exit 1
171}
172
173##
174# Enables (starts) the service.
175os_enable_service() {
176 echo "os_enable_service is not implemented" 2>&1
177 return 0;
178}
179
180##
181# Disables (stops) the service.
182os_disable_service() {
183 echo "os_disable_service is not implemented" 2>&1
184 return 0;
185}
186
187##
188# Adds the testbox user
189#
190os_add_user() {
191 echo "os_add_user is not implemented" 2>&1
192 exit 1
193}
194
195##
196# Prints a final message after successful script execution.
197# This can contain additional instructions which needs to be carried out
198# manually or similar.
199os_final_message() {
200 return 0;
201}
202
203##
204# Checks the installation, verifying that files are there and scripts work fine.
205#
206check_testboxscript_install() {
207
208 # Presence
209 test -r "${TESTBOXSCRIPT_DIR}/testboxscript/testboxscript.py"
210 test -r "${TESTBOXSCRIPT_DIR}/testboxscript/testboxscript_real.py"
211 test -r "${TESTBOXSCRIPT_DIR}/testboxscript/linux/testboxscript-service.sh" -o "${HOST_OS}" != "linux"
212 test -r "${TESTBOXSCRIPT_DIR}/${HOST_OS}/${HOST_ARCH}/TestBoxHelper"
213
214 # Zip file may be missing the x bits, so set them.
215 chmod a+x \
216 "${TESTBOXSCRIPT_DIR}/testboxscript/testboxscript.py" \
217 "${TESTBOXSCRIPT_DIR}/testboxscript/testboxscript_real.py" \
218 "${TESTBOXSCRIPT_DIR}/${HOST_OS}/${HOST_ARCH}/TestBoxHelper"
219
220
221 # Check that the scripts work.
222 set +e
223 "${TESTBOXSCRIPT_PYTHON}" "${TESTBOXSCRIPT_DIR}/testboxscript/testboxscript.py" --version > /dev/null
224 if [ $? -ne 2 ]; then
225 echo "$0: error: testboxscript.py didn't respons correctly to the --version option."
226 exit 1;
227 fi
228
229 "${TESTBOXSCRIPT_PYTHON}" "${TESTBOXSCRIPT_DIR}/testboxscript/testboxscript_real.py" --version > /dev/null
230 if [ $? -ne 2 ]; then
231 echo "$0: error: testboxscript.py didn't respons correctly to the --version option."
232 exit 1;
233 fi
234 set -e
235
236 return 0;
237}
238
239##
240# Check that sudo is installed.
241#
242check_for_sudo() {
243 which sudo
244 test -f "${MY_ETC_SUDOERS}"
245}
246
247##
248# Check that sudo is installed.
249#
250check_for_cifs() {
251 return 0;
252}
253
254##
255# Checks if the testboxscript_user exists.
256does_testboxscript_user_exist() {
257 id "${TESTBOXSCRIPT_USER}" > /dev/null 2>&1
258 return $?;
259}
260
261##
262# hushes up the root login.
263maybe_hush_up_root_login() {
264 # This is a solaris hook.
265 return 0;
266}
267
268##
269# Adds the testbox user and make sure it has unrestricted sudo access.
270maybe_add_testboxscript_user() {
271 if ! does_testboxscript_user_exist; then
272 os_add_user "${TESTBOXSCRIPT_USER}"
273 fi
274
275 SUDOERS_LINE="${TESTBOXSCRIPT_USER} ALL=(ALL) NOPASSWD: ALL"
276 if ! ${MY_FGREP} -q "${SUDOERS_LINE}" ${MY_ETC_SUDOERS}; then
277 echo "# begin tinderboxscript setup.sh" >> ${MY_ETC_SUDOERS}
278 echo "${SUDOERS_LINE}" >> ${MY_ETC_SUDOERS}
279 echo "# end tinderboxscript setup.sh" >> ${MY_ETC_SUDOERS}
280 fi
281
282 maybe_hush_up_root_login;
283}
284
285
286##
287# Test the user.
288#
289test_user() {
290 su - "${TESTBOXSCRIPT_USER}" -c "true"
291
292 # sudo 1.7.0 adds the -n option.
293 MY_TMP="`sudo -V 2>&1 | head -1 | sed -e 's/^.*version 1\.[6543210]\..*$/old/'`"
294 if [ "${MY_TMP}" != "old" ]; then
295 echo "Warning: If sudo starts complaining about not having a tty,"
296 echo " disable the requiretty option in /etc/sudoers."
297 su - "${TESTBOXSCRIPT_USER}" -c "sudo -n -i true"
298 else
299 echo "Warning: You've got an old sudo installed. If it starts"
300 echo " complaining about not having a tty, disable the"
301 echo " requiretty option in /etc/sudoers."
302 su - "${TESTBOXSCRIPT_USER}" -c "sudo true"
303 fi
304}
305
306##
307# Test if core dumps are enabled. See https://wiki.ubuntu.com/Apport!
308#
309test_coredumps() {
310 if test "`lsb_release -is`" = "Ubuntu"; then
311 if grep -q "apport" /proc/sys/kernel/core_pattern; then
312 if grep -q "#.*problem_types" /etc/apport/crashdb.conf; then
313 echo "It looks like core dumps are properly configured, good!"
314 else
315 echo "Warning: Core dumps will be not always generated!"
316 fi
317 else
318 echo "Warning: Apport not installed! This package is required for core dump handling!"
319 fi
320 fi
321}
322
323
324##
325# Grants the user write access to the testboxscript files so it can perform
326# upgrades.
327#
328grant_user_testboxscript_write_access() {
329 chown -R "${TESTBOXSCRIPT_USER}" "${TESTBOXSCRIPT_DIR}"
330}
331
332##
333# Check the proxy setup.
334#
335check_proxy_config() {
336 if [ -n "${http_proxy}" -o -n "${ftp_proxy}" ]; then
337 if [ -z "${no_proxy}" ]; then
338 echo "Error: Env.vars. http_proxy/ftp_proxy without no_proxy is going to break upgrade among other things."
339 exit 1
340 fi
341 fi
342}
343
344
345#
346#
347# main()
348#
349#
350
351
352#
353# Get our bearings and include the host specific code.
354#
355MY_ETC_SUDOERS="/etc/sudoers"
356MY_FGREP=fgrep
357DIR=`dirname "$0"`
358DIR=`cd "${DIR}"; /bin/pwd`
359
360get_host_os
361HOST_OS=${RETVAL}
362get_host_arch
363HOST_ARCH=${RETVAL}
364
365. "${DIR}/${HOST_OS}/setup-routines.sh"
366
367
368#
369# Config.
370#
371TESTBOXSCRIPT_PYTHON=""
372TESTBOXSCRIPT_USER=""
373TESTBOXSCRIPT_HWVIRT=""
374TESTBOXSCRIPT_IOMMU=""
375TESTBOXSCRIPT_NESTED_PAGING=""
376TESTBOXSCRIPT_SYSTEM_UUID=""
377TESTBOXSCRIPT_PATH_TESTRSRC=""
378TESTBOXSCRIPT_TEST_MANAGER=""
379TESTBOXSCRIPT_SCRATCH_ROOT=""
380TESTBOXSCRIPT_BUILDS_PATH=""
381TESTBOXSCRIPT_BUILDS_TYPE="cifs"
382TESTBOXSCRIPT_BUILDS_NAME="solserv.de.oracle.com"
383TESTBOXSCRIPT_BUILDS_SHARE="builds"
384TESTBOXSCRIPT_BUILDS_USER="guestr"
385TESTBOXSCRIPT_BUILDS_PASSWD="guestr"
386TESTBOXSCRIPT_TESTRSRC_PATH=""
387TESTBOXSCRIPT_TESTRSRC_TYPE="cifs"
388TESTBOXSCRIPT_TESTRSRC_NAME="solserv.de.oracle.com"
389TESTBOXSCRIPT_TESTRSRC_SHARE="testrsrc"
390TESTBOXSCRIPT_TESTRSRC_USER="guestr"
391TESTBOXSCRIPT_TESTRSRC_PASSWD="guestr"
392declare -a TESTBOXSCRIPT_ENVVARS
393
394# Load old config values (platform specific).
395os_load_config
396
397# Set defaults.
398if [ -z "${TESTBOXSCRIPT_USER}" ]; then
399 TESTBOXSCRIPT_USER=vbox;
400fi;
401TESTBOXSCRIPT_DIR=`dirname "${DIR}"`
402
403
404#
405# Parse arguments.
406#
407while test $# -gt 0;
408do
409 case "$1" in
410 -h|--help)
411 echo "TestBox Script setup utility."
412 echo "";
413 echo "Usage: setup.sh [options]";
414 echo "";
415 echo "Options:";
416 echo " Later...";
417 exit 0;
418 ;;
419 -V|--version)
420 echo '$Revision: 56478 $'
421 exit 0;
422 ;;
423
424 --python) TESTBOXSCRIPT_PYTHON="$2"; shift;;
425 --test-manager) TESTBOXSCRIPT_TEST_MANAGER="$2"; shift;;
426 --scratch-root) TESTBOXSCRIPT_SCRATCH_ROOT="$2"; shift;;
427 --system-uuid) TESTBOXSCRIPT_SYSTEM_UUID="$2"; shift;;
428 --hwvirt) TESTBOXSCRIPT_HWVIRT="yes";;
429 --no-hwvirt) TESTBOXSCRIPT_HWVIRT="no";;
430 --nested-paging) TESTBOXSCRIPT_NESTED_PAGING="yes";;
431 --no-nested-paging) TESTBOXSCRIPT_NESTED_PAGING="no";;
432 --io-mmu) TESTBOXSCRIPT_IOMMU="yes";;
433 --no-io-mmu) TESTBOXSCRIPT_IOMMU="no";;
434 --builds-path) TESTBOXSCRIPT_BUILDS_PATH="$2"; shift;;
435 --builds-server-type) TESTBOXSCRIPT_BUILDS_TYPE="$2"; shift;;
436 --builds-server-name) TESTBOXSCRIPT_BUILDS_NAME="$2"; shift;;
437 --builds-server-share) TESTBOXSCRIPT_BUILDS_SHARE="$2"; shift;;
438 --builds-server-user) TESTBOXSCRIPT_BUILDS_USER="$2"; shift;;
439 --builds-server-passwd) TESTBOXSCRIPT_BUILDS_PASSWD="$2"; shift;;
440 --testrsrc-path) TESTBOXSCRIPT_TESTRSRC_PATH="$2"; shift;;
441 --testrsrc-server-type) TESTBOXSCRIPT_TESTRSRC_TYPE="$2"; shift;;
442 --testrsrc-server-name) TESTBOXSCRIPT_TESTRSRC_NAME="$2"; shift;;
443 --testrsrc-server-share) TESTBOXSCRIPT_TESTRSRC_SHARE="$2"; shift;;
444 --testrsrc-server-user) TESTBOXSCRIPT_TESTRSRC_USER="$2"; shift;;
445 --testrsrc-server-passwd) TESTBOXSCRIPT_TESTRSRC_PASSWD="$2"; shift;;
446 *)
447 echo 'Syntax error: Unknown option:' "$1" >&2;
448 exit 1;
449 ;;
450 esac
451 shift;
452done
453
454
455#
456# Find usable python if not already specified.
457#
458if [ -z "${TESTBOXSCRIPT_PYTHON}" ]; then
459 set +e
460 MY_PYTHON_VER_TEST="\
461import sys;\
462x = sys.version_info[0] == 2 and (sys.version_info[1] >= 6 or (sys.version_info[1] == 5 and sys.version_info[2] >= 1));\
463sys.exit(not x);\
464";
465 for python in python2.7 python2.6 python2.5 python;
466 do
467 python=`which ${python} 2> /dev/null`
468 if [ -n "${python}" -a -x "${python}" ]; then
469 if ${python} -c "${MY_PYTHON_VER_TEST}"; then
470 TESTBOXSCRIPT_PYTHON="${python}";
471 break;
472 fi
473 fi
474 done
475 set -e
476 test -n "${TESTBOXSCRIPT_PYTHON}";
477fi
478
479
480#
481# Do the job
482#
483set -e
484check_testboxscript_install;
485check_for_sudo;
486check_for_cifs;
487check_proxy_config;
488
489maybe_add_testboxscript_user;
490test_user;
491test_coredumps;
492
493grant_user_testboxscript_write_access;
494
495os_disable_service;
496os_install_service;
497os_enable_service;
498
499#
500# That's all folks.
501#
502echo "done"
503os_final_message;
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette