diff options
Diffstat (limited to 'templatepkg')
-rwxr-xr-x | templatepkg | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/templatepkg b/templatepkg new file mode 100755 index 0000000..9c1f8bc --- /dev/null +++ b/templatepkg @@ -0,0 +1,90 @@ +#!/bin/bash +# +# templatepkg v0.2: create a simplepkg package list from +# a legacy slackware /var/log/packages +# +# feedback: rhatto at riseup.net | gpl +# +# Templatepkg 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 any later version. +# +# Templatepkg is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA +# + +COMMON="/usr/libexec/simplepkg/common.sh" + +if [ -f "$COMMON" ]; then + source $COMMON + eval_config `basename $0` +else + echo "error: file $COMMON found, check your `basename $0` installation" + exit 1 +fi + +APPEND="0" +if [[ ! -z "$3" && "$1" == "-a" ]]; then + ROOT="$3" + TEMPLATE="$BASE_CONF/$2.template" + APPEND="1" +elif [[ ! -z "$2" && "$1" == "-a" ]]; then + ROOT="/" + TEMPLATE="$BASE_CONF/$2.template" + APPEND="1" +elif [[ ! -z "$2" ]]; then + ROOT="$2" + TEMPLATE="$BASE_CONF/$1.template" +elif [[ ! -z "$1" ]]; then + TEMPLATE="$BASE_CONF/$1.template" + ROOT="/" +else + echo "usage: `basename $0` [-a] <template> [root-dir]" + echo -e "\t-a: append packages into <$BASE_CONF/template.template>" + exit 1 +fi + +if [ ! -d "$ROOT/var/log/packages" ]; then + echo $ROOT/var/log/packages: directory not found + exit 1 +elif [[ -f "$TEMPLATE" && "$APPEND" == "0" ]]; then + rm -f $TEMPLATE +fi + +for package in `ls -1 $ROOT/var/log/packages/`; do + pack=`package_name $package` + if [ -f $TEMPLATE ]; then + if ! `grep -v -e "^#" $TEMPLATE | cut -d : -f 1 | grep -q -e "^$pack\$"`; then + package_name $package >> $TEMPLATE + fi + else + package_name $package >> $TEMPLATE + fi +done + +# checks if each package from the template is installed +grep -v -e "^#" $TEMPLATE | cut -d : -f 1 | while read pack; do + + if [ ! -z "$pack" ]; then + unset found + for candidate in `ls $ROOT/var/log/packages/$pack* 2> /dev/null`; do + candidate="`package_name $candidate`" + if [ "$pack" == "$candidate" ]; then + found="1" + break + fi + done + if [ "$found" != "1" ]; then + # removes a non-installed package from the template + sed "/^$pack$/d" $TEMPLATE | sed "/^$pack $/d" | sed "/^$pack:*/d" > $TEMPLATE.tmp + cat $TEMPLATE.tmp > $TEMPLATE + rm -f $TEMPLATE.tmp + fi + fi + +done |