#!/bin/sh #---------------------------------------------------------------------------- # create-home-eislist for home # # Creation : 2005-12-18 tg # Last Update: $Id$ # # Copyright (c) 2005-2017 the eisfair team, team(at)eisfair(dot)org # # usage : create-home-eislist # # 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. #---------------------------------------------------------------------------- #exec 2> home-eislist-trace$$.log #set -x index_header=0 # --------------------------------------------------------------------------- # sub: usage # --------------------------------------------------------------------------- usage() { cat < ${pack_dir}/${1}eis-list.txt < Packagelist of eisler/~${USER} # Copyright (c) 2001-${pyear} the eisfair team, team(at)eisfair(dot)org> # Welcome to eisler/~${USER} test-package server # ${pack_prefix}/index.txt # # Available packages: EOF } # --------------------------------------------------------------------------- # sub: write eislist footer # --------------------------------------------------------------------------- write_eislist_footer() { # write footer cat >> ${pack_dir}/${1}eis-list.txt < # Last database update: ${pdate} ${ptime} EOF chmod -f 0664 ${pack_dir}/${1}eis-list.txt chgrp -f ${group:-fleis} ${pack_dir}/${1}eis-list.txt } # --------------------------------------------------------------------------- # create eis-list file # # input: $1 - package directory # return: 0 - ok # 1 - error accured # --------------------------------------------------------------------------- create_eislist() { _show_menu=${1} if [ -d ${pack_dir} ] then echo "Creating eis-list in ${pack_dir}" chmod -f 0775 ${pack_dir} chgrp -f ${group:-fleis} ${pack_dir} else mkdir -p ${pack_dir} chmod -f 0775 ${pack_dir} chgrp -f ${group:-fleis} ${pack_dir} fi # create folder-counter for incrementing dir numbers if [ ! -f ${pack_dir}/folder-counter ] then echo "1" >${pack_dir}/folder-counter chmod -f 0660 ${pack_dir}/folder-counter chgrp -f ${group:-fleis} ${pack_dir}/folder-counter fi # pack_dir="${package_dir}" # remove old stuff rm -f ${pack_dir}/*eis-list.txt rm -f ${pack_dir}/index.txt # change dir cd ${pack_dir} # check package_dir_two exists and convert it first if [ -d ${package_dir_two} ] then # check if .info-files exist ls ${package_dir_two}/*.info >/dev/null 2>&1 if [ ${?} -eq 0 ] then for FNAME in ${package_dir_two}/*.info do get_package_folder_number create_package_subfolder FNAME2=$(echo ${FNAME} | sed "s#${package_dir_two}/##") mv ${FNAME} ${folder_number}/${FNAME2} mv ${FNAME%.info} ${folder_number}/${FNAME2%.info} set_package_right done fi rmdir --ignore-fail-on-non-empty ${package_dir_two} fi # check if .info-files exist p_folder=$(ls *.info 2>/dev/null) if [ -n "${p_folder}" ] then for FNAME in ${p_folder} do # check for prefix separator is given case ${FNAME} in *${PREFIX_SEPARATOR}*) get_package_folder_number create_package_subfolder # strip prefix fname_strip=${FNAME#*${PREFIX_SEPARATOR}} # move prefix $packages in folder mv ${FNAME} ${folder_number}/${fname_strip} mv ${FNAME%.info} ${folder_number}/${fname_strip%.info} set_package_right ;; *) get_package_folder_number create_package_subfolder # move $packages in folder mv ${FNAME} ${folder_number}/${FNAME} mv ${FNAME%.info} ${folder_number}/${FNAME%.info} set_package_right ;; esac done fi package_subfolder='' # get subfolder packages list package_subfolder=$(find . -maxdepth 1 -type d -printf '%f\n' -regex '^[0-9]\{0,\}$') for pack_info in ${package_subfolder} do FNAME=$(find ${pack_info} -maxdepth 1 -type f -name '*.info') if [ -n "${FNAME}" ] then parse_info_file "${FNAME}" # # print list infos with ":" as separator # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/XZ23-eis.list # # split for multiple systems # for _system_pkg in `echo ${_pkg_system} | sed 's/;/ /g'` # do # echo ${_system_pkg} >>${pack_dir}/XZ23-system.list # # printf "%-15s:%-60s: %s \n" "#" "${FNAME}" "'${_pkg_short}'" >> ${pack_dir}/${_system_pkg}-XZ23-eis.list # done # print index create_index "${FNAME}" fi done # # sort list info # sort_list=$(LANG=C sort -k 1.80 ${pack_dir}/XZ23-eis.list) # # write_eislist_header # # # set IFS to ":" as separator # _OLD_IFS=${IFS} # IFS=: # # # print eis-list.txt # echo "${sort_list}" | # while read info line short # do # printf "%-15s %s \n" "${info}" "${line}" >> ${pack_dir}/eis-list.txt # done # # # restore IFS # IFS=${_OLD_IFS} # write_eislist_footer # # # stuff to create separate eislists for eisfair systems # _pack_system=`LANG=C sort -u ${pack_dir}/XZ23-system.list` # # for _pkg_list in ${_pack_system} # do # sort_list=$(LANG=C sort -k 1.80 ${pack_dir}/${_pkg_list}-XZ23-eis.list) # # write_eislist_header "${_pkg_list}-" # # # set IFS to ":" as separator # _OLD_IFS=${IFS} # IFS=: # # # print eis-list.txt # echo "${sort_list}" | # while read info line short # do # printf "%-15s %s \n" "${info}" "${line}" >> ${pack_dir}/${_pkg_list}-eis-list.txt # done # # # restore IFS # IFS=${_OLD_IFS} # write_eislist_footer "${_pkg_list}-" # done # # # remove tmp files # rm -f ${pack_dir}/*XZ23-* # # cat from Pack-Eis index.txt is deprecated # # get index from pack-eis # wget http://www.pack-eis.de/index.txt -O ${pack_dir}/index.pack-eis.txt # # # set separator lines in index.txt # cat >> ${pack_dir}/index.txt <> ${pack_dir}/index.txt # rm -f ${pack_dir}/index.pack-eis.txt chmod -f 0664 ${pack_dir}/index.txt chgrp -f fleis ${pack_dir}/index.txt if [ "${_show_menu}" = "true" ] then select_eislist_action fi } # --------------------------------------------------------------------------- # create index.txt file # --------------------------------------------------------------------------- create_index() { FNAME=${1} # check for index header if [ ${index_header} -eq 0 ] then # write index header cat > ${pack_dir}/index.txt <> ${pack_dir}/index.txt } # --------------------------------------------------------------------------- # sub: folder delete # --------------------------------------------------------------------------- folder_delete() { case ${delete_folder} in '') select_eislist_action ;; 0) clean_up exit 127 ;; *) if is_numeric ${delete_folder} && [ ${delete_folder} -le ${max_list} ] then folder_to_delete="$(echo "${sort_list}" | sed -n "${delete_folder}p" | cut -d' ' -f5)" # remove folder rm -rf ${folder_to_delete} # remove entry from list sed -i "/${folder_to_delete}/d" ${pack_dir}/XZ23-eis.list create_eislist 'false' else second_question read delete_folder folder_delete fi ;; esac } # --------------------------------------------------------------------------- # sub: list packages # --------------------------------------------------------------------------- list_package() { action_to_do="${1}" sort_list='' if [ ! -d ${pack_dir} ] then echo 'No package dir available' anykey select_eislist_action fi if [ ! -f ${pack_dir}/XZ23-eis.list ] then # pack_dir="${package_dir}" # change dir cd ${pack_dir} package_subfolder='' # get subfolder packages list package_subfolder=$(find . -maxdepth 1 -type d -printf '%f\n' -regex '^[0-9]\{0,\}$') for _pkg_info in ${package_subfolder} do FNAME=$(find ${_pkg_info} -maxdepth 1 -type f -name '*.info') if [ -n "${FNAME}" ] then parse_info_file "${FNAME}" echo "${_pkg_name}" "${_pkg_version}" "${_pkg_date}" "${_pkg_system}" "${_pkg_info}" >> ${pack_dir}/XZ23-eis.list2 fi done # sort list infos LANG=C sort ${pack_dir}/XZ23-eis.list2 >${pack_dir}/XZ23-eis.list fi sort_list=$(cat ${pack_dir}/XZ23-eis.list) clrhome text_color --info echo 'Available packages:' text_color --std echo idx=1 # print list echo "${sort_list}" | while read line do set -- ${line} _list_pkg="${1}" _list_version="${2}" _list_date="${3}" _list_system="${4}" printf "%6s %-28s %-20s %-10s %-8s \n" "${idx}." "${_list_pkg}" "${_list_version}" "${_list_date}" "${_list_system}" idx=$((${idx} + 1)) done max_list=$(echo "${sort_list}" | wc -l) first_question case "${action_to_do}" in delete) read delete_folder folder_delete ;; url) read url_create build_url ;; esac list_package "${action_to_do}" } # --------------------------------------------------------------------------- # sub: create Pack-Eis upload URL # --------------------------------------------------------------------------- create_url() { clrhome echo echo echo text_color --info echo ' Please enter your login name from' echo " 'https://web.nettworks.org/eisfair' website" text_color --std echo echo echo -n ' (Your name, ENTER=Return, 0=Exit)? ' read name case "${name}" in '') select_eislist_action ;; 0) clean_up exit 127 ;; *) clrhome echo echo echo text_color --info echo ' Please enter your login passwd from' echo " 'https://web.nettworks.org/eisfair' website" text_color --std echo echo echo -n ' (Your passwd, ENTER=Return, 0=Exit)? ' read password case "${password}" in '') select_eislist_action ;; 0) clean_up exit 127 ;; *) list_package url ;; esac ;; esac } # --------------------------------------------------------------------------- # sub: url build # --------------------------------------------------------------------------- build_url() { case ${url_create} in '') select_eislist_action ;; 0) clean_up exit 127 ;; *) if is_numeric ${url_create} && [ ${url_create} -le ${max_list} ] then # get first the subfolder number and then the info url info_url=$(ls "$(echo "${sort_list}" | sed -n "${url_create}p" | cut -d' ' -f5)"/*.info) upload_url="https://${name}:${password}@web.nettworks.org/eisfair/~${USER}/packages/${info_url}" # overwrite the default value with entry from _user.name_pwd if [ -f ${start_dir}/_ADMIN/_user.name_pwd ] then . ${start_dir}/_ADMIN/_user.name_pwd fi echo text_color --info echo 'Copy and paste to Pack-Eis' text_color --std echo echo "${upload_url}" echo anykey list_package url else second_question read url_create build_url fi ;; esac } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- index_file="https://web.nettworks.org/eisfair/~$USER/packages/index.txt" pack_prefix="https://web.nettworks.org/eisfair/~$USER/packages" pack_dir="/home/$USER/public_html/packages" # for old compatible folder settings package_dir_two='eisfair2' quiet='false' clean_up # read parameters while [ ${#} -ne 0 ] do case ${1} in -q|--quiet) # set quiet quiet='true' shift ;; *) usage clean_up exit 127 ;; esac done # get current directory call_dir=$(pwd) # get start directory start_dir=$(dirname $0)/.. cd $start_dir start_dir=$(pwd) # overwrite the default value with entry from _user.info if [ -f ${start_dir}/_ADMIN/_user.pack_dir ] then . ${start_dir}/_ADMIN/_user.pack_dir fi # include eislerlib . $start_dir/_ADMIN/eislerlib . $start_dir/_ADMIN/prefix-separator if "${quiet}" then create_eislist 'false' else select_eislist_action fi exit 0 # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------