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

« back to all changes in this revision

Viewing changes to .pc/06-debian-ppc-architecture.patch/templates/lxc-debian.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:
1
 
#!/bin/bash
2
 
 
3
 
#
4
 
# lxc: linux Container library
5
 
 
6
 
# Authors:
7
 
# Daniel Lezcano <daniel.lezcano@free.fr>
8
 
 
9
 
# This library is free software; you can redistribute it and/or
10
 
# modify it under the terms of the GNU Lesser General Public
11
 
# License as published by the Free Software Foundation; either
12
 
# version 2.1 of the License, or (at your option) any later version.
13
 
 
14
 
# This library is distributed in the hope that it will be useful,
15
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17
 
# Lesser General Public License for more details.
18
 
 
19
 
# You should have received a copy of the GNU Lesser General Public
20
 
# License along with this library; if not, write to the Free Software
21
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
 
 
23
 
SUITE=${SUITE:-squeeze}
24
 
MIRROR=${MIRROR:-http://cdn.debian.net/debian}
25
 
 
26
 
configure_debian()
27
 
{
28
 
    rootfs=$1
29
 
    hostname=$2
30
 
 
31
 
    # squeeze only has /dev/tty and /dev/tty0 by default,
32
 
    # therefore creating missing device nodes for tty1-4.
33
 
    for tty in $(seq 1 4); do
34
 
        if [ ! -e $rootfs/dev/tty$tty ]; then
35
 
            mknod $rootfs/dev/tty$tty c 4 $tty
36
 
        fi
37
 
    done
38
 
 
39
 
    # configure the inittab
40
 
    cat <<EOF > $rootfs/etc/inittab
41
 
id:3:initdefault:
42
 
si::sysinit:/etc/init.d/rcS
43
 
l0:0:wait:/etc/init.d/rc 0
44
 
l1:1:wait:/etc/init.d/rc 1
45
 
l2:2:wait:/etc/init.d/rc 2
46
 
l3:3:wait:/etc/init.d/rc 3
47
 
l4:4:wait:/etc/init.d/rc 4
48
 
l5:5:wait:/etc/init.d/rc 5
49
 
l6:6:wait:/etc/init.d/rc 6
50
 
# Normally not reached, but fallthrough in case of emergency.
51
 
z6:6:respawn:/sbin/sulogin
52
 
1:2345:respawn:/sbin/getty 38400 console
53
 
c1:12345:respawn:/sbin/getty 38400 tty1 linux
54
 
c2:12345:respawn:/sbin/getty 38400 tty2 linux
55
 
c3:12345:respawn:/sbin/getty 38400 tty3 linux
56
 
c4:12345:respawn:/sbin/getty 38400 tty4 linux
57
 
EOF
58
 
 
59
 
    # disable selinux in debian
60
 
    mkdir -p $rootfs/selinux
61
 
    echo 0 > $rootfs/selinux/enforce
62
 
 
63
 
    # configure the network using the dhcp
64
 
    cat <<EOF > $rootfs/etc/network/interfaces
65
 
auto lo
66
 
iface lo inet loopback
67
 
 
68
 
auto eth0
69
 
iface eth0 inet dhcp
70
 
EOF
71
 
 
72
 
    # set the hostname
73
 
    cat <<EOF > $rootfs/etc/hostname
74
 
$hostname
75
 
EOF
76
 
 
77
 
    # reconfigure some services
78
 
    if [ -z "$LANG" ]; then
79
 
        chroot $rootfs locale-gen en_US.UTF-8 UTF-8
80
 
        chroot $rootfs update-locale LANG=en_US.UTF-8
81
 
    else
82
 
        chroot $rootfs locale-gen $LANG $(echo $LANG | cut -d. -f2)
83
 
        chroot $rootfs update-locale LANG=$LANG
84
 
    fi
85
 
 
86
 
    # remove pointless services in a container
87
 
    chroot $rootfs /usr/sbin/update-rc.d -f checkroot.sh remove
88
 
    chroot $rootfs /usr/sbin/update-rc.d -f umountfs remove
89
 
    chroot $rootfs /usr/sbin/update-rc.d -f hwclock.sh remove
90
 
    chroot $rootfs /usr/sbin/update-rc.d -f hwclockfirst.sh remove
91
 
    chroot $rootfs /usr/sbin/update-rc.d -f module-init-tools remove
92
 
 
93
 
    echo "root:root" | chroot $rootfs chpasswd
94
 
    echo "Root password is 'root', please change !"
95
 
 
96
 
    return 0
97
 
}
98
 
 
99
 
download_debian()
100
 
{
101
 
    packages=\
102
 
ifupdown,\
103
 
locales,\
104
 
libui-dialog-perl,\
105
 
dialog,\
106
 
dhcp3-client,\
107
 
netbase,\
108
 
net-tools,\
109
 
iproute,\
110
 
openssh-server
111
 
 
112
 
    cache=$1
113
 
    arch=$2
114
 
 
115
 
    # check the mini debian was not already downloaded
116
 
    mkdir -p "$cache/partial-$SUITE-$arch"
117
 
    if [ $? -ne 0 ]; then
118
 
        echo "Failed to create '$cache/partial-$SUITE-$arch' directory"
119
 
        return 1
120
 
    fi
121
 
 
122
 
    # download a mini debian into a cache
123
 
    echo "Downloading debian minimal ..."
124
 
    debootstrap --verbose --variant=minbase --arch=$arch \
125
 
        --include=$packages \
126
 
        "$SUITE" "$cache/partial-$SUITE-$arch" $MIRROR
127
 
    if [ $? -ne 0 ]; then
128
 
        echo "Failed to download the rootfs, aborting."
129
 
        return 1
130
 
    fi
131
 
 
132
 
    mv "$1/partial-$SUITE-$arch" "$1/rootfs-$SUITE-$arch"
133
 
    echo "Download complete."
134
 
 
135
 
    return 0
136
 
}
137
 
 
138
 
copy_debian()
139
 
{
140
 
    cache=$1
141
 
    arch=$2
142
 
    rootfs=$3
143
 
 
144
 
    # make a local copy of the minidebian
145
 
    echo -n "Copying rootfs to $rootfs..."
146
 
    cp -a "$cache/rootfs-$SUITE-$arch" $rootfs || return 1
147
 
    return 0
148
 
}
149
 
 
150
 
install_debian()
151
 
{
152
 
    cache="@LOCALSTATEDIR@/cache/lxc/debian"
153
 
    rootfs=$1
154
 
    mkdir -p @LOCALSTATEDIR@/lock/subsys/
155
 
    (
156
 
        flock -n -x 200
157
 
        if [ $? -ne 0 ]; then
158
 
            echo "Cache repository is busy."
159
 
            return 1
160
 
        fi
161
 
 
162
 
        # Code taken from debootstrap
163
 
        if [ -x /usr/bin/dpkg ] && /usr/bin/dpkg --print-architecture >/dev/null 2>&1; then
164
 
            arch=`/usr/bin/dpkg --print-architecture`
165
 
        elif type udpkg >/dev/null 2>&1 && udpkg --print-architecture >/dev/null 2>&1; then
166
 
            arch=`/usr/bin/udpkg --print-architecture`
167
 
        else
168
 
            arch=$(arch)
169
 
            if [ "$arch" = "i686" ]; then
170
 
                arch="i386"
171
 
            elif [ "$arch" = "x86_64" ]; then
172
 
                arch="amd64"
173
 
            fi
174
 
        fi
175
 
 
176
 
        echo "Checking cache download in $cache/rootfs-$SUITE-$arch ... "
177
 
        if [ ! -e "$cache/rootfs-$SUITE-$arch" ]; then
178
 
            download_debian $cache $arch
179
 
            if [ $? -ne 0 ]; then
180
 
                echo "Failed to download 'debian base'"
181
 
                return 1
182
 
            fi
183
 
        fi
184
 
 
185
 
        copy_debian $cache $arch $rootfs
186
 
        if [ $? -ne 0 ]; then
187
 
            echo "Failed to copy rootfs"
188
 
            return 1
189
 
        fi
190
 
 
191
 
        return 0
192
 
 
193
 
        ) 200>@LOCALSTATEDIR@/lock/subsys/lxc
194
 
 
195
 
    return $?
196
 
}
197
 
 
198
 
copy_configuration()
199
 
{
200
 
    path=$1
201
 
    rootfs=$2
202
 
    name=$3
203
 
 
204
 
    cat <<EOF >> $path/config
205
 
lxc.tty = 4
206
 
lxc.pts = 1024
207
 
lxc.rootfs = $rootfs
208
 
lxc.cgroup.devices.deny = a
209
 
# /dev/null and zero
210
 
lxc.cgroup.devices.allow = c 1:3 rwm
211
 
lxc.cgroup.devices.allow = c 1:5 rwm
212
 
# consoles
213
 
lxc.cgroup.devices.allow = c 5:1 rwm
214
 
lxc.cgroup.devices.allow = c 5:0 rwm
215
 
lxc.cgroup.devices.allow = c 4:0 rwm
216
 
lxc.cgroup.devices.allow = c 4:1 rwm
217
 
# /dev/{,u}random
218
 
lxc.cgroup.devices.allow = c 1:9 rwm
219
 
lxc.cgroup.devices.allow = c 1:8 rwm
220
 
lxc.cgroup.devices.allow = c 136:* rwm
221
 
lxc.cgroup.devices.allow = c 5:2 rwm
222
 
# rtc
223
 
lxc.cgroup.devices.allow = c 254:0 rwm
224
 
 
225
 
# mounts point
226
 
lxc.mount.entry=proc $rootfs/proc proc nodev,noexec,nosuid 0 0
227
 
lxc.mount.entry=sysfs $rootfs/sys sysfs defaults  0 0
228
 
EOF
229
 
 
230
 
    if [ $? -ne 0 ]; then
231
 
        echo "Failed to add configuration"
232
 
        return 1
233
 
    fi
234
 
 
235
 
    return 0
236
 
}
237
 
 
238
 
clean()
239
 
{
240
 
    cache="@LOCALSTATEDIR@/cache/lxc/debian"
241
 
 
242
 
    if [ ! -e $cache ]; then
243
 
        exit 0
244
 
    fi
245
 
 
246
 
    # lock, so we won't purge while someone is creating a repository
247
 
    (
248
 
        flock -n -x 200
249
 
        if [ $? != 0 ]; then
250
 
            echo "Cache repository is busy."
251
 
            exit 1
252
 
        fi
253
 
 
254
 
        echo -n "Purging the download cache..."
255
 
        rm --preserve-root --one-file-system -rf $cache && echo "Done." || exit 1
256
 
        exit 0
257
 
 
258
 
    ) 200>@LOCALSTATEDIR@/lock/subsys/lxc
259
 
}
260
 
 
261
 
usage()
262
 
{
263
 
    cat <<EOF
264
 
$1 -h|--help -p|--path=<path> --clean
265
 
EOF
266
 
    return 0
267
 
}
268
 
 
269
 
options=$(getopt -o hp:n:c -l help,path:,name:,clean -- "$@")
270
 
if [ $? -ne 0 ]; then
271
 
        usage $(basename $0)
272
 
        exit 1
273
 
fi
274
 
eval set -- "$options"
275
 
 
276
 
while true
277
 
do
278
 
    case "$1" in
279
 
        -h|--help)      usage $0 && exit 0;;
280
 
        -p|--path)      path=$2; shift 2;;
281
 
        -n|--name)      name=$2; shift 2;;
282
 
        -c|--clean)     clean=$2; shift 2;;
283
 
        --)             shift 1; break ;;
284
 
        *)              break ;;
285
 
    esac
286
 
done
287
 
 
288
 
if [ ! -z "$clean" -a -z "$path" ]; then
289
 
    clean || exit 1
290
 
    exit 0
291
 
fi
292
 
 
293
 
type debootstrap
294
 
if [ $? -ne 0 ]; then
295
 
    echo "'debootstrap' command is missing"
296
 
    exit 1
297
 
fi
298
 
 
299
 
if [ -z "$path" ]; then
300
 
    echo "'path' parameter is required"
301
 
    exit 1
302
 
fi
303
 
 
304
 
if [ "$(id -u)" != "0" ]; then
305
 
    echo "This script should be run as 'root'"
306
 
    exit 1
307
 
fi
308
 
 
309
 
rootfs=$path/rootfs
310
 
 
311
 
install_debian $rootfs
312
 
if [ $? -ne 0 ]; then
313
 
    echo "failed to install debian"
314
 
    exit 1
315
 
fi
316
 
 
317
 
configure_debian $rootfs $name
318
 
if [ $? -ne 0 ]; then
319
 
    echo "failed to configure debian for a container"
320
 
    exit 1
321
 
fi
322
 
 
323
 
copy_configuration $path $rootfs
324
 
if [ $? -ne 0 ]; then
325
 
    echo "failed write configuration file"
326
 
    exit 1
327
 
fi
328
 
 
329
 
if [ ! -z $clean ]; then
330
 
    clean || exit 1
331
 
    exit 0
332
 
fi