vagrant-lxc 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/BOXES.md +55 -0
  3. data/CHANGELOG.md +14 -0
  4. data/CONTRIBUTING.md +20 -0
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +4 -3
  7. data/README.md +16 -19
  8. data/boxes/build-debian-box.sh +167 -0
  9. data/boxes/build-ubuntu-box.sh +151 -0
  10. data/boxes/common/install-babushka +4 -3
  11. data/boxes/common/install-chef +3 -2
  12. data/boxes/common/install-puppet +3 -2
  13. data/boxes/common/install-salt +3 -2
  14. data/boxes/common/lxc-template +10 -13
  15. data/boxes/common/metadata.json +2 -1
  16. data/development/Vagrantfile +4 -4
  17. data/development/site.pp +31 -6
  18. data/lib/vagrant-lxc/action.rb +44 -40
  19. data/lib/vagrant-lxc/action/clear_forwarded_ports.rb +4 -0
  20. data/lib/vagrant-lxc/action/fetch_ip_from_dnsmasq_leases.rb +1 -1
  21. data/lib/vagrant-lxc/action/fetch_ip_with_lxc_attach.rb +4 -7
  22. data/lib/vagrant-lxc/action/message.rb +1 -0
  23. data/lib/vagrant-lxc/action/setup_package_files.rb +1 -0
  24. data/lib/vagrant-lxc/action/wait_for_communicator.rb +9 -14
  25. data/lib/vagrant-lxc/driver.rb +10 -7
  26. data/lib/vagrant-lxc/driver/cli.rb +7 -1
  27. data/lib/vagrant-lxc/errors.rb +5 -0
  28. data/lib/vagrant-lxc/version.rb +1 -1
  29. data/locales/en.yml +8 -2
  30. data/spec/Vagrantfile +7 -2
  31. data/spec/unit/driver/cli_spec.rb +8 -0
  32. metadata +8 -18
  33. data/boxes/debian/download +0 -156
  34. data/boxes/debian/finalize +0 -195
  35. data/boxes/debian/lxc-template +0 -367
  36. data/boxes/debian/metadata.json.template +0 -9
  37. data/boxes/ubuntu/download +0 -113
  38. data/boxes/ubuntu/finalize +0 -374
  39. data/boxes/ubuntu/lxc-template +0 -559
  40. data/boxes/ubuntu/metadata.json.template +0 -9
  41. data/development/shell-provisioning/upgrade-kernel +0 -14
  42. data/example/Vagrantfile +0 -46
  43. data/example/cookbooks/hello-world/recipes/default.rb +0 -4
  44. data/example/puppet/manifests/site.pp +0 -5
  45. data/example/puppet/modules/hello_world/manifests/init.pp +0 -3
  46. data/tasks/boxes.rake +0 -115
  47. data/tasks/boxes.v2.rake +0 -188
@@ -1,559 +0,0 @@
1
- #!/bin/bash
2
-
3
- # This is a modified version of /usr/share/lxc/templates/lxc-ubuntu
4
- # that comes with Ubuntu 13.04 changed to suit vagrant-lxc needs
5
-
6
- #
7
- # template script for generating ubuntu container for LXC
8
- #
9
- # This script consolidates and extends the existing lxc ubuntu scripts
10
- #
11
-
12
- # Copyright © 2011 Serge Hallyn <serge.hallyn@canonical.com>
13
- # Copyright © 2010 Wilhelm Meier
14
- # Author: Wilhelm Meier <wilhelm.meier@fh-kl.de>
15
- #
16
- # This program is free software; you can redistribute it and/or modify
17
- # it under the terms of the GNU General Public License version 2, as
18
- # published by the Free Software Foundation.
19
-
20
- # This program is distributed in the hope that it will be useful,
21
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
22
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
- # GNU General Public License for more details.
24
-
25
- # You should have received a copy of the GNU General Public License along
26
- # with this program; if not, write to the Free Software Foundation, Inc.,
27
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
28
- #
29
-
30
- set -e
31
-
32
- if [ -r /etc/default/lxc ]; then
33
- . /etc/default/lxc
34
- fi
35
-
36
- configure_ubuntu()
37
- {
38
- rootfs=$1
39
- release=$2
40
- hostname=$2
41
-
42
- # configure the network using the dhcp
43
- cat <<EOF > $rootfs/etc/network/interfaces
44
- # This file describes the network interfaces available on your system
45
- # and how to activate them. For more information, see interfaces(5).
46
-
47
- # The loopback network interface
48
- auto lo
49
- iface lo inet loopback
50
-
51
- auto eth0
52
- iface eth0 inet dhcp
53
- EOF
54
-
55
- # set the hostname
56
- cat <<EOF > $rootfs/etc/hostname
57
- $hostname
58
- EOF
59
- # set minimal hosts
60
- cat <<EOF > $rootfs/etc/hosts
61
- 127.0.0.1 localhost
62
- 127.0.1.1 $hostname
63
-
64
- # The following lines are desirable for IPv6 capable hosts
65
- ::1 ip6-localhost ip6-loopback
66
- fe00::0 ip6-localnet
67
- ff00::0 ip6-mcastprefix
68
- ff02::1 ip6-allnodes
69
- ff02::2 ip6-allrouters
70
- ff02::3 ip6-allhosts
71
- EOF
72
-
73
- if [ ! -f $rootfs/etc/init/container-detect.conf ]; then
74
- # suppress log level output for udev
75
- sed -i "s/=\"err\"/=0/" $rootfs/etc/udev/udev.conf
76
-
77
- # remove jobs for consoles 5 and 6 since we only create 4 consoles in
78
- # this template
79
- rm -f $rootfs/etc/init/tty{5,6}.conf
80
- fi
81
-
82
- if ! (grep -q vagrant $rootfs/etc/passwd); then
83
- chroot $rootfs useradd --create-home -s /bin/bash vagrant
84
- echo "vagrant:vagrant" | chroot $rootfs chpasswd
85
- fi
86
-
87
- # make sure we have the current locale defined in the container
88
- chroot $rootfs locale-gen en_US.UTF-8
89
- chroot $rootfs update-locale LANG=en_US.UTF-8
90
-
91
- return 0
92
- }
93
-
94
- # finish setting up the user in the container by injecting ssh key and
95
- # adding sudo group membership.
96
- # passed-in user is 'vagrant'
97
- finalize_user()
98
- {
99
- user=$1
100
-
101
- sudo_version=$(chroot $rootfs dpkg-query -W -f='${Version}' sudo)
102
-
103
- if chroot $rootfs dpkg --compare-versions $sudo_version gt "1.8.3p1-1"; then
104
- groups="sudo"
105
- else
106
- groups="sudo admin"
107
- fi
108
-
109
- for group in $groups; do
110
- chroot $rootfs groupadd --system $group >/dev/null 2>&1 || true
111
- chroot $rootfs adduser ${user} $group >/dev/null 2>&1 || true
112
- done
113
-
114
- chroot $rootfs cp /etc/sudoers /etc/sudoers.orig >/dev/null 2>&1 || true
115
- chroot $rootfs sed -i -e 's/%sudo\s\+ALL=(ALL:ALL)\s\+ALL/%sudo ALL=NOPASSWD:ALL/g' /etc/sudoers >/dev/null 2>&1 || true
116
-
117
- if [ -n "$auth_key" -a -f "$auth_key" ]; then
118
- u_path="/home/${user}/.ssh"
119
- root_u_path="$rootfs/$u_path"
120
-
121
- mkdir -p $root_u_path
122
- cp $auth_key "$root_u_path/authorized_keys"
123
- chroot $rootfs chown -R ${user}: "$u_path"
124
-
125
- echo "Inserted SSH public key from $auth_key into /home/${user}/.ssh/authorized_keys"
126
- fi
127
- return 0
128
- }
129
-
130
- write_sourceslist()
131
- {
132
- # $1 => path to the rootfs
133
- # $2 => architecture we want to add
134
- # $3 => whether to use the multi-arch syntax or not
135
-
136
- case $2 in
137
- amd64|i386)
138
- MIRROR=${MIRROR:-http://archive.ubuntu.com/ubuntu}
139
- SECURITY_MIRROR=${SECURITY_MIRROR:-http://security.ubuntu.com/ubuntu}
140
- ;;
141
- *)
142
- MIRROR=${MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
143
- SECURITY_MIRROR=${SECURITY_MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
144
- ;;
145
- esac
146
- if [ -n "$3" ]; then
147
- cat >> "$1/etc/apt/sources.list" << EOF
148
- deb [arch=$2] $MIRROR ${release} main restricted universe multiverse
149
- deb [arch=$2] $MIRROR ${release}-updates main restricted universe multiverse
150
- deb [arch=$2] $SECURITY_MIRROR ${release}-security main restricted universe multiverse
151
- EOF
152
- else
153
- cat >> "$1/etc/apt/sources.list" << EOF
154
- deb $MIRROR ${release} main restricted universe multiverse
155
- deb $MIRROR ${release}-updates main restricted universe multiverse
156
- deb $SECURITY_MIRROR ${release}-security main restricted universe multiverse
157
- EOF
158
- fi
159
- }
160
-
161
- extract_rootfs()
162
- {
163
- tarball=$1
164
- arch=$2
165
- rootfs=$3
166
-
167
- echo "Extracting $tarball ..."
168
- mkdir -p $(dirname $rootfs)
169
- (cd `dirname $rootfs` && tar xfz $tarball)
170
- return 0
171
- }
172
-
173
- install_ubuntu()
174
- {
175
- rootfs=$1
176
- release=$2
177
- tarball=$3
178
- mkdir -p /var/lock/subsys/
179
-
180
- (
181
- flock -x 200
182
- if [ $? -ne 0 ]; then
183
- echo "Cache repository is busy."
184
- return 1
185
- fi
186
-
187
- extract_rootfs $tarball $arch $rootfs
188
- if [ $? -ne 0 ]; then
189
- echo "Failed to copy rootfs"
190
- return 1
191
- fi
192
-
193
- return 0
194
-
195
- ) 200>/var/lock/subsys/lxc
196
-
197
- return $?
198
- }
199
-
200
- copy_configuration()
201
- {
202
- path=$1
203
- rootfs=$2
204
- name=$3
205
- arch=$4
206
-
207
- if [ $arch = "i386" ]; then
208
- arch="i686"
209
- fi
210
-
211
- ttydir=""
212
- if [ -f $rootfs/etc/init/container-detect.conf ]; then
213
- ttydir=" lxc"
214
- fi
215
-
216
- # if there is exactly one veth network entry, make sure it has an
217
- # associated hwaddr.
218
- nics=`grep -e '^lxc\.network\.type[ \t]*=[ \t]*veth' $path/config | wc -l`
219
- if [ $nics -eq 1 ]; then
220
- grep -q "^lxc.network.hwaddr" $path/config || sed -i -e "/^lxc\.network\.type[ \t]*=[ \t]*veth/a lxc.network.hwaddr = 00:16:3e:$(openssl rand -hex 3| sed 's/\(..\)/\1:/g; s/.$//')" $path/config
221
- fi
222
-
223
- grep -q "^lxc.rootfs" $path/config 2>/dev/null || echo "lxc.rootfs = $rootfs" >> $path/config
224
- cat <<EOF >> $path/config
225
- lxc.mount = $path/fstab
226
- lxc.pivotdir = lxc_putold
227
-
228
- lxc.devttydir =$ttydir
229
- lxc.tty = 4
230
- lxc.pts = 1024
231
-
232
- lxc.utsname = $name
233
- lxc.arch = $arch
234
- lxc.cap.drop = sys_module mac_admin mac_override
235
-
236
- # When using LXC with apparmor, uncomment the next line to run unconfined:
237
- #lxc.aa_profile = unconfined
238
-
239
- lxc.cgroup.devices.deny = a
240
- # Allow any mknod (but not using the node)
241
- lxc.cgroup.devices.allow = c *:* m
242
- lxc.cgroup.devices.allow = b *:* m
243
- # /dev/null and zero
244
- lxc.cgroup.devices.allow = c 1:3 rwm
245
- lxc.cgroup.devices.allow = c 1:5 rwm
246
- # consoles
247
- lxc.cgroup.devices.allow = c 5:1 rwm
248
- lxc.cgroup.devices.allow = c 5:0 rwm
249
- #lxc.cgroup.devices.allow = c 4:0 rwm
250
- #lxc.cgroup.devices.allow = c 4:1 rwm
251
- # /dev/{,u}random
252
- lxc.cgroup.devices.allow = c 1:9 rwm
253
- lxc.cgroup.devices.allow = c 1:8 rwm
254
- lxc.cgroup.devices.allow = c 136:* rwm
255
- lxc.cgroup.devices.allow = c 5:2 rwm
256
- # rtc
257
- lxc.cgroup.devices.allow = c 254:0 rwm
258
- #fuse
259
- lxc.cgroup.devices.allow = c 10:229 rwm
260
- #tun
261
- lxc.cgroup.devices.allow = c 10:200 rwm
262
- #full
263
- lxc.cgroup.devices.allow = c 1:7 rwm
264
- #hpet
265
- lxc.cgroup.devices.allow = c 10:228 rwm
266
- #kvm
267
- lxc.cgroup.devices.allow = c 10:232 rwm
268
- EOF
269
-
270
- cat <<EOF > $path/fstab
271
- proc proc proc nodev,noexec,nosuid 0 0
272
- sysfs sys sysfs defaults 0 0
273
- EOF
274
-
275
- if [ $? -ne 0 ]; then
276
- echo "Failed to add configuration"
277
- return 1
278
- fi
279
-
280
- return 0
281
- }
282
-
283
- trim()
284
- {
285
- rootfs=$1
286
- release=$2
287
-
288
- # provide the lxc service
289
- cat <<EOF > $rootfs/etc/init/lxc.conf
290
- # fake some events needed for correct startup other services
291
-
292
- description "Container Upstart"
293
-
294
- start on startup
295
-
296
- script
297
- rm -rf /var/run/*.pid
298
- rm -rf /var/run/network/*
299
- /sbin/initctl emit stopped JOB=udevtrigger --no-wait
300
- /sbin/initctl emit started JOB=udev --no-wait
301
- end script
302
- EOF
303
-
304
- # fix buggus runlevel with sshd
305
- cat <<EOF > $rootfs/etc/init/ssh.conf
306
- # ssh - OpenBSD Secure Shell server
307
- #
308
- # The OpenSSH server provides secure shell access to the system.
309
-
310
- description "OpenSSH server"
311
-
312
- start on filesystem
313
- stop on runlevel [!2345]
314
-
315
- expect fork
316
- respawn
317
- respawn limit 10 5
318
- umask 022
319
- # replaces SSHD_OOM_ADJUST in /etc/default/ssh
320
- oom never
321
-
322
- pre-start script
323
- test -x /usr/sbin/sshd || { stop; exit 0; }
324
- test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }
325
- test -c /dev/null || { stop; exit 0; }
326
-
327
- mkdir -p -m0755 /var/run/sshd
328
- end script
329
-
330
- # if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
331
- # 'exec' line here instead
332
- exec /usr/sbin/sshd
333
- EOF
334
-
335
- cat <<EOF > $rootfs/etc/init/console.conf
336
- # console - getty
337
- #
338
- # This service maintains a console on tty1 from the point the system is
339
- # started until it is shut down again.
340
-
341
- start on stopped rc RUNLEVEL=[2345]
342
- stop on runlevel [!2345]
343
-
344
- respawn
345
- exec /sbin/getty -8 38400 /dev/console
346
- EOF
347
-
348
- cat <<EOF > $rootfs/lib/init/fstab
349
- # /lib/init/fstab: cleared out for bare-bones lxc
350
- EOF
351
-
352
- # remove pointless services in a container
353
- chroot $rootfs /usr/sbin/update-rc.d -f ondemand remove
354
-
355
- chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls u*.conf); do mv $f $f.orig; done'
356
- chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls tty[2-9].conf); do mv $f $f.orig; done'
357
- chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls plymouth*.conf); do mv $f $f.orig; done'
358
- chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls hwclock*.conf); do mv $f $f.orig; done'
359
- chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls module*.conf); do mv $f $f.orig; done'
360
-
361
- # if this isn't lucid, then we need to twiddle the network upstart bits :(
362
- if [ $release != "lucid" ]; then
363
- sed -i 's/^.*emission handled.*$/echo Emitting lo/' $rootfs/etc/network/if-up.d/upstart
364
- fi
365
- }
366
-
367
- post_process()
368
- {
369
- rootfs=$1
370
- release=$2
371
- trim_container=$3
372
-
373
- if [ $trim_container -eq 1 ]; then
374
- trim $rootfs $release
375
- elif [ ! -f $rootfs/etc/init/container-detect.conf ]; then
376
- # Make sure we have a working resolv.conf
377
- cresolvonf="${rootfs}/etc/resolv.conf"
378
- mv $cresolvonf ${cresolvonf}.lxcbak
379
- cat /etc/resolv.conf > ${cresolvonf}
380
-
381
- # for lucid, if not trimming, then add the ubuntu-virt
382
- # ppa and install lxcguest
383
- if [ $release = "lucid" ]; then
384
- chroot $rootfs apt-get update
385
- chroot $rootfs apt-get install --force-yes -y python-software-properties
386
- chroot $rootfs add-apt-repository ppa:ubuntu-virt/ppa
387
- fi
388
-
389
- chroot $rootfs apt-get update
390
- chroot $rootfs apt-get install --force-yes -y lxcguest
391
-
392
- # Restore old resolv.conf
393
- rm -f ${cresolvonf}
394
- mv ${cresolvonf}.lxcbak ${cresolvonf}
395
- fi
396
-
397
- # If the container isn't running a native architecture, setup multiarch
398
- if [ -x "$(ls -1 ${rootfs}/usr/bin/qemu-*-static 2>/dev/null)" ]; then
399
- dpkg_version=$(chroot $rootfs dpkg-query -W -f='${Version}' dpkg)
400
- if chroot $rootfs dpkg --compare-versions $dpkg_version ge "1.16.2"; then
401
- chroot $rootfs dpkg --add-architecture ${hostarch}
402
- else
403
- mkdir -p ${rootfs}/etc/dpkg/dpkg.cfg.d
404
- echo "foreign-architecture ${hostarch}" > ${rootfs}/etc/dpkg/dpkg.cfg.d/lxc-multiarch
405
- fi
406
-
407
- # Save existing value of MIRROR and SECURITY_MIRROR
408
- DEFAULT_MIRROR=$MIRROR
409
- DEFAULT_SECURITY_MIRROR=$SECURITY_MIRROR
410
-
411
- # Write a new sources.list containing both native and multiarch entries
412
- > ${rootfs}/etc/apt/sources.list
413
- write_sourceslist $rootfs $arch "native"
414
-
415
- MIRROR=$DEFAULT_MIRROR
416
- SECURITY_MIRROR=$DEFAULT_SECURITY_MIRROR
417
- write_sourceslist $rootfs $hostarch "multiarch"
418
-
419
- # Finally update the lists and install upstart using the host architecture
420
- chroot $rootfs apt-get update
421
- chroot $rootfs apt-get install --force-yes -y --no-install-recommends upstart:${hostarch} mountall:${hostarch} iproute:${hostarch} isc-dhcp-client:${hostarch}
422
- fi
423
-
424
- # rmdir /dev/shm for containers that have /run/shm
425
- # I'm afraid of doing rm -rf $rootfs/dev/shm, in case it did
426
- # get bind mounted to the host's /run/shm. So try to rmdir
427
- # it, and in case that fails move it out of the way.
428
- if [ ! -L $rootfs/dev/shm ] && [ -d $rootfs/run/shm ] && [ -e $rootfs/dev/shm ]; then
429
- mv $rootfs/dev/shm $rootfs/dev/shm.bak
430
- ln -s /run/shm $rootfs/dev/shm
431
- fi
432
- }
433
-
434
- usage()
435
- {
436
- cat <<EOF
437
- $1 -h|--help [-a|--arch] [--trim] [-d|--debug]
438
- [-F | --flush-cache] [-r|--release <release>] [ -S | --auth-key <keyfile>]
439
- release: the ubuntu release (e.g. precise): defaults to host release on ubuntu, otherwise uses latest LTS
440
- trim: make a minimal (faster, but not upgrade-safe) container
441
- arch: the container architecture (e.g. amd64): defaults to host arch
442
- auth-key: SSH Public key file to inject into container
443
- EOF
444
- return 0
445
- }
446
-
447
- options=$(getopt -o a:b:hp:r:xn:FS:d:C -l arch:,help,path:,release:,trim,name:,flush-cache,auth-key:,debug:,tarball: -- "$@")
448
- if [ $? -ne 0 ]; then
449
- usage $(basename $0)
450
- exit 1
451
- fi
452
- eval set -- "$options"
453
-
454
- release=precise # Default to the last Ubuntu LTS release for non-Ubuntu systems
455
- if [ -f /etc/lsb-release ]; then
456
- . /etc/lsb-release
457
- if [ "$DISTRIB_ID" = "Ubuntu" ]; then
458
- release=$DISTRIB_CODENAME
459
- fi
460
- fi
461
-
462
- arch=$(uname -m)
463
-
464
- # Code taken from debootstrap
465
- if [ -x /usr/bin/dpkg ] && /usr/bin/dpkg --print-architecture >/dev/null 2>&1; then
466
- arch=`/usr/bin/dpkg --print-architecture`
467
- elif type udpkg >/dev/null 2>&1 && udpkg --print-architecture >/dev/null 2>&1; then
468
- arch=`/usr/bin/udpkg --print-architecture`
469
- else
470
- arch=$(uname -m)
471
- if [ "$arch" = "i686" ]; then
472
- arch="i386"
473
- elif [ "$arch" = "x86_64" ]; then
474
- arch="amd64"
475
- elif [ "$arch" = "armv7l" ]; then
476
- arch="armel"
477
- fi
478
- fi
479
-
480
- debug=0
481
- trim_container=0
482
- hostarch=$arch
483
- while true
484
- do
485
- case "$1" in
486
- -h|--help) usage $0 && exit 0;;
487
- -p|--path) path=$2; shift 2;;
488
- -n|--name) name=$2; shift 2;;
489
- -T|--tarball) tarball=$2; shift 2;;
490
- -r|--release) release=$2; shift 2;;
491
- -a|--arch) arch=$2; shift 2;;
492
- -x|--trim) trim_container=1; shift 1;;
493
- -S|--auth-key) auth_key=$2; shift 2;;
494
- -d|--debug) debug=1; shift 1;;
495
- --) shift 1; break ;;
496
- *) break ;;
497
- esac
498
- done
499
-
500
- if [ $debug -eq 1 ]; then
501
- set -x
502
- fi
503
-
504
-
505
- if [ "$arch" == "i686" ]; then
506
- arch=i386
507
- fi
508
-
509
- if [ $hostarch = "i386" -a $arch = "amd64" ]; then
510
- echo "can't create amd64 container on i386"
511
- exit 1
512
- fi
513
-
514
- if [ -z "$path" ]; then
515
- echo "'path' parameter is required"
516
- exit 1
517
- fi
518
-
519
- if [ "$(id -u)" != "0" ]; then
520
- echo "This script should be run as 'root'"
521
- exit 1
522
- fi
523
-
524
- # detect rootfs
525
- config="$path/config"
526
- if grep -q '^lxc.rootfs' $config 2>/dev/null ; then
527
- rootfs=`grep 'lxc.rootfs =' $config | awk -F= '{ print $2 }'`
528
- else
529
- rootfs=$path/rootfs
530
- fi
531
-
532
- install_ubuntu $rootfs $release $tarball
533
- if [ $? -ne 0 ]; then
534
- echo "failed to install ubuntu $release"
535
- exit 1
536
- fi
537
-
538
- configure_ubuntu $rootfs $release
539
- if [ $? -ne 0 ]; then
540
- echo "failed to configure ubuntu $release for a container"
541
- exit 1
542
- fi
543
-
544
- copy_configuration $path $rootfs $name $arch
545
- if [ $? -ne 0 ]; then
546
- echo "failed write configuration file"
547
- exit 1
548
- fi
549
-
550
- post_process $rootfs $release $trim_container
551
-
552
- finalize_user vagrant
553
-
554
- echo ""
555
- echo "##"
556
- echo "# The default user is 'vagrant' with password 'vagrant'!"
557
- echo "# Use the 'sudo' command to run tasks as root in the container."
558
- echo "##"
559
- echo ""