diff --git a/README.md b/README.md index 3be1d7c..8d1b21d 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ Available options: ### pkgadd `pkgadd` is a tool to install and upgrade package created by `pkgbuild`. Install package is simply extract -`--.spkg.txz` by using tar into real system then save list extracted file into package `INDEX_DIR`. +`--.spkg.txz` by using tar into real system then save list extracted file into package `PKGDB_DIR`. Upgrading package is also using same extract as install, it will replace old files then compare list file from old and new package and remove old file which not exist in new package (like Slackware pkgtool does). @@ -154,7 +154,7 @@ package and remove old file which not exist in new package (like Slackware pkgto old configuration files and skip conflict check ### pkgdel -`pkgdel` is a tool to remove package from system. It will read file listed in package `INDEX_DIR` and remove it. +`pkgdel` is a tool to remove package from system. It will read file listed in package `PKGDB_DIR` and remove it. Usage: pkgdel [ ] diff --git a/pkgadd b/pkgadd index 4b9e5bc..8e8c898 100755 --- a/pkgadd +++ b/pkgadd @@ -59,6 +59,7 @@ Options: --no-preupgrade skip preupgrade script before upgrade package --no-postupgrade skip postupgrade script after upgrade package --no-backup skip backup when upgrading package + --print-dbdir print package database path --root= install to custom root directory EOF @@ -96,6 +97,7 @@ parse_opts() { --no-preupgrade) NO_PREUPGRADE=yes ;; --no-postupgrade) NO_POSTUPGRADE=yes ;; --no-backup) NO_BACKUP=yes ;; + --print-dbdir) PRINTDBDIR=yes ;; --root=*) ROOT_DIR="${1#*=}" ;; *.spkg.tar.*) PKGNAME="$(realpath $1)" ;; *) msg "Invalid option! ($1)"; exit 1 ;; @@ -112,7 +114,7 @@ ret() { } isinstalled() { - if [ -s "$ROOT_DIR/$INDEX_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$INDEX_DIR/$1/.pkginfo"; then + if [ -s "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo"; then return 0 else return 1 @@ -130,17 +132,24 @@ run_scripts() { parse_opts $(extract_opts "$@") SCRATCHPKG_DIR="var/lib/scratchpkg" -INDEX_DIR="$SCRATCHPKG_DIR/index" +PKGDB_DIR="$SCRATCHPKG_DIR/index" LOCK_FILE="$SCRATCHPKG_DIR/spkg.lock" +ROOT_DIR="${ROOT_DIR%/}" # remove trailing slash + +[ "$PRINTDBDIR" ] && { + echo "$ROOT_DIR/$PKGDB_DIR" + ret 0 +} + # show help page [ "$SHOWHELP" ] || [ -z "$PKGNAME" ] && { help ret 0 } -[ -d "$ROOT_DIR/$INDEX_DIR" ] || { - msgerr "Package's database directory not exist: $ROOT_DIR/$INDEX_DIR" +[ -d "$ROOT_DIR/$PKGDB_DIR" ] || { + msgerr "Package's database directory not exist: $ROOT_DIR/$PKGDB_DIR" ret 1 } @@ -178,8 +187,8 @@ name=${noextname%-*} # get package information if installed if isinstalled $name; then - iversion=$(grep ^version $ROOT_DIR/$INDEX_DIR/$name/.pkginfo | cut -d " " -f3-) - irelease=$(grep ^release $ROOT_DIR/$INDEX_DIR/$name/.pkginfo | cut -d " " -f3-) + iversion=$(grep ^version $ROOT_DIR/$PKGDB_DIR/$name/.pkginfo | cut -d " " -f3-) + irelease=$(grep ^release $ROOT_DIR/$PKGDB_DIR/$name/.pkginfo | cut -d " " -f3-) ALREADYINSTALLED=yes fi @@ -227,7 +236,7 @@ if [ ! "$IGNORE_CONFLICT" ]; then fi if [ -e "$ROOT_DIR/$line" ] || [ -L "$ROOT_DIR/$line" ]; then if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then - if ! grep -Fqx "$line" "$ROOT_DIR/$INDEX_DIR/$name/.files"; then + if ! grep -Fqx "$line" "$ROOT_DIR/$PKGDB_DIR/$name/.files"; then echo "$line" touch "$TMP_CONFLICT" fi @@ -290,12 +299,12 @@ if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then rmlist_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_dir" reserve_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.reserve_dir" rmlist_all="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_all" - grep '/$' $ROOT_DIR/$INDEX_DIR/*/.files \ - | grep -v $ROOT_DIR/$INDEX_DIR/$name/.files \ + grep '/$' $ROOT_DIR/$PKGDB_DIR/*/.files \ + | grep -v $ROOT_DIR/$PKGDB_DIR/$name/.files \ | awk -F : '{print $2}' \ | sort \ | uniq > $reserve_dir # get list reserved dirs - grep -Fxv -f "$TMP_PKGINSTALL" $ROOT_DIR/$INDEX_DIR/$name/.files > $rmlist_all # get list files and dirs to remove + grep -Fxv -f "$TMP_PKGINSTALL" $ROOT_DIR/$PKGDB_DIR/$name/.files > $rmlist_all # get list files and dirs to remove grep -v '/$' "$rmlist_all" | tac > "$rmlist_file" # get files only to remove grep -Fxv -f "$reserve_dir" "$rmlist_all" | grep '/$' | tac > "$rmlist_dir" # get dirs only (safe) to remove (cd "$ROOT_DIR"/ @@ -306,30 +315,30 @@ if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then fi # register package into database -rm -fr "$ROOT_DIR/$INDEX_DIR/$name" -mkdir "$ROOT_DIR/$INDEX_DIR/$name" -echo "name = $name" > "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo" -echo "version = $version" >> "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo" -echo "release = $release" >> "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo" -install -m644 "$TMP_PKGINSTALL" "$ROOT_DIR/$INDEX_DIR/$name/.files" +rm -fr "$ROOT_DIR/$PKGDB_DIR/$name" +mkdir "$ROOT_DIR/$PKGDB_DIR/$name" +echo "name = $name" > "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo" +echo "version = $version" >> "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo" +echo "release = $release" >> "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo" +install -m644 "$TMP_PKGINSTALL" "$ROOT_DIR/$PKGDB_DIR/$name/.files" for ii in $(grep ^.pkg* $TMP_PKGADD); do pkgfiles="$pkgfiles $ii" done if [ "$pkgfiles" ]; then - tar -x -f "$PKGNAME" -C "$ROOT_DIR/$INDEX_DIR/$name" $pkgfiles >/dev/null 2>&1 + tar -x -f "$PKGNAME" -C "$ROOT_DIR/$PKGDB_DIR/$name" $pkgfiles >/dev/null 2>&1 fi -if [ -f "$ROOT_DIR/$INDEX_DIR/$name/.pkginstall" ]; then +if [ -f "$ROOT_DIR/$PKGDB_DIR/$name/.pkginstall" ]; then if [ ! "$NO_POSTINSTALL" ] && [ ! "$UPGRADE_PKG" ]; then (cd "$ROOT_DIR"/ - run_scripts "$INDEX_DIR/$name/.pkginstall" post-install "$version" + run_scripts "$PKGDB_DIR/$name/.pkginstall" post-install "$version" ) fi if [ "$UPGRADE_PKG" ] && [ ! "$NO_POSTUPGRADE" ]; then (cd "$ROOT_DIR"/ - run_scripts "$INDEX_DIR/$name/.pkginstall" post-upgrade "$version" "$iversion" + run_scripts "$PKGDB_DIR/$name/.pkginstall" post-upgrade "$version" "$iversion" ) fi fi diff --git a/pkgdel b/pkgdel index 8c1b6ff..a2424e0 100755 --- a/pkgdel +++ b/pkgdel @@ -100,7 +100,7 @@ ret() { } isinstalled() { - if [ -s "$ROOT_DIR/$INDEX_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$INDEX_DIR/$1/.pkginfo"; then + if [ -s "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo"; then return 0 else return 1 @@ -115,9 +115,15 @@ run_scripts() { fi } +command -v pkgadd >/dev/null 2>&1 || { + msgerr "'pkgadd' not found in \$PATH!" + exit 1 +} + parse_opts $(extract_opts "$@") -INDEX_DIR="var/lib/scratchpkg/index" +PKGDB_DIR="$(pkgadd --print-dbdir)" +PKGDB_DIR="${PKGDB_DIR##/}" # remove leading / LOCK_FILE="var/lib/scratchpkg/spkg.lock" # show help page @@ -149,9 +155,9 @@ if ! isinstalled "$RMNAME"; then ret 1 fi -name=$(grep ^name $ROOT_DIR/$INDEX_DIR/$RMNAME/.pkginfo | cut -d " " -f3-) -version=$(grep ^version $ROOT_DIR/$INDEX_DIR/$RMNAME/.pkginfo | cut -d " " -f3-) -release=$(grep ^release $ROOT_DIR/$INDEX_DIR/$RMNAME/.pkginfo | cut -d " " -f3-) +name=$(grep ^name $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-) +version=$(grep ^version $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-) +release=$(grep ^release $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-) if [ -z "$name" ] && [ -z "$version" ] && [ -z "$release" ]; then msgerr "Package '$RMNAME' not installed but exist in database." @@ -164,21 +170,21 @@ remove="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_remove" dirs="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_dirs" files="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_files" -grep '/$' $ROOT_DIR/$INDEX_DIR/*/.files \ - | grep -v "$ROOT_DIR/$INDEX_DIR/$name" \ +grep '/$' $ROOT_DIR/$PKGDB_DIR/*/.files \ + | grep -v "$ROOT_DIR/$PKGDB_DIR/$name" \ | awk -F : '{print $2}' \ | sort \ | uniq > "$reserve" -grep '/$' "$ROOT_DIR/$INDEX_DIR/$name/.files" > "$remove" +grep '/$' "$ROOT_DIR/$PKGDB_DIR/$name/.files" > "$remove" grep -Fxv -f "$reserve" "$remove" | tac > "$dirs" -grep -v '/$' "$ROOT_DIR/$INDEX_DIR/$name/.files" | tac >> "$files" +grep -v '/$' "$ROOT_DIR/$PKGDB_DIR/$name/.files" | tac >> "$files" echo "remove: $name-$version-$release..." # pre-remove script -if [ ! "$NO_PREREMOVE" ] && [ -f "$ROOT_DIR/$INDEX_DIR/$name/.pkginstall" ]; then +if [ ! "$NO_PREREMOVE" ] && [ -f "$ROOT_DIR/$PKGDB_DIR/$name/.pkginstall" ]; then (cd "$ROOT_DIR"/ - run_scripts "$INDEX_DIR/$name/.pkginstall" pre-remove "$version" + run_scripts "$PKGDB_DIR/$name/.pkginstall" pre-remove "$version" ) fi @@ -191,14 +197,14 @@ fi rm -f "$reserve" "$dirs" "$remove" "$files" # post-remove script -if [ ! "$NO_POSTREMOVE" ] && [ -f "$ROOT_DIR/$INDEX_DIR/$name/.pkginstall" ]; then +if [ ! "$NO_POSTREMOVE" ] && [ -f "$ROOT_DIR/$PKGDB_DIR/$name/.pkginstall" ]; then (cd "$ROOT_DIR"/ - run_scripts "$INDEX_DIR/$name/.pkginstall" post-remove "$version" + run_scripts "$PKGDB_DIR/$name/.pkginstall" post-remove "$version" ) fi # remove from database -rm -rf "$ROOT_DIR/$INDEX_DIR/$name" +rm -rf "$ROOT_DIR/$PKGDB_DIR/$name" # running ldconfig if [ -x "$ROOT_DIR"/sbin/ldconfig ]; then diff --git a/revdep b/revdep index c449989..86e5612 100755 --- a/revdep +++ b/revdep @@ -164,8 +164,13 @@ rev_exclude() { trap "interrupted" 1 2 3 15 +command -v pkgadd >/dev/null 2>&1 || { + echo "'pkgadd' not found in \$PATH!" + exit 1 +} + # package database directory -INDEX_DIR="/var/lib/scratchpkg/index" +PKGDB_DIR="$(pkgadd --print-dbdir)" SEARCH_DIRS="/bin /usr/bin /sbin /usr/sbin /lib /usr/lib /lib64 /usr/lib64 /usr/libexec" parse_opt $(extract_opts "$@") @@ -175,7 +180,7 @@ if [ "$(id -u)" != 0 ] && [ "$REBUILD" = 1 ]; then exit 1 fi -if [ "$PKG" ] && [ ! -f "$INDEX_DIR/$PKG/.files" ]; then +if [ "$PKG" ] && [ ! -f "$PKGDB_DIR/$PKG/.files" ]; then echo "ERROR: Package '$PKG' not installed" cleanup exit 1 @@ -250,7 +255,7 @@ if [ "$PKG" ]; then filterdir=cat fi printf "Find '$PKG' files... " - sed 's/^/\//' $INDEX_DIR/$PKG/.files | grep $gx | $filterfile | $filterdir > $FILE_LIST + sed 's/^/\//' $PKGDB_DIR/$PKG/.files | grep $gx | $filterfile | $filterdir > $FILE_LIST else printf "Find all files... " find $SEARCH_DIRS $EXCLUDED_DIRS $EXCLUDED_FILES -type f \( -perm /+u+x -o -name '*.so' -o -name '*.so.*' \) -print 2> /dev/null | sort -u > $FILE_LIST @@ -279,7 +284,7 @@ while read -r line; do LIB_NAME=$NEW_LIB_NAME [ "$LIB_NAME" ] || continue PKG_NAME=$(echo $line | sed 's#^/##') - PKG_NAME=$(grep -Rx $PKG_NAME "$INDEX_DIR"/*/.files | cut -d : -f1) + PKG_NAME=$(grep -Rx $PKG_NAME "$PKGDB_DIR"/*/.files | cut -d : -f1) [ "$PKG_NAME" ] || continue PKG_NAME=$(dirname $PKG_NAME) PKG_NAME=$(basename $PKG_NAME) diff --git a/scratch b/scratch index 7629884..0335170 100755 --- a/scratch +++ b/scratch @@ -91,12 +91,12 @@ vercomp() { installed_pkg_info() { if isinstalled $2; then - grep ^$1 $INDEX_DIR/$2/.pkginfo | cut -d " " -f3- + grep ^$1 $PKGDB_DIR/$2/.pkginfo | cut -d " " -f3- fi } allinstalled() { - grep ^name "$INDEX_DIR"/*/.pkginfo | awk '{print $3}' + grep ^name "$PKGDB_DIR"/*/.pkginfo | awk '{print $3}' } deps_alias() { @@ -151,7 +151,7 @@ needarg() { } isinstalled() { - if [ -s "$INDEX_DIR/$1/.pkginfo" ] && [ "$(grep $1 $INDEX_DIR/$1/.pkginfo)" ]; then + if [ -s "$PKGDB_DIR/$1/.pkginfo" ] && [ "$(grep $1 $PKGDB_DIR/$1/.pkginfo)" ]; then return 0 else return 1 @@ -165,8 +165,8 @@ settermtitle() { scratch_integrity() { if [ "$1" ]; then cd / - if [ -f $INDEX_DIR/$1/.files ]; then - cat $INDEX_DIR/$1/.files | while read -r line; do + if [ -f $PKGDB_DIR/$1/.files ]; then + cat $PKGDB_DIR/$1/.files | while read -r line; do if [ ! -e "$line" ]; then if [ -L "$line" ]; then printf "${YELLOW}broken symlink${CRESET} $1: /$line" @@ -183,7 +183,7 @@ scratch_integrity() { else cd / for pkg in $(allinstalled); do - cat $INDEX_DIR/$pkg/.files | while read -r line; do + cat $PKGDB_DIR/$pkg/.files | while read -r line; do if [ ! -e "$line" ]; then if [ -L "$line" ]; then echo "broken symlink $pkg: /$line" @@ -202,10 +202,10 @@ scratch_lock() { for pkg in "$@"; do if ! isinstalled $pkg; then msgerr "Package '$pkg' is not installed." - elif [ -f $INDEX_DIR/$pkg/.lock ]; then + elif [ -f $PKGDB_DIR/$pkg/.lock ]; then msgerr "Package '$pkg' already locked." else - touch $INDEX_DIR/$pkg/.lock && msg "Successfully locked package '$pkg'." + touch $PKGDB_DIR/$pkg/.lock && msg "Successfully locked package '$pkg'." fi done } @@ -222,10 +222,10 @@ scratch_unlock() { for pkg in "$@"; do if ! isinstalled $pkg; then msgerr "Package '$pkg' is not installed." - elif [ ! -f $INDEX_DIR/$pkg/.lock ]; then + elif [ ! -f $PKGDB_DIR/$pkg/.lock ]; then msgerr "Package '$pkg' is not locked." else - rm -f $INDEX_DIR/$pkg/.lock && msg "Successfully unlocked package '$pkg'." + rm -f $PKGDB_DIR/$pkg/.lock && msg "Successfully unlocked package '$pkg'." fi done } @@ -279,7 +279,7 @@ scratch_trigger() { post_triggers() { if [ "$trig_12" = 1 ]; then echo "trigger: Running mkdirs..." - for mkd in $INDEX_DIR/*/.pkgmkdirs; do + for mkd in $PKGDB_DIR/*/.pkgmkdirs; do [ -s $mkd ] || continue grep -Ev '^(#|$)' $mkd | while read -r dir mode uid gid junk; do if [ -e "$dir" ]; then @@ -370,7 +370,7 @@ pre_triggers() { # mime db if [ "$trig_1" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/mime/$ $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/mime/$ $PKGDB_DIR/$pkg/.files)" ]; then trig_1=1 break fi @@ -380,7 +380,7 @@ pre_triggers() { # desktop db if [ "$trig_2" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/applications/$ $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/applications/$ $PKGDB_DIR/$pkg/.files)" ]; then trig_2=1 break fi @@ -390,7 +390,7 @@ pre_triggers() { # mkfontdir if [ "$trig_3" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/fonts/$ $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/fonts/$ $PKGDB_DIR/$pkg/.files)" ]; then trig_3=1 break fi @@ -400,7 +400,7 @@ pre_triggers() { # hwdb if [ "$trig_4" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^etc/udev/hwdb.d/$ $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^etc/udev/hwdb.d/$ $PKGDB_DIR/$pkg/.files)" ]; then trig_4=1 break fi @@ -410,7 +410,7 @@ pre_triggers() { # icon caches if [ "$trig_5" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/icons/$ $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/icons/$ $PKGDB_DIR/$pkg/.files)" ]; then trig_5=1 break fi @@ -420,7 +420,7 @@ pre_triggers() { # gtk3 immodules if [ "$trig_6" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/lib/gtk-3.0/3.0.0/immodules/.*.so $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/lib/gtk-3.0/3.0.0/immodules/.*.so $PKGDB_DIR/$pkg/.files)" ]; then trig_6=1 break fi @@ -430,7 +430,7 @@ pre_triggers() { # gtk2 immodules if [ "$trig_7" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/lib/gtk-2.0/2.10.0/immodules/.*.so $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/lib/gtk-2.0/2.10.0/immodules/.*.so $PKGDB_DIR/$pkg/.files)" ]; then trig_7=1 break fi @@ -440,7 +440,7 @@ pre_triggers() { # gsettings schema if [ "$trig_8" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/glib-2.0/schemas/$ $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/glib-2.0/schemas/$ $PKGDB_DIR/$pkg/.files)" ]; then trig_8=1 break fi @@ -450,7 +450,7 @@ pre_triggers() { # gio modules if [ "$trig_9" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/lib/gio/modules/.*.so $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/lib/gio/modules/.*.so $PKGDB_DIR/$pkg/.files)" ]; then trig_9=1 break fi @@ -460,7 +460,7 @@ pre_triggers() { # gdk-pixbuf if [ "$trig_10" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/.*.so $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/.*.so $PKGDB_DIR/$pkg/.files)" ]; then trig_10=1 break fi @@ -470,7 +470,7 @@ pre_triggers() { # font caches if [ "$trig_11" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/fonts/$ $INDEX_DIR/$pkg/.files)" ]; then + if [ -s "$PKGDB_DIR/$pkg/.files" ] && [ "$(grep ^usr/share/fonts/$ $PKGDB_DIR/$pkg/.files)" ]; then trig_11=1 break fi @@ -480,7 +480,7 @@ pre_triggers() { # makedirs if [ "$trig_12" != "1" ]; then for pkg in $@; do - if [ -s "$INDEX_DIR/$pkg/.pkgmkdirs" ]; then + if [ -s "$PKGDB_DIR/$pkg/.pkgmkdirs" ]; then trig_12=1 break fi @@ -689,7 +689,7 @@ scratch_remove() { outdatepkg() { for pkg in $(allinstalled); do - if [ ! -e "$INDEX_DIR/$pkg/.lock" ] && getportpath $pkg >/dev/null; then + if [ ! -e "$PKGDB_DIR/$pkg/.lock" ] && getportpath $pkg >/dev/null; then . $(getportpath $pkg)/$BUILD_SCRIPT if [ -z "$name" ] || [ -z "$version" ]; then continue @@ -895,7 +895,7 @@ scratch_outdate() { fi iversion=$(installed_pkg_info version $pkg) irelease=$(installed_pkg_info release $pkg) - [ -f "$INDEX_DIR/$pkg/.lock" ] && ITSLOCK="[locked]" + [ -f "$PKGDB_DIR/$pkg/.lock" ] && ITSLOCK="[locked]" outdatemsg="$name $iversion-$irelease => $version-$release $ITSLOCK" newerinstmsg="$name $iversion-$irelease => $version-$release [newer installed] $ITSLOCK" if [ "$version" != "$iversion" ]; then @@ -1239,7 +1239,7 @@ scratch_info() { scratch_installed() { for all in $(allinstalled); do printf "%s" "$all " - grep -e ^version -e ^release $INDEX_DIR/$all/.pkginfo | awk '{print $3}' | tr '\n' '-' | sed 's:\-$::' + grep -e ^version -e ^release $PKGDB_DIR/$all/.pkginfo | awk '{print $3}' | tr '\n' '-' | sed 's:\-$::' echo done } @@ -1267,7 +1267,7 @@ scratch_missingdep() { scratch_locked() { for pkg in $(allinstalled); do - [ -f "$INDEX_DIR/$pkg/.lock" ] && echo "$pkg" + [ -f "$PKGDB_DIR/$pkg/.lock" ] && echo "$pkg" done } @@ -1296,8 +1296,8 @@ scratch_path() { scratch_provide() { needarg $@ arg=$(echo $1 | sed "s/^\///") - grep -R "$arg" $INDEX_DIR/*/.files \ - | sed "s:$INDEX_DIR/::" \ + grep -R "$arg" $PKGDB_DIR/*/.files \ + | sed "s:$PKGDB_DIR/::" \ | sed "s:/.files::" \ | tr : " " \ | column -t @@ -1320,7 +1320,7 @@ scratch_readme() { scratch_files() { needarg $@ if isinstalled $1; then - cat "$INDEX_DIR/$1/.files" + cat "$PKGDB_DIR/$1/.files" else msg "Package '$1' not installed." fi @@ -1396,6 +1396,12 @@ print_runhelp_msg() { exit 2 } +# check for 'pkgadd', required for package database path +command -v pkgadd >/dev/null 2>&1 || { + echo "'pkgadd' not found in \$PATH!" + exit 1 +} + mode=$1 [ "$mode" ] || { @@ -1422,7 +1428,7 @@ for opt in $@; do done BUILD_SCRIPT="spkgbuild" -INDEX_DIR="/var/lib/scratchpkg/index" +PKGDB_DIR="$(pkgadd --print-dbdir)" REPO_FILE="${REPO_FILE:-/etc/scratchpkg.repo}" ALIAS_FILE="${ALIAS_FILE:-/etc/scratchpkg.alias}"