#!/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-2012 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 # cd /var/tmp # # get download URL # eislist=`cat /var/install/url` # eislist_local=`basename ${eislist}` # # case "${eislist}" in # "file:///cdrom/"*) # mount_cdrom # ;; # "file:///usb/"*) # mount_usb # ;; # esac # # get eislist # ${wget} -q ${eislist} # rc=${?} # if [ "${rc}" -ne 0 ] # then # # no eislist -> return 0 # return 0 # else # indexraw=`grep '#' /var/tmp/${eislist_local}` # rm -f /var/tmp/${eislist_local} # if [ "${indexraw}" = '' ] # then # # no index file defined -> return 0 # return 0 # else # set -- ${indexraw} # index="${2}" # # case ${index} in # *:*) # ;; # *) # index_path=`dirname ${eislist}` # index="${index_path}/" # ;; # esac # # base_index=`basename` # rm -f ${base_index} # # get index.txt # ${wget} -q ${index} # rc=${?} # fi # fi } # --------------------------------------------------------------------------- # get packages ftom Pack-Eis # --------------------------------------------------------------------------- get_from_pack_eis () { server=www.pack-eis.de # check if pack-eis is online or the internet connect is down # if ${wget} -q ${server} # then # rm -f index.html # rm -f www.pack-eis.de /var/install/bin/install-package \ "http://${server}/index.php?q=${package_name}&type=eis-list" # else # # when not OK # echo # mecho --info "${msg_do_now}" ## mecho --warn "No connect to '${server}'." # mecho --warn "Please solve that first." # echo # anykey # exit 1 # fi } # --------------------------------------------------------------------------- # 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} # umount_cdrom # umount_usb # 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='' #cdrom_mounted=false #usb_mounted=false # 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 #umount_cdrom #umount_usb remove_check_file # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------