#!/bin/sh ## make rpmDBfile ## find rpmfile ## inset mysql DB ## ## san2(at)linuxchannel.net ## 2001.05.29 ## 2002.08.11(support jsboard 1.3.x/2.x) basedir=`pwd` tmp_dir="/tmp/split_tmp_dir" rpmDBdir="${basedir}/rpmDBdir" set_rpmDBdir="/var/rpmDBdir" fileext=".list" RPMS="/mnt/cdrom/RedHat/RPMS" ## debugging file setting ## error_tmp="${basedir}/error_tmp" error="${basedir}/error" ## default setting table column : num,name,title,text,date ## text column's data type is "MEDIUMTEXT" ## if not "MEDIUMTEXT", error ## ## ex) ## mysql> ALTER TABLE table_name CHANGE text text MEDIUMTEXT; ## mysql_host="localhost" mysql_dbname="board" mysql_dbuser="mysql" mysql_dbpass="" mysql_table="rpmlist" name_value="san2" ## <-- author ######################################################### ## ## END Setting ## ######################################################### help() { echo "Usage :" echo " $0 --makelist \"$RPMS\"" echo " $0 --find \"filename or file pattern\"" echo " $0 --insertdb \"$rpmDBdir\"" echo "DB is mysql !!!" exit 0 } check_dir() { RPMS_tmp="$1" if [ "$2" = "rpmsdir" ] ; then WHEREIS="$RPMS" elif [ "$2" = "rpmdbdir" ] ; then WHEREIS="$rpmDBdir" fi if [ ! -d "$RPMS_tmp" ] ; then [ "$3" = "find" ] && RPMS_tmp="$set_rpmDBdir" while [ ! -d "$RPMS_tmp" ] ; do echo "not found '$RPMS_tmp directory !!!'" echo -n "${T_MD}where is '$WHEREIS' (PATH) :${T_ME} " read RPMS_tmp if [ "$RPMS_tmp" = "" ] ; then RPMS_tmp="$WHEREIS" fi done fi ## patch 2002.08.11 ## [ X`echo "$RPMS_tmp" | grep "^/"` = "X" ] && RPMS_tmp="$basedir/$RPMS_tmp" ## change values ## if [ "$2" = "rpmsdir" ] ; then RPMS="$RPMS_tmp" elif [ "$2" = "rpmdbdir" ] ; then rpmDBdir="$RPMS_tmp" fi } ## check, Arguments too long !!! ## check_text_and_insertdb() { listfile="$1" ## rpmlist file filesize="$2" ## file size by kbytes num="$3" title="$4" ## file size > 100 KBytes ## if [ "$filesize" -gt "100" ] ; then [ ! -d "$tmp_dir" ] && mkdir -p "$tmp_dir" cd $tmp_dir rm -f * cp "${rpmDBdir}/${listfile}" . ## each 3000 line file ## split files are xaa, xab, xac, ... ## #split -l 3000 $listfile split $listfile rm -f $listfile echo "wait ..." sleep 1 ## get text value and insert DB ## num=$(($num-1)) tnum="0" tnum_all=`echo $(ls $tmp_dir | wc -l)` title_tmp="$title" for eachsfile in `ls` ; do num=$(($num+1)) tnum=$(($tnum+1)) text=`cat $eachsfile` title_put="$title_tmp(${tnum}/${tnum_all})" insert_db "$num" "$title_put" "$text" done rm -f * cd $basedir else text=`cat "${rpmDBdir}/${listfile}"` ## insert DB ## insert_db "$num" "$title" "$text" fi } insert_db() { num="$1" title="$2" text="$3" mysqlcolumns="num,name,title,text,date" mysqlvalues="'$num','$name_value','$title','$text',UNIX_TIMESTAMP()" mysqlinsert="INSERT INTO ${mysql_table}($mysqlcolumns) VALUES($mysqlvalues)" mysql -h "$mysql_host" -u "$mysql_dbuser" --password=${mysql_dbpass} \ -e "$mysqlinsert" $mysql_dbname 2> $error_tmp ## check error and add error file ## if [ -s "$error_tmp" ] ; then eerror=`cat "$error_tmp"` echo "$num : $title --> $eerror" >> $error echo "$eerror" else echo "$num : insert $mysql_table table <= $title" fi } ## patch 2002.08.11 ## check_jsboard_version() { check_idx="SHOW COLUMNS FROM $mysql_table LIKE 'idx'" result=`mysql -h "$mysql_host" -u "$mysql_dbuser" --password=${mysql_dbpass} \ -e "$check_idx" $mysql_dbname 2>/dev/null` if [ X"$result" != "X" ] ; then update_idx="UPDATE ${mysql_table} SET idx = no" mysql -h "$mysql_host" -u "$mysql_dbuser" --password=${mysql_dbpass} \ -e "$update_idx" $mysql_dbname 2>/dev/null echo "updated idx"; fi } ## check argument ## [ "$#" -lt "2" ] && help cd $basedir ## source configure of mod_ssl-xxx.tar.gz ## some optional terminal sequences ## case $TERM in xterm|xterm*|vt220|vt220*) T_MD=`echo dummy | awk '{ printf("%c%c%c%c", 27, 91, 49, 109); }'` T_ME=`echo dummy | awk '{ printf("%c%c%c", 27, 91, 109); }'` ;; vt100|vt100*) T_MD=`echo dummy | awk '{ printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }'` T_ME=`echo dummy | awk '{ printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }'` ;; default) T_MD='' T_ME='' ;; esac case "$1" in --makelist|--MAKELIST|--Makelist) ## check RPMS diretory ## check_dir "$2" "rpmsdir" rpmlist=`ls $RPMS | egrep ".rpm$" 2>/dev/null` if [ "$rpmlist" = "" ] ; then echo "not found *.rpm in $RPMS" exit 0 fi ## init if [ -d "$rpmDBdir" ] ; then mv -f $rpmDBdir "${rpmDBdir}-old" rpmDBdirmove="1" fi mkdir "$rpmDBdir" i="0" ## make rpmfils list ## for rpm in $rpmlist ; do eachfile="${rpmDBdir}/${rpm}${fileext}" echo "$rpm" > "$eachfile" rpm -qpl "$RPMS/$rpm" >> "$eachfile" i=$(($i+1)) echo "$i : create file $eachfile" done if [ -d "$rpmDBdir" ] ; then echo "created $rpmDBdir" fi if [ "$rpmDBdirmove" = "1" ] ; then echo "old $rpmDBdir moved to ${rpmDBdir}-old" fi if [ "$i" != "0" ] ; then echo "Total rpmDBlist file created : $i" fi ;; --find|--FIND|-Find) ## check rpmDBdir exist ## check_dir "$rpmDBdir" "rpmdbdir" "find" i="0" echo "Searching ... local DISK DB : ${T_MD}${rpmDBdir}${T_ME}" ## find rpm file in $rpmDBdir ## for rpm in `ls $rpmDBdir` ; do eachfile="${rpmDBdir}/${rpm}" found=`egrep "$2" "${rpmDBdir}/${rpm}"` if [ "$found" != "" ] ; then rpmfile=`echo "$rpm" | awk -F"$fileext" '{print $1}'` i=$(($i+1)) echo "" echo "${i}.Found RPM : ${T_MD}${rpmfile}${T_ME}" echo "(un)install path :" echo "$found" fi done ## result ## echo "" echo "Search result(local DISK DB) : ${T_MD}${rpmDBdir}${T_ME}" KWD="keyword pattern \"${T_MD}$2${T_ME}\"" if [ "$i" = "0" ] ; then echo "Not found, $KWD" else echo "Total \"${T_MD}$i${T_ME} RPMS\" found, $KWD" fi ;; --insertdb|INSERTDB|Insertdb|InsertDB) ## check rpmDBdir exist ## check_dir "$2" "rpmdbdir" num="0" > error ## insert mysql DB table ## for rpm in `ls $rpmDBdir` ; do num=$(($num+1)) fpath="${rpmDBdir}/${rpm}" title=`echo "$rpm" | awk -F"$fileext" '{print $1}'` ## hub !!! very not good. ## fsize="0" fsize=`du -k $fpath | awk '{print $1}' 2>/dev/null` ## Error T.T ## 100KB --> Arguments too long ## check_text_and_insertdb "$rpm" "$fsize" "$num" "$title" done cd $basedir if [ -d "$tmp_dir" ] ; then rm -rf $tmp_dir fi rm -f $error_tmp if [ -s "$error" ] ; then echo "" echo "ERROR : See ${T_MD}${error}${T_ME} file :" cat $error else rm -f $error ## patch 2002.08.11 ## check_jsboard_version fi ;; *) help ;; esac cd $basedir exit 0