~serge-hallyn/ubuntu/quantal/lxc/lxc-fixapi

« back to all changes in this revision

Viewing changes to .pc/0030-ubuntu-template-fail.patch/templates/lxc-ubuntu.in

  • 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:
32
32
{
33
33
    rootfs=$1
34
34
    hostname=$2
 
35
    release=$3
35
36
 
36
37
   # configure the network using the dhcp
37
38
    cat <<EOF > $rootfs/etc/network/interfaces
42
43
iface eth0 inet dhcp
43
44
EOF
44
45
 
45
 
    # so you can 'ssh $hostname.' or 'ssh $hostname.local'
46
 
    if [ -f $rootfs/etc/dhcp/dhclient.conf ]; then
47
 
        sed -i "s/<hostname>/$hostname/" $rootfs/etc/dhcp/dhclient.conf
48
 
    elif [ -f $rootfs/etc/dhcp3/dhclient.conf ]; then
49
 
        sed -i "s/<hostname>/$hostname/" $rootfs/etc/dhcp3/dhclient.conf
50
 
    fi
51
 
 
52
46
    # set the hostname
53
47
    cat <<EOF > $rootfs/etc/hostname
54
48
$hostname
58
52
127.0.0.1 localhost $hostname
59
53
EOF
60
54
 
61
 
    # suppress log level output for udev
62
 
    sed -i "s/=\"err\"/=0/" $rootfs/etc/udev/udev.conf
63
 
 
64
 
    # remove jobs for consoles 5 and 6 since we only create 4 consoles in
65
 
    # this template
66
 
    rm -f $rootfs/etc/init/tty{5,6}.conf
67
 
 
68
 
    echo "Please change root-password !"
69
 
    echo "root:root" | chroot $rootfs chpasswd
70
 
 
 
55
    if [ "$release" = "precise" ]; then
 
56
        group="sudo"
 
57
    else
 
58
        group="admin"
 
59
 
 
60
        # suppress log level output for udev
 
61
        sed -i "s/=\"err\"/=0/" $rootfs/etc/udev/udev.conf
 
62
 
 
63
        # remove jobs for consoles 5 and 6 since we only create 4 consoles in
 
64
        # this template
 
65
        rm -f $rootfs/etc/init/tty{5,6}.conf
 
66
    fi
 
67
 
 
68
    chroot $rootfs groupadd --system $group >/dev/null 2>&1 || true
 
69
    chroot $rootfs useradd --create-home -s /bin/bash -G $group ubuntu
 
70
    echo "ubuntu:ubuntu" | chroot $rootfs chpasswd
 
71
    if [ -n "$auth_key" -a -f "$auth_key" ]; then
 
72
        u_path="/home/ubuntu/.ssh"
 
73
        root_u_path="$rootfs/$u_path"
 
74
        mkdir -p $root_u_path
 
75
        cp $auth_key "$root_u_path/authorized_keys"
 
76
        chroot $rootfs chown -R ubuntu: "$u_path"
 
77
 
 
78
        echo "Inserted SSH public key from $auth_key into /home/ubuntu/.ssh/authorized_keys"
 
79
    fi
71
80
    return 0
72
81
}
73
82
 
 
83
write_sourceslist()
 
84
{
 
85
    # $1 => path to the rootfs
 
86
    # $2 => architecture we want to add
 
87
    # $3 => whether to use the multi-arch syntax or not
 
88
 
 
89
    case $2 in
 
90
      amd64|i386)
 
91
            MIRROR=${MIRROR:-http://archive.ubuntu.com/ubuntu}
 
92
            SECURITY_MIRROR=${SECURITY_MIRROR:-http://security.ubuntu.com/ubuntu}
 
93
            ;;
 
94
      sparc)
 
95
            case $SUITE in
 
96
              gutsy)
 
97
            MIRROR=${MIRROR:-http://archive.ubuntu.com/ubuntu}
 
98
            SECURITY_MIRROR=${SECURITY_MIRRORMIRROR:-http://security.ubuntu.com/ubuntu}
 
99
            ;;
 
100
              *)
 
101
            MIRROR=${MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
 
102
            SECURITY_MIRROR=${SECURITY_MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
 
103
            ;;
 
104
            esac
 
105
            ;;
 
106
      *)
 
107
            MIRROR=${MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
 
108
            SECURITY_MIRROR=${SECURITY_MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
 
109
            ;;
 
110
    esac
 
111
    if [ -n "$3" ]; then
 
112
        cat >> "$1/etc/apt/sources.list" << EOF
 
113
deb [arch=$2] $MIRROR ${release} main restricted universe multiverse
 
114
deb [arch=$2] $MIRROR ${release}-updates main restricted universe multiverse
 
115
deb [arch=$2] $SECURITY_MIRROR ${release}-security main restricted universe multiverse
 
116
EOF
 
117
    else
 
118
        cat >> "$1/etc/apt/sources.list" << EOF
 
119
deb $MIRROR ${release} main restricted universe multiverse
 
120
deb $MIRROR ${release}-updates main restricted universe multiverse
 
121
deb $SECURITY_MIRROR ${release}-security main restricted universe multiverse
 
122
EOF
 
123
    fi
 
124
}
 
125
 
74
126
download_ubuntu()
75
127
{
76
128
    cache=$1
97
149
 
98
150
    # download a mini ubuntu into a cache
99
151
    echo "Downloading ubuntu $release minimal ..."
100
 
    debootstrap --verbose --components=main,universe --arch=$arch --include=$packages $release $cache/partial-$arch $MIRROR
 
152
    if [ -n "$(which qemu-debootstrap)" ]; then
 
153
        qemu-debootstrap --verbose --components=main,universe --arch=$arch --include=$packages $release $cache/partial-$arch $MIRROR
 
154
    else
 
155
        debootstrap --verbose --components=main,universe --arch=$arch --include=$packages $release $cache/partial-$arch $MIRROR
 
156
    fi
 
157
 
101
158
    if [ $? -ne 0 ]; then
102
159
        echo "Failed to download the rootfs, aborting."
103
160
            return 1
104
161
    fi
105
162
 
 
163
    echo "Installing updates"
 
164
    if [ -z "$MIRROR" ]; then
 
165
        MIRROR="http://archive.ubuntu.com/ubuntu"
 
166
    fi
 
167
    cat >> "$1/partial-${arch}/etc/apt/sources.list" << EOF
 
168
deb $MIRROR ${release}-updates main universe
 
169
deb http://security.ubuntu.com/ubuntu ${release}-security main universe
 
170
EOF
 
171
    chroot "$1/partial-${arch}" apt-get update
 
172
    if [ $? -ne 0 ]; then
 
173
        echo "Failed to update the apt cache"
 
174
        return 1
 
175
    fi
 
176
    cat > "$1/partial-${arch}"/usr/sbin/policy-rc.d << EOF
 
177
#!/bin/sh
 
178
exit 101
 
179
EOF
 
180
    chmod +x "$1/partial-${arch}"/usr/sbin/policy-rc.d
 
181
 
 
182
    chroot "$1/partial-${arch}" apt-get dist-upgrade -y
 
183
    ret=$?
 
184
 
 
185
    rm -f "$1/partial-${arch}"/usr/sbin/policy-rc.d
 
186
    if [ $ret -ne 0 ]; then
 
187
        echo "Failed to upgrade the cache"
 
188
        return 1
 
189
    fi
 
190
 
106
191
    # Serge isn't sure whether we should avoid doing this when
107
192
    # $release == `distro-info -d`
108
193
    echo "Installing updates"
109
 
    case $arch in
110
 
      amd64|i386)
111
 
            MIRROR=${MIRROR:-http://archive.ubuntu.com/ubuntu}
112
 
            SECURITY_MIRROR=${SECURITY_MIRROR:-http://security.ubuntu.com/ubuntu}
113
 
            ;;
114
 
      sparc)
115
 
            case $SUITE in
116
 
              gutsy)
117
 
            MIRROR=${MIRROR:-http://archive.ubuntu.com/ubuntu}
118
 
            SECURITY_MIRROR=${SECURITY_MIRRORMIRROR:-http://security.ubuntu.com/ubuntu}
119
 
            ;;
120
 
              *)
121
 
            MIRROR=${MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
122
 
            SECURITY_MIRROR=${SECURITY_MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
123
 
            ;;
124
 
            esac
125
 
            ;;
126
 
      *)
127
 
            MIRROR=${MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
128
 
            SECURITY_MIRROR=${SECURITY_MIRROR:-http://ports.ubuntu.com/ubuntu-ports}
129
 
            ;;
130
 
    esac
131
 
    cat >> "$1/partial-${arch}/etc/apt/sources.list" << EOF
132
 
deb $MIRROR ${release}-updates main universe
133
 
deb $SECURITY_MIRROR ${release}-security main universe
134
 
EOF
 
194
    > $cache/partial-$arch/etc/apt/sources.list
 
195
    write_sourceslist $cache/partial-$arch/ $arch
 
196
 
135
197
    chroot "$1/partial-${arch}" apt-get update
136
198
    if [ $? -ne 0 ]; then
137
199
        echo "Failed to update the apt cache"
164
226
    rootfs=$3
165
227
 
166
228
    # make a local copy of the miniubuntu
167
 
    echo -n "Copying rootfs to $rootfs ..."
 
229
    echo "Copying rootfs to $rootfs ..."
168
230
    mkdir -p $rootfs
169
231
    rsync -a $cache/rootfs-$arch/ $rootfs/ || return 1
170
232
    return 0
220
282
    rootfs=$2
221
283
    name=$3
222
284
    arch=$4
 
285
    release=$5
223
286
 
224
287
    if [ $arch = "i386" ]; then
225
288
        arch="i686"
226
289
    fi
227
290
 
 
291
    ttydir=""
 
292
    if [ $release = "precise" ]; then
 
293
        ttydir=" lxc"
 
294
    fi
 
295
 
 
296
    # if there is exactly one veth network entry, make sure it has an
 
297
    # associated hwaddr.
 
298
    nics=`grep -e '^lxc\.network\.type[ \t]*=[ \t]*veth' $path/config | wc -l`
 
299
    if [ $nics -eq 1 ]; then
 
300
        grep -q "^lxc.network.hwaddr" $path/config || cat <<EOF >> $path/config
 
301
lxc.network.hwaddr= 00:16:3e:$(openssl rand -hex 3| sed 's/\(..\)/\1:/g; s/.$//')
 
302
EOF
 
303
    fi
 
304
 
228
305
    cat <<EOF >> $path/config
229
306
lxc.utsname = $name
230
307
 
 
308
lxc.devttydir = $ttydir
231
309
lxc.tty = 4
232
310
lxc.pts = 1024
233
311
lxc.rootfs = $rootfs
234
312
lxc.mount  = $path/fstab
235
313
lxc.arch = $arch
236
 
lxc.cap.drop = sys_module mac_admin
 
314
lxc.cap.drop = sys_module mac_admin mac_override
237
315
 
238
316
lxc.cgroup.devices.deny = a
239
317
# Allow any mknod (but not using the node)
380
458
 
381
459
    if [ $trim_container -eq 1 ]; then
382
460
        trim $rootfs $release
383
 
    else
 
461
    elif [ $release = "lucid" -o $release = "maverick" -o $release = "natty" \
 
462
               -o $release = "oneiric" ]; then
384
463
        # for lucid and maverick, if not trimming, then add the ubuntu-virt
385
464
        # ppa and install lxcguest
386
465
        if [ $release = "lucid" -o $release = "maverick" ]; then
391
470
        chroot $rootfs apt-get update
392
471
        chroot $rootfs apt-get install --force-yes -y lxcguest
393
472
    fi
 
473
 
 
474
    # If the container isn't running a native architecture, setup multiarch
 
475
    if [ -x "$(ls -1 ${rootfs}/usr/bin/qemu-*-static 2>/dev/null)" ]; then
 
476
        mkdir -p ${rootfs}/etc/dpkg/dpkg.cfg.d
 
477
        echo "foreign-architecture ${hostarch}" > ${rootfs}/etc/dpkg/dpkg.cfg.d/lxc-multiarch
 
478
 
 
479
        # Save existing value of MIRROR and SECURITY_MIRROR
 
480
        DEFAULT_MIRROR=$MIRROR
 
481
        DEFAULT_SECURITY_MIRROR=$SECURITY_MIRROR
 
482
 
 
483
        # Write a new sources.list containing both native and multiarch entries
 
484
        > ${rootfs}/etc/apt/sources.list
 
485
        write_sourceslist $rootfs $arch "native"
 
486
 
 
487
        MIRROR=$DEFAULT_MIRROR
 
488
        SECURITY_MIRROR=$DEFAULT_SECURITY_MIRROR
 
489
        write_sourceslist $rootfs $hostarch "multiarch"
 
490
 
 
491
        # Finally update the lists and install upstart using the host architecture
 
492
        chroot $rootfs apt-get update
 
493
        chroot $rootfs apt-get install --force-yes -y --no-install-recommends upstart:${hostarch} mountall:amd64 iproute:amd64 isc-dhcp-client:amd64
 
494
    fi
394
495
}
395
496
 
396
497
do_bindhome()
419
520
{
420
521
    cat <<EOF
421
522
$1 -h|--help [-a|--arch] [-b|--bindhome <user>] [--trim]
422
 
   [-F | --flush-cache] [-r|--release <release>]
 
523
   [-F | --flush-cache] [-r|--release <release>] [ -S | --auth_key <keyfile>]
423
524
release: lucid | maverick | natty | oneiric | precise
424
525
trim: make a minimal (faster, but not upgrade-safe) container
425
526
bindhome: bind <user>'s home into the container
426
527
arch: amd64 or i386: defaults to host arch
 
528
auth_key: SSH Public key file to inject into container
427
529
EOF
428
530
    return 0
429
531
}
430
532
 
431
 
options=$(getopt -o a:b:hp:r:xn:F -l arch:,bindhome:,help,path:,release:,trim,name:,flush-cache -- "$@")
 
533
options=$(getopt -o a:b:hp:r:xn:FS: -l arch:,bindhome:,help,path:,release:,trim,name:,flush-cache,auth-key: -- "$@")
432
534
if [ $? -ne 0 ]; then
433
535
    usage $(basename $0)
434
536
    exit 1
478
580
    -b|--bindhome)  bindhome=$2; shift 2;;
479
581
    -a|--arch)      arch=$2; shift 2;;
480
582
    -x|--trim)      trim_container=1; shift 1;;
 
583
    -S|--auth_key)  auth_key=$2; shift 2;;
481
584
    --)             shift 1; break ;;
482
585
        *)              break ;;
483
586
    esac
523
626
    exit 1
524
627
fi
525
628
 
526
 
configure_ubuntu $rootfs $name
 
629
configure_ubuntu $rootfs $name $release
527
630
if [ $? -ne 0 ]; then
528
631
    echo "failed to configure ubuntu $release for a container"
529
632
    exit 1
530
633
fi
531
634
 
532
 
copy_configuration $path $rootfs $name $arch
 
635
copy_configuration $path $rootfs $name $arch $release
533
636
if [ $? -ne 0 ]; then
534
637
    echo "failed write configuration file"
535
638
    exit 1
539
642
if [ ! -z $bindhome ]; then
540
643
        do_bindhome $rootfs $bindhome
541
644
fi
 
645
 
 
646
echo ""
 
647
echo "##"
 
648
echo "# The default user is 'ubuntu' with password 'ubuntu'!"
 
649
echo "# Use the 'sudo' command to run tasks as root in the container."
 
650
echo "##"
 
651
echo ""