#!/bin/bash VERSION=0.6 ADM_DIR=/var/lib/tpkg rm -f all-packages.txt tier-1-packages.txt tier-2-packages.txt req-packages.txt OLD_IFS=$IFS ALL_PKGS=0 REQ_PKGS=0 # start with a fresh list of all installed packages # cat /dev/null > all-packages.txt ls -1 $ADM_DIR/packages |egrep -v '*-devel_*|*-docs_*|*-i18n_*|*-solibs_*' > all-packages.tmp while read PKG ; do NAME=${PKG%*_*-*-*} echo $NAME' '${PKG} >> all-packages.txt (( ALL_PKGS++ )) done < all-packages.tmp ls -1 $ADM_DIR/packages |egrep -v '*-devel_*|*-docs_*|*-i18n_*|*-solibs_*|*-locale-*' > all-packages.txt if [[ $DEBUG ]] ; then echo echo ALL_PKGS=$ALL_PKGS echo PKGS_TODO=$PKGS_TODO echo fi # tier-1 derives a list of packages which only need glibc # or don't have any requireds at all (don't have any required file) cat /dev/null > tier-1-packages.txt cat /dev/null > req-packages.txt COUNT=1 echo "PASS=$COUNT" TIER_ONE_TOTAL=0 while read PKG ; do if [[ -f "$ADM_DIR"/required/$PKG ]] ; then (( REQ_PKGS++ )) echo "${PKG}" >> req-packages.txt else echo "${PKG}" >> tier-1-packages.txt (( TIER_ONE_TOTAL++ )) fi done < all-packages.txt echo "END PASS1" if [[ $DEBUG ]] ; then echo REQ_PKGS=$REQ_PKGS echo TIER-1=$TIER_ONE_TOTAL sleep 2 fi # exit cat /dev/null > tier-2-packages.txt #echo "Starting tier-2" DONE=0 while [[ $DONE != 1 ]] ; do # increment the PASS count (( COUNT++ )) echo "PASS=$COUNT" echo "PASS=$COUNT" >> tier-2-packages.txt PROCESSED=0 while read PKG ; do NEEDS=0 FOUND=0 NAME=${PKG%*_*-*-*} #if [[ ! $(grep "^$NAME" tier-2-packages.txt 2> /dev/null) ]] ; then if [[ "$(grep "$PKG" tier-2-packages.txt 2> /dev/null)" != "" ]] ; then echo " Already HANDLED: $NAME" true #(( PROCESSED++ )) else [[ $DEBUG ]] && echo "HANDLING: $NAME" if [[ -f $ADM_DIR/required/$PKG ]] ; then for ONE_REQ in $(grep -v '^#' $ADM_DIR/required/$PKG) ; do # use this to prefer solib packages ONE_REQ=${ONE_REQ%% |*} # use this to prefer full packages #ONE_REQ=${ONE_REQ#| *} [[ $DEBUG ]] && echo ONE_REQ=$ONE_REQ #&& sleep .5 ONE_REQ=$(echo ${ONE_REQ%*_*-*-*}) # [[ $DEBUG ]] && echo ONE_REQ=$ONE_REQ && sleep .5 case $ONE_REQ in '|'|' ') continue ;; *) if [[ $(grep "$ONE_REQ"_ tier-1-packages.txt 2> /dev/null) != "" ]] \ || [[ $(grep "$ONE_REQ"_ tier-2-packages.txt 2> /dev/null) != "" ]] ; then [[ $DEBUG ]] && echo " Already listed: $ONE_REQ" #echo yeah #true #continue FOUND=1 elif [[ $(grep "${ONE_REQ#| *}"_ tier-1-packages.txt 2> /dev/null) != "" ]] \ || [[ $(grep "${ONE_REQ#| *}"_ tier-2-packages.txt 2> /dev/null) != "" ]] ; then [[ $DEBUG ]] && echo " Already listed: $ONE_REQ" #true #continue FOUND=1 else NEEDS=1 fi if [[ $FOUND = 0 ]] && [[ $(grep "$ONE_REQ"_ all-packages.txt) = "" ]] ; then echo "-----> Package required by '$NAME' not in database: $ONE_REQ" exit fi ;; esac [[ $FOUND = 1 ]] && break done #[[ $FOUND = 1 ]] && break if [[ "$NEEDS" = 0 ]] ; then if [[ $(grep "$PKG" tier-1-packages.txt) != "" ]] ; then true echo "Skipping: $PKG" else [[ $DEBUG ]] && echo "-> Adding: $PKG" echo "${PKG}" >> tier-2-packages.txt fi fi else echo "Unlisted requires: $NAME" >> unlisted.txt fi fi done < req-packages.txt #echo "END PASS=$COUNT" #echo "END PASS=$COUNT" >> tier-2-packages.txt TIER_TWO_TOTAL=$(wc -l tier-2-packages.txt |cut -f1 -d' ') TOTAL=$(( $TIER_ONE_TOTAL + $TIER_TWO_TOTAL )) if [[ $DEBUG ]] ; then echo echo SOLIBS_PKGS=$SOLIBS_PKGS echo DEV_PKGS=$DEV_PKGS echo I18N_PKGS=$I18N_PKGS echo NOARCH_PKGS=$NOARCH_PKGS echo DOC_PKGS=$DOC_PKGS echo echo TIER-1=$TIER_ONE_TOTAL echo TIER-2=$TIER_TWO_TOTAL echo PROCESSED=$PROCESSED echo TOTAL=$TOTAL echo REQ_TOTAL=$REQ_TOTAL echo PKGS_TODO=$PKGS_TODO echo fi if [[ $(($TIER_ONE_TOTAL + $TIER_TWO_TOTAL )) -ge $(( $ALL_PKGS )) ]] ; then DONE=1 fi done echo "END PASS=$COUNT" echo "# GLIBC tier-1 packages" > Compile-Order.txt #cat tier-1-packages.txt |cut -f1 -d'§' >> Compile-Order.txt #echo "" >> Compile-Order.txt #echo "# tier-2 packages" >> Compile-Order.txt #cat tier-2-packages.txt |cut -f1 -d'§' >> Compile-Order.txt #echo "" >> Compile-Order.txt while read PKG ; do NAME=${PKG%*_*-*-*} echo $NAME >> Compile-Order.txt done < tier-1-packages.txt while read PKG ; do NAME=${PKG%*_*-*-*} echo $NAME >> Compile-Order.txt done < tier-2-packages.txt #cat /dev/null > X-Compile-Order.txt #while IFS='§' read NAME PKG ; do # if [[ $(grep "^$NAME" X-file.list) ]] ; then # case "$NAME" in # #""|gcc) true ;; # *) echo "$NAME" >> X-Compile-Order.txt ;; # esac # fi #done < Compile-Order.txt