#!/bin/zsh
export name=$1
if [ -z $name ];then
export name=android
fi
export cores=$2
if [ -z $cores ];then
export cores=2
fi
export ram=$3
if [ -z $ram ];then
export ram=2048
fi
export size=$4
if [ -z $size ];then
export size=256G
fi
export iso=$5
if [ -z $iso ];then
export iso=$PWD/jenux.iso
fi
export unattend=$6
if [ -z $unattend ];then
export unattend="/unattends/android/stable-vda-erase"
fi
export postscript=$7
if [ -e $iso ];then
echo using iso file: $iso
else
echo no or nonexistant jenux iso supplied for $name installation, downloading and verifying
export date=`lynx -listonly -nonumbers --dump https://nashcentral.duckdns.org/projects.html|grep Jenux|grep -w iso|head -n 1|sed "s|https:\/\/nashcentral.duckdns.org\/projects\/||g;s|Jenux-||g"`
export filename=Jenux-$date"-tripple.iso"
export url=https://nashcentral.duckdns.org/projects/$filename
while true;do
if curl -C - -LO $url;curl -C - -LO $url".sha512";sha512sum -c $filename".sha512";then
mv $filename $iso
mv $filename".sha512" $iso".sha512"
break
else
continue
fi
done
fi
if which vm;then
sleep .01
else
echo downloading vm script
if [ -e ~/bin ];then
sleep .01
else
mkdir ~/bin
fi
curl -Lo ~/bin/vm https://nashcentral.duckdns.org/projects/vm
if grep -qw export\ keyid ~/bin/vm;then
sed -i "s|export keyid=DAF3A6FDB26B62912D0E8E3FBE86EBB415104FDF|export nowin=1|g" ~/bin/vm
fi
chmod 700 ~/bin/vm
export PATH=~/bin:$PATH
fi
if noweb=1 nowin=1 nostartupsnap=1 noshutdownsnap=1 vm init $name $cores $ram $size $PWD/$iso localhost 1024 $name;then
sleep .01
else
exit
fi
vm shutdown $name
while true;do
export loopdev=`udisksctl loop-setup -f $iso|cut -f 5 -d \  |cut -f 1 -d .`
if [ -b $loopdev ];then
break
else
continue
fi
done
while true;do
export mnt=`udisksctl mount -b $loopdev"p3"|cut -f 4 -d \  `
if [ -d $mnt ];then
break
else
continue
fi
done
qemu-img create -f raw $name/unattend.img 4M
sgdisk -o -n 1:0:-0s:8300 -U 4A656E6E694F53526F636B7321444A4E $name/unattend.img 
if [ -e $unattend ];then
cp $unattend $name/autoinstall
else
cp $mnt/$unattend $name/autoinstall
fi
sed -i "s|export completeaction=\"reboot\"|export completeaction=\"poweroff\"|g" $name/autoinstall
umount $mnt
udisksctl loop-delete -b $loopdev
export start=`sfdisk -l --bytes $name/unattend.img -o start,end|tail -n 1|awk '{print $1}'`
export startsect=$(($start*512))
export end=`sfdisk -l --bytes $name/unattend.img -o start,end|tail -n 1|awk '{print $2}'`
export endsect=$(($end*512))
mkfs.ext4 -b 1K -E offset=$startsect,root_owner=`id -u`:`id -g` -L autoinstall $name/unattend.img $((($endsect-$startsect)/1024))
export loopdev=`udisksctl loop-setup -f $name/unattend.img|cut -f 5 -d \  |cut -f 1 -d .`
export mnt=`udisksctl mount -b $loopdev"p1"|cut -f 4 -d \  `
cat > $mnt/rootpasswd<<EOF
lowram=1
nochecksum=1
kernelopts=console=ttyS0,115200
unattenddev=/dev/disk/by-label/autoinstall
unattend=/autoinstall
EOF
if [ -z $postscript ];then
echo adding alsa sound fix script
cat > $mnt/postinstall<<EOF
if [ -e /var/lib/alsa/asound.state ];then
rm /var/lib/alsa/asound.state
fi
EOF
chmod 755 $mnt/postinstall
cat >> $mnt/rootpasswd<<EOF
postscriptdev=/dev/disk/by-label/autoinstall
postscript=/postinstall
EOF
else
if [ -e $postscript ];then
cp $postscript $mnt/postinstall
chmod 755 $mnt/postinstall
cat >> $mnt/rootpasswd<<EOF
postscriptdev=/dev/disk/by-label/autoinstall
postscript=/postinstall
EOF
fi
fi
mv $name/autoinstall $mnt
umount $mnt
udisksctl loop-delete -b $loopdev
sed -i "/tpm-tis/d;/qxl/d;/usb-redir/d;/usbredir/d;/virtserialport/d;/virtio-serial/d;/usb-ccid/d;/ccid-card/d;/virtio-balloon/d;/virtio-rng/d;/acpitable/d;/chardev spice/d;/monitor/d;/smbios/d;/-pidfile/d;/-daemonize/d;/-object/d;/-spice/d;s|-audiodev driver=spice,id=audio \\\|-audiodev driver=pa,id=audio \\\|g;s|-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \\\|-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \\\\\n--nographic|g;s|hda-duplex,audiodev=audio|virtio-blk,drive=unattend|g;s|-global driver=cfi.pflash01,property=secure,value=on|-drive file=unattend.img,format=raw,id=unattend,if=none|g;/virtio-vga-gl/d;s|file=\$iso,format=raw,id=installer,if=none |file=\$iso,format=raw,id=installer,if=none,readonly=on |g" $name/$name.vars
sed -i "s|resourcecontrol=deny \\\|resourcecontrol=deny \\\\\n-nographic|g" $name/$name.vars
vm start $name
sed -i "s|virtio-blk,drive=unattend|hda-duplex,audiodev=audio|g;/unattend/d;/iso=/d;/ide-cd/d;/installer/d;s|ide-hd|virtio-blk|g;s|-nographic|-display gtk,gl=on\&|g;/-display egl-headless/d;s|-vga none|-vga virtio --full-screen|g" $name/$name.vars
cp /usr/share/ovmf/x64/OVMF_VARS.fd $name/$name.nvram
cp $name/$name.vars $name/$name.local
