--- trunk/mage/usr/lib/mage/mage4.sh 2005/09/09 16:35:46 226 +++ trunk/mage/usr/lib/mage/mage4.sh 2013/10/16 07:41:04 2222 @@ -1,48 +1,27 @@ -#!/bin/sh +#!/bin/bash # Magellan Linux Installer (mage.sh) -# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.sh,v 1.1 2005-09-09 16:35:41 niro Exp $ +# $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.sh,v 1.17 2008-06-16 09:29:57 niro Exp $ # default die function die() { + xtitleclean + mqueryfeature "debug" && echo -e ${COLRED}"Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."${COLDEFAULT} echo -e ${COLRED}"$@"${COLDEFAULT} exit 1 } # include all needed files -# [ -f ${MLIBDIR}/conf/mage.rc.global ] && \ -# source ${MLIBDIR}/conf/mage.rc.global || \ -# die "${MLIBDIR}/conf/mage.rc.global missing" -# -# [ -f /etc/mage.rc ] && source /etc/mage.rc || \ -# die "Your /etc/mage.rc is missing. Aborting." -# -# [ -f ${MLIBDIR}/mage.functions.sh ] && \ -# source ${MLIBDIR}/mage.functions.sh || \ -# die "mage functions missing" - -# for tests only -source /home/tjoke/alx-cvs/magellan-src/mage/usr/lib/mage/mage.rc.global -source /etc/mage.rc -source /home/tjoke/alx-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh -MLIBDIR=/home/tjoke/alx-cvs/magellan-src/mage/usr/lib/mage - -## only for tests -> normally in /etc/rc.d/init.d/functions -COLRED="\033[1;6m\033[31m" -COLGREEN="\033[1;6m\033[32m" -COLBLUE="\033[1;6m\033[34m" -COLDEFAULT="\033[0m" - -if [[ ${NOCOLORS} = true ]] -then - COLRED="" - COLGREEN="" - COLYELLOW="" - COLBLUE="" - COLMAGENTA="" - COLWHITE="" - COLDEFAULT="" -fi +[ -f /etc/mage.rc.global ] && \ + source /etc/mage.rc.global || \ + die "/etc/mage.rc.global missing" + +[ -f ${MAGERC} ] && source ${MAGERC} || \ + die "Your ${MAGERC} is missing. Aborting." + +[ -f ${MLIBDIR}/mage4.functions.sh ] && \ + source ${MLIBDIR}/mage4.functions.sh || \ + die "mage functions missing" # export default path export PATH="${PATH}:${MLIBDIR}" @@ -53,7 +32,7 @@ # sanity checks [ ! -e ${VIRTUALDB_FILE} ] && touch ${VIRTUALDB_FILE} -if [ ! -e ${VIRTUALDB_DEFAULTS} ] && [[ $1 != update ]] +if [ ! -e ${VIRTUALDB_DEFAULTS} ] && [[ $1 != update ]] && [[ $1 != update-tarball ]] then echo echo "Please choose an profile from the mage tree." @@ -62,38 +41,49 @@ fi # default messages -showversion() { +showversion() +{ local MAGEVERSION="$(< ${MLIBDIR}/version)" echo -en "Magellan Package Manager v${MAGEVERSION} " echo -e "-- Niels Rogalla (niro@magellan-linux.de)" } -print_usage(){ - showversion - echo +print_usage() +{ + #showversion + #echo echo "Usage: $(basename $0) [option] pkgname ..." echo "Options:" - echo " pretend - pretends dependencies of a package" - echo " srcpretend - pretends dependencies of a package (build from source)" - echo " install - installs a package" - echo " srcinstall - installs a package from source" - echo " uninstall - removes a package" - echo " update - updates mage-tree" - echo " search - searches mage-tree for a package" - echo " clean - removes *all* downloaded packages" -# echo " unpack - unpacks a package" - echo " download - downloads a package" - echo " version - prints version info" + echo " pretend - pretends dependencies of a package" + echo " srcpretend - pretends dependencies of a package (build from source)" + echo " install - installs a package" + echo " srcinstall - installs a package from source" + echo " uninstall - removes a package" + echo " update - updates the mage-tree via rsync" + echo " update-tarball - updates the mage-tree via a tarball" + echo " uppretend - pretend dependencies for a system upgrade" + echo " upgrade - runs a complete system upgrade" + echo " srcuppretend - pretend dependencies for a system upgrade from source" + echo " srcupgrade - runs a complete system upgrade from source" + echo " pretend-build-prerequisites" + echo " install-build-prerequisites" + echo " search - searches mage-tree for a package" + echo " clean - removes *all* downloaded packages" + echo " unpack - unpacks *all* needed package for 'foo'" + echo " download - downloads *all* needed packages for 'foo'" + echo " print-features - prints all enabled mage-features" + echo " version - prints version info" + echo " regen-mage-tree - regenerates the whole mage database (for devs only)" echo echo "Other options:" # echo "NOINSTALL=yes $(basename $0) srcinstall PACKAGE" # echo "Builds a Package with its dependencies, but won't install anything." # echo - echo "USE_UNSTABLE=true $(basename $0) [src]install PACKAGE" + echo "MAGE_DISTRIBUTION=unstable $(basename $0) [src]install PACKAGE" echo "Overrides stable packages; you can install packages that are marked unstable." echo - echo "USE_TESTING=true $(basename $0) [src]install PACKAGE" + echo "MAGE_DISTRIBUTION=testing $(basename $0) [src]install PACKAGE" echo "Overrides stable packages; you can install packages that are marked testing." echo echo "NOCOLORS=true $(basename $0) [src]install PACKAGE" @@ -105,17 +95,47 @@ showversion echo -# before anything run mage_setup -mage_setup || die "error in mage_setup()" - # install method METHOD="$1" -# initial unversionized packagename, gets overridden later +# initial unversionized packagename, gets overridden later on MAGENAME="$2" -[[ -z ${METHOD} ]] || [[ -z ${MAGENAME} ]] && print_usage && exit 1 +if [[ ${METHOD} != upgrade ]] && + [[ ${METHOD} != srcupgrade ]] && + [[ ${METHOD} != uppretend ]] && + [[ ${METHOD} != srcuppretend ]] && + [[ ${METHOD} != update ]] && + [[ ${METHOD} != update-tarball ]] && + [[ ${METHOD} != clean ]] && + [[ ${METHOD} != version ]] && + [[ ${METHOD} != search ]] && + [[ ${METHOD} != regen-mage-tree ]] && + [[ ${METHOD} != print-features ]] +then + [[ -z ${METHOD} ]] || [[ -z ${MAGENAME} ]] && print_usage && exit 1 +fi + +# set PKGDIR and BUILDDIR to MROOT +if [[ -n ${MROOT} ]] +then + PKGDIR=${MROOT}/${PKGDIR} + BUILDDIR=${MROOT}/${BUILDDIR} +fi + +# before anything run mage_setup +mage_setup || die "error in mage_setup()" +# load supported mage features +load_mage_features + +# query debug mode +if mqueryfeature "debug" +then + depwalker_debug="--debug" +else + depwalker_debug="" +fi case ${METHOD} in download) @@ -126,7 +146,10 @@ [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist." # source the highest magefile of this pkg - source $(get_highest_magefile ${PCAT} ${MAGENAME}) + PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME})) + + # package is masked + [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation." # convert PKGNAME to PNAME/PVER/PBUILD # we're working *only* with these three vars from here on @@ -140,8 +163,10 @@ --pcat ${PCAT} \ --pname ${PNAME} \ --pver ${PVER} \ - --pbuild ${PBUILD})" + --pbuild ${PBUILD} \ + ${depwalker_debug})" fetch_packages ${ALLDEPS} || die "fetching packages" + md5sum_packages ${ALLDEPS} || die "md5 sum packages" ;; srcdownload) @@ -152,7 +177,10 @@ [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist." # source the highest magefile of this pkg - source $(get_highest_magefile ${PCAT} ${MAGENAME}) + PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME})) + + # package is masked + [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation." # convert PKGNAME to PNAME/PVER/PBUILD # we're working *only* with these three vars from here on @@ -166,11 +194,12 @@ --pcat ${PCAT} \ --pname ${PNAME} \ --pver ${PVER} \ - --pbuild ${PBUILD})" + --pbuild ${PBUILD} \ + ${depwalker_debug})" fetch_packages ${ALLDEPS} || die "fetching packages" ;; - pretend|srcpretend) + pretend|srcpretend|pretend-build-prerequisites) # first of all get the right pkg which going to be installed PCAT="$(pname2pcat ${MAGENAME})" @@ -178,7 +207,10 @@ [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist." # source the highest magefile of this pkg - source $(get_highest_magefile ${PCAT} ${MAGENAME}) + PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME})) + + # package is masked + [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation." # convert PKGNAME to PNAME/PVER/PBUILD # we're working *only* with these three vars from here on @@ -200,10 +232,13 @@ --pcat ${PCAT} \ --pname ${PNAME} \ --pver ${PVER} \ - --pbuild ${PBUILD} + --pbuild ${PBUILD} \ + ${depwalker_debug} ;; - install) + install|install-build-prerequisites) + have_root_privileges || die "You must be root to run this operation." + # first of all get the right pkg which going to be installed PCAT="$(pname2pcat ${MAGENAME})" @@ -211,7 +246,10 @@ [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist." # source the highest magefile of this pkg - source $(get_highest_magefile ${PCAT} ${MAGENAME}) + PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME})) + + # package is masked + [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation." # convert PKGNAME to PNAME/PVER/PBUILD # we're working *only* with these three vars from here on @@ -222,7 +260,7 @@ if is_installed ${PCAT}/${PNAME}-${PVER}-${PBUILD} then echo -en "Package " - echo -en "${COLRED}${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}" + echo -en "${COLRED}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}" echo -e " already installed." exit 3 fi @@ -233,16 +271,18 @@ --pcat ${PCAT} \ --pname ${PNAME} \ --pver ${PVER} \ - --pbuild ${PBUILD})" + --pbuild ${PBUILD} \ + ${depwalker_debug})" # first fetch all packages fetch_packages ${ALLDEPS} || die "fetching packages" md5sum_packages ${ALLDEPS} || die "md5 sum packages" - unpack_packages ${ALLDEPS} || die "unpacking packages" install_packages ${ALLDEPS} || die "installing packages" ;; srcinstall) + have_root_privileges || die "You must be root to run this operation." + # first of all get the right pkg which going to be installed PCAT="$(pname2pcat ${MAGENAME})" @@ -250,7 +290,10 @@ [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist." # source the highest magefile of this pkg - source $(get_highest_magefile ${PCAT} ${MAGENAME}) + PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME})) + + # package is masked + [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation." # convert PKGNAME to PNAME/PVER/PBUILD # we're working *only* with these three vars from here on @@ -261,7 +304,7 @@ if is_installed ${PCAT}/${PNAME}-${PVER}-${PBUILD} then echo -en "Package " - echo -en "${COLRED}${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}" + echo -en "${COLRED}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}" echo -e " already installed." exit 3 fi @@ -272,41 +315,130 @@ --pcat ${PCAT} \ --pname ${PNAME} \ --pver ${PVER} \ - --pbuild ${PBUILD})" + --pbuild ${PBUILD} \ + ${depwalker_debug})" install_packages --src-install ${ALLDEPS} || die "src-installing packages" ;; uninstall) - ALLDEPS="$(get_uninstall_candidates --pname ${MAGENAME})" - if [ -z "${ALLDEPS}" ] - then - die "No package installed named '${MAGENAME}'." - fi - uninstall_packages ${ALLDEPS} + have_root_privileges || die "You must be root to run this operation." + + ALLDEPS="$(get_uninstall_candidates --pname ${MAGENAME})" + if [ -z "${ALLDEPS}" ] + then + die "No package installed named '${MAGENAME}'." + fi + uninstall_packages ${ALLDEPS} + ;; + + uppretend|srcuppretend) + ${MLIBDIR}/depwalker.sh \ + --method ${METHOD} \ + --pcat ${METHOD} \ + --pname ${METHOD} \ + --pver ${METHOD} \ + --pbuild ${METHOD} \ + ${depwalker_debug} + ;; + + upgrade) + have_root_privileges || die "You must be root to run this operation." + + # get all dependencies of *all* installed packages + # fake pcat,pname,pver,pbuild ... + ALLDEPS="$(${MLIBDIR}/depwalker.sh \ + --method ${METHOD} \ + --pcat ${METHOD} \ + --pname ${METHOD} \ + --pver ${METHOD} \ + --pbuild ${METHOD} \ + ${depwalker_debug})" + + # first fetch all packages + fetch_packages ${ALLDEPS} || die "fetching packages" + md5sum_packages ${ALLDEPS} || die "md5 sum packages" + install_packages ${ALLDEPS} || die "installing packages" + ;; + + srcupgrade) + have_root_privileges || die "You must be root to run this operation." + + # get all dependencies of *all* installed packages + # fake pcat,pname,pver,pbuild ... + ALLDEPS="$(${MLIBDIR}/depwalker.sh \ + --method ${METHOD} \ + --pcat ${METHOD} \ + --pname ${METHOD} \ + --pver ${METHOD} \ + --pbuild ${METHOD} \ + ${depwalker_debug})" + + install_packages --src-install ${ALLDEPS} || die "src-installing packages" ;; search) - ${MLIBDIR}/pkgsearch.sh ${MAGENAME} + pkgsearch "${MAGENAME}" ;; -# unpack) -# build_unpackpkg -# ;; + unpack) + have_root_privileges || die "You must be root to run this operation." + + # first of all get the right pkg which going to be installed + PCAT="$(pname2pcat ${MAGENAME})" + + # package does not exists + [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist." + + # source the highest magefile of this pkg + PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME})) + + # package is masked + [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation." + + # convert PKGNAME to PNAME/PVER/PBUILD + # we're working *only* with these three vars from here on + PNAME="$(pkgname2pname ${PKGNAME})" + PVER="$(pkgname2pver ${PKGNAME})" + PBUILD="$(pkgname2pbuild ${PKGNAME})" + + # get all dependencies of this package + ALLDEPS="$(${MLIBDIR}/depwalker.sh \ + --method install \ + --pcat ${PCAT} \ + --pname ${PNAME} \ + --pver ${PVER} \ + --pbuild ${PBUILD} \ + ${depwalker_debug})" + + fetch_packages ${ALLDEPS} || die "fetching packages" + md5sum_packages ${ALLDEPS} || die "md5 sum packages" + unpack_packages ${ALLDEPS} || die "unpacking packages" + ;; update) + have_root_privileges || die "You must be root to run this operation." syncmage ;; + update-tarball) + have_root_privileges || die "You must be root to run this operation." + syncmage_tarball + ;; + clean) + have_root_privileges || die "You must be root to run this operation." cleanpkg ;; version) - showversion + # showversion + exit 0 ;; regen-mage-tree) + have_root_privileges || die "You must be root to run this operation." + if [ -z "${SMAGESCRIPTSDIR}" ] || [ ! -d "${SMAGESCRIPTSDIR}" ] then echo "SMAGESCRIPTSDIR not found. Check your mage.rc or check out smage repos." @@ -318,6 +450,10 @@ done ;; + print-features) + mprintfeatures + ;; + *) print_usage ;;