#!/bin/bash
ADMIN_DIR=/var/lib/dpkg
APT_SOURCES_DIR=/etc/apt/sources.list.d
APT_PKGDB_DIR=/var/lib/apt/lists
CHROOT_DIR=""
#based on https://github.com/s243a/woof-next/blob/e6590c1044adc0a182a9b299129ed707b7bd95d2/builders/deb-build.sh#L80
prepare_dirs() {
for aDir in "$CHROOT_DIR" "$CHROOT_DIR$APT_SOURCES_DIR" "$CHROOT_DIR$APT_PKGDB_DIR"; do
[ ! -z "`which realpath`" ] && aDir=$(realpath -m "$aDir")
mkdir -p "$aDir"
done
! [ -e $CHROOT_DIR$ADMIN_DIR/status ] && echo > $CHROOT_DIR$ADMIN_DIR/status
! [ -e $CHROOT_DIR$ADMIN_DIR/available ] && echo > $CHROOT_DIR$ADMIN_DIR/available
}
#based on https://github.com/s243a/woof-next/blob/e6590c1044adc0a182a9b299129ed707b7bd95d2/builders/deb-build.sh#L457
function update_pkg_status(){
#Probably better just to call remove_pkg_status instead of processing args.
#while [ ! -z $1 ];
# case $1 in
# --status=*)
# shift
# ;;
# *)
# break
# ;;
# esac
{
echo \
"Package: $1
Status: install ok installed
Priority: $2
Section: $3
Maintainer: unspecified
Architecture: $ARCH
Version: $4"
[ "${5%,}" ] && echo "Depends: ${5%,}"
echo "Description: $1 installed by deb-build.sh
"
} >> "$CHROOT_DIR$ADMIN_DIR/status"
}
#based on https://pastebin.com/cRcR6yE2
AWK_PRG="BEGIN{FS=\"|\"}
{
PACKAGE=\$2
print \"Package: \" PACKAGE
VERSION = \$3
#TODO make PACKAGE regular expression safe
gsub(/[+]/,\"\\\\+\",PACKAGE)
gsub(PACKAGE,\"\",VERSION)
gsub(/^_/,\"\",VERSION)
print \"Version: \" \$3
ARCH = \$1
gsub(/.*_/,\"\",ARCH)
if ( ARCH == i386 ){
print \"Architecture: \" ARCH
} else if ( ARCH = noarch ){
print \"Architecture: noarch\"
}
#TODO Architecture: \$1 but trimmed after last _ check that it is like i386
print \"Maintainer: unspecified\"
print \"Priority: \" PRIORITY
print \"Section: \" \$5
}
"
function append_statuses(){
for aFile in "$@"; do
aFile=$(realpath -m $aFile)
if [[ aFile = */woof-installed-packages ]]; then
PRIORITY=required
ESSENTIAL=yes
else
PRIORITY=optional
ESSENTIAL=no
fi
cat "$aFile" | awk --assign PRIORITY="$PRIORITY" "$AWK_PRG" >> "$CHROOT_DIR$ADMIN_DIR/status"
done
}
mv $CHROOT_DIR$ADMIN_DIR/status $CHROOT_DIR$ADMIN_DIR/status_back$$
prepare_dirs
append_statuses /var/packages/woof-installed-packages /var/packages/user-installed-packages
#TODO symlink file lists
Comments