Sophie

Sophie

distrib > Mageia > 7 > armv7hl > media > core-release > by-pkgid > 6e28eae4f24b5e894097ff4f76076e81 > files > 24

schroot-1.7.2-12.mga7.armv7hl.rpm

#!/usr/bin/sh
# Copyright © 2005-2013  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

. "$SETUP_DATA_DIR/common-data"
. "$SETUP_DATA_DIR/common-functions"
. "$SETUP_DATA_DIR/common-config"

# Check file type
check_filetype()
{
    if echo "$CHROOT_FILE" | grep -q '\.tar$'; then
        filetype="tar"
    elif echo "$CHROOT_FILE" | egrep -q '(\.tar\.gz|\.tgz)$'; then
        filetype="tgz"
    elif echo "$CHROOT_FILE" | egrep -q '(\.tar\.bz2|\.tbz)$'; then
        filetype="tbz"
    else
        fatal "Unsupported filetype for $CHROOT_FILE"
    fi
}

# Unpack archive
unpack_file()
{
    if [ ! -f "$CHROOT_FILE" ]; then
        fatal "File '$CHROOT_FILE' does not exist"
    fi

    if [ "$filetype" = "tar" ]; then
        tar $TAR_VERBOSE -xf "$CHROOT_FILE"
    elif [ "$filetype" = "tgz" ]; then
        tar $TAR_VERBOSE -xzf "$CHROOT_FILE"
    elif [ "$filetype" = "tbz" ]; then
        tar $TAR_VERBOSE -xjf "$CHROOT_FILE"
    else
        fatal "Unsupported filetype for $CHROOT_FILE"
    fi
}

# Repack archive
repack_file()
{
    NEWFILE=$(mktemp "${CHROOT_FILE}.XXXXXX")

    trap "if [ -f \"$NEWFILE\" ]; then rm -f \"$NEWFILE\"; fi" 0

    if [ "$filetype" = "tar" ]; then
        tar $TAR_VERBOSE -cf "$NEWFILE" .
    elif [ "$filetype" = "tgz" ]; then
        tar $TAR_VERBOSE -czf "$NEWFILE" .
    elif [ "$filetype" = "tbz" ]; then
        tar $TAR_VERBOSE -cjf "$NEWFILE" .
    else
        fatal "Unsupported filetype for $CHROOT_FILE"
    fi

    if [ -f "$CHROOT_FILE" ]; then
        info "Setting ownership and permissions from old archive"
        chown --reference="$CHROOT_FILE" "$NEWFILE"
        chmod --reference="$CHROOT_FILE" "$NEWFILE"
    else
        warn "Old archive no longer exists"
        warn "Setting ownership and permissions to root:root 0600"
        chown root:root "$NEWFILE"
        chmod 0600 "$NEWFILE"
    fi
    mv "$NEWFILE" "$CHROOT_FILE"

    trap "" 0
}

if [ "$VERBOSE" = "verbose" ]; then
    TAR_VERBOSE="-v"
fi

if [ "$CHROOT_TYPE" = "file" ]; then

    check_filetype

    UNPACK_LOCATION="${CHROOT_FILE_UNPACK_DIR}/${SESSION_ID}"

    if [ $STAGE = "setup-start" ]; then

        info "File unpack directory: $UNPACK_LOCATION"

        if [ ! -d "$UNPACK_LOCATION" ]; then
            mkdir -p "$UNPACK_LOCATION"
            info "Created file unpack directory: $UNPACK_LOCATION"
        fi
        cd "$UNPACK_LOCATION"
        info "Changed CWD to $UNPACK_LOCATION"

        unpack_file

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

        if [ "$STATUS" = "ok" ] && [ "$CHROOT_FILE_REPACK" = "true" ]; then
            if [ -d "$UNPACK_LOCATION" ]; then
                info "Repacking chroot archive file $CHROOT_FILE from $UNPACK_LOCATION"
                cd "$UNPACK_LOCATION" && repack_file
            else
                warn "Not repacking chroot archive file: $UNPACK_LOCATION does not exist (it may have been removed previously)"
            fi
        fi

        if [ "$CHROOT_SESSION_PURGE" = "true" ]; then
            info "Purging $UNPACK_LOCATION"
            if [ -d "$UNPACK_LOCATION" ]; then
                rm -rf "$UNPACK_LOCATION"
            fi
        fi

    fi

fi