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: Don Apr 12 11:44:54 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 # make sure at least $TARGET is set [the partition for the new system]
98 if [ -z "$TARGET" ] ; then
99 eerror "Please adjust /etc/debootstrap/config before running ${0}" ; eend 1
104 # helper functions {{{
105 # we want to exit smoothly and clean:
107 # make sure $TARGET is not mounted when exiting grml-debootstrap
108 if [ -n "$TARGET" ] ; then
109 if grep -q $TARGET /proc/mounts ; then
110 # make sure nothing is left inside chroot so we can unmount it
111 [ -x "$TARGET"/etc/init.d/ssh ] && "$TARGET"/etc/init.d/ssh stop
112 [ -x "$TARGET"/etc/init.d/mdadm ] && "$TARGET"/etc/init.d/mdadm stop
113 chroot "$TARGET" umount /sys 1>/dev/null 2>&1
114 chroot "$TARGET" umount /proc 1>/dev/null 2>&1
115 echo "Unmounting $TARGET"
119 [ -n "$1" ] && EXIT="$1" || EXIT="1"
122 trap bailout 1 2 3 15
124 # we want to execute all the functions only once, simple check for it:
126 if grep -q done "$STAGES/$1" 2>/dev/null ; then
127 ewarn "Notice: stage $1 has been executed already, skipping execution therefore." ; eend 0
130 echo "$2" > "$STAGES/$1"
136 # user should recheck his configuration {{{
137 einfo "$0 - Please recheck configuration before execution:"
140 case "$MNTPOINT" in "$TARGET") ;; *) echo " Mount-point: $MNTPOINT" ;; esac
141 [ -n "$GRUB" ] && echo " Install grub to: $GROOT / $GRUB"
142 case "$MNTPOINT" in "$TARGET") ;; *) echo " Important! Continuing will delete all data from ${TARGET}!" ;; esac
144 einfon "Is this ok for you? [y/N] "
147 if ! [ "$a" = 'y' -o "$a" = 'Y' ] ; then
148 eerror "Exiting as requested." ; eend 1
153 # create filesystem {{{
155 if [ -n "$MKFS" ] ; then
156 einfo "Running $MKFS on $TARGET"
163 # modify filesystem settings {{{
165 if [ -n "$TUNE2FS" ] ; then
166 einfo "Disabling automatic filesystem check on $TARGET via tune2fs"
173 # mount the new partition or if it's a directory do nothing at all {{{
175 if [ -n "$DIRECTORY" ] ; then
176 einfo "Running grml-debootstrap on a directory, nothing to mount."
178 if grep -q $TARGET /proc/mounts ; then
179 eerror "$TARGET already mounted, exiting."
181 [ -n "$MNTPOINT" ] || MNTPOINT='/mnt/test'
182 [ -d "$MNTPOINT" ] || mkdir -p "$MNTPOINT"
183 einfo "Mounting $TARGET to $MNTPOINT"
184 mount -o rw,suid,dev $TARGET $MNTPOINT
191 # install main chroot {{{
192 debootstrap_system() {
193 einfo "Running $DEBOOTSTRAP for release ${RELEASE}${ARCHINFO} using mirror $MIRROR"
194 $DEBOOTSTRAP $ARCHCMD $RELEASE $MNTPOINT $MIRROR
199 # prepare chroot via chroot-script {{{
201 einfo "Preparing chroot system"
202 cp $CONFFILES/chroot-script $MNTPOINT/bin/chroot-script
203 chmod 755 $MNTPOINT/bin/chroot-script
204 mkdir $MNTPOINT/etc/debootstrap/
206 # make sure we have our files for later use via chroot-script
207 cp /etc/debootstrap/config $MNTPOINT/etc/debootstrap/
208 cp /etc/debootstrap/packages $MNTPOINT/etc/debootstrap/packages
210 # make sure we can access network [relevant for cdebootstrap]
211 [ -f "$MNTPOINT/etc/resolv.conf" ] || cp /etc/resolv.conf $MNTPOINT/etc/resolv.conf
213 # setup default locales
214 [ -n "$LOCALES" ] && cp /etc/debootstrap/locale.gen $MNTPOINT/etc/locale.gen
216 # copy any existing existing files to chroot
217 [ -d /etc/debootstrap/boot ] && cp -a /etc/debootstrap/boot/* $MNTPOINT/boot/
218 [ -d /etc/debootstrap/etc ] && cp -a /etc/debootstrap/etc/* $MNTPOINT/etc/
219 [ -d /etc/debootstrap/share ] && cp -a /etc/debootstrap/share/* $MNTPOINT/share/
220 [ -d /etc/debootstrap/usr ] && cp -a /etc/debootstrap/usr/* $MNTPOINT/usr/
221 [ -d /etc/debootstrap/var ] && cp -a /etc/debootstrap/var/* $MNTPOINT/var/
226 # execute chroot-script {{{
228 einfo "Executing chroot-script now"
229 chroot "$MNTPOINT" /bin/chroot-script
234 # install booloader grub {{{
236 if [ -z "$GRUB" -o -z "$GROOT" ] ; then
237 echo "Notice: \$GRUB or \$GROOT not defined, will not install grub therefor."
239 einfo "Installing grub on ${GRUB}:"
240 grub-install --root-directory="$MNTPOINT" "(${GRUB})"
246 # unmount $MNTPOINRT {{{
248 if [ -n "$PARTITION" ] ; then
249 einfo "Unmount $MNTPOINT"
256 # execute filesystem check {{{
258 if [ "$FSCK" = 'yes' ] ; then
259 [ -n "$FSCKTOOL" ] || FSCKTOOL="fsck.${MKFS#mkfs.}"
260 einfo "Checking filesystem on $TARGET using $FSCKTOOL"
267 # now execute all the functions {{{
268 stage mkfs && mkfs && stage mkfs done || bailout
269 stage tunefs && tunefs && stage tunefs done || bailout
270 stage mount_target && mount_target && stage mount_target done || bailout
271 stage debootstrap_system && debootstrap_system && stage debootstrap_system done || bailout
272 stage preparechroot && preparechroot && stage preparechroot done || bailout
273 stage chrootscript && chrootscript && stage chrootscript done || bailout
274 stage grub_install && grub_install && stage grub_install done || bailout
275 stage umount_chroot && umount_chroot && stage umount_chroot done || bailout
276 stage fscktool && fscktool && stage fscktool done || bailout
280 echo done > $STAGES/grml-debootstrap
283 einfo "Finished execution of $0 - enjoy your Debian system." ; eend 0
285 ## END OF FILE #################################################################
286 # vim: ai tw=100 expandtab foldmethod=marker