#!/bin/sh
#BK 151102
#fownload the ubuntu 'linux-firmware' and 'linux-firmware-nonfree' DEBs, expand to dirs with these names.
#run /usr/sbin/updatenetmoduleslist.sh, creates file
#networkfirmware-all in /tmp, copy to same place as above folders, then run this script
#160322 updated for 4.4.x kernel.
#170527 d/l nonfree: http://repo.kali.org/kali/pool/non-free/f/firmware-nonfree/firmware-nonfree_20170404.orig.tar.xz
# ...reorganise it into linux-firmware-nonfree/lib/firmware
#171023 see file 'bk-notes'

[ ! -d linux-firmware ] && exit
[ ! -d linux-firmware-nonfree ] && exit
[ ! -f networkfirmware-all ] && exit

PETNAME='firmware_linux_network'
PETVER='5.1-20190704' #####EDIT THIS#####
DESTNET="${PETNAME}-${PETVER}"
[ -d $DESTNET ] && rm -rf ./$DESTNET
[ -f ${DESTNET}.pet ] && rm -f ${DESTNET}.pet
mkdir $DESTNET

echo 'extracting network firmware...'

cat networkfirmware-all |
while read ALINE
do
 [ "$ALINE" == "" ] && continue
 [ "$(echo -n "$ALINE" | grep "^MODULE")" != "" ] && continue

 for SRCDIR in linux-firmware linux-firmware-nonfree
 do
  [ -d ${SRCDIR}/lib/firmware/$ALINE ] && continue
  if [ -f ${SRCDIR}/lib/firmware/$ALINE ];then
   ADIR="$(dirname $ALINE | sed -e 's%^\.%%')"
   mkdir -p $DESTNET/lib/firmware/$ADIR
   echo -n "${ALINE} "
   cp -a -f ${SRCDIR}/lib/firmware/$ALINE $DESTNET/lib/firmware/$ADIR/
   if [ -h ${SRCDIR}/lib/firmware/$ALINE ];then
    LALINE="$(readlink ${SRCDIR}/lib/firmware/$ALINE)"
    LAPATH="$(dirname /lib/firmware/$ADIR/$LALINE)"
    mkdir -p ${DESTNET}${LAPATH}
    cp -a -f ${SRCDIR}/lib/firmware/$ADIR/$LALINE ${DESTNET}${LAPATH}/
   fi
  fi
 done

done
sync
echo

#create pet...
#ex: firmware_linux_display-3.17.4-20150415|firmware_linux_display|3.17.4-20150415||BuildingBlock|5036K||firmware_linux_display-3.17.4-20150415.pet|+linux_kernel&ge3.17.4|linux kernel firmware for display, mostly radeon||||
SIZEK="$(du -s -k $DESTNET | cut -f 1)"
echo "${PETNAME}-${PETVER}|${PETNAME}|${PETVER}||BuildingBlock|${SIZEK}K||${PETNAME}-${PETVER}.pet|+linux_kernel&ge5.1|linux kernel firmware for network||||" > $DESTNET/pet.specs
sync
dir2tgz $DESTNET
sync
echo "Creating ${DESTNET}.pet..."
tgz2pet ${DESTNET}.tar.gz
sync
echo '...done'
