3 Commits
0.8 ... 0.9

Author SHA1 Message Date
emmett1
552e0c7bfe updated 2020-04-27 13:52:05 +08:00
emmett1
34b9568afb fix printf colourize 2020-04-27 13:09:02 +08:00
emmett1
0aa9868d15 fixesss 2020-04-22 14:27:39 +08:00
11 changed files with 249 additions and 137 deletions

View File

@@ -129,7 +129,7 @@ Available options:
### pkgadd ### pkgadd
`pkgadd` is a tool to install and upgrade package created by `pkgbuild`. Install package is simply extract `pkgadd` is a tool to install and upgrade package created by `pkgbuild`. Install package is simply extract
`<name>-<version>-<release>.spkg.txz` by using tar into real system then save list extracted file into package `INDEX_DIR`. `<name>-<version>-<release>.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 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). 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 old configuration files and skip conflict check
### pkgdel ### 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: Usage:
pkgdel [ <options> <package name> ] pkgdel [ <options> <package name> ]

53
pkgadd
View File

@@ -36,11 +36,11 @@ msg2() {
} }
msgerr() { msgerr() {
echo "==> ERROR: $1" echo "==> ERROR: $1" >&2
} }
msgwarn() { msgwarn() {
echo "==> WARNING: $1" echo "==> WARNING: $1" >&2
} }
help() { help() {
@@ -59,6 +59,7 @@ Options:
--no-preupgrade skip preupgrade script before upgrade package --no-preupgrade skip preupgrade script before upgrade package
--no-postupgrade skip postupgrade script after upgrade package --no-postupgrade skip postupgrade script after upgrade package
--no-backup skip backup when upgrading package --no-backup skip backup when upgrading package
--print-dbdir print package database path
--root=<path> install to custom root directory --root=<path> install to custom root directory
EOF EOF
@@ -96,6 +97,7 @@ parse_opts() {
--no-preupgrade) NO_PREUPGRADE=yes ;; --no-preupgrade) NO_PREUPGRADE=yes ;;
--no-postupgrade) NO_POSTUPGRADE=yes ;; --no-postupgrade) NO_POSTUPGRADE=yes ;;
--no-backup) NO_BACKUP=yes ;; --no-backup) NO_BACKUP=yes ;;
--print-dbdir) PRINTDBDIR=yes ;;
--root=*) ROOT_DIR="${1#*=}" ;; --root=*) ROOT_DIR="${1#*=}" ;;
*.spkg.tar.*) PKGNAME="$(realpath $1)" ;; *.spkg.tar.*) PKGNAME="$(realpath $1)" ;;
*) msg "Invalid option! ($1)"; exit 1 ;; *) msg "Invalid option! ($1)"; exit 1 ;;
@@ -112,7 +114,7 @@ ret() {
} }
isinstalled() { 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 return 0
else else
return 1 return 1
@@ -130,17 +132,24 @@ run_scripts() {
parse_opts $(extract_opts "$@") parse_opts $(extract_opts "$@")
SCRATCHPKG_DIR="var/lib/scratchpkg" SCRATCHPKG_DIR="var/lib/scratchpkg"
INDEX_DIR="$SCRATCHPKG_DIR/index" PKGDB_DIR="$SCRATCHPKG_DIR/index"
LOCK_FILE="$SCRATCHPKG_DIR/spkg.lock" LOCK_FILE="$SCRATCHPKG_DIR/spkg.lock"
ROOT_DIR="${ROOT_DIR%/}" # remove trailing slash
[ "$PRINTDBDIR" ] && {
echo "$ROOT_DIR/$PKGDB_DIR"
ret 0
}
# show help page # show help page
[ "$SHOWHELP" ] || [ -z "$PKGNAME" ] && { [ "$SHOWHELP" ] || [ -z "$PKGNAME" ] && {
help help
ret 0 ret 0
} }
[ -d "$ROOT_DIR/$INDEX_DIR" ] || { [ -d "$ROOT_DIR/$PKGDB_DIR" ] || {
msgerr "Package's database directory not exist! ($ROOT_DIR/$INDEX_DIR)" msgerr "Package's database directory not exist: $ROOT_DIR/$PKGDB_DIR"
ret 1 ret 1
} }
@@ -178,8 +187,8 @@ name=${noextname%-*}
# get package information if installed # get package information if installed
if isinstalled $name; then if isinstalled $name; then
iversion=$(grep ^version $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/$INDEX_DIR/$name/.pkginfo | cut -d " " -f3-) irelease=$(grep ^release $ROOT_DIR/$PKGDB_DIR/$name/.pkginfo | cut -d " " -f3-)
ALREADYINSTALLED=yes ALREADYINSTALLED=yes
fi fi
@@ -227,7 +236,7 @@ if [ ! "$IGNORE_CONFLICT" ]; then
fi fi
if [ -e "$ROOT_DIR/$line" ] || [ -L "$ROOT_DIR/$line" ]; then if [ -e "$ROOT_DIR/$line" ] || [ -L "$ROOT_DIR/$line" ]; then
if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; 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" echo "$line"
touch "$TMP_CONFLICT" touch "$TMP_CONFLICT"
fi fi
@@ -290,12 +299,12 @@ if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then
rmlist_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_dir" rmlist_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_dir"
reserve_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.reserve_dir" reserve_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.reserve_dir"
rmlist_all="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_all" rmlist_all="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_all"
grep '/$' $ROOT_DIR/$INDEX_DIR/*/.files \ grep '/$' $ROOT_DIR/$PKGDB_DIR/*/.files \
| grep -v $ROOT_DIR/$INDEX_DIR/$name/.files \ | grep -v $ROOT_DIR/$PKGDB_DIR/$name/.files \
| awk -F : '{print $2}' \ | awk -F : '{print $2}' \
| sort \ | sort \
| uniq > $reserve_dir # get list reserved dirs | 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 -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 grep -Fxv -f "$reserve_dir" "$rmlist_all" | grep '/$' | tac > "$rmlist_dir" # get dirs only (safe) to remove
(cd "$ROOT_DIR"/ (cd "$ROOT_DIR"/
@@ -306,30 +315,30 @@ if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then
fi fi
# register package into database # register package into database
rm -fr "$ROOT_DIR/$INDEX_DIR/$name" rm -fr "$ROOT_DIR/$PKGDB_DIR/$name"
mkdir "$ROOT_DIR/$INDEX_DIR/$name" mkdir "$ROOT_DIR/$PKGDB_DIR/$name"
echo "name = $name" > "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo" echo "name = $name" > "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
echo "version = $version" >> "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo" echo "version = $version" >> "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
echo "release = $release" >> "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo" echo "release = $release" >> "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
install -m644 "$TMP_PKGINSTALL" "$ROOT_DIR/$INDEX_DIR/$name/.files" install -m644 "$TMP_PKGINSTALL" "$ROOT_DIR/$PKGDB_DIR/$name/.files"
for ii in $(grep ^.pkg* $TMP_PKGADD); do for ii in $(grep ^.pkg* $TMP_PKGADD); do
pkgfiles="$pkgfiles $ii" pkgfiles="$pkgfiles $ii"
done done
if [ "$pkgfiles" ]; then 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 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 if [ ! "$NO_POSTINSTALL" ] && [ ! "$UPGRADE_PKG" ]; then
(cd "$ROOT_DIR"/ (cd "$ROOT_DIR"/
run_scripts "$INDEX_DIR/$name/.pkginstall" post-install "$version" run_scripts "$PKGDB_DIR/$name/.pkginstall" post-install "$version"
) )
fi fi
if [ "$UPGRADE_PKG" ] && [ ! "$NO_POSTUPGRADE" ]; then if [ "$UPGRADE_PKG" ] && [ ! "$NO_POSTUPGRADE" ]; then
(cd "$ROOT_DIR"/ (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
fi fi

20
pkgbase
View File

@@ -1,6 +1,24 @@
#!/bin/sh #!/bin/sh
# #
# script to remove all packages other than base and any user input # scratchpkg
#
# Copyright (c) 2018 by Emmett1 (emmett1.2miligrams@gmail.com)
#
# This program 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 3 of the License, or
# (at your option) any later version.
#
# This program 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, see <https://www.gnu.org/licenses/>.
#
#
# script to remove all packages other than base and any user input
# #
parseopt() { parseopt() {

120
pkgbuild
View File

@@ -27,46 +27,59 @@ msg2() {
} }
msgerr() { msgerr() {
echo "==> ERROR: $1" echo "==> ERROR: $1" >&2
} }
msgwarn() { msgwarn() {
echo "==> WARNING: $1" echo "==> WARNING: $1" >&2
} }
updatemdsum() { updatemdsum() {
msg "Generating .checksums..." for s in $(getsourcelist); do
generatemdsum > .checksums if [ ! -f $s ]; then
} msgerr "Source file '$s' not found."
err=1
generatemdsum() {
if [ -z "$source" ]; then
echo SKIP
return 0
fi
for src in $source; do
if echo $src | grep -qE "::(ftp|http|https)://"; then
FILENAME=$SOURCE_DIR/$(echo $src | awk -F '::' '{print $1}')
elif echo $src | grep -qE "(ftp|http|https)://"; then
FILENAME=$SOURCE_DIR/$(basename $src)
else
FILENAME=$src
fi fi
needupdatechecksum="$needupdatechecksum $FILENAME"
done done
[ "$err" = 1 ] && abort 1
md5sum $needupdatechecksum | sed -e 's| .*/| |' | sort -k 2 generatemdsum > .checksums
msg "Checksums updated."
} }
checkmdsum() { getsourcelist() {
for s in $source; do
if echo $s | grep -qE "::(ftp|http|https)://"; then
FILENAME=$SOURCE_DIR/$(echo $s | awk -F '::' '{print $1}')
elif echo $s | grep -qE "(ftp|http|https)://"; then
FILENAME=$SOURCE_DIR/$(basename $s)
else
FILENAME=$PWD/$s
fi
echo $FILENAME
done
}
generatemdsum() {
for s in $(getsourcelist); do
if [ -f $s ]; then
needupdatechecksum="$needupdatechecksum $s"
fi
done
if [ "$needupdatechecksum" ]; then
md5sum $needupdatechecksum | sed -e 's| .*/| |' | sort -k 2
else
echo SKIP
fi
}
checkmdsum() {
[ "$CHECK_MDSUM" = 0 ] || [ "$IGNORE_MDSUM" = yes ] && return 0
TMPCHECKSUM=$WORK_DIR/checksumstmp.$$ TMPCHECKSUM=$WORK_DIR/checksumstmp.$$
ORICHECKSUM=$WORK_DIR/checksumsori.$$ ORICHECKSUM=$WORK_DIR/checksumsori.$$
DIFCHECKSUM=$WORK_DIR/checksumsdiff.$$ DIFCHECKSUM=$WORK_DIR/checksumsdiff.$$
if [ ! -f .checksums ]; then if [ ! -f .checksums ]; then
msg "Generating .checksums..." updatemdsum
generatemdsum > .checksums
else else
msg "Checking checksums..." msg "Checking checksums..."
generatemdsum > "$TMPCHECKSUM" generatemdsum > "$TMPCHECKSUM"
@@ -134,8 +147,6 @@ download_src() {
} }
prepare_src() { prepare_src() {
[ "$IGNORE_MDSUM" -o "$CHECK_MDSUM" = 0 ] || checkmdsum
SRC=$WORK_DIR/$name/src SRC=$WORK_DIR/$name/src
PKG=$WORK_DIR/$name/pkg PKG=$WORK_DIR/$name/pkg
@@ -160,6 +171,11 @@ prepare_src() {
break break
fi fi
done done
if [ ! -f $FILENAME ]; then
msgerr "File source '$FILENAME' not found."
err=1
continue
fi
if [ "$FILENAME" != "$FILE" ] && [ "$nxt" != 1 ]; then if [ "$FILENAME" != "$FILE" ] && [ "$nxt" != 1 ]; then
case $FILENAME in case $FILENAME in
*.tar|*.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.zip|*.rpm) *.tar|*.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.zip|*.rpm)
@@ -171,7 +187,7 @@ prepare_src() {
MODE="Unpacking" ;; MODE="Unpacking" ;;
*) *)
COMMAND="cp $FILENAME $SRC" COMMAND="cp $FILENAME $SRC"
MODE="Preparing" ;; MODE="Preparing" ;;
esac esac
msg "$MODE '$(basename $FILENAME)'..." msg "$MODE '$(basename $FILENAME)'..."
$COMMAND || { $COMMAND || {
@@ -216,8 +232,30 @@ run_build() {
cd - >/dev/null cd - >/dev/null
} }
pkglint() {
linterror=0
# cant package empty PKG
if [ ! "$(find $PKG/* -maxdepth 1 -type d 2>/dev/null)" ]; then
msgerr "PKG is empty."
abort 1
fi
# check for backup file
for f in $backup; do
if [ ! -f $PKG/$f ]; then
msgerr "Backup file '$f' not exist in PKG!"
linterror=1
fi
done
if [ "$linterror" = 1 ]; then
abort 1
fi
}
removeemptydirs() { removeemptydirs() {
find . -type d -empty -delete find . -type d -empty -delete
} }
removelibtool() { removelibtool() {
@@ -287,12 +325,7 @@ compressinfomanpages() {
backupconf() { backupconf() {
for FILE in $backup; do for FILE in $backup; do
if [ ! -f $FILE ]; then mv $FILE $FILE.spkgnew
msgerr "File '$FILE' not exist!"
abort 1
else
mv $FILE $FILE.spkgnew
fi
done done
} }
@@ -316,6 +349,9 @@ removelocales() {
} }
packaging() { packaging() {
# lint $PKG before packaging
pkglint
for FILE in $INCLUDEINPKG; do for FILE in $INCLUDEINPKG; do
if [ -f $FILE ]; then if [ -f $FILE ]; then
install -m644 $FILE $PKG/.pkg$FILE install -m644 $FILE $PKG/.pkg$FILE
@@ -333,9 +369,6 @@ packaging() {
find usr/share/fonts \( -name fonts.dir -o -name fonts.scale \) -delete find usr/share/fonts \( -name fonts.dir -o -name fonts.scale \) -delete
} }
# remove pseudo directories
#rm -fr dev sys proc run tmp
[ "$KEEP_EMPTYDIR" = 0 ] && removeemptydirs [ "$KEEP_EMPTYDIR" = 0 ] && removeemptydirs
[ "$KEEP_LIBTOOL" = 0 ] && removelibtool [ "$KEEP_LIBTOOL" = 0 ] && removelibtool
[ "$STRIP_BINARY" = 1 ] && strip_files [ "$STRIP_BINARY" = 1 ] && strip_files
@@ -380,11 +413,11 @@ generate_pkgfiles() {
excludefile="$excludefile --exclude=.pkg$i" excludefile="$excludefile --exclude=.pkg$i"
done done
msg "Generating .pkgfiles..."
tar -tvf "$PACKAGE_DIR/$PKGNAME" $excludefile \ tar -tvf "$PACKAGE_DIR/$PKGNAME" $excludefile \
| awk '{$3=$4=$5=""; print $0}' \ | awk '{$3=$4=$5=""; print $0}' \
| sed "s,lib/modules/$(uname -r),lib/modules/<kernelversion>,g" \ | sed "s,lib/modules/$(uname -r),lib/modules/<kernelversion>,g" \
| sort -k 3 > .pkgfiles | sort -k 3 > .pkgfiles
msg "Pkgfiles updated."
} }
cleanup() { cleanup() {
@@ -579,13 +612,13 @@ extract_opts() {
echo $opts echo $opts
} }
main() { main() {
parse_opts $(extract_opts "$@") parse_opts $(extract_opts "$@")
if [ -f "$PKGBUILD_CONF" ]; then if [ -f "$PKGBUILD_CONF" ]; then
. "$PKGBUILD_CONF" . "$PKGBUILD_CONF"
else else
msgerr "Config file not found ('$PKGBUILD_CONF')" msgerr "Config file not found: $PKGBUILD_CONF"
exit 1 exit 1
fi fi
@@ -603,7 +636,7 @@ main() {
if [ -f "$PKGBUILD_BSCRIPT" ]; then if [ -f "$PKGBUILD_BSCRIPT" ]; then
description=$(grep "^# description[[:blank:]]*:" $PKGBUILD_BSCRIPT | sed 's/^# description[[:blank:]]*:[[:blank:]]*//') description=$(grep "^# description[[:blank:]]*:" $PKGBUILD_BSCRIPT | sed 's/^# description[[:blank:]]*:[[:blank:]]*//')
. ./$PKGBUILD_BSCRIPT . ./$PKGBUILD_BSCRIPT
else else
msgerr "'$PKGBUILD_BSCRIPT' file not found." msgerr "'$PKGBUILD_BSCRIPT' file not found."
exit 1 exit 1
@@ -631,14 +664,12 @@ main() {
# extract source only # extract source only
[ "$EXTRACT_ONLY" ] && { [ "$EXTRACT_ONLY" ] && {
download_src
prepare_src prepare_src
exit 0 exit 0
} }
# update md5sum # update md5sum
[ "$UPDATE_MDSUM" ] && { [ "$UPDATE_MDSUM" ] && {
download_src
updatemdsum updatemdsum
exit 0 exit 0
} }
@@ -673,6 +704,7 @@ main() {
else else
msg "Building '$name-$version-$release'..." msg "Building '$name-$version-$release'..."
download_src download_src
checkmdsum
prepare_src prepare_src
run_build run_build
packaging packaging

38
pkgdel
View File

@@ -36,11 +36,11 @@ msg2() {
} }
msgerr() { msgerr() {
echo "==> ERROR: $1" echo "==> ERROR: $1" >&2
} }
msgwarn() { msgwarn() {
echo "==> WARNING: $1" echo "==> WARNING: $1" >&2
} }
help() { help() {
@@ -100,7 +100,7 @@ ret() {
} }
isinstalled() { 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 return 0
else else
return 1 return 1
@@ -115,9 +115,15 @@ run_scripts() {
fi fi
} }
command -v pkgadd >/dev/null 2>&1 || {
msgerr "'pkgadd' not found in \$PATH!"
exit 1
}
parse_opts $(extract_opts "$@") 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" LOCK_FILE="var/lib/scratchpkg/spkg.lock"
# show help page # show help page
@@ -149,9 +155,9 @@ if ! isinstalled "$RMNAME"; then
ret 1 ret 1
fi fi
name=$(grep ^name $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/$INDEX_DIR/$RMNAME/.pkginfo | cut -d " " -f3-) version=$(grep ^version $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
release=$(grep ^release $ROOT_DIR/$INDEX_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 if [ -z "$name" ] && [ -z "$version" ] && [ -z "$release" ]; then
msgerr "Package '$RMNAME' not installed but exist in database." 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" dirs="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_dirs"
files="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_files" files="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_files"
grep '/$' $ROOT_DIR/$INDEX_DIR/*/.files \ grep '/$' $ROOT_DIR/$PKGDB_DIR/*/.files \
| grep -v "$ROOT_DIR/$INDEX_DIR/$name" \ | grep -v "$ROOT_DIR/$PKGDB_DIR/$name" \
| awk -F : '{print $2}' \ | awk -F : '{print $2}' \
| sort \ | sort \
| uniq > "$reserve" | 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 -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..." echo "remove: $name-$version-$release..."
# pre-remove script # 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"/ (cd "$ROOT_DIR"/
run_scripts "$INDEX_DIR/$name/.pkginstall" pre-remove "$version" run_scripts "$PKGDB_DIR/$name/.pkginstall" pre-remove "$version"
) )
fi fi
@@ -191,14 +197,14 @@ fi
rm -f "$reserve" "$dirs" "$remove" "$files" rm -f "$reserve" "$dirs" "$remove" "$files"
# post-remove script # 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"/ (cd "$ROOT_DIR"/
run_scripts "$INDEX_DIR/$name/.pkginstall" post-remove "$version" run_scripts "$PKGDB_DIR/$name/.pkginstall" post-remove "$version"
) )
fi fi
# remove from database # remove from database
rm -rf "$ROOT_DIR/$INDEX_DIR/$name" rm -rf "$ROOT_DIR/$PKGDB_DIR/$name"
# running ldconfig # running ldconfig
if [ -x "$ROOT_DIR"/sbin/ldconfig ]; then if [ -x "$ROOT_DIR"/sbin/ldconfig ]; then

View File

@@ -1,7 +1,24 @@
#!/bin/sh #!/bin/sh
# #
# script to check dependencies # scratchpkg
#
# Copyright (c) 2018 by Emmett1 (emmett1.2miligrams@gmail.com)
#
# This program 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 3 of the License, or
# (at your option) any later version.
#
# This program 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, see <https://www.gnu.org/licenses/>.
#
#
# script to check shared libraries dependencies
# #
get_libpath() { get_libpath() {

3
pkgfix
View File

@@ -128,7 +128,8 @@ if [ "$REBUILD" = 1 ]; then
confirm "Continue rebuild & reinstall broken packages?" "Operation cancelled." confirm "Continue rebuild & reinstall broken packages?" "Operation cancelled."
} }
for p in $order; do for p in $order; do
scratch build -f $p && scratch install -r $p || exit 1 scratch build -f $p || exit 1
scratch install -r $p || exit 1
done done
else else
echo "Broken packages:" echo "Broken packages:"

View File

@@ -1,6 +1,24 @@
#!/bin/sh #!/bin/sh
# #
# script to rebuild base packages in right toolchain order # scratchpkg
#
# Copyright (c) 2018 by Emmett1 (emmett1.2miligrams@gmail.com)
#
# This program 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 3 of the License, or
# (at your option) any later version.
#
# This program 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, see <https://www.gnu.org/licenses/>.
#
#
# script to rebuild base packages in right toolchain order
# #
LIST="/tmp/$(basename $0)-list" LIST="/tmp/$(basename $0)-list"

View File

@@ -24,8 +24,6 @@ if [ -d "$1" ]; then
else else
mkdir "$1" mkdir "$1"
echo "# description : echo "# description :
# homepage :
# maintainer :
# depends : # depends :
name=$1 name=$1

16
revdep
View File

@@ -114,7 +114,8 @@ rebuild() {
confirm "Continue rebuild & reinstall broken packages?" "Operation cancelled." confirm "Continue rebuild & reinstall broken packages?" "Operation cancelled."
fi fi
for p in $order; do for p in $order; do
scratch build -f $p && scratch install -r $p || { cleanup; exit 1; } scratch build -f $p || { cleanup; exit 1; }
scratch install -r $p || { cleanup; exit 1; }
done done
fi fi
} }
@@ -163,8 +164,13 @@ rev_exclude() {
trap "interrupted" 1 2 3 15 trap "interrupted" 1 2 3 15
command -v pkgadd >/dev/null 2>&1 || {
echo "'pkgadd' not found in \$PATH!"
exit 1
}
# package database directory # 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" SEARCH_DIRS="/bin /usr/bin /sbin /usr/sbin /lib /usr/lib /lib64 /usr/lib64 /usr/libexec"
parse_opt $(extract_opts "$@") parse_opt $(extract_opts "$@")
@@ -174,7 +180,7 @@ if [ "$(id -u)" != 0 ] && [ "$REBUILD" = 1 ]; then
exit 1 exit 1
fi fi
if [ "$PKG" ] && [ ! -f "$INDEX_DIR/$PKG/.files" ]; then if [ "$PKG" ] && [ ! -f "$PKGDB_DIR/$PKG/.files" ]; then
echo "ERROR: Package '$PKG' not installed" echo "ERROR: Package '$PKG' not installed"
cleanup cleanup
exit 1 exit 1
@@ -249,7 +255,7 @@ if [ "$PKG" ]; then
filterdir=cat filterdir=cat
fi fi
printf "Find '$PKG' files... " 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 else
printf "Find all files... " 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 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
@@ -278,7 +284,7 @@ while read -r line; do
LIB_NAME=$NEW_LIB_NAME LIB_NAME=$NEW_LIB_NAME
[ "$LIB_NAME" ] || continue [ "$LIB_NAME" ] || continue
PKG_NAME=$(echo $line | sed 's#^/##') 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" ] || continue
PKG_NAME=$(dirname $PKG_NAME) PKG_NAME=$(dirname $PKG_NAME)
PKG_NAME=$(basename $PKG_NAME) PKG_NAME=$(basename $PKG_NAME)

89
scratch
View File

@@ -35,27 +35,27 @@ nocolor() {
} }
msg() { msg() {
printf "${GREEN}==>${CRESET} $1\n" printf "${GREEN}==>${CRESET} %s\n" "$1"
}
msgerr() {
printf "${RED}==> ERROR:${CRESET} $1\n"
} }
msginst() { msginst() {
printf "[${GREEN}i${CRESET}] $1\n" printf "[${GREEN}i${CRESET}] %s\n" "$1"
} }
msgmiss() { msgmiss() {
printf "[${YELLOW}m${CRESET}] $1\n" printf "[${YELLOW}m${CRESET}] %s\n" "$1"
} }
msgnoinst() { msgnoinst() {
printf "[-] $1\n" printf "[-] %s\n" "$1"
}
msgerr() {
printf "${RED}==> ERROR:${CRESET} %s\n" "$1" >&2
} }
msgwarn() { msgwarn() {
printf "${YELLOW}==> WARNING:${CRESET} $1\n" printf "${YELLOW}==> WARNING:${CRESET} %s\n" "$1" >&2
} }
needroot() { needroot() {
@@ -91,12 +91,12 @@ vercomp() {
installed_pkg_info() { installed_pkg_info() {
if isinstalled $2; then if isinstalled $2; then
grep ^$1 $INDEX_DIR/$2/.pkginfo | cut -d " " -f3- grep ^$1 $PKGDB_DIR/$2/.pkginfo | cut -d " " -f3-
fi fi
} }
allinstalled() { allinstalled() {
grep ^name "$INDEX_DIR"/*/.pkginfo | awk '{print $3}' grep ^name "$PKGDB_DIR"/*/.pkginfo | awk '{print $3}'
} }
deps_alias() { deps_alias() {
@@ -151,7 +151,7 @@ needarg() {
} }
isinstalled() { 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 return 0
else else
return 1 return 1
@@ -165,8 +165,8 @@ settermtitle() {
scratch_integrity() { scratch_integrity() {
if [ "$1" ]; then if [ "$1" ]; then
cd / cd /
if [ -f $INDEX_DIR/$1/.files ]; then if [ -f $PKGDB_DIR/$1/.files ]; then
cat $INDEX_DIR/$1/.files | while read -r line; do cat $PKGDB_DIR/$1/.files | while read -r line; do
if [ ! -e "$line" ]; then if [ ! -e "$line" ]; then
if [ -L "$line" ]; then if [ -L "$line" ]; then
printf "${YELLOW}broken symlink${CRESET} $1: /$line" printf "${YELLOW}broken symlink${CRESET} $1: /$line"
@@ -183,7 +183,7 @@ scratch_integrity() {
else else
cd / cd /
for pkg in $(allinstalled); do 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 [ ! -e "$line" ]; then
if [ -L "$line" ]; then if [ -L "$line" ]; then
echo "broken symlink $pkg: /$line" echo "broken symlink $pkg: /$line"
@@ -202,10 +202,10 @@ scratch_lock() {
for pkg in "$@"; do for pkg in "$@"; do
if ! isinstalled $pkg; then if ! isinstalled $pkg; then
msgerr "Package '$pkg' is not installed." 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." msgerr "Package '$pkg' already locked."
else else
touch $INDEX_DIR/$pkg/.lock && msg "Successfully locked package '$pkg'." touch $PKGDB_DIR/$pkg/.lock && msg "Successfully locked package '$pkg'."
fi fi
done done
} }
@@ -213,7 +213,7 @@ scratch_lock() {
scratch_locate() { scratch_locate() {
needarg $@ needarg $@
for repo in $PORT_REPO; do for repo in $PORT_REPO; do
grep -R $@ $repo/*/.pkgfiles | sed 's/:/ /;s/\/\.pkgfiles//' | awk '{print $1,$4}' | column -t grep -R $@ $repo/*/.pkgfiles 2>/dev/null | sed 's/:/ /;s/\/\.pkgfiles//' | awk '{print $1,$4}' | column -t
done done
} }
@@ -222,10 +222,10 @@ scratch_unlock() {
for pkg in "$@"; do for pkg in "$@"; do
if ! isinstalled $pkg; then if ! isinstalled $pkg; then
msgerr "Package '$pkg' is not installed." 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." msgerr "Package '$pkg' is not locked."
else else
rm -f $INDEX_DIR/$pkg/.lock && msg "Successfully unlocked package '$pkg'." rm -f $PKGDB_DIR/$pkg/.lock && msg "Successfully unlocked package '$pkg'."
fi fi
done done
} }
@@ -279,7 +279,7 @@ scratch_trigger() {
post_triggers() { post_triggers() {
if [ "$trig_12" = 1 ]; then if [ "$trig_12" = 1 ]; then
echo "trigger: Running mkdirs..." echo "trigger: Running mkdirs..."
for mkd in $INDEX_DIR/*/.pkgmkdirs; do for mkd in $PKGDB_DIR/*/.pkgmkdirs; do
[ -s $mkd ] || continue [ -s $mkd ] || continue
grep -Ev '^(#|$)' $mkd | while read -r dir mode uid gid junk; do grep -Ev '^(#|$)' $mkd | while read -r dir mode uid gid junk; do
if [ -e "$dir" ]; then if [ -e "$dir" ]; then
@@ -370,7 +370,7 @@ pre_triggers() {
# mime db # mime db
if [ "$trig_1" != "1" ]; then if [ "$trig_1" != "1" ]; then
for pkg in $@; do 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 trig_1=1
break break
fi fi
@@ -380,7 +380,7 @@ pre_triggers() {
# desktop db # desktop db
if [ "$trig_2" != "1" ]; then if [ "$trig_2" != "1" ]; then
for pkg in $@; do 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 trig_2=1
break break
fi fi
@@ -390,7 +390,7 @@ pre_triggers() {
# mkfontdir # mkfontdir
if [ "$trig_3" != "1" ]; then if [ "$trig_3" != "1" ]; then
for pkg in $@; do 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 trig_3=1
break break
fi fi
@@ -400,7 +400,7 @@ pre_triggers() {
# hwdb # hwdb
if [ "$trig_4" != "1" ]; then if [ "$trig_4" != "1" ]; then
for pkg in $@; do 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 trig_4=1
break break
fi fi
@@ -410,7 +410,7 @@ pre_triggers() {
# icon caches # icon caches
if [ "$trig_5" != "1" ]; then if [ "$trig_5" != "1" ]; then
for pkg in $@; do 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 trig_5=1
break break
fi fi
@@ -420,7 +420,7 @@ pre_triggers() {
# gtk3 immodules # gtk3 immodules
if [ "$trig_6" != "1" ]; then if [ "$trig_6" != "1" ]; then
for pkg in $@; do 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 trig_6=1
break break
fi fi
@@ -430,7 +430,7 @@ pre_triggers() {
# gtk2 immodules # gtk2 immodules
if [ "$trig_7" != "1" ]; then if [ "$trig_7" != "1" ]; then
for pkg in $@; do 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 trig_7=1
break break
fi fi
@@ -440,7 +440,7 @@ pre_triggers() {
# gsettings schema # gsettings schema
if [ "$trig_8" != "1" ]; then if [ "$trig_8" != "1" ]; then
for pkg in $@; do 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 trig_8=1
break break
fi fi
@@ -450,7 +450,7 @@ pre_triggers() {
# gio modules # gio modules
if [ "$trig_9" != "1" ]; then if [ "$trig_9" != "1" ]; then
for pkg in $@; do 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 trig_9=1
break break
fi fi
@@ -460,7 +460,7 @@ pre_triggers() {
# gdk-pixbuf # gdk-pixbuf
if [ "$trig_10" != "1" ]; then if [ "$trig_10" != "1" ]; then
for pkg in $@; do 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 trig_10=1
break break
fi fi
@@ -470,7 +470,7 @@ pre_triggers() {
# font caches # font caches
if [ "$trig_11" != "1" ]; then if [ "$trig_11" != "1" ]; then
for pkg in $@; do 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 trig_11=1
break break
fi fi
@@ -480,7 +480,7 @@ pre_triggers() {
# makedirs # makedirs
if [ "$trig_12" != "1" ]; then if [ "$trig_12" != "1" ]; then
for pkg in $@; do for pkg in $@; do
if [ -s "$INDEX_DIR/$pkg/.pkgmkdirs" ]; then if [ -s "$PKGDB_DIR/$pkg/.pkgmkdirs" ]; then
trig_12=1 trig_12=1
break break
fi fi
@@ -689,7 +689,7 @@ scratch_remove() {
outdatepkg() { outdatepkg() {
for pkg in $(allinstalled); do 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 . $(getportpath $pkg)/$BUILD_SCRIPT
if [ -z "$name" ] || [ -z "$version" ]; then if [ -z "$name" ] || [ -z "$version" ]; then
continue continue
@@ -895,7 +895,7 @@ scratch_outdate() {
fi fi
iversion=$(installed_pkg_info version $pkg) iversion=$(installed_pkg_info version $pkg)
irelease=$(installed_pkg_info release $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" outdatemsg="$name $iversion-$irelease => $version-$release $ITSLOCK"
newerinstmsg="$name $iversion-$irelease => $version-$release [newer installed] $ITSLOCK" newerinstmsg="$name $iversion-$irelease => $version-$release [newer installed] $ITSLOCK"
if [ "$version" != "$iversion" ]; then if [ "$version" != "$iversion" ]; then
@@ -928,6 +928,7 @@ scratch_search() {
needarg $@ needarg $@
arg=$* arg=$*
for repo in $PORT_REPO; do for repo in $PORT_REPO; do
[ -d $repo ] || continue
out=$(grep -R "# description" $repo | grep $BUILD_SCRIPT | grep "$arg" | awk -F : '{print $1}' | sort) out=$(grep -R "# description" $repo | grep $BUILD_SCRIPT | grep "$arg" | awk -F : '{print $1}' | sort)
[ "$out" ] || continue [ "$out" ] || continue
found=1 found=1
@@ -1238,7 +1239,7 @@ scratch_info() {
scratch_installed() { scratch_installed() {
for all in $(allinstalled); do for all in $(allinstalled); do
printf "%s" "$all " 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 echo
done done
} }
@@ -1266,7 +1267,7 @@ scratch_missingdep() {
scratch_locked() { scratch_locked() {
for pkg in $(allinstalled); do for pkg in $(allinstalled); do
[ -f "$INDEX_DIR/$pkg/.lock" ] && echo "$pkg" [ -f "$PKGDB_DIR/$pkg/.lock" ] && echo "$pkg"
done done
} }
@@ -1295,8 +1296,8 @@ scratch_path() {
scratch_provide() { scratch_provide() {
needarg $@ needarg $@
arg=$(echo $1 | sed "s/^\///") arg=$(echo $1 | sed "s/^\///")
grep -R "$arg" $INDEX_DIR/*/.files \ grep -R "$arg" $PKGDB_DIR/*/.files \
| sed "s:$INDEX_DIR/::" \ | sed "s:$PKGDB_DIR/::" \
| sed "s:/.files::" \ | sed "s:/.files::" \
| tr : " " \ | tr : " " \
| column -t | column -t
@@ -1319,7 +1320,7 @@ scratch_readme() {
scratch_files() { scratch_files() {
needarg $@ needarg $@
if isinstalled $1; then if isinstalled $1; then
cat "$INDEX_DIR/$1/.files" cat "$PKGDB_DIR/$1/.files"
else else
msg "Package '$1' not installed." msg "Package '$1' not installed."
fi fi
@@ -1395,6 +1396,12 @@ print_runhelp_msg() {
exit 2 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=$1
[ "$mode" ] || { [ "$mode" ] || {
@@ -1421,7 +1428,7 @@ for opt in $@; do
done done
BUILD_SCRIPT="spkgbuild" BUILD_SCRIPT="spkgbuild"
INDEX_DIR="/var/lib/scratchpkg/index" PKGDB_DIR="$(pkgadd --print-dbdir)"
REPO_FILE="${REPO_FILE:-/etc/scratchpkg.repo}" REPO_FILE="${REPO_FILE:-/etc/scratchpkg.repo}"
ALIAS_FILE="${ALIAS_FILE:-/etc/scratchpkg.alias}" ALIAS_FILE="${ALIAS_FILE:-/etc/scratchpkg.alias}"