@@ -114,7 +114,7 @@ ret() {
114
114
}
115
115
116
116
isinstalled () {
117
- if [ -s " $ROOT_DIR /$PKGDB_DIR /$1 /.pkginfo " ] && grep -q " $1 " " $ROOT_DIR / $PKGDB_DIR / $1 /.pkginfo " ; then
117
+ if [ -s " $ROOT_DIR /$PKGDB_DIR /$1 " ]; then
118
118
return 0
119
119
else
120
120
return 1
@@ -132,7 +132,8 @@ run_scripts() {
132
132
parse_opts $( extract_opts " $@ " )
133
133
134
134
SCRATCHPKG_DIR=" var/lib/scratchpkg"
135
- PKGDB_DIR=" $SCRATCHPKG_DIR /index"
135
+ PKGDB_DIR=" $SCRATCHPKG_DIR /db"
136
+ PKGDBPERMS_DIR=" $PKGDB_DIR .perms"
136
137
LOCK_FILE=" $SCRATCHPKG_DIR /spkg.lock"
137
138
138
139
ROOT_DIR=" ${ROOT_DIR%/ } " # remove trailing slash
@@ -187,8 +188,8 @@ name=${noextname%-*}
187
188
188
189
# get package information if installed
189
190
if isinstalled $name ; then
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- )
191
+ iversion=$( head -n1 $ROOT_DIR /$PKGDB_DIR /$name | awk ' {print $1} ' )
192
+ irelease=$( head -n1 $ROOT_DIR /$PKGDB_DIR /$name | awk ' {print $2} ' )
192
193
ALREADYINSTALLED=yes
193
194
fi
194
195
@@ -216,7 +217,7 @@ TMP_PKGINSTALL="$ROOT_DIR/$SCRATCHPKG_DIR/.tmp_pkginstall"
216
217
TMP_CONFLICT=" $ROOT_DIR /$SCRATCHPKG_DIR /.tmp_conflict"
217
218
218
219
# check integrity of package and save list file/dirs to install in the meantime
219
- tar -tf $PKGNAME > $TMP_PKGADD 2> /dev/null || {
220
+ tar -tvf $PKGNAME > $TMP_PKGADD 2> /dev/null || {
220
221
msgerr " Package '$1 ' is corrupted!"
221
222
ret 1
222
223
}
@@ -230,13 +231,13 @@ echo "$opr: $name-$version-$release..."
230
231
231
232
# check for file conflict
232
233
if [ ! " $IGNORE_CONFLICT " ]; then
233
- grep -Ev " ^.pkg* " " $TMP_PKGADD " | grep -v ' /$ ' | while read -r line; do
234
+ grep -v ' /$ ' " $TMP_PKGADD " | awk ' {print $6} ' | while read -r line; do
234
235
if [ " $line " = " ${line% .* } .spkgnew" ]; then
235
236
line=${line% .* }
236
237
fi
237
238
if [ -e " $ROOT_DIR /$line " ] || [ -L " $ROOT_DIR /$line " ]; then
238
239
if [ " $UPGRADE_PKG " ] || [ " $REINSTALL_PKG " ]; then
239
- if ! grep -Fqx " $line " " $ROOT_DIR /$PKGDB_DIR /$name /.files " ; then
240
+ if ! grep -Fqx " $line " " $ROOT_DIR /$PKGDB_DIR /$name " ; then
240
241
echo " $line "
241
242
touch " $TMP_CONFLICT "
242
243
fi
@@ -253,32 +254,10 @@ if [ ! "$IGNORE_CONFLICT" ]; then
253
254
fi
254
255
fi
255
256
256
- # pre-install and pre-upgrade script
257
- if grep -qx .pkginstall $TMP_PKGADD ; then
258
- TMP_PKGINSTALL_SCRIPT=" $SCRATCHPKG_DIR /pkgadd_installscript"
259
- tar -xf " $PKGNAME " .pkginstall -O > " $ROOT_DIR /$TMP_PKGINSTALL_SCRIPT "
260
- if [ ! " $NO_PREINSTALL " ] && [ ! " $UPGRADE_PKG " ]; then
261
- (cd " $ROOT_DIR " /
262
- run_scripts " $TMP_PKGINSTALL_SCRIPT " pre-install " $version "
263
- )
264
- fi
265
- if [ " $UPGRADE_PKG " ] && [ ! " $NO_PREUPGRADE " ]; then
266
- (cd " $ROOT_DIR " /
267
- run_scripts " $TMP_PKGINSTALL_SCRIPT " pre-upgrade " $version " " $iversion "
268
- )
269
- fi
270
- rm -f " $ROOT_DIR /$TMP_PKGINSTALL_SCRIPT "
271
- fi
272
-
273
- # exclude .pkg* files when extract into system
274
- for i in $( grep " ^.pkg*" $TMP_PKGADD ) ; do
275
- excludefile=" $excludefile --exclude=$i "
276
- done
277
-
278
257
rm -f $TMP_PKGINSTALL
279
258
280
259
# extract package into ROOT_DIR
281
- tar --keep-directory-symlink -p -x -v -f " $PKGNAME " -C " $ROOT_DIR " / $excludefile | while read -r line; do
260
+ tar -xvhpf " $PKGNAME " -C " $ROOT_DIR " / | while read -r line; do
282
261
if [ " $line " = " ${line% .* } .spkgnew" ]; then
283
262
line=${line% .* }
284
263
if [ " $UPGRADE_PKG " ] || [ " $REINSTALL_PKG " ]; then
@@ -295,53 +274,24 @@ done
295
274
296
275
# remove old files from old package that not exist in new package
297
276
if [ " $UPGRADE_PKG " ] || [ " $REINSTALL_PKG " ]; then
298
- rmlist_file=" $ROOT_DIR /$SCRATCHPKG_DIR /.rmlist_file"
299
- rmlist_dir=" $ROOT_DIR /$SCRATCHPKG_DIR /.rmlist_dir"
300
- reserve_dir=" $ROOT_DIR /$SCRATCHPKG_DIR /.reserve_dir"
301
- rmlist_all=" $ROOT_DIR /$SCRATCHPKG_DIR /.rmlist_all"
302
- grep ' /$' $ROOT_DIR /$PKGDB_DIR /* /.files \
303
- | grep -v $ROOT_DIR /$PKGDB_DIR /$name /.files \
304
- | awk -F : ' {print $2}' \
305
- | sort \
306
- | uniq > $reserve_dir # get list reserved dirs
307
- grep -Fxv -f " $TMP_PKGINSTALL " $ROOT_DIR /$PKGDB_DIR /$name /.files > $rmlist_all # get list files and dirs to remove
308
- grep -v ' /$' " $rmlist_all " | tac > " $rmlist_file " # get files only to remove
309
- grep -Fxv -f " $reserve_dir " " $rmlist_all " | grep ' /$' | tac > " $rmlist_dir " # get dirs only (safe) to remove
310
- (cd " $ROOT_DIR " /
311
- [ -s $rmlist_file ] && xargs -a $rmlist_file -d' \n' rm $VERBOSE_INSTALL
312
- [ -s $rmlist_dir ] && xargs -a $rmlist_dir -d' \n' rmdir $VERBOSE_INSTALL
313
- )
314
- rm -f " $rmlist_file " " $rmlist_dir " " $reserve_dir " " $rmlist_all "
277
+ tail -n+2 " $ROOT_DIR /$PKGDB_DIR /$name " | tac | while read -r line; do
278
+ case $line in
279
+ * /) grep " ^$line $" $ROOT_DIR /$PKGDB_DIR /* " $TMP_PKGINSTALL " | grep -qv " $ROOT_DIR /$PKGDB_DIR /$name " || rmdir $( [ " $VERBOSE_INSTALL " ] && echo -v) " $ROOT_DIR /$line " ;;
280
+ * ) grep -q " ^$line $" " $TMP_PKGINSTALL " || rm $( [ " $VERBOSE_INSTALL " ] && echo -v) " $ROOT_DIR /$line " ;;
281
+ esac
282
+ done
315
283
fi
316
284
317
285
# register package into database
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"
324
-
325
- for ii in $( grep ^.pkg* $TMP_PKGADD ) ; do
326
- pkgfiles=" $pkgfiles $ii "
327
- done
328
-
329
- if [ " $pkgfiles " ]; then
330
- tar -x -f " $PKGNAME " -C " $ROOT_DIR /$PKGDB_DIR /$name " $pkgfiles > /dev/null 2>&1
331
- fi
332
-
333
- if [ -f " $ROOT_DIR /$PKGDB_DIR /$name /.pkginstall" ]; then
334
- if [ ! " $NO_POSTINSTALL " ] && [ ! " $UPGRADE_PKG " ]; then
335
- (cd " $ROOT_DIR " /
336
- run_scripts " $PKGDB_DIR /$name /.pkginstall" post-install " $version "
337
- )
286
+ echo " $version $release " > " $ROOT_DIR /$PKGDB_DIR /$name "
287
+ cat " $TMP_PKGINSTALL " >> " $ROOT_DIR /$PKGDB_DIR /$name "
288
+ mkdir -p " $ROOT_DIR /$PKGDBPERMS_DIR "
289
+ grep ' /$' $TMP_PKGADD | while read -r perms own junk1 junk2 junk3 dir; do
290
+ if [ " $perms " != drwxr-xr-x ] || [ " $own " != root/root ]; then
291
+ echo " $perms $own $dir " >> " $ROOT_DIR /$PKGDBPERMS_DIR /$name "
292
+ [ -s " $ROOT_DIR /$PKGDBPERMS_DIR /$name " ] || rm " $ROOT_DIR /$PKGDBPERMS_DIR /$name "
338
293
fi
339
- if [ " $UPGRADE_PKG " ] && [ ! " $NO_POSTUPGRADE " ]; then
340
- (cd " $ROOT_DIR " /
341
- run_scripts " $PKGDB_DIR /$name /.pkginstall" post-upgrade " $version " " $iversion "
342
- )
343
- fi
344
- fi
294
+ done
345
295
346
296
# running ldconfig
347
297
if [ -x " $ROOT_DIR " /sbin/ldconfig ]; then
0 commit comments