VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/testboxscript/solaris/setup-routines.sh@ 75495

Last change on this file since 75495 was 69224, checked in by vboxsync, 7 years ago

testboxscript: scm cleanups

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 10.8 KB
Line 
1# $Id: setup-routines.sh 69224 2017-10-24 15:12:00Z vboxsync $
2## @file
3# VirtualBox Validation Kit - TestBoxScript Service Setup on Solaris.
4#
5
6#
7# Copyright (C) 2006-2017 Oracle Corporation
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17# The contents of this file may alternatively be used under the terms
18# of the Common Development and Distribution License Version 1.0
19# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20# VirtualBox OSE distribution, in which case the provisions of the
21# CDDL are applicable instead of those of the GPL.
22#
23# You may elect to license modified versions of this file under the
24# terms and conditions of either the GPL or the CDDL or both.
25#
26
27#
28# Detect solaris version.
29#
30MY_SOLARIS_VER=`uname -r`
31case "${MY_SOLARIS_VER}" in
32 5.10) MY_SOLARIS_VER=10;;
33 5.11) MY_SOLARIS_VER=11;;
34 5.12) MY_SOLARIS_VER=12;;
35 *)
36 echo "Your solaris version (${MY_SOLARIS_VER}) is not supported." >&2
37 exit 1;;
38esac
39
40#
41# Overriding setup.sh bits.
42#
43MY_FGREP="/usr/xpg4/bin/fgrep" # The other one does grok -q.
44if [ ! -f "${MY_ETC_SUDOERS}" ]; then # sudo isn't standard on S10.
45 if [ -f "/opt/csw/etc/sudoers" ]; then
46 MY_ETC_SUDOERS=/opt/csw/etc/sudoers
47 fi
48 if [ -f "/etc/opt/csw/sudoers" ]; then
49 MY_ETC_SUDOERS=/etc/opt/csw/sudoers
50 fi
51fi
52
53#
54# Solaris variables.
55#
56MY_SVC_TMP="/tmp/testboxscript.xml"
57MY_SVC_FMRI="svc:/system/virtualbox/testboxscript"
58MY_SVCCFG="/usr/sbin/svccfg"
59MY_SVCADM="/usr/sbin/svcadm"
60MY_TR="/usr/bin/tr"
61MY_TAB=`printf "\t"`
62if test "${MY_SOLARIS_VER}" -lt 11; then ## No gsed on S10?? ARG!
63 MY_SED="/usr/xpg4/bin/sed"
64else
65 MY_SED="/usr/bin/gsed"
66fi
67if test "${MY_SOLARIS_VER}" -lt 11; then
68 MY_SCREEN="/opt/csw/bin/screen"
69else
70 MY_SCREEN="screen"
71fi
72
73
74check_for_cifs() {
75 if [ ! -f /usr/kernel/fs/amd64/smbfs -a ! -f /usr/kernel/fs/smbfs -a "${MY_SOLARIS_VER}" -ge 11 ]; then
76 echo "error: smbfs client not installed?" >&2
77 echo "Please install smbfs client support:" >&2
78 echo " pkg install system/file-system/smb" >&2
79 echo " svcadm enable svc:/system/idmap" >&2
80 echo " svcadm enable svc:/network/smb/client" >&2
81 echo " svcs svc:/system/idmap" >&2
82 return 1;
83 fi
84 return 0;
85}
86
87##
88# Loads config values from the current installation.
89#
90os_load_config() {
91 #
92 # Adjust defaults.
93 #
94 # - Use NFS instead of CIFS because S10 doesn't have smbfs and S11 has
95 # problems getting the password.
96 # - Pass the PATH along so we'll find sudo and other stuff later.
97 #
98 TESTBOXSCRIPT_BUILDS_TYPE="nfs"
99 TESTBOXSCRIPT_TESTRSRC_TYPE="nfs"
100 TESTBOXSCRIPT_DEFAULT_BUILDS_TYPE="nfs"
101 TESTBOXSCRIPT_DEFAULT_TESTRSRC_TYPE="nfs"
102 TESTBOXSCRIPT_ENVVARS[${#TESTBOXSCRIPT_ENVVARS[@]}]="PATH=${PATH}";
103
104 # Load old current.
105 if "${MY_SVCCFG}" "export" "${MY_SVC_FMRI}" > /dev/null 2>&1; then
106 # User. ASSUMES single quoted attribs.
107 MY_TMP=`"${MY_SVCCFG}" "export" "${MY_SVC_FMRI}" \
108 | ${MY_TR} '\n' ' ' \
109 `;
110 MY_TMP=`echo "${MY_TMP} " \
111 | ${MY_SED} \
112 -e 's/> */> /g' \
113 -e 's/ *\/>/ \/>/g' \
114 -e 's/^.*<method_credential \([^>]*\) \/>.*$/\1/' \
115 -e "s/^.*user='\([^']*\)'.*\$/\1/" \
116 `;
117 if [ -n "${MY_TMP}" ]; then
118 TESTBOXSCRIPT_USER="${MY_TMP}";
119 fi
120
121 # Arguments. ASSUMES sub-elements. ASSUMES single quoted attribs.
122 XMLARGS=`"${MY_SVCCFG}" "export" "${MY_SVC_FMRI}" \
123 | ${MY_TR} '\n' ' ' \
124 `;
125 case "${XMLARGS}" in
126 *exec_method*)
127 XMLARGS=`echo "${XMLARGS} " \
128 | ${MY_SED} \
129 -e 's/> */> /g' \
130 -e 's/ *\/>/ \/>/g' \
131 -e "s/^.*<exec_method \([^>]*\)name='start'\([^>]*\)>.*\$/\1 \2/" \
132 -e "s/^.*exec='\([^']*\)'.*\$/\1/" \
133 -e 's/&quot;/"/g' \
134 -e 's/&lt;/</g' \
135 -e 's/&gt;/>/g' \
136 -e 's/&amp;/&/g' \
137 | ${MY_SED} \
138 -e 's/^.*testboxscript -d -m *//' \
139 `;
140 eval common_testboxscript_args_to_config ${XMLARGS}
141 ;;
142 *)
143 echo "error: ${MY_SVCCFG}" "export" "${MY_SVC_FMRI} contains no exec_method element." >&2
144 echo " Please delete the service manually and restart setup.sh" >&2
145 exit 2
146 ;;
147 esac
148 fi
149}
150
151##
152# Adds one or more arguments to MY_ARGV after checking them for conformity.
153#
154os_add_args() {
155 while [ $# -gt 0 ];
156 do
157 case "$1" in
158 *\ *)
159 echo "error: Space in option value is not allowed ($1)" >&2
160 exit 1;
161 ;;
162 *${MY_TAB}*)
163 echo "error: Tab in option value is not allowed ($1)" >&2
164 exit 1;
165 ;;
166 *\&*)
167 echo "error: Ampersand in option value is not allowed ($1)" >&2
168 exit 1;
169 ;;
170 *\<*)
171 echo "error: Greater-than in option value is not allowed ($1)" >&2
172 exit 1;
173 ;;
174 *\>*)
175 echo "error: Less-than in option value is not allowed ($1)" >&2
176 exit 1;
177 ;;
178 *)
179 MY_ARGV="${MY_ARGV} $1";
180 ;;
181 esac
182 shift;
183 done
184 return 0;
185}
186
187##
188# Installs, configures and starts the service.
189#
190os_install_service() {
191 # Only NFS for S10.
192 if [ "${MY_SOLARIS_VER}" -lt 11 ]; then
193 if [ "${TESTBOXSCRIPT_BUILDS_TYPE}" != "nfs" -o "${TESTBOXSCRIPT_TESTRSRC_TYPE}" != "nfs" ]; then
194 echo "On solaris 10 both share types must be 'nfs', cifs (smbfs) is not supported." >&2
195 return 1;
196 fi
197 fi
198
199 # Calc the command line.
200 MY_ARGV=""
201 common_compile_testboxscript_command_line
202
203 # Create the service xml config file.
204 cat > "${MY_SVC_TMP}" <<EOF
205<?xml version='1.0'?>
206<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
207<service_bundle type='manifest' name='export'>
208 <service name='system/virtualbox/testboxscript' type='service' version='1'>
209 <create_default_instance enabled='false' />
210 <single_instance/>
211
212 <!-- Wait for the network to start up -->
213 <dependency name='milestone-network' grouping='require_all' restart_on='none' type='service'>
214 <service_fmri value='svc:/milestone/network:default' />
215 </dependency>
216
217 <!-- We wish to be started as late as possible... so go crazy with deps. -->
218 <dependency name='milestone-devices' grouping='require_all' restart_on='none' type='service'>
219 <service_fmri value='svc:/milestone/devices:default' />
220 </dependency>
221 <dependency name='multi-user' grouping='require_all' restart_on='none' type='service'>
222 <service_fmri value='svc:/milestone/multi-user:default' />
223 </dependency>
224 <dependency name='multi-user-server' grouping='require_all' restart_on='none' type='service'>
225 <service_fmri value='svc:/milestone/multi-user-server:default' />
226 </dependency>
227 <dependency name='filesystem-local' grouping='require_all' restart_on='none' type='service'>
228 <service_fmri value='svc:/system/filesystem/local:default' />
229 </dependency>
230 <dependency name='filesystem-autofs' grouping='require_all' restart_on='none' type='service'>
231 <service_fmri value='svc:/system/filesystem/autofs:default' />
232 </dependency>
233EOF
234 if [ "`uname -r`" = "5.10" ]; then # Seems to be gone in S11?
235 cat >> "${MY_SVC_TMP}" <<EOF
236 <dependency name='filesystem-volfs' grouping='require_all' restart_on='none' type='service'>
237 <service_fmri value='svc:/system/filesystem/volfs:default' />
238 </dependency>
239EOF
240 fi
241 cat >> "${MY_SVC_TMP}" <<EOF
242 <!-- start + stop methods -->
243 <exec_method type='method' name='start' exec='${MY_SCREEN} -S testboxscript -d -m ${MY_ARGV}'
244 timeout_seconds='30'>
245 <method_context working_directory='${TESTBOXSCRIPT_DIR}'>
246 <method_credential user='${TESTBOXSCRIPT_USER}' />
247 <method_environment>
248 <envvar name='PATH' value='${PATH}' />
249 </method_environment>
250 </method_context>
251 </exec_method>
252
253 <exec_method type='method' name='stop' exec=':kill' timeout_seconds='60' />
254
255 <property_group name='startd' type='framework'>
256 <!-- sub-process core dumps/signals should not restart session -->
257 <propval name='ignore_error' type='astring' value='core,signal' />
258 </property_group>
259
260 <!-- Description -->
261 <template>
262 <common_name>
263 <loctext xml:lang='C'>VirtualBox TestBox Script</loctext>
264 </common_name>
265 </template>
266 </service>
267</service_bundle>
268EOF
269
270 # Install the service, replacing old stuff.
271 if "${MY_SVCCFG}" "export" "${MY_SVC_FMRI}" > /dev/null 2>&1; then
272 "${MY_SVCCFG}" "delete" "${MY_SVC_FMRI}"
273 fi
274 "${MY_SVCCFG}" "import" "${MY_SVC_TMP}"
275 rm -f "${MY_SVC_TMP}"
276 return 0;
277}
278
279os_enable_service() {
280 "${MY_SVCADM}" "enable" "${MY_SVC_FMRI}"
281 return 0;
282}
283
284os_disable_service() {
285 if "${MY_SVCCFG}" "export" "${MY_SVC_FMRI}" > /dev/null 2>&1; then
286 "${MY_SVCADM}" "disable" "${MY_SVC_FMRI}"
287 sleep 1
288 fi
289 return 0;
290}
291
292os_add_user() {
293 useradd -m -s /usr/bin/bash -G staff "${TESTBOXSCRIPT_USER}"
294 passwd "${TESTBOXSCRIPT_USER}" # This sucker prompts, seemingly no way around that.
295 return 0;
296}
297
298
299maybe_hush_up_root_login() {
300 # We don't want /etc/profile to display /etc/motd, quotas and mail status
301 # every time we do sudo -i... It may screw up serious if we parse the
302 # output of the command we sudid.
303 > ~root/.hushlogin
304 return 0;
305}
306
307os_final_message() {
308 cat <<EOF
309
310Additional things to do:"
311 1. Configure NTP:
312 a) echo "server wei01-time.de.oracle.com" > /etc/inet/ntp.conf
313 echo "driftfile /var/ntp/ntp.drift" >> /etc/inet/ntp.conf
314 b) Enable the service: svcadm enable ntp
315 c) Sync once in case of big diff: ntpdate wei01-time.de.oracle.com
316 d) Check that it works: ntpq -p
317
318Enjoy!
319EOF
320}
321
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