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

« back to all changes in this revision

Viewing changes to .pc/0014-ubuntu-templ-add-precise.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:
1
 
#!/bin/bash
2
 
 
3
 
#
4
 
# template script for generating ubuntu container for LXC
5
 
#
6
 
# This script consolidates and extends the existing lxc ubuntu scripts
7
 
#
8
 
 
9
 
# XXX todo: add -lvm option
10
 
 
11
 
# Copyright � 2011 Serge Hallyn <serge.hallyn@canonical.com>
12
 
# Copyright � 2010 Wilhelm Meier
13
 
# Author: Wilhelm Meier <wilhelm.meier@fh-kl.de>
14
 
#
15
 
# This program is free software; you can redistribute it and/or modify
16
 
# it under the terms of the GNU General Public License version 2, as
17
 
# published by the Free Software Foundation.
18
 
 
19
 
# This program is distributed in the hope that it will be useful,
20
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22
 
# GNU General Public License for more details.
23
 
 
24
 
# You should have received a copy of the GNU General Public License along
25
 
# with this program; if not, write to the Free Software Foundation, Inc.,
26
 
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27
 
#
28
 
 
29
 
if [ -r /etc/default/lxc ]; then
30
 
    . /etc/default/lxc
31
 
fi
32
 
 
33
 
configure_ubuntu()
34
 
{
35
 
    rootfs=$1
36
 
    hostname=$2
37
 
 
38
 
   # configure the network using the dhcp
39
 
    cat <<EOF > $rootfs/etc/network/interfaces
40
 
auto lo
41
 
iface lo inet loopback
42
 
 
43
 
auto eth0
44
 
iface eth0 inet dhcp
45
 
EOF
46
 
 
47
 
    # so you can 'ssh $hostname.' or 'ssh $hostname.local'
48
 
    if [ -f $rootfs/etc/dhcp/dhclient.conf ]; then
49
 
        sed -i "s/<hostname>/$hostname/" $rootfs/etc/dhcp/dhclient.conf
50
 
    elif [ -f $rootfs/etc/dhcp3/dhclient.conf ]; then
51
 
        sed -i "s/<hostname>/$hostname/" $rootfs/etc/dhcp3/dhclient.conf
52
 
    fi
53
 
 
54
 
    # set the hostname
55
 
    cat <<EOF > $rootfs/etc/hostname
56
 
$hostname
57
 
EOF
58
 
    # set minimal hosts
59
 
    cat <<EOF > $rootfs/etc/hosts
60
 
127.0.0.1 localhost $hostname
61
 
EOF
62
 
 
63
 
    # suppress log level output for udev
64
 
    sed -i "s/=\"err\"/=0/" $rootfs/etc/udev/udev.conf
65
 
 
66
 
    # remove jobs for consoles 5 and 6 since we only create 4 consoles in
67
 
    # this template
68
 
    rm -f $rootfs/etc/init/tty{5,6}.conf
69
 
 
70
 
    echo "Please change root-password !"
71
 
    echo "root:root" | chroot $rootfs chpasswd
72
 
 
73
 
    return 0
74
 
}
75
 
 
76
 
download_ubuntu()
77
 
{
78
 
    cache=$1
79
 
    arch=$2
80
 
    release=$3
81
 
 
82
 
    if [ $release = "lucid" ]; then
83
 
        packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,vim,dhcp3-client,ssh,lsb-release,gnupg
84
 
    elif [ $release = "maverick" ]; then
85
 
        packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,vim,dhcp3-client,ssh,lsb-release,gnupg,netbase
86
 
    elif [ $release = "natty" ]; then
87
 
        packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,vim,isc-dhcp-client,isc-dhcp-common,ssh,lsb-release,gnupg,netbase
88
 
    else
89
 
        packages=dialog,apt,apt-utils,iproute,inetutils-ping,vim,isc-dhcp-client,isc-dhcp-common,ssh,lsb-release,gnupg,netbase,ubuntu-keyring
90
 
    fi
91
 
    echo "installing packages: $packages"
92
 
 
93
 
    # check the mini ubuntu was not already downloaded
94
 
    mkdir -p "$cache/partial-$arch"
95
 
    if [ $? -ne 0 ]; then
96
 
        echo "Failed to create '$cache/partial-$arch' directory"
97
 
        return 1
98
 
    fi
99
 
 
100
 
    # download a mini ubuntu into a cache
101
 
    echo "Downloading ubuntu $release minimal ..."
102
 
    debootstrap --verbose --components=main,universe --arch=$arch --include=$packages $release $cache/partial-$arch $MIRROR
103
 
    if [ $? -ne 0 ]; then
104
 
        echo "Failed to download the rootfs, aborting."
105
 
            return 1
106
 
    fi
107
 
 
108
 
    mv "$1/partial-$arch" "$1/rootfs-$arch"
109
 
    echo "Download complete."
110
 
 
111
 
    return 0
112
 
}
113
 
 
114
 
copy_ubuntu()
115
 
{
116
 
    cache=$1
117
 
    arch=$2
118
 
    rootfs=$3
119
 
 
120
 
    # make a local copy of the miniubuntu
121
 
    echo -n "Copying rootfs to $rootfs ..."
122
 
    cp -a $cache/rootfs-$arch $rootfs || return 1
123
 
    return 0
124
 
}
125
 
 
126
 
install_ubuntu()
127
 
{
128
 
    rootfs=$1
129
 
    release=$2
130
 
    cache="/var/cache/lxc/$release"
131
 
    mkdir -p /var/lock/subsys/
132
 
    (
133
 
        flock -n -x 200
134
 
        if [ $? -ne 0 ]; then
135
 
            echo "Cache repository is busy."
136
 
            return 1
137
 
        fi
138
 
 
139
 
 
140
 
        echo "Checking cache download in $cache/rootfs-$arch ... "
141
 
        if [ ! -e "$cache/rootfs-$arch" ]; then
142
 
            download_ubuntu $cache $arch $release
143
 
            if [ $? -ne 0 ]; then
144
 
                echo "Failed to download 'ubuntu $release base'"
145
 
                return 1
146
 
            fi
147
 
        fi
148
 
 
149
 
        echo "Copy $cache/rootfs-$arch to $rootfs ... "
150
 
        copy_ubuntu $cache $arch $rootfs
151
 
        if [ $? -ne 0 ]; then
152
 
            echo "Failed to copy rootfs"
153
 
            return 1
154
 
        fi
155
 
 
156
 
        return 0
157
 
 
158
 
        ) 200>/var/lock/subsys/lxc
159
 
 
160
 
    return $?
161
 
}
162
 
 
163
 
copy_configuration()
164
 
{
165
 
    path=$1
166
 
    rootfs=$2
167
 
    name=$3
168
 
    arch=$4
169
 
 
170
 
    if [ $arch = "i386" ]; then
171
 
        arch="i686"
172
 
    fi
173
 
 
174
 
    cat <<EOF >> $path/config
175
 
lxc.utsname = $name
176
 
 
177
 
lxc.tty = 4
178
 
lxc.pts = 1024
179
 
lxc.rootfs = $rootfs
180
 
lxc.mount  = $path/fstab
181
 
lxc.arch = $arch
182
 
lxc.cap.drop = sys_module
183
 
 
184
 
lxc.cgroup.devices.deny = a
185
 
# Allow any mknod (but not using the node)
186
 
lxc.cgroup.devices.allow = c *:* m
187
 
lxc.cgroup.devices.allow = b *:* m
188
 
# /dev/null and zero
189
 
lxc.cgroup.devices.allow = c 1:3 rwm
190
 
lxc.cgroup.devices.allow = c 1:5 rwm
191
 
# consoles
192
 
lxc.cgroup.devices.allow = c 5:1 rwm
193
 
lxc.cgroup.devices.allow = c 5:0 rwm
194
 
#lxc.cgroup.devices.allow = c 4:0 rwm
195
 
#lxc.cgroup.devices.allow = c 4:1 rwm
196
 
# /dev/{,u}random
197
 
lxc.cgroup.devices.allow = c 1:9 rwm
198
 
lxc.cgroup.devices.allow = c 1:8 rwm
199
 
lxc.cgroup.devices.allow = c 136:* rwm
200
 
lxc.cgroup.devices.allow = c 5:2 rwm
201
 
# rtc
202
 
lxc.cgroup.devices.allow = c 254:0 rwm
203
 
#fuse
204
 
lxc.cgroup.devices.allow = c 10:229 rwm
205
 
#tun
206
 
lxc.cgroup.devices.allow = c 10:200 rwm
207
 
EOF
208
 
 
209
 
    cat <<EOF > $path/fstab
210
 
proc            $rootfs/proc         proc    nodev,noexec,nosuid 0 0
211
 
sysfs           $rootfs/sys          sysfs defaults  0 0
212
 
EOF
213
 
 
214
 
    if [ $? -ne 0 ]; then
215
 
        echo "Failed to add configuration"
216
 
        return 1
217
 
    fi
218
 
 
219
 
    return 0
220
 
}
221
 
 
222
 
trim()
223
 
{
224
 
    rootfs=$1
225
 
    release=$2
226
 
 
227
 
    # provide the lxc service
228
 
    cat <<EOF > $rootfs/etc/init/lxc.conf
229
 
# fake some events needed for correct startup other services
230
 
 
231
 
description     "Container Upstart"
232
 
 
233
 
start on startup
234
 
 
235
 
script
236
 
        rm -rf /var/run/*.pid
237
 
        rm -rf /var/run/network/*
238
 
        /sbin/initctl emit stopped JOB=udevtrigger --no-wait
239
 
        /sbin/initctl emit started JOB=udev --no-wait
240
 
end script
241
 
EOF
242
 
 
243
 
    # fix buggus runlevel with sshd
244
 
    cat <<EOF > $rootfs/etc/init/ssh.conf
245
 
# ssh - OpenBSD Secure Shell server
246
 
#
247
 
# The OpenSSH server provides secure shell access to the system.
248
 
 
249
 
description     "OpenSSH server"
250
 
 
251
 
start on filesystem
252
 
stop on runlevel [!2345]
253
 
 
254
 
expect fork
255
 
respawn
256
 
respawn limit 10 5
257
 
umask 022
258
 
# replaces SSHD_OOM_ADJUST in /etc/default/ssh
259
 
oom never
260
 
 
261
 
pre-start script
262
 
    test -x /usr/sbin/sshd || { stop; exit 0; }
263
 
    test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }
264
 
    test -c /dev/null || { stop; exit 0; }
265
 
 
266
 
    mkdir -p -m0755 /var/run/sshd
267
 
end script
268
 
 
269
 
# if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
270
 
# 'exec' line here instead
271
 
exec /usr/sbin/sshd
272
 
EOF
273
 
 
274
 
    cat <<EOF > $rootfs/etc/init/console.conf
275
 
# console - getty
276
 
#
277
 
# This service maintains a console on tty1 from the point the system is
278
 
# started until it is shut down again.
279
 
 
280
 
start on stopped rc RUNLEVEL=[2345]
281
 
stop on runlevel [!2345]
282
 
 
283
 
respawn
284
 
exec /sbin/getty -8 38400 /dev/console
285
 
EOF
286
 
 
287
 
    cat <<EOF > $rootfs/lib/init/fstab
288
 
# /lib/init/fstab: cleared out for bare-bones lxc
289
 
EOF
290
 
 
291
 
    # reconfigure some services
292
 
    if [ -z "$LANG" ]; then
293
 
        chroot $rootfs locale-gen en_US.UTF-8
294
 
        chroot $rootfs update-locale LANG=en_US.UTF-8
295
 
    else
296
 
        chroot $rootfs locale-gen $LANG
297
 
        chroot $rootfs update-locale LANG=$LANG
298
 
    fi
299
 
 
300
 
    # remove pointless services in a container
301
 
    chroot $rootfs /usr/sbin/update-rc.d -f ondemand remove
302
 
 
303
 
    chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls u*.conf); do mv $f $f.orig; done'
304
 
    chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls tty[2-9].conf); do mv $f $f.orig; done'
305
 
    chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls plymouth*.conf); do mv $f $f.orig; done'
306
 
    chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls hwclock*.conf); do mv $f $f.orig; done'
307
 
    chroot $rootfs /bin/bash -c 'cd /etc/init; for f in $(ls module*.conf); do mv $f $f.orig; done'
308
 
 
309
 
    # if this isn't lucid, then we need to twiddle the network upstart bits :(
310
 
    if [ $release != "lucid" ]; then
311
 
        sed -i 's/^.*emission handled.*$/echo Emitting lo/' $rootfs/etc/network/if-up.d/upstart
312
 
    fi
313
 
}
314
 
 
315
 
post_process()
316
 
{
317
 
    rootfs=$1
318
 
    release=$2
319
 
    trim_container=$3
320
 
 
321
 
    if [ $trim_container -eq 1 ]; then
322
 
        trim $rootfs $release
323
 
    else
324
 
        # for lucid and maverick, if not trimming, then add the ubuntu-virt
325
 
        # ppa and install lxcguest
326
 
        if [ $release = "lucid" -o $release = "maverick" ]; then
327
 
            chroot $rootfs apt-get install --force-yes -y python-software-properties
328
 
            chroot $rootfs add-apt-repository ppa:ubuntu-virt/ppa
329
 
            chroot $rootfs apt-get update
330
 
        fi
331
 
        chroot $rootfs apt-get install --force-yes -y lxcguest
332
 
    fi
333
 
}
334
 
 
335
 
do_bindhome()
336
 
{
337
 
    rootfs=$1
338
 
    user=$2
339
 
 
340
 
    # copy /etc/passwd, /etc/shadow, and /etc/group entries into container
341
 
    pwd=`getent passwd $user`
342
 
    if [ $? -ne 0 ]; then
343
 
        echo 'Warning: failed to copy password entry for $user'
344
 
        return
345
 
    else
346
 
        echo $pwd >> $rootfs/etc/passwd
347
 
    fi
348
 
    shad=`getent shadow $user`
349
 
    echo $shad >> $rootfs/etc/shadow
350
 
 
351
 
    # bind-mount the user's path into the container's /home
352
 
    h=`getent passwd $user | cut -d: -f 6`
353
 
    mkdir -p $rootfs/$h
354
 
    echo "$h $rootfs/$h none bind 0 0" >> $path/fstab
355
 
}
356
 
 
357
 
clean()
358
 
{
359
 
    release=$1
360
 
    cache="/var/cache/lxc/$release"
361
 
 
362
 
    if [ ! -e $cache ]; then
363
 
        exit 0
364
 
    fi
365
 
 
366
 
    # lock, so we won't purge while someone is creating a repository
367
 
    (
368
 
        flock -n -x 200
369
 
        if [ $? != 0 ]; then
370
 
            echo "Cache repository is busy."
371
 
            exit 1
372
 
        fi
373
 
 
374
 
        echo -n "Purging the download cache..."
375
 
        rm --preserve-root --one-file-system -rf $cache && echo "Done." || exit 1
376
 
        exit 0
377
 
 
378
 
    ) 200>/var/lock/subsys/lxc
379
 
}
380
 
 
381
 
usage()
382
 
{
383
 
    cat <<EOF
384
 
$1 -h|--help -p|--path=<path> --clean [-a|--arch] [-b|--bindhome <user>] [--trim] [-r|--release]
385
 
release: lucid | maverick | natty | oneiric
386
 
trim: make a minimal (faster, but not upgrade-safe) container
387
 
bindhome: bind <user>'s home into the container
388
 
arch: amd64 or i386: defaults to host arch
389
 
EOF
390
 
    return 0
391
 
}
392
 
 
393
 
options=$(getopt -o a:b:hp:r:xn:c -l arch:,bindhome:,help,path:,release:,trim,name:,clean -- "$@")
394
 
if [ $? -ne 0 ]; then
395
 
    usage $(basename $0)
396
 
    exit 1
397
 
fi
398
 
eval set -- "$options"
399
 
 
400
 
release=lucid
401
 
if [ -f /etc/lsb-release ]; then
402
 
    . /etc/lsb-release
403
 
    case "$DISTRIB_CODENAME" in
404
 
        lucid|maverick|natty|oneiric)
405
 
            release=$DISTRIB_CODENAME
406
 
        ;;
407
 
    esac
408
 
fi
409
 
 
410
 
bindhome=
411
 
arch=$(arch)
412
 
 
413
 
# Code taken from debootstrap
414
 
if [ -x /usr/bin/dpkg ] && /usr/bin/dpkg --print-architecture >/dev/null 2>&1; then
415
 
    arch=`/usr/bin/dpkg --print-architecture`
416
 
elif type udpkg >/dev/null 2>&1 && udpkg --print-architecture >/dev/null 2>&1; then
417
 
    arch=`/usr/bin/udpkg --print-architecture`
418
 
else
419
 
    arch=$(arch)
420
 
    if [ "$arch" = "i686" ]; then
421
 
        arch="i386"
422
 
    elif [ "$arch" = "x86_64" ]; then
423
 
        arch="amd64"
424
 
    elif [ "$arch" = "armv7l" ]; then
425
 
        arch="armel"
426
 
    fi
427
 
fi
428
 
 
429
 
trim_container=0
430
 
hostarch=$arch
431
 
while true
432
 
do
433
 
    case "$1" in
434
 
    -h|--help)      usage $0 && exit 0;;
435
 
    -p|--path)      path=$2; shift 2;;
436
 
    -n|--name)      name=$2; shift 2;;
437
 
    -c|--clean)     clean=$2; shift 2;;
438
 
    -r|--release)   release=$2; shift 2;;
439
 
    -b|--bindhome)  bindhome=$2; shift 2;;
440
 
    -a|--arch)      arch=$2; shift 2;;
441
 
    -x|--trim)      trim_container=1; shift 1;;
442
 
    --)             shift 1; break ;;
443
 
        *)              break ;;
444
 
    esac
445
 
done
446
 
 
447
 
pwd=`getent passwd $bindhome`
448
 
if [ $? -ne 0 ]; then
449
 
    echo "Error: no password entry found for $bindhome"
450
 
    exit 1
451
 
fi
452
 
 
453
 
 
454
 
if [ "$arch" == "i686" ]; then
455
 
    arch=i386
456
 
fi
457
 
 
458
 
if [ ! -z "$clean" -a -z "$path" ]; then
459
 
    clean || exit 1
460
 
    exit 0
461
 
fi
462
 
 
463
 
if [ $hostarch = "i386" -a $arch = "amd64" ]; then
464
 
    echo "can't create amd64 container on i386"
465
 
    exit 1
466
 
fi
467
 
 
468
 
type debootstrap
469
 
if [ $? -ne 0 ]; then
470
 
    echo "'debootstrap' command is missing"
471
 
    exit 1
472
 
fi
473
 
 
474
 
if [ -z "$path" ]; then
475
 
    echo "'path' parameter is required"
476
 
    exit 1
477
 
fi
478
 
 
479
 
if [ "$(id -u)" != "0" ]; then
480
 
    echo "This script should be run as 'root'"
481
 
    exit 1
482
 
fi
483
 
 
484
 
rootfs=$path/rootfs
485
 
 
486
 
install_ubuntu $rootfs $release
487
 
if [ $? -ne 0 ]; then
488
 
    echo "failed to install ubuntu $release"
489
 
    exit 1
490
 
fi
491
 
 
492
 
configure_ubuntu $rootfs $name
493
 
if [ $? -ne 0 ]; then
494
 
    echo "failed to configure ubuntu $release for a container"
495
 
    exit 1
496
 
fi
497
 
 
498
 
copy_configuration $path $rootfs $name $arch
499
 
if [ $? -ne 0 ]; then
500
 
    echo "failed write configuration file"
501
 
    exit 1
502
 
fi
503
 
 
504
 
post_process $rootfs $release $trim_container
505
 
if [ ! -z $bindhome ]; then
506
 
        do_bindhome $rootfs $bindhome
507
 
fi
508
 
 
509
 
if [ ! -z $clean ]; then
510
 
    clean $release || exit 1
511
 
    exit 0
512
 
fi