Sophie

Sophie

distrib > Fedora > 13 > i386 > media > os > by-pkgid > 3b1c70357ba64c093a73a994f980ca3c > files > 14

schroot-1.2.3-5.fc13.i686.rpm

#!/bin/sh
# Copyright © 2005-2007  Roger Leigh <rleigh@debian.org>
#
# schroot is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# schroot is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see
# <http://www.gnu.org/licenses/>.
#
#####################################################################

set -e

if [ -f "$CHROOT_SCRIPT_CONFIG" ]; then
    . "$CHROOT_SCRIPT_CONFIG"
elif [ "$2" = "ok" ]; then
    echo "script-config file '$CHROOT_SCRIPT_CONFIG' does not exist"
    exit 1
fi

# Mount a filesystem
# $1: mount options
# $2: mount device
# $3: mount location
do_mount()
{
    if [ "$AUTH_VERBOSITY" = "verbose" ]; then
	echo "Mounting $2 on $3"
    fi

    if [ ! -d "$3" ]; then
	mkdir -p "$3"
    fi
    if [ ! -d "$3" ]; then
	echo "$3 does not exist, and could not be created"
	exit 1
    fi

    mount $VERBOSE $1 "$2" "$3"
}

# Unmount all filesystems under specified location
# $1: mount base location
do_umount_all()
{
    if [ -d "$1" ]; then
	mounts="$("$LIBEXEC_DIR/schroot-listmounts" -m "$1")"
	if [ "x$mounts" != 'x' ]; then
            echo "$mounts" |
            while read mountloc; do
		if [ "$AUTH_VERBOSITY" = "verbose" ]; then
                    echo "Unmounting $mountloc"
		fi
		umount "$mountloc" || exit 1
            done || exit 1
	fi
    fi
}

if [ "$AUTH_VERBOSITY" = "verbose" ]; then
  VERBOSE="-v"
#  FSCK_VERBOSE="-V"
fi

if [ "$CHROOT_TYPE" = "plain" ] || [ "$CHROOT_TYPE" = "directory" ] || [ "$CHROOT_TYPE" = "file" ] || [ "$CHROOT_TYPE" = "loopback" ] || [ "$CHROOT_TYPE" = "block-device" ] || [ "$CHROOT_TYPE" = "lvm-snapshot" ]; then

    if [ "$CHROOT_TYPE" = "plain" ]; then
	CHROOT_MOUNT_OPTIONS="--rbind"
	CHROOT_MOUNT_DEVICE="$CHROOT_LOCATION"
    elif [ "$CHROOT_TYPE" = "directory" ]; then
	CHROOT_MOUNT_OPTIONS="--bind"
	CHROOT_MOUNT_DEVICE="$CHROOT_LOCATION"
    elif [ "$CHROOT_TYPE" = "loopback" ]; then
	CHROOT_MOUNT_OPTIONS="$CHROOT_MOUNT_OPTIONS -o loop"
    elif [ "$CHROOT_TYPE" = "lvm-snapshot" ]; then
	CHROOT_MOUNT_DEVICE="$CHROOT_LVM_SNAPSHOT_DEVICE"
    fi

    if [ $1 = "setup-start" ] || [ $1 = "setup-recover" ]; then

        # fsck doesn't like being run non-interactively
	#/sbin/fsck $FSCK_VERBOSE -n "$CHROOT_MOUNT_DEVICE"

        if [ ! -d "$CHROOT_MOUNT_LOCATION" ]; then
	    mkdir -p "$CHROOT_MOUNT_LOCATION"
        fi
	if [ ! -d "$CHROOT_MOUNT_LOCATION" ]; then
	    echo "$CHROOT_MOUNT_LOCATION does not exist, and could not be created"
	    exit 1
	fi

        # If recovering, we want to remount all filesystems to ensure
        # a sane state.
	if [ $1 = "setup-recover" ]; then
	    do_umount_all "$CHROOT_MOUNT_LOCATION"
	fi

	if [ "$CHROOT_TYPE" != "file" ]; then
	    do_mount "$CHROOT_MOUNT_OPTIONS" "$CHROOT_MOUNT_DEVICE" "$CHROOT_MOUNT_LOCATION"
	fi

	if [ "$CHROOT_TYPE" != "plain" ]; then
	    if [ -n "$FSTAB" ]; then
		if [ -f "$FSTAB" ]; then
		    "$LIBEXEC_DIR/schroot-mount" $VERBOSE \
			-f "$FSTAB" -m "$CHROOT_PATH"
		else
		    echo "fstab file '$FSTAB' does not exist"
		    exit 1
		fi
	    fi
	fi

    elif [ $1 = "setup-stop" ]; then

	do_umount_all "$CHROOT_MOUNT_LOCATION"

	if [ "$CHROOT_TYPE" != "file" ]; then
	    if echo "$CHROOT_MOUNT_LOCATION" | grep -q "^$MOUNT_DIR/"; then
		if [ -d "$CHROOT_MOUNT_LOCATION" ]; then
		    rmdir "$CHROOT_MOUNT_LOCATION"
		fi
	    fi
	fi

    fi

fi