+++ /dev/null
-#!/bin/sh
-#
-# author: hackbard@hackdaworld.dyndns.org
-#
-# hdw-tools:
-# this is hdw-get script, used to install/remove/(update) binary packages
-#
-
-usage() {
- echo
- echo "usage:"
- echo "$0 [install/remove] [root] [package]"
- echo "$0 [dist-install] [root] [dist file]"
- echo
- echo "options:"
- echo "-v tell me whats going on"
- echo "-a auto resolve deps, do not prompt user"
- echo "-no-dep do not care for dependencies (used by hdw-get itself)"
- echo
-}
-
-package="" ; inst_root=""
-d_install="" ; install=""
-verbose="" ; no_dep=""
-auto_resolve_deps=""
-
-while [ "$1" ] ; do
- case "$1" in
- install) install="1"
- inst_root="$2" ; package="$3" ; shift 3 ;;
- remove) remove="1"
- inst_root="$2" ; package="$3" ; shift 3 ;;
- dist-install) d_install="1"
- inst_root="$2" ; dist_file="$3" ; shift 3 ;;
- -v) verbose=1 ; shift 1 ;;
- -a) auto_resolve_deps="1" ; shift 1 ;;
- -no-dep) no_dep="1" ; shift 1 ;;
- *) usage ; exit 1 ;;
- esac
-done
-
-if [ -z "inst_root" -o -z "$package" ] ; then
- usage ; exit 1
-fi
-
-# read hdw-get configs
-net_addr="" ; bin_dir="" ; distf_dir=""
-if [ -f /etc/hdw-get.conf ] ; then
- . /etc/hdw-get.conf
- if [ -z "$hdw_version" -o -z "$hdw_arch" -o -z "$hdw_arch_opt" ] ; then
- echo "version, arch and arch_opt need to be specified."
- echo "adjust /etc/hdw-get.conf file"
- exit
- else
- [ "$verbose" ] && echo "hdw-get.conf file looks good ..."
- fi
-else
- echo "/etc/hdw-get.conf file not found, aborting"
- exit 1
-fi
-
-# create temp directory
-mkdir -p /tmp/.hdw-get
-
-# remove
-if [ "$remove" = "1" ] ; then
- # looking for flist file
- fl_pris=""
- for fl_file in $inst_root/var/adm/flists/$package-[0-9]*; do
- fl_pris="`echo $fl_file | awk -F- '{ print $NF }'` $fl_pris"
- done
- fl_max="0"
- for pri in $fl_pris; do
- if [ "$pri" = "x" ] ; then
- fl_max="x"
- break
- fi
- [ "$pri" -gt "$fl_max" ] && fl_max=$pri
- done
- fl_file="$inst_root/var/adm/flists/$package-$fl_max"
- [ "$verbose" ] && echo "expecting flist file $fl_file"
- if [ ! -f $fl_file ] ; then
- echo "package $apckage is not installed (moved the flist file?)"
- exit 1
- fi
-
- # care about info/dir file
- rm -f /tmp/.hdw-get/dir* ; modify_info_dir=""
- if [ -n "`grep usr/share/info/dir $fl_file`" ] ; then
- modify_info_dir="1"
- cp $inst_root/usr/share/info/dir /tmp/.hdw-get/
- for info_obj in `grep 'usr/share/info/.*.info' $fl_file | \
- awk -F/ '{ print $4 }'`; do
- info_o=`echo $info_obj | sed 's/.info//'`
- [ "$verbose" ] && echo "deleting $info_o from info/dir"
- grep -v \($info_o\)\. /tmp/.hdw-get/dir | \
- grep -v ^$package\ info\ -\ added\ by\ hdw > \
- /tmp/.hdw-get/dir~
- mv /tmp/.hdw-get/dir~ /tmp/.hdw-get/dir
- done
- fi
-
- # remove the files/dirs
- ((supposed = 0))
- ((counter = 0))
- cat $fl_file | while read pkg file; do
- ((supposed += 1))
- if [ -e $inst_root/$file ] ; then
- if [ "$file" != "tmp" ] ; then
- if [ -d $inst_root/$file ] ; then
- rmdir -p $inst_root/$file > /dev/null 2>&1
- else
- rm -f $inst_root/$file > /dev/null 2>&1
- rmdir -p `dirname $file` > /dev/null 2>&1
- fi
- ((counter += 1))
- fi
- fi
- echo -en "\rremoved $counter from $supposed supposed files"
- done
- echo -en "\ndone.\n"
-
- # reinstall info/dir file
- if [ "$modify_info_dir" ] ; then
- [ "$verbose" ] && echo "restoring modified info/dir file"
- cp /tmp/.hdw-get/dir $inst_root/usr/share/info/dir
- rm -f /tmp/.hdw-get/dir*
- fi
-
-# install
-elif [ "$install" = "1" ] ; then
- # does inst_root exist
- if [ ! -d $inst_root ] ; then
- echo
- echo "the install directory doesnt exist, create it first"
- echo
- exit 1
- fi
-
- # does package exist?
- pkg=`basename $package | sed 's/.tar.bz2//'`
- if [ -f $inst_root/var/adm/flists/${pkg}-[0-9]* ] ; then
- echo "$pkg seems to be installed, candidates:"
- for i in $inst_root/var/adm/flists/${pkg}-[0-9]*; do
- echo "-> $i"
- done
- exit 1
- fi
-
- # store info/dir file
- rm -f /tmp/.hdw-get/dir*
- if [ -f $inst_root/usr/share/info/dir ] ; then
- [ "$verbose" ] && echo "backing up info/dir file"
- cp $inst_root/usr/share/info/dir /tmp/.hdw-get/
- fi
-
- # check/install package
- if [ -f $package ] ; then
- echo "extracting `basename $package` to $inst_root ..."
- tar --use-compress-program=bzip2 -xf $package \
- -C $inst_root
- echo "done"
- elif [ ! -z "$bin_dir" -a -f $bin_dir/${hdw_arch}-${hdw_arch_opt}/$package/$package.tar.bz2 ] ; then
- echo "extracting $package to $inst_root ..."
- tar --use-compress-program=bzip2 \
- -xf $bin_dir/$package/$package.tar.bz2 -C $inst_root
- elif [ ! -z "$net_addr" ] ; then
- #echo "trying to get package $package via net ..."
- wget $net_addr/hdw-linux/hdw-linux-$hdw_version/binaries/${hdw_arch}-${hdw_arch_opt}/$package/${package}.tar.bz2 > /dev/null 2>&1
- if [ "$?" ] ; then
- echo "package not found at $net_addr, aborting ..."
- else
-
- tar --use-compress-program=bzip2 \
- -xf ${package}.tar.bz2 -C $inst_root
- rm ${package}.tar.bz2
- echo "done"
- fi
- else
- echo "sorry, package $package not found"
- exit 1
- fi
-
- # merging info/dir file
- fl_file=`ls -A $inst_root/var/adm/flists/$pkg-[0-9]* | tail -1`
- if [ -n "`grep usr/share/info/dir $fl_file`" ] ; then
- echo "" >> /tmp/.hdw-get/dir
- echo "$pkg info - added by hdw `date`" >> /tmp/.hdw-get/dir
- for info_obj in `grep 'usr/share/info/.*.info' $fl_file | \
- awk -F/ '{ print $4 }'`; do
- info_o=`echo $info_obj | sed 's/.info//'`
- if [ -z "`grep \($info_o\)\. /tmp/.hdw-get/dir`" ]
- then
- [ "$verbose" ] && \
- echo "merging $info_o to info/dir"
- grep \($info_o\)\. \
- $inst_root/usr/share/info/dir >> \
- /tmp/.hdw-get/dir
- fi
- done
- fi
- cp /tmp/.hdw-get/dir $inst_root/usr/share/info/dir
- rm -f /tmp/.hdw-get/dir
-
- # check for runtime deps
- #if [ -z $no_deps ] ; then
- # alldeps=`get_all_deps $pkg`
- # echo "$pkg depends on the following packages:"
- # for i in $alldeps; do
- # echo "-> $i"
- # done
- # echo "continue? [y,n]"
- # if [ -z $auto_resolve_deps ] ; then
- # read answer
- # if [ "$answer" = "y" ] ; then
- # for i in $alldeps; do
- # $0 -no-dep install $inst_root $pkg
- # done
- # else
- # echo -n "install dependencies on your own,"
- # echo " things will not work without."
- # fi
- # fi
- #fi
-
-# dist-install
-elif [ "$dist_install" = "1" ] ; then
- # check dist file
- if [ ! -f $dist_file ] ; then
- echo "$dist_file not found, aborting"
- else
- # install all distribution related packages
- for package in `cat $dist_file`; do
- # execute myelf
- $0 install $inst_root $package
- done
- fi
-fi
-
-# remove temp directory
-rm -rf /tmp/.hdw-get
-