| 1 | #!/bin/sh
|
|---|
| 2 | #
|
|---|
| 3 | # <zaurus@bredband.net>
|
|---|
| 4 | # Modified by Aman Gupta <oz@themastermind1.net>
|
|---|
| 5 | # Modified by Matthias Hentges to adjust to changes in OZ <oe@hentges.net>
|
|---|
| 6 |
|
|---|
| 7 | usage () {
|
|---|
| 8 | echo "Usage: "
|
|---|
| 9 | echo " $0 add packagename (links \"packagename\" to root filesystem)"
|
|---|
| 10 | echo " $0 remove packagename (unlinks \"packagename\" from root filesystem)"
|
|---|
| 11 | echo " $0 list mountpoint (lists packages on \"mountpoint\", e.g. '/mnt/card')"
|
|---|
| 12 | echo " $0 mount mountpoint (links all packages on \"mountpoint\", e.g. '/mnt/card')"
|
|---|
| 13 | echo " $0 umount mountpoint (unlinks all packages on \"mountpoint\", e.g. '/mnt/card')"
|
|---|
| 14 | exit
|
|---|
| 15 | }
|
|---|
| 16 |
|
|---|
| 17 | findpackage () {
|
|---|
| 18 | echo "*** Locating package"
|
|---|
| 19 |
|
|---|
| 20 | if test -e /etc/ipkg.conf
|
|---|
| 21 | then
|
|---|
| 22 | valid_mount_points=`cat /etc/ipkg.conf| grep ^dest| awk '{print $3}'|sed "s/\/$//"`
|
|---|
| 23 | else
|
|---|
| 24 | valid_mount_points="/mnt/card /mnt/cf /mnt/ram /media/card /media/cf /media/ram"
|
|---|
| 25 | fi
|
|---|
| 26 |
|
|---|
| 27 | for mount_point in $valid_mount_points
|
|---|
| 28 | do
|
|---|
| 29 | if [ -e "$mount_point/usr/lib/ipkg/info/$PACKAGE.list" ]; then
|
|---|
| 30 | PREFIX="$mount_point"
|
|---|
| 31 | files=`cat "$PREFIX/usr/lib/ipkg/info/$PACKAGE.list" |sed -e "s#$mount_point##g"`
|
|---|
| 32 | fi
|
|---|
| 33 | done
|
|---|
| 34 |
|
|---|
| 35 |
|
|---|
| 36 | if test -z "$files"
|
|---|
| 37 | then
|
|---|
| 38 | echo "Package \"$PACKAGE\" not found."
|
|---|
| 39 | exit
|
|---|
| 40 | else
|
|---|
| 41 | echo "*** Found package on $PREFIX"
|
|---|
| 42 | fi
|
|---|
| 43 | }
|
|---|
| 44 |
|
|---|
| 45 | add () {
|
|---|
| 46 | echo "*** Adding $PACKAGE"
|
|---|
| 47 | echo "$files" |
|
|---|
| 48 | while read line; do
|
|---|
| 49 | test -L "$line" && rm "$line"
|
|---|
| 50 | if [ ! -e "$line" ]; then
|
|---|
| 51 | # Only if it doesn't already exist.
|
|---|
| 52 | if [ -d "$PREFIX$line" ]; then
|
|---|
| 53 | # It's a directory.
|
|---|
| 54 | `mkdir "$line"`
|
|---|
| 55 | else
|
|---|
| 56 | # It's a file.
|
|---|
| 57 | [ ! -d `dirname $line` ] && mkdir -p `dirname $line`
|
|---|
| 58 | `ln -s "$PREFIX$line" "$line"`
|
|---|
| 59 | fi
|
|---|
| 60 | fi
|
|---|
| 61 | done
|
|---|
| 62 | }
|
|---|
| 63 |
|
|---|
| 64 | remove () {
|
|---|
| 65 | echo "*** Removing $PACKAGE"
|
|---|
| 66 |
|
|---|
| 67 | echo "$files" |
|
|---|
| 68 | while read line; do
|
|---|
| 69 | if [ -e "$line" ]; then
|
|---|
| 70 | # File/Directory exists.
|
|---|
| 71 | if [ -d "$line" ]; then
|
|---|
| 72 | # Directory.
|
|---|
| 73 | contents=$(ls -1 "$line")
|
|---|
| 74 | if [ ! "$contents" ]; then
|
|---|
| 75 | # Empty directory
|
|---|
| 76 | rmdir "$line"
|
|---|
| 77 | fi
|
|---|
| 78 | elif [ -L "$line" ]; then
|
|---|
| 79 | rm "$line"
|
|---|
| 80 | fi
|
|---|
| 81 | fi
|
|---|
| 82 | done
|
|---|
| 83 | }
|
|---|
| 84 |
|
|---|
| 85 | list () {
|
|---|
| 86 | filelist=""
|
|---|
| 87 | files=`ls -1 $LOCATION/usr/lib/ipkg/info/*.list`
|
|---|
| 88 | for filename in $files; do
|
|---|
| 89 | filename=${filename##*/}
|
|---|
| 90 | filename=${filename%%.list}
|
|---|
| 91 | filelist="$filelist $filename"
|
|---|
| 92 | done
|
|---|
| 93 | }
|
|---|
| 94 |
|
|---|
| 95 | COMMAND=$1
|
|---|
| 96 | PACKAGE=$2
|
|---|
| 97 | LOCATION=$2
|
|---|
| 98 |
|
|---|
| 99 | if [ $# -ne 2 ]
|
|---|
| 100 | then
|
|---|
| 101 | usage
|
|---|
| 102 | fi
|
|---|
| 103 |
|
|---|
| 104 | echo "*** Command: $COMMAND"
|
|---|
| 105 | case "$COMMAND" in
|
|---|
| 106 | "add" )
|
|---|
| 107 | findpackage
|
|---|
| 108 | add
|
|---|
| 109 | ;;
|
|---|
| 110 | "remove" )
|
|---|
| 111 | findpackage
|
|---|
| 112 | remove
|
|---|
| 113 | ;;
|
|---|
| 114 | "list" )
|
|---|
| 115 | list
|
|---|
| 116 | for file in $filelist; do
|
|---|
| 117 | echo $file
|
|---|
| 118 | done
|
|---|
| 119 | ;;
|
|---|
| 120 | "mount" )
|
|---|
| 121 | list
|
|---|
| 122 | for file in $filelist; do
|
|---|
| 123 | $0 add $file
|
|---|
| 124 | done
|
|---|
| 125 | ;;
|
|---|
| 126 | "umount" )
|
|---|
| 127 | list
|
|---|
| 128 | for file in $filelist; do
|
|---|
| 129 | $0 remove $file
|
|---|
| 130 | done
|
|---|
| 131 | esac
|
|---|
| 132 |
|
|---|
| 133 | echo "*** Done."
|
|---|
| 134 | echo ""
|
|---|
| 135 | exit
|
|---|
| 136 |
|
|---|