Skip to content

Commit 552e0c7

Browse files
author
emmett1
committed
updated
1 parent 34b9568 commit 552e0c7

File tree

5 files changed

+97
-71
lines changed

5 files changed

+97
-71
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ Available options:
129129
130130
### pkgadd
131131
`pkgadd` is a tool to install and upgrade package created by `pkgbuild`. Install package is simply extract
132-
`<name>-<version>-<release>.spkg.txz` by using tar into real system then save list extracted file into package `INDEX_DIR`.
132+
`<name>-<version>-<release>.spkg.txz` by using tar into real system then save list extracted file into package `PKGDB_DIR`.
133133
Upgrading package is also using same extract as install, it will replace old files then compare list file from old and new
134134
package and remove old file which not exist in new package (like Slackware pkgtool does).
135135

@@ -154,7 +154,7 @@ package and remove old file which not exist in new package (like Slackware pkgto
154154
old configuration files and skip conflict check
155155
156156
### pkgdel
157-
`pkgdel` is a tool to remove package from system. It will read file listed in package `INDEX_DIR` and remove it.
157+
`pkgdel` is a tool to remove package from system. It will read file listed in package `PKGDB_DIR` and remove it.
158158

159159
Usage:
160160
pkgdel [ <options> <package name> ]

pkgadd

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ Options:
5959
--no-preupgrade skip preupgrade script before upgrade package
6060
--no-postupgrade skip postupgrade script after upgrade package
6161
--no-backup skip backup when upgrading package
62+
--print-dbdir print package database path
6263
--root=<path> install to custom root directory
6364
6465
EOF
@@ -96,6 +97,7 @@ parse_opts() {
9697
--no-preupgrade) NO_PREUPGRADE=yes ;;
9798
--no-postupgrade) NO_POSTUPGRADE=yes ;;
9899
--no-backup) NO_BACKUP=yes ;;
100+
--print-dbdir) PRINTDBDIR=yes ;;
99101
--root=*) ROOT_DIR="${1#*=}" ;;
100102
*.spkg.tar.*) PKGNAME="$(realpath $1)" ;;
101103
*) msg "Invalid option! ($1)"; exit 1 ;;
@@ -112,7 +114,7 @@ ret() {
112114
}
113115

114116
isinstalled() {
115-
if [ -s "$ROOT_DIR/$INDEX_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$INDEX_DIR/$1/.pkginfo"; then
117+
if [ -s "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo"; then
116118
return 0
117119
else
118120
return 1
@@ -130,17 +132,24 @@ run_scripts() {
130132
parse_opts $(extract_opts "$@")
131133

132134
SCRATCHPKG_DIR="var/lib/scratchpkg"
133-
INDEX_DIR="$SCRATCHPKG_DIR/index"
135+
PKGDB_DIR="$SCRATCHPKG_DIR/index"
134136
LOCK_FILE="$SCRATCHPKG_DIR/spkg.lock"
135137

138+
ROOT_DIR="${ROOT_DIR%/}" # remove trailing slash
139+
140+
[ "$PRINTDBDIR" ] && {
141+
echo "$ROOT_DIR/$PKGDB_DIR"
142+
ret 0
143+
}
144+
136145
# show help page
137146
[ "$SHOWHELP" ] || [ -z "$PKGNAME" ] && {
138147
help
139148
ret 0
140149
}
141150

142-
[ -d "$ROOT_DIR/$INDEX_DIR" ] || {
143-
msgerr "Package's database directory not exist: $ROOT_DIR/$INDEX_DIR"
151+
[ -d "$ROOT_DIR/$PKGDB_DIR" ] || {
152+
msgerr "Package's database directory not exist: $ROOT_DIR/$PKGDB_DIR"
144153
ret 1
145154
}
146155

@@ -178,8 +187,8 @@ name=${noextname%-*}
178187

179188
# get package information if installed
180189
if isinstalled $name; then
181-
iversion=$(grep ^version $ROOT_DIR/$INDEX_DIR/$name/.pkginfo | cut -d " " -f3-)
182-
irelease=$(grep ^release $ROOT_DIR/$INDEX_DIR/$name/.pkginfo | cut -d " " -f3-)
190+
iversion=$(grep ^version $ROOT_DIR/$PKGDB_DIR/$name/.pkginfo | cut -d " " -f3-)
191+
irelease=$(grep ^release $ROOT_DIR/$PKGDB_DIR/$name/.pkginfo | cut -d " " -f3-)
183192
ALREADYINSTALLED=yes
184193
fi
185194

@@ -227,7 +236,7 @@ if [ ! "$IGNORE_CONFLICT" ]; then
227236
fi
228237
if [ -e "$ROOT_DIR/$line" ] || [ -L "$ROOT_DIR/$line" ]; then
229238
if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then
230-
if ! grep -Fqx "$line" "$ROOT_DIR/$INDEX_DIR/$name/.files"; then
239+
if ! grep -Fqx "$line" "$ROOT_DIR/$PKGDB_DIR/$name/.files"; then
231240
echo "$line"
232241
touch "$TMP_CONFLICT"
233242
fi
@@ -290,12 +299,12 @@ if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then
290299
rmlist_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_dir"
291300
reserve_dir="$ROOT_DIR/$SCRATCHPKG_DIR/.reserve_dir"
292301
rmlist_all="$ROOT_DIR/$SCRATCHPKG_DIR/.rmlist_all"
293-
grep '/$' $ROOT_DIR/$INDEX_DIR/*/.files \
294-
| grep -v $ROOT_DIR/$INDEX_DIR/$name/.files \
302+
grep '/$' $ROOT_DIR/$PKGDB_DIR/*/.files \
303+
| grep -v $ROOT_DIR/$PKGDB_DIR/$name/.files \
295304
| awk -F : '{print $2}' \
296305
| sort \
297306
| uniq > $reserve_dir # get list reserved dirs
298-
grep -Fxv -f "$TMP_PKGINSTALL" $ROOT_DIR/$INDEX_DIR/$name/.files > $rmlist_all # get list files and dirs to remove
307+
grep -Fxv -f "$TMP_PKGINSTALL" $ROOT_DIR/$PKGDB_DIR/$name/.files > $rmlist_all # get list files and dirs to remove
299308
grep -v '/$' "$rmlist_all" | tac > "$rmlist_file" # get files only to remove
300309
grep -Fxv -f "$reserve_dir" "$rmlist_all" | grep '/$' | tac > "$rmlist_dir" # get dirs only (safe) to remove
301310
(cd "$ROOT_DIR"/
@@ -306,30 +315,30 @@ if [ "$UPGRADE_PKG" ] || [ "$REINSTALL_PKG" ]; then
306315
fi
307316

308317
# register package into database
309-
rm -fr "$ROOT_DIR/$INDEX_DIR/$name"
310-
mkdir "$ROOT_DIR/$INDEX_DIR/$name"
311-
echo "name = $name" > "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo"
312-
echo "version = $version" >> "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo"
313-
echo "release = $release" >> "$ROOT_DIR/$INDEX_DIR/$name/.pkginfo"
314-
install -m644 "$TMP_PKGINSTALL" "$ROOT_DIR/$INDEX_DIR/$name/.files"
318+
rm -fr "$ROOT_DIR/$PKGDB_DIR/$name"
319+
mkdir "$ROOT_DIR/$PKGDB_DIR/$name"
320+
echo "name = $name" > "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
321+
echo "version = $version" >> "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
322+
echo "release = $release" >> "$ROOT_DIR/$PKGDB_DIR/$name/.pkginfo"
323+
install -m644 "$TMP_PKGINSTALL" "$ROOT_DIR/$PKGDB_DIR/$name/.files"
315324

316325
for ii in $(grep ^.pkg* $TMP_PKGADD); do
317326
pkgfiles="$pkgfiles $ii"
318327
done
319328

320329
if [ "$pkgfiles" ]; then
321-
tar -x -f "$PKGNAME" -C "$ROOT_DIR/$INDEX_DIR/$name" $pkgfiles >/dev/null 2>&1
330+
tar -x -f "$PKGNAME" -C "$ROOT_DIR/$PKGDB_DIR/$name" $pkgfiles >/dev/null 2>&1
322331
fi
323332

324-
if [ -f "$ROOT_DIR/$INDEX_DIR/$name/.pkginstall" ]; then
333+
if [ -f "$ROOT_DIR/$PKGDB_DIR/$name/.pkginstall" ]; then
325334
if [ ! "$NO_POSTINSTALL" ] && [ ! "$UPGRADE_PKG" ]; then
326335
(cd "$ROOT_DIR"/
327-
run_scripts "$INDEX_DIR/$name/.pkginstall" post-install "$version"
336+
run_scripts "$PKGDB_DIR/$name/.pkginstall" post-install "$version"
328337
)
329338
fi
330339
if [ "$UPGRADE_PKG" ] && [ ! "$NO_POSTUPGRADE" ]; then
331340
(cd "$ROOT_DIR"/
332-
run_scripts "$INDEX_DIR/$name/.pkginstall" post-upgrade "$version" "$iversion"
341+
run_scripts "$PKGDB_DIR/$name/.pkginstall" post-upgrade "$version" "$iversion"
333342
)
334343
fi
335344
fi

pkgdel

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ ret() {
100100
}
101101

102102
isinstalled() {
103-
if [ -s "$ROOT_DIR/$INDEX_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$INDEX_DIR/$1/.pkginfo"; then
103+
if [ -s "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo" ] && grep -q "$1" "$ROOT_DIR/$PKGDB_DIR/$1/.pkginfo"; then
104104
return 0
105105
else
106106
return 1
@@ -115,9 +115,15 @@ run_scripts() {
115115
fi
116116
}
117117

118+
command -v pkgadd >/dev/null 2>&1 || {
119+
msgerr "'pkgadd' not found in \$PATH!"
120+
exit 1
121+
}
122+
118123
parse_opts $(extract_opts "$@")
119124

120-
INDEX_DIR="var/lib/scratchpkg/index"
125+
PKGDB_DIR="$(pkgadd --print-dbdir)"
126+
PKGDB_DIR="${PKGDB_DIR##/}" # remove leading /
121127
LOCK_FILE="var/lib/scratchpkg/spkg.lock"
122128

123129
# show help page
@@ -149,9 +155,9 @@ if ! isinstalled "$RMNAME"; then
149155
ret 1
150156
fi
151157

152-
name=$(grep ^name $ROOT_DIR/$INDEX_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
153-
version=$(grep ^version $ROOT_DIR/$INDEX_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
154-
release=$(grep ^release $ROOT_DIR/$INDEX_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
158+
name=$(grep ^name $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
159+
version=$(grep ^version $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
160+
release=$(grep ^release $ROOT_DIR/$PKGDB_DIR/$RMNAME/.pkginfo | cut -d " " -f3-)
155161

156162
if [ -z "$name" ] && [ -z "$version" ] && [ -z "$release" ]; then
157163
msgerr "Package '$RMNAME' not installed but exist in database."
@@ -164,21 +170,21 @@ remove="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_remove"
164170
dirs="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_dirs"
165171
files="$ROOT_DIR/$SCRATCHPKG_DIR/.pkgdel_files"
166172

167-
grep '/$' $ROOT_DIR/$INDEX_DIR/*/.files \
168-
| grep -v "$ROOT_DIR/$INDEX_DIR/$name" \
173+
grep '/$' $ROOT_DIR/$PKGDB_DIR/*/.files \
174+
| grep -v "$ROOT_DIR/$PKGDB_DIR/$name" \
169175
| awk -F : '{print $2}' \
170176
| sort \
171177
| uniq > "$reserve"
172-
grep '/$' "$ROOT_DIR/$INDEX_DIR/$name/.files" > "$remove"
178+
grep '/$' "$ROOT_DIR/$PKGDB_DIR/$name/.files" > "$remove"
173179
grep -Fxv -f "$reserve" "$remove" | tac > "$dirs"
174-
grep -v '/$' "$ROOT_DIR/$INDEX_DIR/$name/.files" | tac >> "$files"
180+
grep -v '/$' "$ROOT_DIR/$PKGDB_DIR/$name/.files" | tac >> "$files"
175181

176182
echo "remove: $name-$version-$release..."
177183

178184
# pre-remove script
179-
if [ ! "$NO_PREREMOVE" ] && [ -f "$ROOT_DIR/$INDEX_DIR/$name/.pkginstall" ]; then
185+
if [ ! "$NO_PREREMOVE" ] && [ -f "$ROOT_DIR/$PKGDB_DIR/$name/.pkginstall" ]; then
180186
(cd "$ROOT_DIR"/
181-
run_scripts "$INDEX_DIR/$name/.pkginstall" pre-remove "$version"
187+
run_scripts "$PKGDB_DIR/$name/.pkginstall" pre-remove "$version"
182188
)
183189
fi
184190

@@ -191,14 +197,14 @@ fi
191197
rm -f "$reserve" "$dirs" "$remove" "$files"
192198

193199
# post-remove script
194-
if [ ! "$NO_POSTREMOVE" ] && [ -f "$ROOT_DIR/$INDEX_DIR/$name/.pkginstall" ]; then
200+
if [ ! "$NO_POSTREMOVE" ] && [ -f "$ROOT_DIR/$PKGDB_DIR/$name/.pkginstall" ]; then
195201
(cd "$ROOT_DIR"/
196-
run_scripts "$INDEX_DIR/$name/.pkginstall" post-remove "$version"
202+
run_scripts "$PKGDB_DIR/$name/.pkginstall" post-remove "$version"
197203
)
198204
fi
199205

200206
# remove from database
201-
rm -rf "$ROOT_DIR/$INDEX_DIR/$name"
207+
rm -rf "$ROOT_DIR/$PKGDB_DIR/$name"
202208

203209
# running ldconfig
204210
if [ -x "$ROOT_DIR"/sbin/ldconfig ]; then

revdep

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,13 @@ rev_exclude() {
164164
165165
trap "interrupted" 1 2 3 15
166166
167+
command -v pkgadd >/dev/null 2>&1 || {
168+
echo "'pkgadd' not found in \$PATH!"
169+
exit 1
170+
}
171+
167172
# package database directory
168-
INDEX_DIR="/var/lib/scratchpkg/index"
173+
PKGDB_DIR="$(pkgadd --print-dbdir)"
169174
SEARCH_DIRS="/bin /usr/bin /sbin /usr/sbin /lib /usr/lib /lib64 /usr/lib64 /usr/libexec"
170175
171176
parse_opt $(extract_opts "$@")
@@ -175,7 +180,7 @@ if [ "$(id -u)" != 0 ] && [ "$REBUILD" = 1 ]; then
175180
exit 1
176181
fi
177182
178-
if [ "$PKG" ] && [ ! -f "$INDEX_DIR/$PKG/.files" ]; then
183+
if [ "$PKG" ] && [ ! -f "$PKGDB_DIR/$PKG/.files" ]; then
179184
echo "ERROR: Package '$PKG' not installed"
180185
cleanup
181186
exit 1
@@ -250,7 +255,7 @@ if [ "$PKG" ]; then
250255
filterdir=cat
251256
fi
252257
printf "Find '$PKG' files... "
253-
sed 's/^/\//' $INDEX_DIR/$PKG/.files | grep $gx | $filterfile | $filterdir > $FILE_LIST
258+
sed 's/^/\//' $PKGDB_DIR/$PKG/.files | grep $gx | $filterfile | $filterdir > $FILE_LIST
254259
else
255260
printf "Find all files... "
256261
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
279284
LIB_NAME=$NEW_LIB_NAME
280285
[ "$LIB_NAME" ] || continue
281286
PKG_NAME=$(echo $line | sed 's#^/##')
282-
PKG_NAME=$(grep -Rx $PKG_NAME "$INDEX_DIR"/*/.files | cut -d : -f1)
287+
PKG_NAME=$(grep -Rx $PKG_NAME "$PKGDB_DIR"/*/.files | cut -d : -f1)
283288
[ "$PKG_NAME" ] || continue
284289
PKG_NAME=$(dirname $PKG_NAME)
285290
PKG_NAME=$(basename $PKG_NAME)

0 commit comments

Comments
 (0)