about summary refs log blame commit diff stats
path: root/core/scripts/backup-ports.sh
blob: b5667e47ac82d6d2c25597f4627057bb91166c10 (plain) (tree)




















                                                           


















































































                                                                                                                         
#!/bin/bash

DEST_SYS=/usr/ports/releases/stable
DEST_ARC=/usr/ports/releases/archives

#PRT_GET_FLAGS="-fr -if -is"
PRT_GET_FLAGS="-fr"

# Build Name = R1 (System number) D1 (Droid/Machine number)
BUILD_NAME="R1D9"
#echo "Give build NAME;"
#echo "${DEST_ARC}/NAME-0.0.0.targ.gz"
#read BUILD_NAME

echo "Give build CRUX_RELEASE.VERSION (3.4.X);"
echo "${DEST_ARC}/${BUILD_NAME}-VERSION.tar.gz"
read BUILD_VERSION

mkdir -p ${DEST_SYS}
mkdir -p ${DEST_ARC}

backup_collections() {

    # backup collection packages
    while read COLL_VERSION; do
        COLL_NAME=$(echo $COLL_VERSION | cut -d "-" -f 1)
        COLL_RELEASE=$(echo $COLL_VERSION | cut -d "-" -f 2)

        while read PORT_NAME; do
            # get installed version not version on ports
            PACKAGE=$(grep "^${PORT_NAME}#" ${DEST_SYS}/all-installed.pkg)
            echo "Backing up package:	${PACKAGE}"

            # check if binary package exist
            if [ ! -f /usr/ports/packages/${PACKAGE} ]; then
                echo "Building package: ${PACKAGE};"
                sudo prt-get update ${PRT_GET_FLAGS} ${PORT_NAME}
            fi

            if [ -f /usr/ports/packages/${PACKAGE} ]; then
                echo ${PACKAGE} >> ${DEST_SYS}/${COLL_NAME}-backup.pkg
                tar rvf ${DEST_SYS}/${COLL_NAME}-${COLL_RELEASE}.tar --directory=/usr/ports/packages ${PACKAGE}
            else
                echo "Package ${PACKAGE} from ${PORT_NAME} port not found."
                echo ${PACKAGE} >> ${DEST_SYS}/${COLL_NAME}-${COLL_RELEASE}-notfound.pkg
            fi
        done < ${DEST_SYS}/${COLL_NAME}-installed.pkg
    done < ${DEST_SYS}/ports_versions.pkg
}

create_metadata() {
    echo "${BUILD_NAME}-${BUILD_VERSION}" >> ${DEST_SYS}/build_version

    # archive pkgutils data
    tar --xattrs -zcpf ${DEST_SYS}/pkg-db.tar.gz /var/lib/pkg/db .

    # archive ports data
    tar --xattrs -zcpf ${DEST_SYS}/etc_ports.tar.gz --directory=/etc/ports .

    # must be using gwak instead of sed
    prt-get listinst -v | sed 's/ /#/g' | sed 's/$/.pkg.tar.gz/g' > ${DEST_SYS}/all-installed.pkg 

    if [ -f ${DEST_SYS}/ports_versions ]; then
        rm ${DEST_SYS}/ports_versions.pkg
    fi

    for filename in /etc/ports/*.git; do
        source $filename

        echo "${NAME} port collection release (exp; ${BUILD_VERSION}):"

        read RELEASE
        echo ${NAME}-${RELEASE} >> ${DEST_SYS}/ports_versions.pkg

        # backup ports collection
        echo "Backing up collection: 	${NAME}"
        tar --xattrs -zcpf ${DEST_SYS}/${NAME}-ports-${RELEASE}.tar.gz \
            --directory=/usr/ports/${NAME} \
            --exclude=.git/ \
            .

        # create list of installed packages 
        prt-get printf "%i %p %n\n" | grep "yes /usr/ports/${NAME}" | cut -d " " -f 3 > ${DEST_SYS}/${NAME}-installed.pkg
    done
}

create_archive() {
    echo "Creating  ${DEST_ARC}/${BUILD_NAME}-${BUILD_VERSION}.tar.gz ..."
    tar --xattrs -zcpf ${DEST_ARC}/${BUILD_NAME}-${BUILD_VERSION}.tar.gz --directory=${DEST_SYS} .
}

update_host() {
    echo "Creating links to /usr/ports/installed"
    rm -r /usr/ports/installed
    pkg_installed

    echo "Creating ports page"
    portspage --title=${BUILD_NAME}-${BUILD_VERSION} /usr/ports/installed > /usr/ports/installed/index.html
}

create_metadata
backup_collections
create_archive
update_host