[backfire] backport r27648
[openwrt-10.03/.git] / scripts / ipkg
index dd44dd609e8abae3b7af03980dc423af55e88201..da6447c978675f0d1787b15af7a25d8e864d15da 100755 (executable)
@@ -32,6 +32,8 @@ ipkg_is_upgrade () {
   return 1
 }         
 
+which md5sum 2>&1 >/dev/null || alias md5sum=md5
+
 ipkg_srcs() {
        local srcre="$1"
        sed -ne "s/^src[[:space:]]\+$srcre[[:space:]]\+//p" < $IPKG_CONF
@@ -43,7 +45,7 @@ ipkg_src_names() {
 
 ipkg_src_byname() {
        local src="$1"
-       ipkg_srcs $src | head -1
+       ipkg_srcs $src | head -1
 }
 
 ipkg_dests() {
@@ -68,16 +70,16 @@ ipkg_state_dirs() {
 }
 
 ipkg_dest_default() {
-       ipkg_dests_all | head -1
+       ipkg_dests_all | head -1
 }
 
 ipkg_dest_default_name() {
-       ipkg_dest_names | head -1
+       ipkg_dest_names | head -1
 }
 
 ipkg_dest_byname() {
        local dest="$1"
-       ipkg_dests $dest | head -1
+       ipkg_dests $dest | head -1
 }
 
 ipkg_option() {
@@ -114,10 +116,14 @@ Valid destinations are directories or one of the dest names from $IPKG_CONF:" >&
        fi
 
        # Global ipkg state directories
-       IPKG_DIR_PREFIX=usr/lib/ipkg
+       IPKG_DIR_PREFIX=usr/lib/opkg
        IPKG_LISTS_DIR=$IPKG_OFFLINE_ROOT/$IPKG_DIR_PREFIX/lists
        IPKG_PENDING_DIR=$IPKG_OFFLINE_ROOT/$IPKG_DIR_PREFIX/pending
-       IPKG_TMP=$IPKG_ROOT/tmp/ipkg
+       if [ -z "$IPKG_TMP" ]; then
+               IPKG_TMP=$IPKG_ROOT/tmp/ipkg
+       fi
+
+       [ -e "$IPKG_TMP" ] || mkdir -p $IPKG_TMP
 
        # Destination specific ipkg meta-data directory
        IPKG_STATE_DIR=$IPKG_ROOT/$IPKG_DIR_PREFIX
@@ -140,7 +146,7 @@ Valid destinations are directories or one of the dest names from $IPKG_CONF:" >&
                export no_proxy="$IPKG_NO_PROXY"
        fi
 
-       IPKG_STATUS_FIELDS='\(Package\|Status\|Essential\|Version\|Conffiles\|Root\)'
+       IPKG_STATUS_FIELDS='\(Package\|Status\|Essential\|Version\|Conffiles\|Root\|Architecture\)'
 }
 
 ipkg_usage() {
@@ -228,7 +234,6 @@ ipkg_download() {
                proxyoption="--proxy=on"
        fi
 
-       echo "Downloading $src ..."
        rm -f $IPKG_TMP/$src_file
        case "$src" in
        http://* | ftp://*)
@@ -246,7 +251,6 @@ ipkg_download() {
                ;;
        esac
 
-       echo "Done."
        return 0
 }
 
@@ -546,20 +550,20 @@ ipkg_set_depends() {
        local new_deps="$*"
        pkg="`ipkg_safe_pkg_name $pkg`"
        ## setvar ${pkg}_depends "$new_deps"
-       echo $new_deps > /tmp/ipkg/${pkg}.depends
+       echo $new_deps > $IPKG_TMP/${pkg}.depends
 }
 
 ipkg_get_depends() {
        local pkg=$1
        pkg="`ipkg_safe_pkg_name $pkg`"
-       cat /tmp/ipkg/${pkg}.depends
+       cat $IPKG_TMP/${pkg}.depends
        ## eval "echo \$${pkg}_depends"
 }
 
 ipkg_set_installed() {
        local pkg=$1
        pkg="`ipkg_safe_pkg_name $pkg`"
-       echo installed > /tmp/ipkg/${pkg}.installed
+       echo installed > $IPKG_TMP/${pkg}.installed
        ## setvar ${pkg}_installed "installed"
 }
 
@@ -567,15 +571,15 @@ ipkg_set_uninstalled() {
        local pkg=$1
        pkg="`ipkg_safe_pkg_name $pkg`"
        ### echo ipkg_set_uninstalled $pkg > /dev/console
-       echo uninstalled > /tmp/ipkg/${pkg}.installed
+       echo uninstalled > $IPKG_TMP/${pkg}.installed
        ## setvar ${pkg}_installed "uninstalled"
 }
 
 ipkg_get_installed() {
        local pkg=$1
        pkg="`ipkg_safe_pkg_name $pkg`"
-       if [ -f /tmp/ipkg/${pkg}.installed ]; then
-               cat /tmp/ipkg/${pkg}.installed
+       if [ -f $IPKG_TMP/${pkg}.installed ]; then
+               cat $IPKG_TMP/${pkg}.installed
        fi
        ## eval "echo \$${pkg}_installed"
 }
@@ -591,8 +595,8 @@ ipkg_depends() {
                all_deps="$all_deps $new_pkgs"
                local new_deps=
                for pkg in $new_pkgs; do
-                       if echo $pkg | grep -q '[^a-z0-9.+-]'; then
-                               echo "ipkg_depends: ERROR: Package name $pkg contains illegal characters (should be [a-z0-9.+-])" >&2
+                       if echo $pkg | grep -q '[^A-Za-z0-9.+-]'; then
+                               echo "ipkg_depends: ERROR: Package name $pkg contains illegal characters (should be [A-Za-z0-9.+-])" >&2
                                return 1
                        fi
                        # TODO: Fix this. For now I am ignoring versions and alternations in dependencies.
@@ -603,8 +607,7 @@ s/ \+/ /g'`
                        ipkg_set_depends $pkg $new_deps
                done
 
-               new_deps=`echo $new_deps | sed -e 's/[[:space:]]\+/\\
-/g' | sort | uniq`
+               new_deps=`echo $new_deps | sed -e 's/[[:space:]]\+/\n/g' | sort | uniq`
 
                local maybe_new_pkgs=
                for pkg in $new_deps; do
@@ -660,7 +663,7 @@ Status: install ok not-installed" | ipkg_status_update_sd $sd $pkg
                        curcheck="`expr $curcheck + 1`"
                        local is_installed="`ipkg_get_installed $pkg`"
                        if [ "$is_installed" = "installed" ]; then
-                               echo "$pkg is installed" > /dev/console
+                               echo "$pkg is installed"
                                continue
                        fi
 
@@ -688,9 +691,6 @@ Status: install ok not-installed" | ipkg_status_update_sd $sd $pkg
                                return 1;
                        fi
 
-                       [ -e "$IPKG_TMP" ] || mkdir -p $IPKG_TMP
-
-                       echo ""
                        local tmp_pkg_file="$IPKG_TMP/"`ipkg_file_part $filename`
                        if ! ipkg_download `ipkg_src_byname $src`/$filename $tmp_pkg_file; then
                                echo "ipkg_get_install: Perhaps you need to run \`ipkg update'?"
@@ -773,7 +773,7 @@ ipkg_install_file_dest() {
        mkdir -p $IPKG_TMP/$pkg/data
        mkdir -p $info_dir
 
-       if ! $pkg_extract_stdout $filename ./control.tar.gz | (cd $IPKG_TMP/$pkg/control; tar -xzf - ) ; then
+       if ! $pkg_extract_stdout $filename ./control.tar.gz | (cd $IPKG_TMP/$pkg/control; zcat | tar -xf - ) ; then
                echo "ipkg_install_file: ERROR unpacking control.tar.gz from $filename"
                return 1
        fi
@@ -785,7 +785,7 @@ ipkg_install_file_dest() {
                        echo "Package: $pkg
 Status: install ok pending" | ipkg_status_update_sd $sd $pkg
                        mkdir -p $IPKG_PENDING_DIR
-                       cp $filename $IPKG_PENDING_DIR
+                       cp -f $filename $IPKG_PENDING_DIR
                        rm -r $IPKG_TMP/$pkg/control
                        rm -r $IPKG_TMP/$pkg/data
                        rmdir $IPKG_TMP/$pkg
@@ -794,7 +794,7 @@ Status: install ok pending" | ipkg_status_update_sd $sd $pkg
        fi
 
 
-       echo -n "Unpacking $pkg..."
+       printf "Unpacking $pkg..."
        set +o noglob
        for file in $IPKG_TMP/$pkg/control/*; do
                local base_file="`ipkg_file_part $file`"
@@ -803,13 +803,13 @@ Status: install ok pending" | ipkg_status_update_sd $sd $pkg
        set -o noglob
        rm -r $IPKG_TMP/$pkg/control
 
-       if ! $pkg_extract_stdout $filename ./data.tar.gz | (cd $IPKG_TMP/$pkg/data; tar -xzf - ) ; then
+       if ! $pkg_extract_stdout $filename ./data.tar.gz | (cd $IPKG_TMP/$pkg/data; zcat | tar -xf - ) ; then
                echo "ipkg_install_file: ERROR unpacking data.tar.gz from $filename"
                return 1
        fi
        echo "Done."
 
-       echo -n "Configuring $pkg..."
+       printf "Configuring $pkg..."
        export PKG_ROOT=$dest
        if [ -x "$info_dir/$pkg.preinst" ]; then
                if ! $info_dir/$pkg.preinst install; then
@@ -828,7 +828,7 @@ Status: install ok pending" | ipkg_status_update_sd $sd $pkg
                                local use_maintainers_conffile=
                                if [ -z "$FORCE_DEFAULTS" ]; then
                                        while true; do
-                                               echo -n "Configuration file \`$conffile'
+                                               printf "Configuration file \`$conffile'
  ==> File on system created by you or by a script.
  ==> File also in package provided by package maintainer.
    What would you like to do about it ?  Your options are:
@@ -875,7 +875,7 @@ diff -u $dest/$conffile $IPKG_TMP/$pkg/data/$conffile"
        rm -rf $IPKG_TMP/$pkg/data
        rmdir $IPKG_TMP/$pkg
        rm -f $info_dir/$pkg.list
-       $pkg_extract_stdout $filename ./data.tar.gz | tar tzf - | sed -e 's/^\.//' > $info_dir/$pkg.list
+       $pkg_extract_stdout $filename ./data.tar.gz | zcat | tar tf - | sed -e '/\/$/d; s/^\.//' > $info_dir/$pkg.list
 
        if [ -x "$info_dir/$pkg.postinst" ]; then
                $info_dir/$pkg.postinst configure
@@ -904,7 +904,6 @@ ipkg_install_file() {
 }
 
 ipkg_install() {
-
        while [ $# -gt 0 ]; do
                local pkg="$1"
                shift
@@ -922,11 +921,7 @@ ipkg_install() {
                                ipkg_install_file $ipkg_filename
                        ;;
                *.ipk  | *.deb)
-                       if [ -f "$pkg" ]; then
                                ipkg_install_file $pkg
-                       else
-                               echo "File not found $pkg" >&2
-                       fi
                        ;;
                *)
                        ipkg_get_install $pkg || true
@@ -965,7 +960,7 @@ ipkg_install_wanted() {
                if [ -n "$FORCE_DEFAULTS" ]; then
                        echo "Installing them now."
                else
-                       echo -n "Install them now [Y/n] ? "
+                       printf "Install them now [Y/n] ? "
                        read response
                        case "$response" in
                        [Nn] | [Nn][Oo])
@@ -982,7 +977,7 @@ ipkg_install_wanted() {
 
 ipkg_upgrade_pkg() {
        local pkg="$1"
-       local avail_ver="`ipkg_info $pkg Version | ipkg_extract_value | head -1`"
+       local avail_ver="`ipkg_info $pkg Version | ipkg_extract_value | head -1`"
 
        is_installed=
        for dest_name in `ipkg_dest_names`; do