r22260: Use single script for creating Samba 4 test environments. Add first test
[Samba.git] / source / script / tests / mksamba4server.sh
blobf59d8c216cb37dadda46aca67d3d0bab7d5bbee4
1 #!/bin/sh
2 # Build a test environment for running Samba
4 if [ $# -lt 1 ]
5 then
6 echo "$0 PREFIX"
7 exit 1
8 fi
10 PREFIX=$1
12 if test -z "$SHARE_BACKEND"; then
13 SHARE_BACKEND=classic
16 if test -z "$SMBD_LOGLEVEL"; then
17 SMBD_LOGLEVEL=1
20 if test -z "$SERVER_ROLE"; then
21 SERVER_ROLE="domain controller"
24 DOMAIN=SAMBADOMAIN
25 USERNAME=administrator
26 REALM=SAMBA.EXAMPLE.COM
27 DNSNAME="samba.example.com"
28 BASEDN="dc=samba,dc=example,dc=com"
29 PASSWORD=penguin
30 SRCDIR=`pwd`
31 ROOT=$USER
32 SERVER=localhost
33 NETBIOSNAME=localtest
34 if test -z "$ROOT"; then
35 ROOT=$LOGNAME
37 if test -z "$ROOT"; then
38 ROOT=`whoami`
41 oldpwd=`pwd`
42 srcdir=`dirname $0`/../..
43 mkdir -p $PREFIX || exit $?
44 cd $PREFIX
45 PREFIX_ABS=`pwd`
46 cd $oldpwd
48 TMPDIR=$PREFIX_ABS/tmp
49 ETCDIR=$PREFIX_ABS/etc
50 PIDDIR=$PREFIX_ABS/pid
51 CONFFILE=$ETCDIR/smb.conf
52 KRB5_CONFIG=$ETCDIR/krb5.conf
53 PRIVATEDIR=$PREFIX_ABS/private
54 NCALRPCDIR=$PREFIX_ABS/ncalrpc
55 LOCKDIR=$PREFIX_ABS/lockdir
57 WINBINDD_SOCKET_DIR=$PREFIX_ABS/winbind_socket
58 CONFIGURATION="--configfile=$CONFFILE"
59 LDAPDIR=$PREFIX_ABS/ldap
61 rm -rf $PREFIX/*
62 mkdir -p $PRIVATEDIR $ETCDIR $PIDDIR $NCALRPCDIR $LOCKDIR $TMPDIR $LDAPDIR/db $LDAPDIR/db/bdb-logs $LDAPDIR/db/tmp
64 cat >$CONFFILE<<EOF
65 [global]
66 netbios name = $NETBIOSNAME
67 netbios aliases = $SERVER
68 workgroup = $DOMAIN
69 realm = $REALM
70 private dir = $PRIVATEDIR
71 pid directory = $PIDDIR
72 ncalrpc dir = $NCALRPCDIR
73 lock dir = $LOCKDIR
74 share backend = $SHARE_BACKEND
75 setup directory = $SRCDIR/setup
76 js include = $SRCDIR/scripting/libjs
77 winbindd socket directory = $WINBINDD_SOCKET_DIR
78 name resolve order = bcast
79 interfaces = 127.0.0.1/8
80 tls dh params file = $DHFILE
81 panic action = $SRCDIR/script/gdb_backtrace %PID% %PROG%
82 wins support = yes
83 server role = $SERVER_ROLE
84 max xmit = 32K
85 server max protocol = SMB2
86 notify:inotify = false
87 ldb:nosync = true
88 system:anonymous = true
89 #We don't want to pass our self-tests if the PAC code is wrong
90 gensec:require_pac = true
91 log level = $SMBD_LOGLEVEL
93 [tmp]
94 path = $TMPDIR
95 read only = no
96 ntvfs handler = posix
97 posix:sharedelay = 100000
98 posix:eadb = $LOCKDIR/eadb.tdb
100 [cifs]
101 read only = no
102 ntvfs handler = cifs
103 cifs:server = $SERVER
104 cifs:user = $USERNAME
105 cifs:password = $PASSWORD
106 cifs:domain = $DOMAIN
107 cifs:share = tmp
109 [simple]
110 path = $TMPDIR
111 read only = no
112 ntvfs handler = simple
114 [cifsposixtestshare]
115 copy = simple
116 ntvfs handler = cifsposix
119 ## Override default share.ldb file
120 rm -f $PRIVATEDIR/share.ldb
121 cat >$PRIVATEDIR/share.ldif<<EOF
122 ### Shares basedn
123 dn: @INDEXLIST
124 @IDXATTR: name
126 dn: @ATTRIBUTES
127 cn: CASE_INSENSITIVE
128 dc: CASE_INSENSITIVE
129 name: CASE_INSENSITIVE
130 dn: CASE_INSENSITIVE
131 objectClass: CASE_INSENSITIVE
133 dn: CN=Shares
134 objectClass: top
135 objectClass: organizationalUnit
136 cn: Shares
138 ### Default IPC$ Share
139 dn: CN=IPC$,CN=Shares
140 objectClass: top
141 objectClass: share
142 cn: IPC$
143 name: IPC$
144 type: IPC
145 path: /tmp
146 comment: Remote IPC
147 max-connections: -1
148 available: True
149 readonly: True
150 browseable: False
151 ntvfs-handler: default
153 ### Default ADMIN$ Share
154 dn: CN=ADMIN$,CN=Shares
155 objectClass: top
156 objectClass: share
157 cn: ADMIN$
158 name: ADMIN$
159 type: DISK
160 path: /tmp
161 comment: Remote Admin
162 max-connections: -1
163 available: True
164 readonly: True
165 browseable: False
166 ntvfs-handler: default
168 dn: CN=tmp,CN=Shares
169 objectClass: top
170 objectClass: share
171 cn: tmp
172 name: tmp
173 type: DISK
174 path: $TMPDIR
175 comment: Temp Dir for Tests
176 readonly: False
177 ntvfs-handler: posix
178 posix-sharedelay: 100000
179 posix-eadb: $LOCKDIR/eadb.tdb
181 dn: CN=cifs,CN=Shares
182 objectClass: top
183 objectClass: share
184 cn: cifs
185 name: cifs
186 type: DISK
187 readonly: False
188 ntvfs-handler: cifs
189 cifs-server: $SERVER
190 cifs-user: $USERNAME
191 cifs-password: $PASSWORD
192 cifs-domain: $DOMAIN
193 cifs-share: tmp
196 $srcdir/bin/ldbadd -H $PRIVATEDIR/share.ldb < $PRIVATEDIR/share.ldif >/dev/null || exit 1
198 . `dirname $0`/mk-keyblobs.sh
200 cat >$KRB5_CONFIG<<EOF
201 #Generated krb5.conf for $REALM
203 [libdefaults]
204 default_realm = $REALM
205 dns_lookup_realm = false
206 dns_lookup_kdc = false
207 ticket_lifetime = 24h
208 forwardable = yes
210 [realms]
211 $REALM = {
212 kdc = 127.0.0.1:88
213 admin_server = 127.0.0.1:88
214 default_domain = $DNSNAME
216 $DNSNAME = {
217 kdc = 127.0.0.1:88
218 admin_server = 127.0.0.1:88
219 default_domain = $DNSNAME
221 $DOMAIN = {
222 kdc = 127.0.0.1:88
223 admin_server = 127.0.0.1:88
224 default_domain = $DNSNAME
227 [appdefaults]
228 pkinit_anchors = FILE:$CAFILE
230 [kdc]
231 enable-pkinit = true
232 pkinit_identity = FILE:$KDCCERTFILE,$KEYFILE
233 pkinit_anchors = FILE:$CAFILE
235 [domain_realm]
236 .$DNSNAME = $REALM
239 #Ensure the config file is valid before we start
240 $srcdir/bin/testparm $CONFIGURATION -v --suppress-prompt >/dev/null 2>&1 || {
241 echo "">&2
242 echo "Failed to create configuration!" >&2
243 $srcdir/bin/testparm $CONFIGURATION >&2
244 exit 1
247 ( $srcdir/bin/testparm $CONFIGURATION -v --suppress-prompt --parameter-name="netbios name" --section-name=global 2> /dev/null | grep -i ^$NETBIOSNAME ) >/dev/null 2>&1 || {
248 echo "$?" >&2
249 $srcdir/bin/testparm $CONFIGURATION -v --suppress-prompt --parameter-name="netbios name" --section-name=global --suppress-prompt 2> /dev/null | grep -i ^$NETBIOSNAME >&2
250 echo "Failed to create configuration!" >&2
251 exit 1
254 PROVISION_OPTIONS="$CONFIGURATION --host-name=$NETBIOSNAME --host-ip=127.0.0.1"
255 PROVISION_OPTIONS="$PROVISION_OPTIONS --quiet --domain $DOMAIN --realm $REALM"
256 PROVISION_OPTIONS="$PROVISION_OPTIONS --adminpass $PASSWORD --root=$ROOT"
257 PROVISION_OPTIONS="$PROVISION_OPTIONS --simple-bind-dn=cn=Manager,$BASEDN --password=$PASSWORD --root=$ROOT"
258 $srcdir/bin/smbscript $srcdir/setup/provision $PROVISION_OPTIONS >&2
260 LDAP_URI="ldapi://"`echo $LDAPDIR/ldapi | sed 's|/|%2F|g'`
262 . `dirname $0`/mk-openldap.sh
264 test -z "$FEDORA_DS_PREFIX" || {
265 . `dirname $0`/mk-fedora-ds.sh
268 cat >$PRIVATEDIR/wins_config.ldif<<EOF
269 dn: name=TORTURE_6,CN=PARTNERS
270 objectClass: wreplPartner
271 name: TORTURE_6
272 address: 127.0.0.6
273 pullInterval: 0
274 pushChangeCount: 0
275 type: 0x3
278 $srcdir/bin/ldbadd -H $PRIVATEDIR/wins_config.ldb < $PRIVATEDIR/wins_config.ldif >/dev/null || exit 1
280 echo "KRB5_CONFIG=$KRB5_CONFIG"
281 echo "PREFIX_ABS=$PREFIX_ABS"
282 echo "SLAPD_CONF=$SLAPD_CONF"
283 echo "PIDDIR=$PIDDIR"
284 echo "SERVER=$SERVER"
285 echo "NETBIOSNAME=$NETBIOSNAME"
286 echo "LDAP_URI=$LDAP_URI"
287 echo "DOMAIN=$DOMAIN"
288 echo "USERNAME=$USERNAME"
289 echo "REALM=$REALM"
290 echo "DNSNAME=$DNSNAME"
291 echo "BASEDN=$BASEDN"
292 echo "PASSWORD=$PASSWORD"
293 echo "SRCDIR=$SRCDIR"
294 echo "PREFIX=$PREFIX"
295 echo "LDAPDIR=$LDAPDIR"
296 echo "CONFFILE=$CONFFILE"
297 echo "PROVISION_OPTIONS=$PROVISION_OPTIONS"
298 echo "PROVISION_ACI=$PROVISION_ACI"
299 echo "WINBINDD_SOCKET_DIR=$WINBINDD_SOCKET_DIR"
300 echo "NCALRPCDIR=$NCALRPCDIR"
301 echo "CONFIGURATION=$CONFIGURATION"