#!/bin/bash
# Pull pstore and the PenguinOS bring-up logs (/metadata/bringup) from the pmOS debug shell
# (telnet 172.16.42.1:23) into D:\mainline\logs\<time>
OUT=/mnt/d/mainline/logs/$(TZ=Asia/Kolkata date +%Y%m%d-%H%M%S)
mkdir -p $OUT
for i in $(seq 1 60); do (echo > /dev/tcp/172.16.42.1/23) 2>/dev/null && break; sleep 2; done
{
	sleep 3
	echo 'mkdir -p /sys/fs/pstore; mount -t pstore pstore /sys/fs/pstore 2>/dev/null'
	echo 'echo "#### LS"; ls -la /sys/fs/pstore'
	echo 'for f in /sys/fs/pstore/*; do [ -e "$f" ] || continue; echo "#### B64 $(basename $f)"; base64 "$f"; echo "#### ENDFILE"; done'
	echo 'md=; for b in /sys/class/block/*; do grep -q "^PARTNAME=metadata$" $b/uevent 2>/dev/null && md=/dev/$(basename $b); done; echo "#### METADATA $md"'
	echo 'mkdir -p /tmp/md; mount -t ext4 -o ro $md /tmp/md; ls -la /tmp/md/bringup'
	echo 'for f in /tmp/md/bringup/*; do [ -e "$f" ] || continue; echo "#### B64 bringup-$(basename $f)"; base64 "$f"; echo "#### ENDFILE"; done'
	echo 'umount /tmp/md'
	echo 'echo "#### EN""D"'
	for i in $(seq 1 300); do grep -q '^#### END' $OUT/raw.txt 2>/dev/null && break; sleep 2; done
	sleep 2
} | nc -q 30 172.16.42.1 23 > $OUT/raw.txt 2>&1
tr -d '\r' < $OUT/raw.txt | sed 's/\x1b\[[0-9;]*[A-Za-z]//g' > $OUT/session.txt
sed -n '/^#### LS/,/^#### B64/p' $OUT/session.txt | grep -v '^####' > $OUT/ls.txt
awk -v o=$OUT '/^#### B64 /{f=o"/"$3".b64";next} /^#### ENDFILE/{f="";next} f{print > f}' $OUT/session.txt
for b in $OUT/*.b64; do [ -e "$b" ] || continue; grep -E '^[A-Za-z0-9+/=]+$' "$b" | base64 -d > "${b%.b64}" && rm "$b"; done
for p in $OUT/pmsg-ramoops-*; do [ -e "$p" ] && strings -n 4 "$p" > "$p.strings.txt"; done
grep -q '^#### END' $OUT/session.txt || echo "WARNING: dump did not finish, send the folder anyway"
rm -f $OUT/raw.txt
echo "saved to $OUT"; cat $OUT/ls.txt; ls -la $OUT
