#!/bin/sh #---------------------------------------------------------------------------- # /var/install/bin/check-package check and search with index.txt for a package # # Creation: 2006-10-17 hbfl # Last Update: $Id$ # # Copyright (c) 2006-@@YEAR@@ the eisfair team, team(at)eisfair(dot)org # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- # include eislib . /var/install/include/eislib #debug_check_package=true if ${debug_check_package:-false} then exec 2>/tmp/$(basename ${0})-trace$$.log set -x ask_debug=true export ask_debug fi # --------------------------------------------------------------------------- # print usage # --------------------------------------------------------------------------- usage () { cat </dev/null # then # mount /cdrom # cdrom_mounted=true # echo "DATETIME" >/tmp/cdrom_installer_mounted # fi #} # #umount_cdrom () #{ # if "${cdrom_mounted:-false}" # then # umount /cdrom # cdrom_mounted=false # fi #} # # #mount_usb () #{ # # extract usb/sd.. from $url like # # file:///usb/sd../download/packages/eis-list.txt # usb_dev=`echo ${eislist} | cut -d/ -f3-5` # if ! mount | grep "${usb_dev}" >/dev/null # then # /var/install/bin/system-devices-mount-usb # retvar=${?} # if [ ${retvar} -eq 0 ] # then # usb_mounted=true # echo "DATETIME" >/tmp/usb_installer_mounted # fi # fi #} # #umount_usb () #{ # if "${usb_mounted:-false}" # then # /var/install/bin/system-devices-umount-usb # retvar=${?} # if [ ${retvar} -eq 0 ] # then # usb_mounted=false # fi # fi #} # --------------------------------------------------------------------------- # remove check file # --------------------------------------------------------------------------- remove_check_file () { if ${_index_get:-false} then /var/install/bin/post-setup-packages-menu fi } # --------------------------------------------------------------------------- # read packages version # --------------------------------------------------------------------------- read_packages_version () { FNAME=${1} while read l do case "${l}" in ""*) l=`echo "${l}" | sed 's###g'` set -- ${l} have_package_version="${1}" ;; esac done < ${FNAME} } # --------------------------------------------------------------------------- # check package # --------------------------------------------------------------------------- check_package () { package_name="${1}" msg_do_now="${2}" check_version="${3}" if [ -f /var/install/packages/${package_name} ] then read_packages_version /var/install/packages/${package_name} # check for version installed_version=`/var/install/bin/check-version \ -diff \ ${check_version} \ ${have_package_version}` else installed_version=not-installed fi case ${installed_version} in not-installed) # is not installed echo mecho --info "${msg_do_now}" mecho --warn "Package '${package_name}' is missing." echo ask_for_install ;; new) # is to old echo mecho --info "${msg_do_now}" mecho --info "'${package_name}' package version must be ${check_version} or higher." echo ask_for_install ;; old|installed) # is good remove_check_file exit 0 ;; esac } # --------------------------------------------------------------------------- # ask for install # --------------------------------------------------------------------------- ask_for_install () { # ask for install _ask_tmpfile=$(mktemp -t XXXXXXXXXXXXX) ${ask} "Install" >${_ask_tmpfile} rc=${?} a=$(cat ${_ask_tmpfile}) rm -f ${_ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then a=no fi case ${a} in yes) # when yes search_for_package ${package_name} ;; *) # when no echo mecho --info "${msg_do_now}" mecho --warn "Please, solve that first." echo remove_check_file anykey exit 1 ;; esac } # --------------------------------------------------------------------------- # get index.txt # --------------------------------------------------------------------------- get_indextxt () { _clear='' if [ ! -s /tmp/index.txt ] then _clear="--clear" _index_get=true fi # get-index handle multiple index.txt files /var/install/bin/get-index ${_clear} _index_ret=${?} if [ ${_index_ret} -eq 0 ] then return 0 else return 1 fi } # --------------------------------------------------------------------------- # get packages ftom Pack-Eis # --------------------------------------------------------------------------- get_from_pack_eis () { server=www.pack-eis.de /var/install/bin/install-package \ "http://${server}/index.php?q=${package_name}&type=eis-list" } # --------------------------------------------------------------------------- # search for package # --------------------------------------------------------------------------- search_for_package () { get_indextxt indextxt_found=${?} pname="${1}" if [ -f ${index_txt_file} -a -s ${index_txt_file} ] then pnames=`grep "^${pname} " ${index_txt_file}` if [ -n "${pnames}" ] then # package found # write eis-list header { echo "# Temporary package list for ${pname} packages" echo "# Copyright (c) 2001-`date +%Y` the eisfair team, team(at)eisfair(dot)org" echo "# index.txt" echo "#" echo "# Available packages:" echo "#" } > ${eislist_txt_file}-${pname} echo "${pnames}" | while read line do set -- ${line} case ${4} in *:*) pfile_name=${4} ;; *) pfile_name=${index_path}/${4} ;; esac # write eis-list entry echo "# ${pfile_name}" >> ${eislist_txt_file}-${pname} done /var/install/bin/install-package "file://${eislist_txt_file}-${pname}" else get_from_pack_eis fi else get_from_pack_eis fi # rm -f ${index_txt_file} rm -f ${eislist_txt_file}-${pname} # check, is the right version installed now check_package "${package}" "${msg}" "${version}" } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- index_txt_file="/tmp/index.txt" eislist_txt_file="/var/tmp/list-packages-list.txt" wget="/usr/local/bin/wget.sh" ask="/var/install/bin/ask" package='' version='0.0.1' msg='' # check for cmd line input case ${#} in 0|1|2) usage exit 1 ;; esac # read parameters while [ ${#} -ne 0 ] do case ${1} in -p|--setpackage|-setpackage) # set package package="${2}" shift; shift ;; -v|--setversion|-setversion) # set version version="${2}" shift; shift ;; *) msg="${1}" shift ;; esac done # check for package is given case x${package} in x) echo mecho --info "${msg}" mecho --warn "No package is given" mecho --warn "Please solve that first" echo remove_check_file anykey exit 1 ;; *) if [ -z "${msg}" ] then msg="${package}" fi check_package "${package}" "${msg}" "${version}" ;; esac remove_check_file # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------