#! /bin/sh #---------------------------------------------------------------------------- # /var/install/bin/package-search - Search package # # Creation: 2012-01-31 hbfl # Last Update: $Id$ # # Copyright (c) 2012 the eisfair team, team(at)eisfair(dot)org # # Usage: package-search # or # package-search package-name # # 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 # set ask ask=/var/install/bin/ask #debug_package_search=true if ${debug_package_search:-false} then exec 2>/tmp/$(basename ${0})-trace$$.log set -x ask_debug=true export ask_debug fi # --------------------------------------------------------------------------- # {u}mount cdrom or usb devices # --------------------------------------------------------------------------- mount_cdrom () { if ! mount | grep ' /cdrom' >/dev/null then mount /cdrom retvar=${?} if [ ${retvar} -eq 0 ] then _cdrom_mounted=true _mounted=true fi else _mounted=true 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 _mounted=true fi else _mounted=true 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 } # --------------------------------------------------------------------------- # show question # --------------------------------------------------------------------------- show_question () { while [ "${#}" -gt "0" ] do case "${1}" in -l) _location="${2}" shift 2 ;; esac done clrhome mecho --info "Package search" mecho _ask_tmpfile=$(mktemp -t XXXXXXXXXXXXX) ${ask} "Enter your searchstring (ENTER=Return, 0=Exit)" '' "*" >${_ask_tmpfile} rc=${?} search="$(cat ${_ask_tmpfile})" rm -f ${_ask_tmpfile} if [ ${rc} = 255 ] then search=0 fi case ${search} in '') umount_cdrom umount_usb exit 0 ;; 0) umount_cdrom umount_usb exit 127 ;; *) ${_location} -p "${search}" ;; esac } # --------------------------------------------------------------------------- # search pack-eis # --------------------------------------------------------------------------- search_pack_eis () { # this functio was covered from packeis-search, but packeis-search # was obsolet in the future while [ "${#}" -gt "0" ] do case "${1}" in -p) search="${2}" shift 2 ;; esac done encoded_search=$(echo ${search} | sed 's/ /%20/') /var/install/bin/install-package "http://www.pack-eis.de/index.php?q=${encoded_search}&type=eis-list" packeis_ret=${?} if [ ${packeis_ret} -eq 127 ] then exit 127 fi if "${show_question:-true}" then show_question -l "search_pack_eis" fi } # --------------------------------------------------------------------------- # check for installer # --------------------------------------------------------------------------- check_url () { url=$(cat /var/install/url) case "${url}" in "file:///cdrom/"*) _installer=true _medium="CD-ROM" ;; "file:///usb/"*) _installer=true _medium="USB-Stick" ;; esac } # --------------------------------------------------------------------------- # get search # --------------------------------------------------------------------------- get_search () { # set page titel clrhome mecho --info "Select search location" echo echo search_location="Search Pack-Eis:search_pack_eis Search ${_medium} installer:search_installer" # show available menu styles techo --begin '6r 32*' echo echo _idx=1 echo "${search_location}" | while read line do _s_location=$(echo ${line} | awk -F: '{ print $1 }') techo --row "${_idx}." "${_s_location}" _idx=$(/usr/bin/expr ${_idx} + 1) done echo echo techo --end _ask_tmpfile=$(mktemp -t XXXXXXXXXXXXX) ${ask} "Select" "" "1-$(echo "${search_location}" | wc -l)" "^$=Return" "0=Exit" >${_ask_tmpfile} rc=${?} _search_l="$(cat ${_ask_tmpfile})" rm -f ${_ask_tmpfile} if [ ${rc} = 255 ] then _search_l=0 fi case "${_search_l}" in "") exit 0 ;; 0) exit 127 ;; *) # get the line from '$search_location' and display '$2' selected_location=$(echo "${search_location}" | awk -F: 'FNR == '${_search_l}' { print $2 }') show_question -l "${selected_location}" ;; esac } # --------------------------------------------------------------------------- # search installer # --------------------------------------------------------------------------- search_installer () { while [ "${#}" -gt "0" ] do case "${1}" in -p) search="${2}" shift 2 ;; esac done index_txt_file="/var/tmp/index.txt" eislist_txt_file="/var/tmp/list-packages-list.txt" wget=/usr/local/bin/wget.sh _default_base=1.6.1 get_indextxt # get the required base version from index.txt, or set the default _req_base=$(awk '/^# required_base/ {print $3}' ${index_txt_file} 2>/dev/null) if [ -z "${_req_base}" ] then _req_base=${_default_base} fi # check for installed base version installed_base=$(/var/install/bin/check-version base ${_req_base}) case ${installed_base} in not-installed|new) _inst_base=false ;; *) _inst_base=true ;; esac get_packages ${search} /var/install/bin/install-package "file://${eislist_txt_file}" rm -f ${eislist_txt_file} rm -f ${index_txt_file} show_question -l "search_installer" } # --------------------------------------------------------------------------- # get index.txt # --------------------------------------------------------------------------- get_indextxt () { cd /var/tmp # get download URL eislist=$(cat /var/install/url) eislist_dir=$(dirname ${eislist}) case "${eislist_dir}" in "file:///cdrom/"*) mount_cdrom ;; "file:///usb/"*) mount_usb ;; esac if ! "${_mounted:-false}" then echo mecho --warn "No '${_medium}' installer found." echo anykey exit 1 else eislist_local=$(basename ${eislist}) # get eislist ${wget} -q ${eislist} rc=$? if [ "$rc" != 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}/${index}" ;; esac base_index=$(basename ${index}) rm -f $base_index # get index.txt ${wget} -q $index if [ $? = 0 ] then return 1 else return 0 fi fi fi fi } # --------------------------------------------------------------------------- # get packages # --------------------------------------------------------------------------- get_packages () { pname="$1" if [ -f $index_txt_file -a -s $index_txt_file ] then pnames=$(grep -i "${pname}" ${index_txt_file} | grep -v '#') 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}" echo "#" echo "# Available packages:" } > $eislist_txt_file echo "${pnames}" | while read line do set -- ${line} case ${4} in *:*) pfile_name=${4} ;; *) pfile_name=${index_path}/${4} ;; esac case ${1} in base) # write eis-list entry, for base without version echo "# ${pfile_name}" >> $eislist_txt_file ;; *) # write eis-list entry echo "# ${pfile_name}" >> $eislist_txt_file ;; esac done fi pnames="" fi } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- if [ -n "${1}" ] then show_question=false search="${1}" search_pack_eis -p "${search}" exit 0 fi check_url if "${_installer:-false}" then get_search else show_question -l "search_pack_eis" fi # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------