about summary refs log blame commit diff stats
path: root/linux/scripts/backup-ports.sh
blob: bac18e593a893d4088e559fb687e8e9a1aacddf1 (plain) (tree)
1
2
3
4
5
6
7
8




                                     


                                    








                                                           









                                            





                                               






                                                         
 



                                




























                                                                                                      


                   

                                                    

                           

                                                                    

                        

                                                                 

                                       
                                                                          
 

                               


                                        





                                                                       
 





                                                                          
 
                                                                                  
 

                                                                                                           
 
    


                  

                                                                    


               


                                                     
 

                                                                                                               





                  
#!/bin/bash

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

#PACKAGES=/usr/ports/packages
PACKAGES=/usr/ports/archive/packages

#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

#internal
database=${DEST_SYS}/pkg-db.tar.gz
ports=${DEST_SYS}/etc-ports.tar.gz
metadata=${DEST_SYS}/metadata.tar.gz
build=${DEST_SYS}/metadata/build-version
portsver=${DEST_SYS}/metadata/ports-releases
all=${DEST_SYS}/metadata/all-installed
collinst=${DEST_SYS}/metadata/installed
notfound=${DEST_SYS}/metadata/not-found

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}
mkdir -p ${DEST_SYS}/metadata

archive="${DEST_ARC}/${BUILD_NAME}-${BUILD_VERSION}.tar" 
echo "Creating $archive  ..."
if [ -f ${archive} ]; then
	rm ${archive}
fi

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)

	    if [ -f ${DEST_SYS}/${COLL_VERSION}.tar ]; then
	    	rm ${DEST_SYS}/${COLL_VERSION}.tar
	    fi

	    while read PORT_NAME; do
		    # get installed version not version on ports
		    PACKAGE=$(grep "^${PORT_NAME}#" ${all})

		    # 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}/metadata/${COLL_NAME}-backup
			    tar rvf ${DEST_SYS}/${COLL_VERSION}.tar --directory=${PACKAGES} ${PACKAGE}
		    else
			    echo "Package ${PACKAGE} from ${PORT_NAME} port not found."
			    echo ${PACKAGE} >> ${notfound}-${COLL_VERSION}
		    fi
    	    done < ${collinst}-${COLL_NAME}

	    tar rvf $archive --directory=${DEST_SYS} ${COLL_VERSION}.tar 

    done < ${portsver}
}

create_metadata() {

    echo "${BUILD_NAME}-${BUILD_VERSION}" > ${build}

    # archive pkgutils data
    tar --xattrs -zcpf $database --directory=/var/lib/pkg/ db
    tar rvf $archive --directory=${DEST_SYS} $(basename ${database})

    # archive ports data
    tar --xattrs -zcpf $ports --directory=/etc/ports .
    tar rvf $archive --directory=${DEST_SYS} $(basename ${ports})

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

    if [ -f ${portsver} ]; then
	    rm ${portsver}
    fi

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

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

	read RELEASE
	echo ${NAME}-${RELEASE} >> ${portsver}

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

    	tar rvf $archive --directory=${DEST_SYS} "ports"-${NAME}-${RELEASE}.tar.gz

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

done
}

create_archive() {
    tar --xattrs -zcpf ${metadata} --directory=${DEST_SYS} metadata/
    tar rvf $archive --directory=${DEST_SYS} $(basename ${metadata})
}

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