#!/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