s243a icon

mk_dpkg_metadata.sh (draft)

s243a | PRO | 11/26/20 12:36:09 PM UTC (Edited) | 0 ⭐ | 1009 👁️ | Never ⏰ | []
Bash |

2.49 KB

|

None

|

0 👍

/

0 👎

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