[lxc-devel] [PATCH 1/1] ubuntu-cloud template cleanups

Serge Hallyn serge.hallyn at canonical.com
Tue Sep 4 20:45:56 UTC 2012


 From:  Scott Moser <smoser at ubuntu.com>
Fix for quantal images which do not have the user 'ubuntu' present.
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/1045955

Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
 templates/lxc-ubuntu-cloud.in |  109 +++++++++++++++++++++--------------------
 1 file changed, 57 insertions(+), 52 deletions(-)

diff --git a/templates/lxc-ubuntu-cloud.in b/templates/lxc-ubuntu-cloud.in
index a87a979..722d47f 100644
--- a/templates/lxc-ubuntu-cloud.in
+++ b/templates/lxc-ubuntu-cloud.in
@@ -230,6 +230,15 @@ if [ -n "$userdata" ]; then
     fi
 fi
 
+if [ -n "$auth_key" ]; then
+    if [ ! -f "$auth_key" ]; then
+        echo "--auth-key=${auth_key} must reference a file"
+        exit 1
+    fi
+    auth_key=$(readlink -f "${auth_key}") ||
+        { echo "failed to get full path for auth_key"; exit 1; }
+fi
+
 if [ -z "$path" ]; then
     echo "'path' parameter is required"
     exit 1
@@ -258,17 +267,17 @@ cache="/var/cache/lxc/cloud-$release"
 mkdir -p $cache
 
 if [ -n "$tarball" ]; then
-	url2="$tarball"
+    url2="$tarball"
 else
-	url1=`ubuntu-cloudimg-query $release $stream $arch --format "%{url}\n"`
-	url2=`echo $url1 | sed -e 's/.tar.gz/-root\0/'`
+    url1=`ubuntu-cloudimg-query $release $stream $arch --format "%{url}\n"`
+    url2=`echo $url1 | sed -e 's/.tar.gz/-root\0/'`
 fi
 
 filename=`basename $url2`
 
 wgetcleanup()
 {
-	rm -f $filename
+    rm -f $filename
 }
 
 buildcleanup()
@@ -321,7 +330,7 @@ mkdir -p /var/lock/subsys/
 
     trap wgetcleanup EXIT SIGHUP SIGINT SIGTERM
     if [ ! -f $filename ]; then
-       wget $url2 || build_root_tgz $url1 $filename
+        wget $url2 || build_root_tgz $url1 $filename
     fi
     trap EXIT
     trap SIGHUP
@@ -335,67 +344,63 @@ mkdir -p /var/lock/subsys/
 
 
     if [ $cloud -eq 0 ]; then
-	echo "Configuring for running outside of a cloud environment"
-	echo "If you want to configure for a cloud evironment, please use '-- -C' to create the container"
+        echo "Configuring for running outside of a cloud environment"
+        echo "If you want to configure for a cloud evironment, please use '-- -C' to create the container"
 
-	seed_d=$rootfs/var/lib/cloud/seed/nocloud-net
-	rhostid=$(uuidgen | cut -c -8)
-	host_id=${hostid:-$rhostid}
-	mkdir -p $seed_d
+        seed_d=$rootfs/var/lib/cloud/seed/nocloud-net
+        rhostid=$(uuidgen | cut -c -8)
+        host_id=${hostid:-$rhostid}
+        mkdir -p $seed_d
 
-	cat > "$seed_d/meta-data" <<EOF
-instance_id: lxc-$host_id
+        cat > "$seed_d/meta-data" <<EOF
+instance-id: lxc-$host_id
 EOF
-
-	rm $rootfs/etc/hostname
-
-	if [ $locales -eq 1 ]; then
-		cp /usr/lib/locale/locale-archive $rootfs/usr/lib/locale/locale-archive
-	fi
-
-
-	if [ -n "$auth_key" -a -f "$auth_key" ]; then
-		u_path="/home/ubuntu/.ssh"
-		root_u_path="$rootfs/$u_path"
-		mkdir -p $root_u_path
-		cp $auth_key "$root_u_path/authorized_keys"
-		chroot $rootfs chown -R ubuntu: "$u_path"
-
-		echo "Inserted SSH public key from $auth_key into /home/ubuntu/.ssh/authorized_keys"
-	fi
-
-	if [ -f "$userdata" ]; then
-		echo "Using custom user-data"
-		cp $userdata $seed_d/user-data
-	else
-
-		if [ -z "$MIRROR" ]; then
-			MIRROR="http://archive.ubuntu.com/ubuntu"
-		fi
-
-		cat > "$seed_d/user-data" <<EOF
+        if [ -n "$auth_key" ]; then
+            {
+            echo "public-keys:" &&
+            sed -e '/^$/d' -e 's,^,- ,' "$auth_key" "$auth_key"
+            } >> "$seed_d/meta-data"
+            [ $? -eq 0 ] ||
+                { echo "failed to write public keys to metadata"; exit 1; }
+        fi
+
+        rm $rootfs/etc/hostname
+
+        if [ $locales -eq 1 ]; then
+            cp /usr/lib/locale/locale-archive $rootfs/usr/lib/locale/locale-archive
+        fi
+
+        if [ -f "$userdata" ]; then
+            echo "Using custom user-data"
+            cp $userdata $seed_d/user-data
+        else
+
+            if [ -z "$MIRROR" ]; then
+                MIRROR="http://archive.ubuntu.com/ubuntu"
+            fi
+
+            cat > "$seed_d/user-data" <<EOF
 #cloud-config
 output: {all: '| tee -a /var/log/cloud-init-output.log'}
-apt-mirror: $MIRROR
+apt_mirror: $MIRROR
 manage_etc_hosts: localhost
 locale: $(/usr/bin/locale | awk -F= '/LANG=/ {print$NF}')
+password: ubuntu
+chpasswd: { expire: False }
 EOF
-	fi
-
-	chroot $rootfs /usr/sbin/usermod -U ubuntu
-    	echo "ubuntu:ubuntu" | chroot $rootfs chpasswd
-	echo "Please login as user ubuntu with password ubuntu."
+        fi
 
-   else
-
-	echo "Configured for running in a cloud environment."
-	echo "If you do not have a meta-data service, this container will likely be useless."
+    else
 
-   fi
+        echo "Configured for running in a cloud environment."
+        echo "If you do not have a meta-data service, this container will likely be useless."
 
+    fi
 ) 200>/var/lock/subsys/lxc-ubucloud
 
 copy_configuration $path $rootfs $name $arch $release
 
 echo "Container $name created."
 exit 0
+
+# vi: ts=4 expandtab
-- 
1.7.10.4





More information about the lxc-devel mailing list