@@ -114,7 +114,7 @@ ret() {
114114}
115115
116116isinstalled () {
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
118118 return 0
119119 else
120120 return 1
@@ -132,7 +132,8 @@ run_scripts() {
132132parse_opts $( extract_opts " $@ " )
133133
134134SCRATCHPKG_DIR=" var/lib/scratchpkg"
135- PKGDB_DIR=" $SCRATCHPKG_DIR /index"
135+ PKGDB_DIR=" $SCRATCHPKG_DIR /db"
136+ PKGDBPERMS_DIR=" $PKGDB_DIR .perms"
136137LOCK_FILE=" $SCRATCHPKG_DIR /spkg.lock"
137138
138139ROOT_DIR=" ${ROOT_DIR%/ } " # remove trailing slash
@@ -187,8 +188,8 @@ name=${noextname%-*}
187188
188189# get package information if installed
189190if 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} ' )
192193 ALREADYINSTALLED=yes
193194fi
194195
@@ -216,7 +217,7 @@ TMP_PKGINSTALL="$ROOT_DIR/$SCRATCHPKG_DIR/.tmp_pkginstall"
216217TMP_CONFLICT=" $ROOT_DIR /$SCRATCHPKG_DIR /.tmp_conflict"
217218
218219# 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 || {
220221 msgerr " Package '$1 ' is corrupted!"
221222 ret 1
222223}
@@ -230,13 +231,13 @@ echo "$opr: $name-$version-$release..."
230231
231232# check for file conflict
232233if [ ! " $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
234235 if [ " $line " = " ${line% .* } .spkgnew" ]; then
235236 line=${line% .* }
236237 fi
237238 if [ -e " $ROOT_DIR /$line " ] || [ -L " $ROOT_DIR /$line " ]; then
238239 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
240241 echo " $line "
241242 touch " $TMP_CONFLICT "
242243 fi
@@ -253,32 +254,10 @@ if [ ! "$IGNORE_CONFLICT" ]; then
253254 fi
254255fi
255256
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-
278257rm -f $TMP_PKGINSTALL
279258
280259# 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
282261 if [ " $line " = " ${line% .* } .spkgnew" ]; then
283262 line=${line% .* }
284263 if [ " $UPGRADE_PKG " ] || [ " $REINSTALL_PKG " ]; then
@@ -295,53 +274,24 @@ done
295274
296275# remove old files from old package that not exist in new package
297276if [ " $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
315283fi
316284
317285# 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 "
338293 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
345295
346296# running ldconfig
347297if [ -x " $ROOT_DIR " /sbin/ldconfig ]; then
0 commit comments