vagrant-lxc 0.3.3 → 0.3.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/Gemfile +3 -6
- data/Gemfile.lock +25 -25
- data/README.md +44 -32
- data/boxes/common/cleanup +7 -0
- data/boxes/common/install-babushka +15 -0
- data/boxes/{ubuntu → common}/install-chef +0 -0
- data/boxes/{ubuntu → common}/install-puppet +1 -1
- data/boxes/debian/download +156 -0
- data/boxes/debian/lxc-template +363 -0
- data/boxes/debian/metadata.json.template +9 -0
- data/boxes/ubuntu/download +11 -0
- data/boxes/ubuntu/lxc-template +14 -23
- data/development/Vagrantfile +69 -95
- data/development/lxc-configs/sid +37 -0
- data/development/lxc-configs/squeeze +37 -0
- data/development/lxc-configs/wheezy +37 -0
- data/development/shell-provisioning/upgrade-kernel +2 -2
- data/development/site.pp +3 -0
- data/example/Vagrantfile +15 -1
- data/lib/vagrant-lxc/action.rb +3 -1
- data/lib/vagrant-lxc/action/forced_halt.rb +1 -3
- data/lib/vagrant-lxc/action/remove_temporary_files.rb +23 -0
- data/lib/vagrant-lxc/driver.rb +3 -3
- data/lib/vagrant-lxc/driver/cli.rb +20 -2
- data/lib/vagrant-lxc/version.rb +1 -1
- data/spec/Vagrantfile +10 -19
- data/spec/acceptance/sanity_check_spec.rb +11 -2
- data/spec/acceptance/support/test_ui.rb +1 -1
- data/spec/unit/driver/cli_spec.rb +5 -6
- data/spec/unit/driver_spec.rb +10 -2
- data/tasks/boxes.rake +136 -36
- metadata +13 -4
@@ -0,0 +1,363 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# This is a modified version of /usr/share/lxc/templates/lxc-debian
|
4
|
+
# that comes with Ubuntu 13.04 changed to suit vagrant-lxc needs
|
5
|
+
|
6
|
+
set -e
|
7
|
+
|
8
|
+
if [ -r /etc/default/lxc ]; then
|
9
|
+
. /etc/default/lxc
|
10
|
+
fi
|
11
|
+
|
12
|
+
SUITE=${SUITE:-wheezy}
|
13
|
+
MIRROR=${MIRROR:-http://ftp.debian.org/debian}
|
14
|
+
|
15
|
+
configure_debian()
|
16
|
+
{
|
17
|
+
rootfs=$1
|
18
|
+
hostname=$2
|
19
|
+
release=$2
|
20
|
+
|
21
|
+
# squeeze only has /dev/tty and /dev/tty0 by default,
|
22
|
+
# therefore creating missing device nodes for tty1-4.
|
23
|
+
for tty in $(seq 1 4); do
|
24
|
+
if [ ! -e $rootfs/dev/tty$tty ]; then
|
25
|
+
mknod $rootfs/dev/tty$tty c 4 $tty
|
26
|
+
fi
|
27
|
+
done
|
28
|
+
|
29
|
+
# configure the inittab
|
30
|
+
cat <<EOF > $rootfs/etc/inittab
|
31
|
+
id:3:initdefault:
|
32
|
+
si::sysinit:/etc/init.d/rcS
|
33
|
+
l0:0:wait:/etc/init.d/rc 0
|
34
|
+
l1:1:wait:/etc/init.d/rc 1
|
35
|
+
l2:2:wait:/etc/init.d/rc 2
|
36
|
+
l3:3:wait:/etc/init.d/rc 3
|
37
|
+
l4:4:wait:/etc/init.d/rc 4
|
38
|
+
l5:5:wait:/etc/init.d/rc 5
|
39
|
+
l6:6:wait:/etc/init.d/rc 6
|
40
|
+
# Normally not reached, but fallthrough in case of emergency.
|
41
|
+
z6:6:respawn:/sbin/sulogin
|
42
|
+
1:2345:respawn:/sbin/getty 38400 console
|
43
|
+
#c1:12345:respawn:/sbin/getty 38400 tty1 linux
|
44
|
+
c2:12345:respawn:/sbin/getty 38400 tty2 linux
|
45
|
+
c3:12345:respawn:/sbin/getty 38400 tty3 linux
|
46
|
+
c4:12345:respawn:/sbin/getty 38400 tty4 linux
|
47
|
+
p6::ctrlaltdel:/sbin/init 6
|
48
|
+
p0::powerfail:/sbin/init 0
|
49
|
+
EOF
|
50
|
+
|
51
|
+
# disable selinux in debian
|
52
|
+
mkdir -p $rootfs/selinux
|
53
|
+
echo 0 > $rootfs/selinux/enforce
|
54
|
+
|
55
|
+
# configure the network using the dhcp
|
56
|
+
cat <<EOF > $rootfs/etc/network/interfaces
|
57
|
+
auto lo
|
58
|
+
iface lo inet loopback
|
59
|
+
|
60
|
+
auto eth0
|
61
|
+
iface eth0 inet dhcp
|
62
|
+
EOF
|
63
|
+
|
64
|
+
# set the hostname
|
65
|
+
cat <<EOF > $rootfs/etc/hostname
|
66
|
+
$hostname
|
67
|
+
EOF
|
68
|
+
|
69
|
+
# set the host in case it is not set so that sudo does not complain about the host
|
70
|
+
if ! (grep -q $hostname $rootfs/etc/hosts); then
|
71
|
+
chroot $rootfs sed -i -e \
|
72
|
+
"s/^127.0.0.1\(\s\+\)localhost$/127.0.0.1\1localhost\n127.0.0.1\1${hostname}/g" \
|
73
|
+
/etc/hosts >/dev/null 2>&1 || true
|
74
|
+
fi
|
75
|
+
|
76
|
+
# set default locale
|
77
|
+
cat <<EOF > $rootfs/etc/locale.gen
|
78
|
+
en_US.UTF-8 UTF-8
|
79
|
+
EOF
|
80
|
+
echo "default locale set to en_US.UTF-8 UTF-8"
|
81
|
+
chroot $rootfs locale-gen 'en_US.UTF-8' > /dev/null 2>&1
|
82
|
+
chroot $rootfs update-locale LANG='en_US.UTF-8'
|
83
|
+
echo 'update-locale done'
|
84
|
+
|
85
|
+
# remove pointless services in a container
|
86
|
+
chroot $rootfs /usr/sbin/update-rc.d -f checkroot.sh remove
|
87
|
+
chroot $rootfs /usr/sbin/update-rc.d -f umountfs remove
|
88
|
+
chroot $rootfs /usr/sbin/update-rc.d -f hwclock.sh remove
|
89
|
+
chroot $rootfs /usr/sbin/update-rc.d -f hwclockfirst.sh remove
|
90
|
+
|
91
|
+
echo "root:vagrant" | chroot $rootfs chpasswd
|
92
|
+
|
93
|
+
if ! (grep -q vagrant $rootfs/etc/passwd); then
|
94
|
+
chroot $rootfs useradd --create-home -s /bin/bash vagrant
|
95
|
+
echo "vagrant:vagrant" | chroot $rootfs chpasswd
|
96
|
+
chroot $rootfs adduser vagrant sudo >/dev/null 2>&1 || true
|
97
|
+
chroot $rootfs cp /etc/sudoers /etc/sudoers.orig >/dev/null 2>&1 || true
|
98
|
+
chroot $rootfs sed -i -e \
|
99
|
+
's/%sudo\s\+ALL=(ALL\(:ALL\)\?)\s\+ALL/%sudo ALL=NOPASSWD:ALL/g' \
|
100
|
+
/etc/sudoers >/dev/null 2>&1 || true
|
101
|
+
fi
|
102
|
+
|
103
|
+
return 0
|
104
|
+
}
|
105
|
+
|
106
|
+
cleanup()
|
107
|
+
{
|
108
|
+
rm -rf ${cache}/partial
|
109
|
+
rm -rf ${cache}/rootfs
|
110
|
+
}
|
111
|
+
|
112
|
+
extract_rootfs()
|
113
|
+
{
|
114
|
+
tarball=$1
|
115
|
+
arch=$2
|
116
|
+
rootfs=$3
|
117
|
+
|
118
|
+
echo "Extracting $tarball ..."
|
119
|
+
mkdir -p $(dirname $rootfs)
|
120
|
+
# Make sure the rootfs does not exist before extracting
|
121
|
+
rm -rf $rootfs
|
122
|
+
(cd `dirname $rootfs` && tar xfz $tarball)
|
123
|
+
return 0
|
124
|
+
}
|
125
|
+
|
126
|
+
install_debian()
|
127
|
+
{
|
128
|
+
rootfs=$1
|
129
|
+
release=$2
|
130
|
+
tarball=$3
|
131
|
+
mkdir -p /var/lock/subsys/
|
132
|
+
|
133
|
+
(
|
134
|
+
flock -x 200
|
135
|
+
if [ $? -ne 0 ]; then
|
136
|
+
echo "Cache repository is busy."
|
137
|
+
return 1
|
138
|
+
fi
|
139
|
+
|
140
|
+
extract_rootfs $tarball $arch $rootfs
|
141
|
+
if [ $? -ne 0 ]; then
|
142
|
+
echo "Failed to copy rootfs"
|
143
|
+
return 1
|
144
|
+
fi
|
145
|
+
|
146
|
+
return 0
|
147
|
+
|
148
|
+
) 200>/var/lock/subsys/lxc
|
149
|
+
|
150
|
+
return $?
|
151
|
+
}
|
152
|
+
|
153
|
+
copy_configuration()
|
154
|
+
{
|
155
|
+
path=$1
|
156
|
+
rootfs=$2
|
157
|
+
name=$3
|
158
|
+
|
159
|
+
# if there is exactly one veth network entry, make sure it has an
|
160
|
+
# associated hwaddr.
|
161
|
+
nics=`grep -e '^lxc\.network\.type[ \t]*=[ \t]*veth' $path/config | wc -l`
|
162
|
+
if [ $nics -eq 1 ]; then
|
163
|
+
grep -q "^lxc.network.hwaddr" $path/config || cat <<EOF >> $path/config
|
164
|
+
lxc.network.hwaddr = 00:16:3e:$(openssl rand -hex 3| sed 's/\(..\)/\1:/g; s/.$//')
|
165
|
+
EOF
|
166
|
+
fi
|
167
|
+
|
168
|
+
grep -q "^lxc.rootfs" $path/config 2>/dev/null || echo "lxc.rootfs = $rootfs" >> $path/config
|
169
|
+
cat <<EOF >> $path/config
|
170
|
+
lxc.tty = 4
|
171
|
+
lxc.pts = 1024
|
172
|
+
lxc.utsname = ${name}
|
173
|
+
|
174
|
+
# When using LXC with apparmor, uncomment the next line to run unconfined:
|
175
|
+
#lxc.aa_profile = unconfined
|
176
|
+
|
177
|
+
lxc.cgroup.devices.deny = a
|
178
|
+
# Allow any mknod (but not using the node)
|
179
|
+
lxc.cgroup.devices.allow = c *:* m
|
180
|
+
lxc.cgroup.devices.allow = b *:* m
|
181
|
+
# /dev/null and zero
|
182
|
+
lxc.cgroup.devices.allow = c 1:3 rwm
|
183
|
+
lxc.cgroup.devices.allow = c 1:5 rwm
|
184
|
+
# consoles
|
185
|
+
lxc.cgroup.devices.allow = c 5:1 rwm
|
186
|
+
lxc.cgroup.devices.allow = c 5:0 rwm
|
187
|
+
lxc.cgroup.devices.allow = c 4:0 rwm
|
188
|
+
lxc.cgroup.devices.allow = c 4:1 rwm
|
189
|
+
# /dev/{,u}random
|
190
|
+
lxc.cgroup.devices.allow = c 1:9 rwm
|
191
|
+
lxc.cgroup.devices.allow = c 1:8 rwm
|
192
|
+
lxc.cgroup.devices.allow = c 136:* rwm
|
193
|
+
lxc.cgroup.devices.allow = c 5:2 rwm
|
194
|
+
# rtc
|
195
|
+
lxc.cgroup.devices.allow = c 254:0 rwm
|
196
|
+
#fuse
|
197
|
+
lxc.cgroup.devices.allow = c 10:229 rwm
|
198
|
+
#tun
|
199
|
+
lxc.cgroup.devices.allow = c 10:200 rwm
|
200
|
+
#full
|
201
|
+
lxc.cgroup.devices.allow = c 1:7 rwm
|
202
|
+
#hpet
|
203
|
+
lxc.cgroup.devices.allow = c 10:228 rwm
|
204
|
+
#kvm
|
205
|
+
lxc.cgroup.devices.allow = c 10:232 rwm
|
206
|
+
|
207
|
+
# mounts point
|
208
|
+
lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0
|
209
|
+
lxc.mount.entry = sysfs sys sysfs defaults 0 0
|
210
|
+
EOF
|
211
|
+
|
212
|
+
if [ $? -ne 0 ]; then
|
213
|
+
echo 'failed to add configuration'
|
214
|
+
return 1
|
215
|
+
fi
|
216
|
+
|
217
|
+
}
|
218
|
+
|
219
|
+
|
220
|
+
add_ssh_key()
|
221
|
+
{
|
222
|
+
user=$1
|
223
|
+
|
224
|
+
if [ -n "$auth_key" -a -f "$auth_key" ]; then
|
225
|
+
u_path="/home/${user}/.ssh"
|
226
|
+
root_u_path="$rootfs/$u_path"
|
227
|
+
|
228
|
+
mkdir -p $root_u_path
|
229
|
+
cp $auth_key "$root_u_path/authorized_keys"
|
230
|
+
chroot $rootfs chown -R ${user}: "$u_path"
|
231
|
+
|
232
|
+
echo "Inserted SSH public key from $auth_key into /home/${user}/.ssh/authorized_keys"
|
233
|
+
fi
|
234
|
+
}
|
235
|
+
|
236
|
+
disable_tmp_cleanup() {
|
237
|
+
rootfs=$1
|
238
|
+
chroot $rootfs /usr/sbin/update-rc.d -f checkroot-bootclean.sh remove
|
239
|
+
chroot $rootfs /usr/sbin/update-rc.d -f mountall-bootclean.sh remove
|
240
|
+
chroot $rootfs /usr/sbin/update-rc.d -f mountnfs-bootclean.sh remove
|
241
|
+
}
|
242
|
+
|
243
|
+
usage()
|
244
|
+
{
|
245
|
+
cat <<EOF
|
246
|
+
$1 -h|--help [-a|--arch] [-d|--debug]
|
247
|
+
[-F | --flush-cache] [-r|--release <release>] [ -S | --auth-key <keyfile>]
|
248
|
+
release: the debian release (e.g. wheezy): defaults to host release on debian, otherwise uses latest stable
|
249
|
+
arch: the container architecture (e.g. amd64): defaults to host arch
|
250
|
+
auth-key: SSH Public key file to inject into container
|
251
|
+
EOF
|
252
|
+
return 0
|
253
|
+
}
|
254
|
+
|
255
|
+
options=$(getopt -o a:b:hp:r:xn:Fd:C -l arch:,help,path:,release:,name:,flush-cache,auth-key:,debug:,tarball: -- "$@")
|
256
|
+
if [ $? -ne 0 ]; then
|
257
|
+
usage $(basename $0)
|
258
|
+
exit 1
|
259
|
+
fi
|
260
|
+
eval set -- "$options"
|
261
|
+
|
262
|
+
release=wheezy # Default to the last Debian stable release
|
263
|
+
|
264
|
+
arch=$(uname -m)
|
265
|
+
|
266
|
+
# Code taken from debootstrap
|
267
|
+
if [ -x /usr/bin/dpkg ] && /usr/bin/dpkg --print-architecture >/dev/null 2>&1; then
|
268
|
+
arch=`/usr/bin/dpkg --print-architecture`
|
269
|
+
elif type udpkg >/dev/null 2>&1 && udpkg --print-architecture >/dev/null 2>&1; then
|
270
|
+
arch=`/usr/bin/udpkg --print-architecture`
|
271
|
+
else
|
272
|
+
arch=$(uname -m)
|
273
|
+
if [ "$arch" = "i686" ]; then
|
274
|
+
arch="i386"
|
275
|
+
elif [ "$arch" = "x86_64" ]; then
|
276
|
+
arch="amd64"
|
277
|
+
elif [ "$arch" = "armv7l" ]; then
|
278
|
+
arch="armel"
|
279
|
+
fi
|
280
|
+
fi
|
281
|
+
|
282
|
+
debug=0
|
283
|
+
hostarch=$arch
|
284
|
+
while true
|
285
|
+
do
|
286
|
+
case "$1" in
|
287
|
+
-h|--help) usage $0 && exit 0;;
|
288
|
+
-p|--path) path=$2; shift 2;;
|
289
|
+
-n|--name) name=$2; shift 2;;
|
290
|
+
-T|--tarball) tarball=$2; shift 2;;
|
291
|
+
-r|--release) release=$2; shift 2;;
|
292
|
+
-S|--auth-key) auth_key=$2; shift 2;;
|
293
|
+
-a|--arch) arch=$2; shift 2;;
|
294
|
+
-d|--debug) debug=1; shift 1;;
|
295
|
+
--) shift 1; break ;;
|
296
|
+
*) break ;;
|
297
|
+
esac
|
298
|
+
done
|
299
|
+
|
300
|
+
if [ $debug -eq 1 ]; then
|
301
|
+
set -x
|
302
|
+
fi
|
303
|
+
|
304
|
+
|
305
|
+
if [ "$arch" == "i686" ]; then
|
306
|
+
arch=i386
|
307
|
+
fi
|
308
|
+
|
309
|
+
if [ $hostarch = "i386" -a $arch = "amd64" ]; then
|
310
|
+
echo "can't create amd64 container on i386"
|
311
|
+
exit 1
|
312
|
+
fi
|
313
|
+
|
314
|
+
if [ -z "$path" ]; then
|
315
|
+
echo "'path' parameter is required"
|
316
|
+
exit 1
|
317
|
+
fi
|
318
|
+
|
319
|
+
if [ "$(id -u)" != "0" ]; then
|
320
|
+
echo "This script should be run as 'root'"
|
321
|
+
exit 1
|
322
|
+
fi
|
323
|
+
|
324
|
+
# detect rootfs
|
325
|
+
config="$path/config"
|
326
|
+
if grep -q '^lxc.rootfs' $config 2>/dev/null ; then
|
327
|
+
rootfs=`grep 'lxc.rootfs =' $config | awk -F= '{ print $2 }'`
|
328
|
+
else
|
329
|
+
rootfs=$path/rootfs
|
330
|
+
fi
|
331
|
+
|
332
|
+
install_debian $rootfs $release $tarball
|
333
|
+
if [ $? -ne 0 ]; then
|
334
|
+
echo "failed to install debian $release"
|
335
|
+
exit 1
|
336
|
+
fi
|
337
|
+
|
338
|
+
configure_debian $rootfs $release
|
339
|
+
if [ $? -ne 0 ]; then
|
340
|
+
echo "failed to configure debian $release for a container"
|
341
|
+
exit 1
|
342
|
+
fi
|
343
|
+
|
344
|
+
copy_configuration $path $rootfs $name
|
345
|
+
if [ $? -ne 0 ]; then
|
346
|
+
echo "failed write configuration file"
|
347
|
+
exit 1
|
348
|
+
fi
|
349
|
+
|
350
|
+
add_ssh_key vagrant
|
351
|
+
|
352
|
+
# vagrant and / or plugins might mount some shared folders under /tmp by default
|
353
|
+
# (like puppet manifests) and we need to make sure no shared folder gets its
|
354
|
+
# contents removed because of it. For more information, please check:
|
355
|
+
# https://github.com/fgrehm/vagrant-lxc/issues/68
|
356
|
+
disable_tmp_cleanup $rootfs
|
357
|
+
|
358
|
+
echo ""
|
359
|
+
echo "##"
|
360
|
+
echo "# The default user is 'vagrant' with password 'vagrant'!"
|
361
|
+
echo "# Use the 'sudo' command to run tasks as root in the container."
|
362
|
+
echo "##"
|
363
|
+
echo ""
|
data/boxes/ubuntu/download
CHANGED
@@ -35,6 +35,17 @@ EOF
|
|
35
35
|
download_ubuntu()
|
36
36
|
{
|
37
37
|
packages=vim,ssh,curl,wget,bash-completion,manpages,man-db,psmisc
|
38
|
+
|
39
|
+
# Try to guess a list of langpacks to install
|
40
|
+
langpacks="language-pack-en"
|
41
|
+
|
42
|
+
if which dpkg >/dev/null 2>&1; then
|
43
|
+
langpacks=`(echo $langpacks &&
|
44
|
+
dpkg -l | grep -E "^ii language-pack-[a-z]* " |
|
45
|
+
cut -d ' ' -f3) | sort -u`
|
46
|
+
fi
|
47
|
+
packages="$packages,$(echo $langpacks | sed 's/ /,/g')"
|
48
|
+
|
38
49
|
echo "installing packages: $packages"
|
39
50
|
|
40
51
|
trap cleanup EXIT SIGHUP SIGINT SIGTERM
|
data/boxes/ubuntu/lxc-template
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
3
|
# This is a modified version of /usr/share/lxc/templates/lxc-ubuntu
|
4
|
-
# that comes with Ubuntu
|
4
|
+
# that comes with Ubuntu 13.04 changed to suit vagrant-lxc needs
|
5
5
|
|
6
6
|
#
|
7
7
|
# template script for generating ubuntu container for LXC
|
@@ -36,8 +36,8 @@ fi
|
|
36
36
|
configure_ubuntu()
|
37
37
|
{
|
38
38
|
rootfs=$1
|
39
|
-
release=$
|
40
|
-
hostname
|
39
|
+
release=$2
|
40
|
+
hostname=$2
|
41
41
|
|
42
42
|
# configure the network using the dhcp
|
43
43
|
cat <<EOF > $rootfs/etc/network/interfaces
|
@@ -83,6 +83,10 @@ EOF
|
|
83
83
|
echo "vagrant:vagrant" | chroot $rootfs chpasswd
|
84
84
|
fi
|
85
85
|
|
86
|
+
# make sure we have the current locale defined in the container
|
87
|
+
chroot $rootfs locale-gen en_US.UTF-8
|
88
|
+
chroot $rootfs update-locale LANG=en_US.UTF-8
|
89
|
+
|
86
90
|
return 0
|
87
91
|
}
|
88
92
|
|
@@ -108,8 +112,6 @@ finalize_user()
|
|
108
112
|
|
109
113
|
chroot $rootfs cp /etc/sudoers /etc/sudoers.orig >/dev/null 2>&1 || true
|
110
114
|
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
|
111
|
-
chroot $rootfs locale-gen en_US en_US.UTF-8 hu_HU hu_HU.UTF-8 >/dev/null 2>&1 || true
|
112
|
-
chroot $rootfs dpkg-reconfigure locales >/dev/null 2>&1 || true
|
113
115
|
|
114
116
|
if [ -n "$auth_key" -a -f "$auth_key" ]; then
|
115
117
|
u_path="/home/${user}/.ssh"
|
@@ -202,7 +204,6 @@ copy_configuration()
|
|
202
204
|
rootfs=$2
|
203
205
|
name=$3
|
204
206
|
arch=$4
|
205
|
-
release=$5
|
206
207
|
|
207
208
|
if [ $arch = "i386" ]; then
|
208
209
|
arch="i686"
|
@@ -217,24 +218,23 @@ copy_configuration()
|
|
217
218
|
# associated hwaddr.
|
218
219
|
nics=`grep -e '^lxc\.network\.type[ \t]*=[ \t]*veth' $path/config | wc -l`
|
219
220
|
if [ $nics -eq 1 ]; then
|
220
|
-
grep -q "^lxc.network.hwaddr" $path/config ||
|
221
|
-
lxc.network.hwaddr = 00:16:3e:$(openssl rand -hex 3| sed 's/\(..\)/\1:/g; s/.$//')
|
222
|
-
EOF
|
221
|
+
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
|
223
222
|
fi
|
224
223
|
|
225
224
|
grep -q "^lxc.rootfs" $path/config 2>/dev/null || echo "lxc.rootfs = $rootfs" >> $path/config
|
226
225
|
cat <<EOF >> $path/config
|
227
|
-
lxc.
|
226
|
+
lxc.mount = $path/fstab
|
227
|
+
lxc.pivotdir = lxc_putold
|
228
228
|
|
229
229
|
lxc.devttydir =$ttydir
|
230
230
|
lxc.tty = 4
|
231
231
|
lxc.pts = 1024
|
232
|
-
|
232
|
+
|
233
|
+
lxc.utsname = $name
|
233
234
|
lxc.arch = $arch
|
234
235
|
lxc.cap.drop = sys_module mac_admin mac_override
|
235
|
-
lxc.pivotdir = lxc_putold
|
236
236
|
|
237
|
-
# uncomment the next line to run
|
237
|
+
# When using LXC with apparmor, uncomment the next line to run unconfined:
|
238
238
|
#lxc.aa_profile = unconfined
|
239
239
|
|
240
240
|
lxc.cgroup.devices.deny = a
|
@@ -350,15 +350,6 @@ EOF
|
|
350
350
|
# /lib/init/fstab: cleared out for bare-bones lxc
|
351
351
|
EOF
|
352
352
|
|
353
|
-
# reconfigure some services
|
354
|
-
if [ -z "$LANG" ]; then
|
355
|
-
chroot $rootfs locale-gen en_US.UTF-8
|
356
|
-
chroot $rootfs update-locale LANG=en_US.UTF-8
|
357
|
-
else
|
358
|
-
chroot $rootfs locale-gen $LANG
|
359
|
-
chroot $rootfs update-locale LANG=$LANG
|
360
|
-
fi
|
361
|
-
|
362
353
|
# remove pointless services in a container
|
363
354
|
chroot $rootfs /usr/sbin/update-rc.d -f ondemand remove
|
364
355
|
|
@@ -551,7 +542,7 @@ if [ $? -ne 0 ]; then
|
|
551
542
|
exit 1
|
552
543
|
fi
|
553
544
|
|
554
|
-
copy_configuration $path $rootfs $name $arch
|
545
|
+
copy_configuration $path $rootfs $name $arch
|
555
546
|
if [ $? -ne 0 ]; then
|
556
547
|
echo "failed write configuration file"
|
557
548
|
exit 1
|