2 # Filename: grml-bootstrap
3 # Purpose: wrapper around debootstrap for installing plain Debian via grml
4 # Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports: see http://grml.org/bugs/
6 # License: This file is licensed under the GPL v2.
7 # Latest change: Mon Apr 16 13:11:33 CEST 2007 [mika]
8 ################################################################################
9 # http://www.debian.org/releases/stable/i386/index.html.en
11 set -e # exit on any error
15 # source core functions {{{
16 . /etc/grml/lsb-functions
17 . /etc/grml/script-functions
20 # make sure we have what we need {{{
21 check4progs debootstrap || exit 1
25 # cmdline handling {{{
28 einfo "$0 - wrapper around debootstrap for installing plain Debian via grml"
29 einfo "Adjust /etc/debootstrap/config and invoke $0 afterwards."
34 einfo "$0 version $VERSION"
35 einfo "Send bug reports to Michael Prokop <mika@grml.org>."
42 # without config file it won't work {{{
43 if [ -r /etc/debootstrap/config ] ; then
44 . /etc/debootstrap/config
46 eerror "/etc/debootstrap/config could not be read, exiting." ; eend 1
51 # set/check variables {{{
53 # inside the chroot system the locales might not be available, so use minimum:
57 if [ -z "$STAGES" ] ; then
58 STAGES='/etc/debootstrap/stages'
59 [ -d "$STAGES" ] || mkdir -p "$STAGES"
62 if [ -r $STAGES/grml-debootstrap ] ; then
63 if grep -q done $STAGES/grml-debootstrap ; then
64 eerror "Error: grml-debootstrap has been executed already, won't continue therefore."
65 eerror "If you want to re-execute grml-debootstrap just manually remove ${STAGES}" ; eend 1
77 # assume we are installing into a directory, don't run mkfs and grub related stuff therefore
88 if [ -n "$ARCH" ] ; then
89 ARCHCMD="--arch $ARCH"
92 ARCH="$(dpkg --print-architecture)"
93 ARCHCMD="--arch $ARCH"
97 # provide variables to chroot system
100 " > /etc/debootstrap/variables
102 # make sure at least $TARGET is set [the partition for the new system]
103 if [ -z "$TARGET" ] ; then
104 eerror "Please adjust /etc/debootstrap/config before running ${0}" ; eend 1
109 # helper functions {{{
110 # we want to exit smoothly and clean:
112 # make sure $TARGET is not mounted when exiting grml-debootstrap
113 if [ -n "$TARGET" ] ; then
114 if grep -q $TARGET /proc/mounts ; then
115 # make sure nothing is left inside chroot so we can unmount it
116 [ -x "$TARGET"/etc/init.d/ssh ] && "$TARGET"/etc/init.d/ssh stop
117 [ -x "$TARGET"/etc/init.d/mdadm ] && "$TARGET"/etc/init.d/mdadm stop
118 chroot "$TARGET" umount /sys 1>/dev/null 2>&1
119 chroot "$TARGET" umount /proc 1>/dev/null 2>&1
120 echo "Unmounting $TARGET"
124 [ -n "$1" ] && EXIT="$1" || EXIT="1"
125 [ -n "$3" ] && einfo "Notice: just remove $STAGES/$3 to reexecute the stage"
128 trap bailout 1 2 3 15
130 # we want to execute all the functions only once, simple check for it:
132 if [ -n "$2" ] ; then
133 echo "$2" > "$STAGES/$1"
135 elif grep -q done "$STAGES/$1" 2>/dev/null ; then
136 ewarn "Notice: stage $1 has been executed already, skipping execution therefore." ; eend 0
142 # user should recheck his configuration {{{
143 einfo "$0 - Please recheck configuration before execution:"
146 case "$MNTPOINT" in "$TARGET") ;; *) echo " Mount-point: $MNTPOINT" ;; esac
147 [ -n "$GRUB" ] && echo " Install grub to: $GROOT / $GRUB"
148 case "$MNTPOINT" in "$TARGET") ;; *) echo " Important! Continuing will delete all data from ${TARGET}!" ;; esac
150 einfon "Is this ok for you? [y/N] "
153 if ! [ "$a" = 'y' -o "$a" = 'Y' ] ; then
154 eerror "Exiting as requested." ; eend 1
159 # create filesystem {{{
161 if [ -n "$MKFS" ] ; then
162 einfo "Running $MKFS on $TARGET"
169 # modify filesystem settings {{{
171 if [ -n "$TUNE2FS" ] ; then
172 einfo "Disabling automatic filesystem check on $TARGET via tune2fs"
179 # mount the new partition or if it's a directory do nothing at all {{{
181 if [ -n "$DIRECTORY" ] ; then
182 einfo "Running grml-debootstrap on a directory, nothing to mount."
184 if grep -q $TARGET /proc/mounts ; then
185 eerror "$TARGET already mounted, exiting."
187 [ -n "$MNTPOINT" ] || MNTPOINT='/mnt/test'
188 [ -d "$MNTPOINT" ] || mkdir -p "$MNTPOINT"
189 einfo "Mounting $TARGET to $MNTPOINT"
190 mount -o rw,suid,dev $TARGET $MNTPOINT
197 # install main chroot {{{
198 debootstrap_system() {
199 einfo "Running $DEBOOTSTRAP for release ${RELEASE}${ARCHINFO} using mirror $MIRROR"
200 $DEBOOTSTRAP $ARCHCMD $RELEASE $MNTPOINT $MIRROR
205 # prepare chroot via chroot-script {{{
207 einfo "Preparing chroot system"
208 cp $CONFFILES/chroot-script $MNTPOINT/bin/chroot-script
209 chmod 755 $MNTPOINT/bin/chroot-script
210 mkdir $MNTPOINT/etc/debootstrap/
212 # make sure we have our files for later use via chroot-script
213 cp /etc/debootstrap/config $MNTPOINT/etc/debootstrap/
214 cp /etc/debootstrap/packages $MNTPOINT/etc/debootstrap/packages
215 cp /etc/debootstrap/variables $MNTPOINT/etc/debootstrap/variables
217 # make sure we can access network [relevant for cdebootstrap]
218 [ -f "$MNTPOINT/etc/resolv.conf" ] || cp /etc/resolv.conf $MNTPOINT/etc/resolv.conf
220 # setup default locales
221 [ -n "$LOCALES" ] && cp /etc/debootstrap/locale.gen $MNTPOINT/etc/locale.gen
223 # copy any existing existing files to chroot
224 [ -d /etc/debootstrap/boot ] && cp -a /etc/debootstrap/boot/* $MNTPOINT/boot/
225 [ -d /etc/debootstrap/etc ] && cp -a /etc/debootstrap/etc/* $MNTPOINT/etc/
226 [ -d /etc/debootstrap/share ] && cp -a /etc/debootstrap/share/* $MNTPOINT/share/
227 [ -d /etc/debootstrap/usr ] && cp -a /etc/debootstrap/usr/* $MNTPOINT/usr/
228 [ -d /etc/debootstrap/var ] && cp -a /etc/debootstrap/var/* $MNTPOINT/var/
233 # execute chroot-script {{{
235 if ! [ -r "$MNTPOINT/bin/chroot-script" ] ; then
238 if [ -x "$MNTPOINT/bin/chroot-script" ] ; then
239 einfo "Executing chroot-script now"
240 chroot "$MNTPOINT" /bin/chroot-script
243 eerror "Fatal: $MNTPOINT/bin/chroot-script could not be found."
249 # install booloader grub {{{
251 if [ -z "$GRUB" -o -z "$GROOT" ] ; then
252 echo "Notice: \$GRUB or \$GROOT not defined, will not install grub therefor."
254 einfo "Installing grub on ${GRUB}:"
255 grub-install --root-directory="$MNTPOINT" "(${GRUB})"
261 # unmount $MNTPOINRT {{{
263 if [ -n "$PARTITION" ] ; then
264 einfo "Unmount $MNTPOINT"
271 # execute filesystem check {{{
273 if [ "$FSCK" = 'yes' ] ; then
274 [ -n "$FSCKTOOL" ] || FSCKTOOL="fsck.${MKFS#mkfs.}"
275 einfo "Checking filesystem on $TARGET using $FSCKTOOL"
282 # now execute all the functions {{{
283 for i in mkfs tunefs mount_target debootstrap_system preparechroot \
284 chrootscript grub_install umount_chroot fscktool ; do
286 $i && stage $i done || bailout 2 "i"
292 echo done > $STAGES/grml-debootstrap
295 einfo "Finished execution of $0 - enjoy your Debian system." ; eend 0
297 ## END OF FILE #################################################################
298 # vim: ai tw=100 expandtab foldmethod=marker