Magellan Linux

Diff of /trunk/mage/usr/lib/mage/mage4.functions.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 350 by niro, Wed Mar 22 17:43:59 2006 UTC revision 676 by niro, Tue Feb 26 19:49:20 2008 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2  # Magellan Linux Installer Functions (mage.functions.sh)  # Magellan Linux Installer Functions (mage.functions.sh)
3  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh,v 1.17 2006-03-22 17:43:59 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh,v 1.36 2008-02-26 19:49:20 niro Exp $
4    
5  mage_setup()  mage_setup()
6  {  {
# Line 1106  fetch_packages() Line 1106  fetch_packages()
1106   local count_current   local count_current
1107   local count_total   local count_total
1108    
1109   [ -z "${MIRRORS}" ] && die "You have no mirrors defined. Please edit your /etc/mage.rc."   [ -z "${MIRRORS}" ] && die "You have no mirrors defined. Please edit your ${MAGERC}."
1110    
1111   # get count of total packages   # get count of total packages
1112   declare -i count_current=0   declare -i count_current=0
# Line 1181  syncmage() Line 1181  syncmage()
1181  {  {
1182   if [ -z "${RSYNC}" ]   if [ -z "${RSYNC}" ]
1183   then   then
1184   die "You have no rsync-mirrors defined. Please edit your /etc/mage.rc."   die "You have no rsync-mirrors defined. Please edit your ${MAGERC}."
1185   fi   fi
1186    
1187   local i   local i
1188   for i in ${RSYNC}   for i in ${RSYNC}
1189   do   do
1190   rsync \   rsync ${RSYNC_FETCH_OPTIONS} ${i} ${MAGEDIR}
  --recursive \  
  --links \  
  --perms \  
  --times \  
  --devices \  
  --timeout=600 \  
  --verbose \  
  --compress \  
  --progress \  
  --stats \  
  --delete \  
  --delete-after \  
  ${i} ${MAGEDIR}  
1191   if [[ $? = 0 ]]   if [[ $? = 0 ]]
1192   then   then
1193   break   break
# Line 1253  choppkgname() Line 1240  choppkgname()
1240   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]
1241   then   then
1242   #cuts ARCH and PBUILD   #cuts ARCH and PBUILD
1243   #ARCH comes from /etc/mage.rc   #ARCH comes from ${MAGERC}
1244   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")
1245    
1246   #cuts version number   #cuts version number
# Line 1286  pname2pcat() Line 1273  pname2pcat()
1273  # returns 0=stable 1=unstable  # returns 0=stable 1=unstable
1274  check_stable_package()  check_stable_package()
1275  {  {
1276     # first check if this magefile is not blacklisted
1277     blacklisted "$1" || return 1
1278    
1279   local STATE   local STATE
1280   STATE="$(get_value_from_magefile STATE "$1")"   STATE="$(get_value_from_magefile STATE "$1")"
1281    
# Line 1325  get_highest_magefile() Line 1315  get_highest_magefile()
1315   local PNAME="$2"   local PNAME="$2"
1316   local magefile   local magefile
1317    
1318   for magefile in $(ls --format=single-column -v ${MAGEDIR}/${PCAT}/${PNAME}/*)   # do not list the content of a directory, only the name (-d)
1319     for magefile in $(ls --format=single-column -v -d ${MAGEDIR}/${PCAT}/${PNAME}/*)
1320   do   do
1321     [[ -z ${magefile} ]] && continue
1322   # we exclude subdirs (for stuff like a md5sum dir)   # we exclude subdirs (for stuff like a md5sum dir)
1323   [ -d ${magefile} ] && continue   [[ -d ${magefile} ]] && continue
1324   if check_stable_package ${magefile}   if check_stable_package ${magefile}
1325   then   then
1326   HIGHEST_MAGEFILE=${magefile}   HIGHEST_MAGEFILE=${magefile}
# Line 1337  get_highest_magefile() Line 1329  get_highest_magefile()
1329   fi   fi
1330   done   done
1331    
1332   # stop here if HIGHEST_MAGEFILE is zero  # do not so anything
1333   # this package must be unstable or old  # # stop here if HIGHEST_MAGEFILE is zero
1334   if [ -z "${HIGHEST_MAGEFILE}" ]  # # this package must be unstable or old
1335   then  # if [ -z "${HIGHEST_MAGEFILE}" ]
1336   echo  # then
1337   echo -n "All packages named "  # echo
1338   echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}  # echo -n "All packages named "
1339   echo -n " are marked "  # echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}
1340   echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}  # echo -n " are marked "
1341   echo "."  # echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}
1342   echo "You need to declare USE_UNSTABLE=true to install this."  # echo "."
1343   echo  # echo "You need to declare USE_UNSTABLE=true to install this."
1344   echo "Example:"  # echo
1345   echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"  # echo "Example:"
1346   echo  # echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"
1347   echo "Be warned that these packages are not stable and may cause serious problems."  # echo
1348   echo "You should know what you are doing, so don't complain about any damage."  # echo "Be warned that these packages are not stable and may cause serious problems."
1349   echo  # echo "You should know what you are doing, so don't complain about any damage."
1350   return 1  # echo
1351   fi  # return 1
1352    # fi
1353    
1354   echo "${HIGHEST_MAGEFILE}"   echo "${HIGHEST_MAGEFILE}"
1355   return 0   return 0
# Line 1384  is_config_protected() Line 1377  is_config_protected()
1377   EXPFILE="${MROOT}$1"   EXPFILE="${MROOT}$1"
1378    
1379   # file does not exist; it can be written   # file does not exist; it can be written
1380   [ ! -e ${EXPFILE} ] && return 0   [[ ! -e ${EXPFILE} ]] && return 0
1381    
1382   # to be safe; it may be '§'   # to be safe; it may be '§'
1383   IFS=' '   IFS=' '
# Line 1394  is_config_protected() Line 1387  is_config_protected()
1387   do   do
1388   # ersetzen von $i nur wenn am anfang der variable   # ersetzen von $i nur wenn am anfang der variable
1389   TEST="${EXPFILE/#${MROOT}${i}/Protected}"   TEST="${EXPFILE/#${MROOT}${i}/Protected}"
1390   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1391   then   then
1392   # setzen das es protected ist   # setzen das es protected ist
1393   PROTECTED=TRUE   PROTECTED=TRUE
# Line 1403  is_config_protected() Line 1396  is_config_protected()
1396   for x in ${CONFIG_PROTECT_MASK}   for x in ${CONFIG_PROTECT_MASK}
1397   do   do
1398   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"
1399   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1400   then   then
1401   PROTECTED=MASKED   PROTECTED=MASKED
1402   fi   fi
# Line 1439  is_config_protected() Line 1432  is_config_protected()
1432  ###################################################  ###################################################
1433  count_protected_files()  count_protected_files()
1434  {  {
1435   ${MLIBDIR}/writeprotected "$1"   local file="$1"
1436     local dirname="${file%/*}"
1437     local filename="${file##*/}"
1438     local count
1439     local output
1440     local i
1441    
1442     declare -i count=0
1443    
1444     # check if there are already protected files
1445     for oldpretected in $(find ${dirname} -iname "._cfg????_${filename}" |
1446     sed -e "s:\(^.*/\)\(._cfg*_\)\(/.*$\):\1\2\3\%\2\%\3:" |
1447     sort -t'%' -k3 -k2 | cut -f1 -d'%')
1448     do
1449     count=$(echo ${oldpretected} | cut -d_ -f2 | sed -e "s:cfg::")
1450     done
1451     (( count ++ ))
1452    
1453     # fill output up with zeros
1454     for (( i=${#count}; i < 4; i++ )); do output="${output}0"; done
1455     output="${output}${count}"
1456    
1457     echo "${output}"
1458  }  }
1459    
1460  # call with  # call with
# Line 1456  get_uninstall_candidates() Line 1471  get_uninstall_candidates()
1471   local list   local list
1472   local pcatdir   local pcatdir
1473   local protected   local protected
1474     local i
1475    
1476   # very basic getops   # very basic getops
1477   for i in $*   for i in $*
# Line 1717  minclude() Line 1733  minclude()
1733  {  {
1734   local i   local i
1735    
1736   if [ -n "$@" ]   if [[ -n $* ]]
1737   then   then
1738   for i in $@   for i in $*
1739   do   do
1740   [[ ${MAGEDEBUG} = on ]] && \   [[ ${MAGEDEBUG} = on ]] && \
1741   echo "--- Including ${MAGEDIR}/include/${i}.minc"   echo "--- Including ${MAGEDIR}/include/${i}.minc"
# Line 1733  sminclude() Line 1749  sminclude()
1749  {  {
1750   local i   local i
1751    
1752   if [ -n "$@" ]   if [[ -n $* ]]
1753   then   then
1754   for i in $@   for i in $*
1755   do   do
1756   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
1757   source ${SMAGESCRIPTSDIR}/include/${i}.sminc   source ${SMAGESCRIPTSDIR}/include/${i}.sminc
# Line 1759  is_newer_mage_version_available() Line 1775  is_newer_mage_version_available()
1775   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}
1776   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}
1777   echo "It is recommened to install this newer version"   echo "It is recommened to install this newer version"
1778   echo "or your current system installation may brake."   echo "or your current system installation may break."
1779   echo   echo
1780   echo -en "Please update mage by running "   echo -en "Please update mage by running "
1781   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}
# Line 2031  get_value_from_magefile() Line 2047  get_value_from_magefile()
2047   local magefile="$2"   local magefile="$2"
2048   local value   local value
2049    
2050     [[ -z ${var} ]] && return 1
2051     [[ -z ${magefile} ]] && return 1
2052    
2053   # local all possible vars of a mage file   # local all possible vars of a mage file
2054   # to prevent bad issues   # to prevent bad issues
2055   local PKGNAME   local PKGNAME
# Line 2160  mage_install() Line 2179  mage_install()
2179   echo B:${pbuild}   echo B:${pbuild}
2180   fi   fi
2181    
2182   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2   if [[ -z ${MAGE_TARGETS} ]]
2183     then
2184     smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2
2185     else
2186     smage2file=${SMAGESCRIPTSDIR}/${pname/${MAGE_TARGETS}/}/${pname/${MAGE_TARGETS}/}-${pver}-${pbuild}.smage2
2187     fi
2188   if [ -f "${smage2file}" ]   if [ -f "${smage2file}" ]
2189   then   then
2190     echo -e " ${COLBLUE}***${COLDEFAULT} building package from source ... "
2191   smage2 ${smage2file} || die "compile failed"   smage2 ${smage2file} || die "compile failed"
2192   else   else
2193   echo   echo
# Line 2176  mage_install() Line 2201  mage_install()
2201   if [[ ${PKGTYPE} != virtual ]] && \   if [[ ${PKGTYPE} != virtual ]] && \
2202   [[ ${PKGTYPE} != sources ]]   [[ ${PKGTYPE} != sources ]]
2203   then   then
2204   # show a verbose message on src-install   echo -e " ${COLBLUE}***${COLDEFAULT} merging files into system ... "
  if [[ ${src_install} = true ]]  
  then  
  echo -ne "${COLBLUE} *** ${COLDEFAULT}"  
  echo -ne "merging files: "  
  echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  
  echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"  
  fi  
2205   build_doinstall ${PKGNAME}   build_doinstall ${PKGNAME}
2206   fi   fi
2207    
# Line 2440  mage_uninstall() Line 2458  mage_uninstall()
2458   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
2459   echo -n "removing: "   echo -n "removing: "
2460   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2461   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"   echo -e "${COLRED}${pname}-${pver}-${pbuild}${COLDEFAULT}"
2462    
2463   magefile="${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"   magefile="${MROOT}${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"
2464   source ${magefile}   source ${magefile}
2465    
2466   ## preremove scripts   ## preremove scripts
# Line 2540  pkgsearch() Line 2558  pkgsearch()
2558   local all_installed   local all_installed
2559   local ipver   local ipver
2560   local ipbuild   local ipbuild
2561     local latest_available
2562     local depsfull
2563     local sdepsfull
2564     local deps
2565     local sdeps
2566     local dep
2567     local sign
2568    
2569   # only names no versions   # only names no versions
2570   result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name '*'${string}'*')"   result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name '*'${string}'*'| sed '/profiles/d' | sed '/includes/d')"
2571   #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"   #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"
2572    
2573   # nothing found   # nothing found
# Line 2557  pkgsearch() Line 2582  pkgsearch()
2582   # get highest version available   # get highest version available
2583   magefile=$(get_highest_magefile ${pcat} ${pname})   magefile=$(get_highest_magefile ${pcat} ${pname})
2584    
2585   # now get all needed infos to print a nice output   if [[ ! -z ${magefile} ]]
2586   pver="$(magename2pver ${magefile})"   then
2587   pbuild="$(magename2pbuild ${magefile})"   # now get all needed infos to print a nice output
2588   state="$(get_value_from_magefile STATE ${magefile})"   pver="$(magename2pver ${magefile})"
2589   description="$(get_value_from_magefile DESCRIPTION ${magefile})"   pbuild="$(magename2pbuild ${magefile})"
2590   homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"   state="$(get_value_from_magefile STATE ${magefile})"
2591     description="$(get_value_from_magefile DESCRIPTION ${magefile})"
2592     homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
2593    
2594     # all installed
2595     for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
2596     do
2597     ipver="$(magename2pver ${i})"
2598     ipbuild="$(magename2pbuild ${i})"
2599    
2600     if [[ -z ${all_installed} ]]
2601     then
2602     all_installed="${ipver}-${ipbuild}"
2603     else
2604     all_installed="${all_installed} ${ipver}-${ipbuild}"
2605     fi
2606     done
2607     [[ -z ${all_installed} ]] && all_installed="none"
2608    
2609     case ${state} in
2610     stable) state=${COLGREEN}"[s] ";;
2611     testing) state=${COLYELLOW}"[t] ";;
2612     unstable) state=${COLRED}"[u] ";;
2613     old) state=${COLGRAY}"[o] ";;
2614     esac
2615    
2616   # all installed   latest_available="${pver}-${pbuild}"
2617   for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})   else
2618   do   # package is masked
2619   ipver="$(magename2pver ${i})"   state="${COLRED}[m] "
2620   ipbuild="$(magename2pbuild ${i})"   latest_available="${COLRED}masked for this distribution.${COLDEFAULT}"
2621     fi
2622    
2623   if [[ -z ${all_installed} ]]   depsfull="$(get_value_from_magefile DEPEND ${magefile})"
2624   then   sdepsfull="$(get_value_from_magefile SDEPEND ${magefile})"
  all_installed="${ipver}-${ipbuild}"  
  else  
  all_installed="${all_installed} ${ipver}-${ipbuild}"  
  fi  
  done  
  [[ -z ${all_installed} ]] && all_installed="none"  
2625    
2626   case ${state} in   while read sign dep
2627   stable) state=${COLGREEN}"[s] ";;   do
2628   testing) state=${COLYELLOW}"[t] ";;   case ${dep} in
2629   unstable) state=${COLRED}"[u] ";;   "") continue;;
2630   old) state=${COLGRAY}"[o] ";;   esac
2631   esac  
2632     deps="${deps} $(basename ${dep%-*})"
2633     done << EOF
2634    ${depsfull}
2635    EOF
2636    
2637     while read sign dep
2638     do
2639     case ${dep} in
2640     "") continue;;
2641     esac
2642    
2643     sdeps="${sdeps} $(basename ${dep%-*})"
2644     done << EOF
2645    ${sdepsfull}
2646    EOF
2647    
2648   echo -e "${state}${pcat}/${pname}"${COLDEFAULT}   echo -e "${state}${pcat}/${pname}"${COLDEFAULT}
2649   echo "      Latest available:   ${pver}-${pbuild}"   echo -e "      Latest available:   ${latest_available}"
2650   echo "      Installed versions: ${all_installed}"   echo "      Installed versions: ${all_installed}"
2651   echo "      Description: ${description}"   echo "      Description: ${description}"
2652   echo "      Homepage: ${homepage}"   echo "      Homepage: ${homepage}"
2653     echo "      Depends: ${deps}"
2654     echo "      SDepends: ${sdeps}"
2655   echo   echo
2656    
2657   unset pcat   unset pcat
# Line 2604  pkgsearch() Line 2665  pkgsearch()
2665   unset all_installed   unset all_installed
2666   unset ipver   unset ipver
2667   unset ipbuild   unset ipbuild
2668     unset depsfull
2669     unset sdepsfull
2670     unset deps
2671     unset sdeps
2672     unset dep
2673     unset sign
2674   done   done
2675  }  }
2676    
# Line 2636  mlibdir() Line 2703  mlibdir()
2703    
2704   echo "${libdir}"   echo "${libdir}"
2705  }  }
2706    
2707    ## blacklisted ${magefile}
2708    blacklisted()
2709    {
2710     [[ -z ${MAGE_DISTRIBUTION} ]] && local MAGE_DISTRIBUTION=stable
2711    
2712     # compat
2713     [[ ${USE_UNSTABLE} = true ]] && local MAGE_DISTRIBUTION=unstable
2714     [[ ${USE_TESTING} = true ]] && local MAGE_DISTRIBUTION=testing
2715    
2716     local EXCLUDED="${MROOT}/etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION}"
2717    
2718     # return 0 if the list not exist; nothin is masked
2719     [[ ! -f ${EXCLUDED} ]] && return 0
2720    
2721     local MAGEFILE="$1"
2722    
2723     local PCAT="$(magename2pcat ${MAGEFILE})"
2724     local PNAME="$(magename2pname ${MAGEFILE})"
2725     local PVER="$(magename2pver ${MAGEFILE})"
2726     local PBUILD="$(magename2pbuild ${MAGEFILE})"
2727    
2728     local EXPCAT EXPNAME EXPVER EXPBUILD
2729     while read EXPCAT EXPNAME EXPVER EXPBUILD
2730     do
2731     # ignore spaces and comments
2732             case "${EXPCAT}" in
2733                     \#*|"") continue ;;
2734             esac
2735    
2736     # exclude full pver
2737     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2738     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2739     [[ -n ${PVER} ]] && [[ -n ${PBUILD} ]] &&
2740     [[ -n ${EXPVER} ]] && [[ -n ${EXPBUILD} ]]
2741     then
2742     [[ ${EXPCAT}/${EXPNAME}-${EXPVER}-${EXPBUILD} = ${PCAT}/${PNAME}-${PVER}-${PBUILD} ]] && return 1
2743     fi
2744    
2745     # exclude pcat/pname only
2746     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2747     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2748     [[ -z ${EXPVER} ]] && [[ -z ${EXPBUILD} ]]
2749     then
2750     [[ ${EXPCAT}/${EXPNAME} = ${PCAT}/${PNAME} ]] && return 1
2751     fi
2752     done << EOF
2753    $( cat ${EXCLUDED}; echo)
2754    EOF
2755    
2756     return 0
2757    }
2758    

Legend:
Removed from v.350  
changed lines
  Added in v.676