Magellan Linux

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

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

revision 385 by niro, Mon Jul 17 20:48:22 2006 UTC revision 892 by niro, Tue Aug 4 19:52:16 2009 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.20 2006-07-17 20:48:22 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh,v 1.38 2008-10-05 10:32:24 niro Exp $
4    
5  mage_setup()  mage_setup()
6  {  {
# Line 298  install_symlinks() Line 298  install_symlinks()
298    
299   ln -snf "${link}" "${MROOT}${pathto}"   ln -snf "${link}" "${MROOT}${pathto}"
300    
301   # fix mtime and db  # # fix mtime and db
302   fix_descriptor ${pkgname}/.symlinks \  # fix_descriptor ${pkgname}/.symlinks \
303   "${pathto}" \  # "${pathto}" \
304   "${posix}" \  # "${posix}" \
305   "${link}" \  # "${link}" \
306   "$(fix_mtime "${BUILDDIR}/${pkgname}"/.mtime \  # "$(fix_mtime "${BUILDDIR}/${pkgname}"/.mtime \
307   "${MROOT}${pathto}")"  # "${MROOT}${pathto}")"
308    
309   done < ${BUILDDIR}/${pkgname}/.symlinks   done < ${BUILDDIR}/${pkgname}/.symlinks
310    
311   # now copy the fixed file over the old one  # # now copy the fixed file over the old one
312   [ -f ${BUILDDIR}/${pkgname}/.symlinks_fixed ] && \  # [ -f ${BUILDDIR}/${pkgname}/.symlinks_fixed ] && \
313   cp -f ${BUILDDIR}/${pkgname}/.symlinks{_fixed,}  # cp -f ${BUILDDIR}/${pkgname}/.symlinks{_fixed,}
314    
315   # very important: unsetting the '§' fieldseperator   # very important: unsetting the '§' fieldseperator
316   IFS=$'\n'   IFS=$'\n'
# 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 1216  syncmage() Line 1203  syncmage()
1203   is_newer_mage_version_available   is_newer_mage_version_available
1204  }  }
1205    
1206    syncmage_tarball()
1207    {
1208     local latest_tarball
1209     local temp="$(mktemp -d)"
1210     local mirr mymirr
1211    
1212     # try to get the tarball marked as latest on the server
1213     latest_tarball="mage-latest.tar.bz2"
1214    
1215     for mirr in ${MIRRORS}
1216     do
1217     # path without distribution
1218     mymirr="${mirr%/*}"
1219    
1220     echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1221     echo "fetching latest tarball from ${mymirr} ..."
1222    
1223     wget \
1224     --passive-ftp \
1225     --tries 3 \
1226     --continue \
1227     --progress bar \
1228     --directory-prefix=${temp} \
1229     ${mymirr}/rsync/tarballs/${latest_tarball}
1230     if [[ $? = 0 ]]
1231     then
1232     break
1233     else
1234     continue
1235     fi
1236     done
1237    
1238     if [[ -f ${temp}/${latest_tarball} ]]
1239     then
1240     if [[ -d ${MAGEDIR} ]]
1241     then
1242     echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1243     echo "cleaning old mage-tree ${MAGEDIR}..."
1244     rm -rf ${MAGEDIR}
1245     fi
1246    
1247     echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1248     echo "updating mage-tree from tarball ..."
1249     # unpack in dirname of MAGEDIR, as the tarball has already the mage
1250     tar xjmf ${temp}/${latest_tarball} -C ${MAGEDIR%/*} || die "Unpacking tarball"
1251    
1252     if [[ -d ${temp} ]]
1253     then
1254     echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1255     echo "clenaing temp-files ..."
1256     rm -rf ${temp}
1257     fi
1258     else
1259     die "Could not fetch the latest tarball ... aborting"
1260     fi
1261    }
1262    
1263  cleanpkg()  cleanpkg()
1264  {  {
1265   if [ -d "${PKGDIR}" ]   if [ -d "${PKGDIR}" ]
# Line 1253  choppkgname() Line 1297  choppkgname()
1297   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]
1298   then   then
1299   #cuts ARCH and PBUILD   #cuts ARCH and PBUILD
1300   #ARCH comes from /etc/mage.rc   #ARCH comes from ${MAGERC}
1301   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")
1302    
1303   #cuts version number   #cuts version number
# Line 1328  get_highest_magefile() Line 1372  get_highest_magefile()
1372   local PNAME="$2"   local PNAME="$2"
1373   local magefile   local magefile
1374    
1375   for magefile in $(ls --format=single-column -v ${MAGEDIR}/${PCAT}/${PNAME}/*)   # do not list the content of a directory, only the name (-d)
1376     for magefile in $(ls --format=single-column -v -d ${MAGEDIR}/${PCAT}/${PNAME}/*)
1377   do   do
1378     [[ -z ${magefile} ]] && continue
1379   # we exclude subdirs (for stuff like a md5sum dir)   # we exclude subdirs (for stuff like a md5sum dir)
1380   [ -d ${magefile} ] && continue   [[ -d ${magefile} ]] && continue
1381   if check_stable_package ${magefile}   if check_stable_package ${magefile}
1382   then   then
1383   HIGHEST_MAGEFILE=${magefile}   HIGHEST_MAGEFILE=${magefile}
# Line 1388  is_config_protected() Line 1434  is_config_protected()
1434   EXPFILE="${MROOT}$1"   EXPFILE="${MROOT}$1"
1435    
1436   # file does not exist; it can be written   # file does not exist; it can be written
1437   [ ! -e ${EXPFILE} ] && return 0   [[ ! -e ${EXPFILE} ]] && return 0
1438    
1439   # to be safe; it may be '§'   # to be safe; it may be '§'
1440   IFS=' '   IFS=' '
# Line 1398  is_config_protected() Line 1444  is_config_protected()
1444   do   do
1445   # ersetzen von $i nur wenn am anfang der variable   # ersetzen von $i nur wenn am anfang der variable
1446   TEST="${EXPFILE/#${MROOT}${i}/Protected}"   TEST="${EXPFILE/#${MROOT}${i}/Protected}"
1447   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1448   then   then
1449   # setzen das es protected ist   # setzen das es protected ist
1450   PROTECTED=TRUE   PROTECTED=TRUE
# Line 1407  is_config_protected() Line 1453  is_config_protected()
1453   for x in ${CONFIG_PROTECT_MASK}   for x in ${CONFIG_PROTECT_MASK}
1454   do   do
1455   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"   TEST="${EXPFILE/#${MROOT}${x}/Protect_Masked}"
1456   if [ "${TEST}" != "${EXPFILE}" ]   if [[ ${TEST} != ${EXPFILE} ]]
1457   then   then
1458   PROTECTED=MASKED   PROTECTED=MASKED
1459   fi   fi
# Line 1443  is_config_protected() Line 1489  is_config_protected()
1489  ###################################################  ###################################################
1490  count_protected_files()  count_protected_files()
1491  {  {
1492   ${MLIBDIR}/writeprotected "$1"   local file="$1"
1493     local dirname="${file%/*}"
1494     local filename="${file##*/}"
1495     local count
1496     local output
1497     local i
1498    
1499     declare -i count=0
1500    
1501     # check if there are already protected files
1502     for oldpretected in $(find ${dirname} -iname "._cfg????_${filename}" |
1503     sed -e "s:\(^.*/\)\(._cfg*_\)\(/.*$\):\1\2\3\%\2\%\3:" |
1504     sort -t'%' -k3 -k2 | cut -f1 -d'%')
1505     do
1506     count=$(echo ${oldpretected} | cut -d_ -f2 | sed -e "s:cfg::")
1507     done
1508     (( count ++ ))
1509    
1510     # fill output up with zeros
1511     for (( i=${#count}; i < 4; i++ )); do output="${output}0"; done
1512     output="${output}${count}"
1513    
1514     echo "${output}"
1515  }  }
1516    
1517  # call with  # call with
# Line 1460  get_uninstall_candidates() Line 1528  get_uninstall_candidates()
1528   local list   local list
1529   local pcatdir   local pcatdir
1530   local protected   local protected
1531     local i
1532    
1533   # very basic getops   # very basic getops
1534   for i in $*   for i in $*
# Line 1721  minclude() Line 1790  minclude()
1790  {  {
1791   local i   local i
1792    
1793   if [ -n "$@" ]   if [[ -n $* ]]
1794   then   then
1795   for i in $@   for i in $*
1796   do   do
1797   [[ ${MAGEDEBUG} = on ]] && \   [[ ${MAGEDEBUG} = on ]] && \
1798   echo "--- Including ${MAGEDIR}/include/${i}.minc"   echo "--- Including ${MAGEDIR}/include/${i}.minc"
# Line 1737  sminclude() Line 1806  sminclude()
1806  {  {
1807   local i   local i
1808    
1809   if [ -n "$@" ]   if [[ -n $* ]]
1810   then   then
1811   for i in $@   for i in $*
1812   do   do
1813   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
1814   source ${SMAGESCRIPTSDIR}/include/${i}.sminc   source ${SMAGESCRIPTSDIR}/include/${i}.sminc
# Line 2094  mage_install() Line 2163  mage_install()
2163   local count_current   local count_current
2164   local magefile   local magefile
2165   local src_install   local src_install
2166     local i
2167    
2168   # very basic getops   # very basic getops
2169   for i in $*   for i in $*
# Line 2167  mage_install() Line 2237  mage_install()
2237   echo B:${pbuild}   echo B:${pbuild}
2238   fi   fi
2239    
2240   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2   if [[ -z ${MAGE_TARGETS} ]]
2241     then
2242     # basic svn compat
2243     if [[ -d ${SMAGESCRIPTSDIR}/trunk ]]
2244     then
2245     for i in ${SMAGESCRIPTSDIR}/trunk/*/${pname}/${pname}-${pver}-${pbuild}.smage2
2246     do
2247     smage2file="${i}"
2248     done
2249     else
2250     smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2
2251     fi
2252     else
2253     # basic svn compat
2254     if [[ -d ${SMAGESCRIPTSDIR}/trunk ]]
2255     then
2256     for i in ${SMAGESCRIPTSDIR}/trunk/*/${pname/${MAGE_TARGETS}/}/${pname/${MAGE_TARGETS}/}-${pver}-${pbuild}.smage2
2257     do
2258     smage2file="${i}"
2259     done
2260     else
2261     smage2file=${SMAGESCRIPTSDIR}/${pname/${MAGE_TARGETS}/}/${pname/${MAGE_TARGETS}/}-${pver}-${pbuild}.smage2
2262     fi
2263     fi
2264   if [ -f "${smage2file}" ]   if [ -f "${smage2file}" ]
2265   then   then
2266   echo -e " ${COLBLUE}***${COLDEFAULT} building package from source ... "   echo -e " ${COLBLUE}***${COLDEFAULT} building package from source ... "
# Line 2441  mage_uninstall() Line 2534  mage_uninstall()
2534   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
2535   echo -n "removing: "   echo -n "removing: "
2536   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2537   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"   echo -e "${COLRED}${pname}-${pver}-${pbuild}${COLDEFAULT}"
2538    
2539   magefile="${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"   magefile="${MROOT}${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"
2540   source ${magefile}   source ${magefile}
2541    
2542   ## preremove scripts   ## preremove scripts
# Line 2541  pkgsearch() Line 2634  pkgsearch()
2634   local all_installed   local all_installed
2635   local ipver   local ipver
2636   local ipbuild   local ipbuild
2637     local latest_available
2638     local depsfull
2639     local sdepsfull
2640     local deps
2641     local sdeps
2642     local dep
2643     local sign
2644    
2645   # only names no versions   # only names no versions
2646   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')"
2647   #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"   #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"
2648    
2649   # nothing found   # nothing found
# Line 2558  pkgsearch() Line 2658  pkgsearch()
2658   # get highest version available   # get highest version available
2659   magefile=$(get_highest_magefile ${pcat} ${pname})   magefile=$(get_highest_magefile ${pcat} ${pname})
2660    
2661   # now get all needed infos to print a nice output   if [[ ! -z ${magefile} ]]
2662   pver="$(magename2pver ${magefile})"   then
2663   pbuild="$(magename2pbuild ${magefile})"   # now get all needed infos to print a nice output
2664   state="$(get_value_from_magefile STATE ${magefile})"   pver="$(magename2pver ${magefile})"
2665   description="$(get_value_from_magefile DESCRIPTION ${magefile})"   pbuild="$(magename2pbuild ${magefile})"
2666   homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"   state="$(get_value_from_magefile STATE ${magefile})"
2667     description="$(get_value_from_magefile DESCRIPTION ${magefile})"
2668     homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
2669    
2670     # all installed
2671     for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
2672     do
2673     ipver="$(magename2pver ${i})"
2674     ipbuild="$(magename2pbuild ${i})"
2675    
2676     if [[ -z ${all_installed} ]]
2677     then
2678     all_installed="${ipver}-${ipbuild}"
2679     else
2680     all_installed="${all_installed} ${ipver}-${ipbuild}"
2681     fi
2682     done
2683     [[ -z ${all_installed} ]] && all_installed="none"
2684    
2685     case ${state} in
2686     stable) state=${COLGREEN}"[s] ";;
2687     testing) state=${COLYELLOW}"[t] ";;
2688     unstable) state=${COLRED}"[u] ";;
2689     old) state=${COLGRAY}"[o] ";;
2690     esac
2691    
2692   # all installed   latest_available="${pver}-${pbuild}"
2693   for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})   else
2694   do   # package is masked
2695   ipver="$(magename2pver ${i})"   state="${COLRED}[m] "
2696   ipbuild="$(magename2pbuild ${i})"   latest_available="${COLRED}masked for this distribution.${COLDEFAULT}"
2697     fi
2698    
2699   if [[ -z ${all_installed} ]]   depsfull="$(get_value_from_magefile DEPEND ${magefile})"
2700   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"  
2701    
2702   case ${state} in   while read sign dep
2703   stable) state=${COLGREEN}"[s] ";;   do
2704   testing) state=${COLYELLOW}"[t] ";;   case ${dep} in
2705   unstable) state=${COLRED}"[u] ";;   "") continue;;
2706   old) state=${COLGRAY}"[o] ";;   esac
2707   esac  
2708     deps="${deps} $(basename ${dep%-*})"
2709     done << EOF
2710    ${depsfull}
2711    EOF
2712    
2713     while read sign dep
2714     do
2715     case ${dep} in
2716     "") continue;;
2717     esac
2718    
2719     sdeps="${sdeps} $(basename ${dep%-*})"
2720     done << EOF
2721    ${sdepsfull}
2722    EOF
2723    
2724   echo -e "${state}${pcat}/${pname}"${COLDEFAULT}   echo -e "${state}${pcat}/${pname}"${COLDEFAULT}
2725   echo "      Latest available:   ${pver}-${pbuild}"   echo -e "      Latest available:   ${latest_available}"
2726   echo "      Installed versions: ${all_installed}"   echo "      Installed versions: ${all_installed}"
2727   echo "      Description: ${description}"   echo "      Description: ${description}"
2728   echo "      Homepage: ${homepage}"   echo "      Homepage: ${homepage}"
2729     echo "      Depends: ${deps}"
2730     echo "      SDepends: ${sdeps}"
2731   echo   echo
2732    
2733   unset pcat   unset pcat
# Line 2605  pkgsearch() Line 2741  pkgsearch()
2741   unset all_installed   unset all_installed
2742   unset ipver   unset ipver
2743   unset ipbuild   unset ipbuild
2744     unset depsfull
2745     unset sdepsfull
2746     unset deps
2747     unset sdeps
2748     unset dep
2749     unset sign
2750   done   done
2751  }  }
2752    
# Line 2647  blacklisted() Line 2789  blacklisted()
2789   [[ ${USE_UNSTABLE} = true ]] && local MAGE_DISTRIBUTION=unstable   [[ ${USE_UNSTABLE} = true ]] && local MAGE_DISTRIBUTION=unstable
2790   [[ ${USE_TESTING} = true ]] && local MAGE_DISTRIBUTION=testing   [[ ${USE_TESTING} = true ]] && local MAGE_DISTRIBUTION=testing
2791    
2792   local EXCLUDED="${MROOT}/etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION}"   # support both types for the moment
2793     if [[ -f /etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION} ]]
2794     then
2795     local EXCLUDED="/etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION}"
2796     else
2797     local EXCLUDED="/etc/mage-profile/package.blacklist-${ARCH}"
2798     fi
2799    
2800   # return 0 if the list not exist; nothin is masked   # return 0 if the list not exist; nothin is masked
2801   [[ ! -f ${EXCLUDED} ]] && return 0   [[ ! -f ${EXCLUDED} ]] && return 0

Legend:
Removed from v.385  
changed lines
  Added in v.892