~ubuntu-branches/ubuntu/quantal/lxc/quantal-201205292108

« back to all changes in this revision

Viewing changes to debian/patches/0043-tweak-templates.patch

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn
  • Date: 2012-04-26 15:18:35 UTC
  • mfrom: (3.1.41 sid)
  • Revision ID: package-import@ubuntu.com-20120426151835-3vz6kb4m90gb26js
Tags: 0.8.0~rc1-4ubuntu1
* Merge from unstable.  Remaining changes:
  - control:
    - update maintainer
    - Build-Depends: add dh-apparmor and libapparmor-dev
    - lxc Depends: add bridge-utils, dnsmasq-base, iptables, rsync
    - lxc Recommends: add cgroup-lite | cgroup-bin, openssl
    - lxc Suggests: add btrfs-tools, lvm2, qemu-user-static
    - lxc Conflicts: remove (cgroup-bin)
  - Add lxc-start-ephemeral and lxc-wait to debian/local
  - apparmor:
    - add lxc.apparmor, lxc-containers.apparmor,
      lxc-default.apparmor, and new lxc.apparmor.in
  - add debian/lxc.conf (default container creation config file)
  - debian/lxc.install.in:
    * add lxc-start-ephemeral
    * add debian/lxc.conf
    * skip lxc-debconf*
    * skip lxc-ls (Use upstream's)
  - debian/lxc*.install.in: use '*', not @DEB_HOST_MULTIARCH@
  - Use our own completely different lxc.postinst and lxc.postrm
  - remove lxc.templates
  - debian/rules:
    * add DEB_DH_INSTALLINIT_ARGS = --upstart-only
    * don't do debconf stuff
    * add debian/*.apparmor.in to files processed under
      override_dh_auto_clean
    * don't comment out ubuntu or busybox templates
    * do apparmor stuff and install our own lxc-wait under override_dh_install
    * install our upstart scripts in override_dh_installinit
  - add lxc.default, lxc.lxc-net.upstart, lxc.upstart under
    debian/

* patches kept:
  - 0013-lxc-create-use-default-config.patch (needed manual rebase)
  - 0030-ubuntu-template-fail.patch
  - 0031-ubuntu-template-resolvconf.patch
  - 0044-lxc-destroy-rm-autos
  - debian/patches/0045-fix-other-templates
  - debian/patches/0046-lxc-clone-change-hwaddr
  - debian/patches/0047-bindhome-check-shell
  - debian/patches/0049-ubuntu-template-sudo-and-cleanup
  - debian/patches/0050-clone-lvm-sizes
  - debian/patches/0052-ubuntu-bind-user-conflict
  - debian/patches/0053-lxc-start-pin-rootfs
  - debian/patches/0054-ubuntu-debug
  - debian/patches/0055-ubuntu-handle-badgrp
  - debian/patches/0056-dont-watch-utmp
  - debian/patches/0057-update-manpages
  - debian/patches/0058-fixup-ubuntu-cloud
  - debian/patches/0059-reenable-daily-cloudimg
  - debian/patches/0060-lxc-shutdown
  - debian/patches/0061-lxc-start-apparmor
  - debian/patches/0062-templates-relative-paths
  - debian/patches/0063-check-apparmor-enabled
  - debian/patches/0064-apparmor-mount-proc
  - debian/patches/0065-fix-bindhome-relpath
  - debian/patches/0066-confile-typo
  - debian/patches/0067-templates-lxc-profile
  - debian/patches/0068-fix-lxc-config-layout 
  - debian/patches/0069-ubuntu-cloud-fix
  - debian/patches/0070-templates-rmdir-dev-shm
  - debian/patches/0071-ubuntu-cloud-fix-image-extraction
  - debian/patches/0072-lxc-shutdown-help
  - debian/patches/0073-lxc-destroy-waits-before-destroy
  - mark all patches which have been forwarded as such, refresh all
* 0074-lxc-execute-find-init: lxc-init had moved.  Introduce a function in
  lxc-execute to go find it.  Otherwise lxc-execute for any older releases
  will fail.
* 0075-lxc-ls-bash: lxc-ls needs bash, not sh
* add debian/lxc.apparmor.in so DEB_HOST_MULTIARCH can be expanded
* 0076-fix-sprintfs:  - check return values for all sprintfs and snprintfs
  which could overflow (LP: #988918)
* 0077-execute-without-rootfs: let lxc-execute succeed with no rootfs
  (LP: #981955)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
Description: update ubuntu templates to provide macaddr and more
2
 
 Allow specifying ssh authkeys.  In cloud template, copy locales
3
 
 by default and allow a tarball to be specified.
4
 
Author: Ben Howard <ben.howard@canonical.com>
5
 
Forwarded: yes
6
 
 
7
 
Index: lxc/templates/lxc-ubuntu-cloud.in
8
 
===================================================================
9
 
--- lxc.orig/templates/lxc-ubuntu-cloud.in      2012-02-15 23:54:13.293919345 -0600
10
 
+++ lxc/templates/lxc-ubuntu-cloud.in   2012-02-16 09:51:23.387617847 -0600
11
 
@@ -36,6 +36,15 @@
12
 
         arch="i686"
13
 
     fi
14
 
 
15
 
+    # if there is exactly one veth network entry, make sure it has an
16
 
+    # associated hwaddr.
17
 
+    nics=`grep -e '^lxc\.network\.type[ \t]*=[ \t]*veth' $path/config | wc -l`
18
 
+    if [ $nics -eq 1 ]; then
19
 
+        grep -q "^lxc.network.hwaddr" $path/config || cat <<EOF >> $path/config
20
 
+lxc.network.hwaddr= 00:16:3e:$(openssl rand -hex 3| sed 's/\(..\)/\1:/g; s/.$//')
21
 
+EOF
22
 
+    fi
23
 
+
24
 
     cat <<EOF >> $path/config
25
 
 lxc.utsname = $name
26
 
 
27
 
@@ -88,14 +97,25 @@
28
 
 usage()
29
 
 {
30
 
     cat <<EOF
31
 
-$1 -h|--help [-a|--arch] [-F | --flush-cache] [-r|--release <release>]
32
 
-release: lucid | maverick | natty | oneiric | precise
33
 
-arch: amd64 or i386: defaults to host arch
34
 
+LXC Container configuration for Ubuntu Cloud images.
35
 
+
36
 
+Generic Options
37
 
+[ -r | --release <release> ]: Release name of container, defaults to host
38
 
+[ -a | --arch ]: Arhcitecture of container, defaults to host arcitecture
39
 
+[ -C | --cloud ]: Configure container for use with meta-data service, defaults to no
40
 
+[ -T | --tarball ]: Location of tarball
41
 
+
42
 
+Options, mutually exclusive of "-C" and "--cloud":
43
 
+  [ -i | --hostid ]:    HostID for cloud-init, defaults to random string
44
 
+  [ -u | --userdata ]:  Cloud-init user-data file to configure container on start
45
 
+  [ -S | --auth_key ]:  SSH Public key file to inject into container
46
 
+  [ -L | --nolocales ]: Do not copy host's locales into container
47
 
+
48
 
 EOF
49
 
     return 0
50
 
 }
51
 
 
52
 
-options=$(getopt -o a:hp:r:n:Fi:C -l arch:,help,path:,release:,name:,flush-cache,hostid:,cloud -- "$@")
53
 
+options=$(getopt -o a:hp:r:n:Fi:CLS:T: -l arch:,help,path:,release:,name:,flush-cache,hostid:,auth-key:,cloud,no_locales,tarball: -- "$@")
54
 
 if [ $? -ne 0 ]; then
55
 
     usage $(basename $0)
56
 
     exit 1
57
 
@@ -132,20 +152,24 @@
58
 
 
59
 
 hostarch=$arch
60
 
 cloud=0
61
 
+locales=1
62
 
 flushcache=0
63
 
 while true
64
 
 do
65
 
     case "$1" in
66
 
-    -h|--help)      usage $0 && exit 0;;
67
 
-    -p|--path)      path=$2; shift 2;;
68
 
-    -n|--name)      name=$2; shift 2;;
69
 
-    -F|--flush-cache) flushcache=1; shift 1;;
70
 
-    -r|--release)   release=$2; shift 2;;
71
 
-    -a|--arch)      arch=$2; shift 2;;
72
 
-    -i|--hostid)    host_id=$2; shift 2;;
73
 
-    -u|--userdata)  userdata=$2; shift 2;;
74
 
-    -C|--cloud)     cloud=1; shift 1;;
75
 
-    --)             shift 1; break ;;
76
 
+    -h|--help)         usage $0 && exit 0;;
77
 
+    -p|--path)         path=$2; shift 2;;
78
 
+    -n|--name)         name=$2; shift 2;;
79
 
+    -F|--flush-cache)  flushcache=1; shift 1;;
80
 
+    -r|--release)      release=$2; shift 2;;
81
 
+    -a|--arch)         arch=$2; shift 2;;
82
 
+    -i|--hostid)       host_id=$2; shift 2;;
83
 
+    -u|--userdata)     userdata=$2; shift 2;;
84
 
+    -C|--cloud)        cloud=1; shift 1;;
85
 
+    -S|--auth_key)     auth_key=$2; shift 2;;
86
 
+    -L|--no_locales)   locales=0; shift 2;;
87
 
+    -T|--tarball)      tarball=$2; shift 2;;
88
 
+    --)                shift 1; break ;;
89
 
         *)              break ;;
90
 
     esac
91
 
 done
92
 
@@ -185,8 +209,13 @@
93
 
 
94
 
 mkdir -p $cache
95
 
 
96
 
-url1=`ubuntu-cloudimg-query precise daily $arch --format "%{url}\n"`
97
 
-url2=`echo $url1 | sed -e 's/.tar.gz/-root\0/'`
98
 
+if [ -n "$tarball" ]; then
99
 
+       url2="$tarball"
100
 
+else
101
 
+       url1=`ubuntu-cloudimg-query precise daily $arch --format "%{url}\n"`
102
 
+       url2=`echo $url1 | sed -e 's/.tar.gz/-root\0/'`
103
 
+fi
104
 
+
105
 
 filename=`basename $url2`
106
 
 
107
 
 mkdir -p /var/lock/subsys/
108
 
@@ -200,7 +229,7 @@
109
 
     fi
110
 
 
111
 
     if [ ! -f $filename ]; then
112
 
-        wget $url2
113
 
+       wget $url2
114
 
     fi
115
 
 
116
 
     echo "Extracting rootfs"
117
 
@@ -215,21 +244,46 @@
118
 
 
119
 
        seed_d=$rootfs/var/lib/cloud/seed/nocloud-net
120
 
        rhostid=$(uuidgen | cut -c -8)
121
 
-        host_id=${hostid:-$rhostid}
122
 
-        mkdir -p $seed_d
123
 
+       host_id=${hostid:-$rhostid}
124
 
+       mkdir -p $seed_d
125
 
 
126
 
        cat > "$seed_d/meta-data" <<EOF
127
 
 instance_id: lxc-$host_id
128
 
 EOF
129
 
 
130
 
+       rm $rootfs/etc/hostname
131
 
+
132
 
+       if [ $locales -eq 1 ]; then
133
 
+               cp /usr/lib/locale/locale-archive $rootfs/usr/lib/locale/locale-archive
134
 
+       fi
135
 
+
136
 
+
137
 
+       if [ -n "$auth_key" -a -f "$auth_key" ]; then
138
 
+               u_path="/home/ubuntu/.ssh"
139
 
+               root_u_path="$rootfs/$u_path"
140
 
+               mkdir -p $root_u_path
141
 
+               cp $auth_key "$root_u_path/authorized_keys"
142
 
+               chroot $rootfs chown -R ubuntu: "$u_path"
143
 
+
144
 
+               echo "Inserted SSH public key from $auth_key into /home/ubuntu/.ssh/authorized_keys"
145
 
+       fi
146
 
+
147
 
        if [ ! -f $userdata ]; then
148
 
-               cp $userdata $seed_d/user-data
149
 
+               cp $userdata $data_d/user-data
150
 
        else
151
 
-               echo "#cloud-config" > $seed_d/user-data
152
 
+
153
 
                if [ -z "$MIRROR" ]; then
154
 
                        MIRROR="http://archive.ubuntu.com/ubuntu"
155
 
                fi
156
 
-               echo "apt-mirror: $MIRROR" >> $seed_d/user-data
157
 
+
158
 
+               cat > "$seed_d/user-data" <<EOF
159
 
+#cloud-config
160
 
+output: {all: '| tee -a /var/log/cloud-init-output.log'}
161
 
+apt-mirror: $MIRROR
162
 
+manage_etc_hosts: localhost
163
 
+locale: $(/usr/bin/locale | awk -F= '/LANG=/ {print$NF}')
164
 
+EOF
165
 
+
166
 
        fi
167
 
 
168
 
        chroot $rootfs /usr/sbin/usermod -U ubuntu
169
 
Index: lxc/templates/lxc-ubuntu.in
170
 
===================================================================
171
 
--- lxc.orig/templates/lxc-ubuntu.in    2012-02-15 23:54:13.309919426 -0600
172
 
+++ lxc/templates/lxc-ubuntu.in 2012-02-16 09:51:31.711659121 -0600
173
 
@@ -70,6 +70,15 @@
174
 
     chroot $rootfs groupadd --system $group >/dev/null 2>&1 || true
175
 
     chroot $rootfs useradd --create-home -s /bin/bash -G $group ubuntu
176
 
     echo "ubuntu:ubuntu" | chroot $rootfs chpasswd
177
 
+    if [ -n "$auth_key" -a -f "$auth_key" ]; then
178
 
+       u_path="/home/ubuntu/.ssh"
179
 
+       root_u_path="$rootfs/$u_path"
180
 
+       mkdir -p $root_u_path
181
 
+       cp $auth_key "$root_u_path/authorized_keys"
182
 
+       chroot $rootfs chown -R ubuntu: "$u_path"
183
 
+
184
 
+       echo "Inserted SSH public key from $auth_key into /home/ubuntu/.ssh/authorized_keys"
185
 
+    fi
186
 
     return 0
187
 
 }
188
 
 
189
 
@@ -258,6 +267,15 @@
190
 
         ttydir=" lxc"
191
 
     fi
192
 
 
193
 
+    # if there is exactly one veth network entry, make sure it has an
194
 
+    # associated hwaddr.
195
 
+    nics=`grep -e '^lxc\.network\.type[ \t]*=[ \t]*veth' $path/config | wc -l`
196
 
+    if [ $nics -eq 1 ]; then
197
 
+        grep -q "^lxc.network.hwaddr" $path/config || cat <<EOF >> $path/config
198
 
+lxc.network.hwaddr= 00:16:3e:$(openssl rand -hex 3| sed 's/\(..\)/\1:/g; s/.$//')
199
 
+EOF
200
 
+    fi
201
 
+
202
 
     cat <<EOF >> $path/config
203
 
 lxc.utsname = $name
204
 
 
205
 
@@ -480,16 +498,17 @@
206
 
 {
207
 
     cat <<EOF
208
 
 $1 -h|--help [-a|--arch] [-b|--bindhome <user>] [--trim]
209
 
-   [-F | --flush-cache] [-r|--release <release>]
210
 
+   [-F | --flush-cache] [-r|--release <release>] [ -S | --auth_key <keyfile>]
211
 
 release: lucid | maverick | natty | oneiric | precise
212
 
 trim: make a minimal (faster, but not upgrade-safe) container
213
 
 bindhome: bind <user>'s home into the container
214
 
 arch: amd64 or i386: defaults to host arch
215
 
+auth_key: SSH Public key file to inject into container
216
 
 EOF
217
 
     return 0
218
 
 }
219
 
 
220
 
-options=$(getopt -o a:b:hp:r:xn:F -l arch:,bindhome:,help,path:,release:,trim,name:,flush-cache -- "$@")
221
 
+options=$(getopt -o a:b:hp:r:xn:FS: -l arch:,bindhome:,help,path:,release:,trim,name:,flush-cache,auth-key: -- "$@")
222
 
 if [ $? -ne 0 ]; then
223
 
     usage $(basename $0)
224
 
     exit 1
225
 
@@ -539,6 +558,7 @@
226
 
     -b|--bindhome)  bindhome=$2; shift 2;;
227
 
     -a|--arch)      arch=$2; shift 2;;
228
 
     -x|--trim)      trim_container=1; shift 1;;
229
 
+    -S|--auth_key)  auth_key=$2; shift 2;;
230
 
     --)             shift 1; break ;;
231
 
         *)              break ;;
232
 
     esac