Friday, December 30, 2016

Booting Raspberry Pi from USB

#use at your own risk
sudo su
apt install dialog progress expect



exec 3>&1;
DEVUSB=/dev/$(dialog --inputbox "/dev/[xxx] of the USB key (without /dev/ and part. no.)" 0 0 2>&1 1>&3);
exitcode=$?;
exec 3>&-;
echo $result $exitcode;


exec 3>&1;
DEVSDC=/dev/$(dialog --inputbox "/dev/[xxx] of the SD card (without /dev/ and part. no.)" 0 0 2>&1 1>&3);exitcode=$?;
exec 3>&-;
clear
echo $DEVUSB $DEVSDC
FDISKU=`fdisk -l | grep $DEVUSB`
FDISKS=`fdisk -l | grep $DEVSDC`


dialog --title "LAST CHANCE" --clear \
        --yesno "DISK USB (should not be empty):\n$FDISKU\n\n----------------------\nSD CARD (should not be empty):\n$FDISKS\n\n----------------------\n$DEVUSB $DEVSDC" 20 70
case $? in
  0)
    echo "OK, continue.";;
  1)
    echo "Cancelled."
exit;;
  255)
    echo "Cancelled."
exit;;
esac



umount $DEVUSB*
umount $DEVSDC*
wget https://downloads.raspberrypi.org/raspbian_latest -O raspbian_latest.zip
unzip raspbian_latest.zip
export RASPBIANIMG=`ls *rasp*img`
export RASPBIANIMGSD='Raspbian.SDcard.img'


cat >expect-script <<EOL
#!/usr/bin/expect
eval spawn parted $RASPBIANIMGSD
send "print\r"
expect "Cancel?"
send "Ignore\r"
send "Ignore\r"
send "rm 2\r"
send "quit\r"
expect eof
EOL
string=`parted $RASPBIANIMG -s unit B print | tail -n +8 | head -n 1`
set -f                      # avoid globbing (expansion of *).
array=(${string//B/ })
blocksize='4096'
taille=`calc \("${array[2]}"+1\)/$blocksize | xargs`
#taille='100'
echo $taille
dd if=$RASPBIANIMG of=$RASPBIANIMGSD count=$taille bs=$blocksize
expect expect-script
rm expect-script
parted $RASPBIANIMGSD print




echo "Run 'sudo progress -m' in another terminal"
dd bs=4M if=$RASPBIANIMG of=$DEVUSB
#tune2fs -U random $DEVUSB'1'
#tune2fs -U random $DEVUSB'2'
mkdir /tmp/mnt_rpi_usb
mount $DEVUSB'1' /tmp/mnt_rpi_usb
cd /tmp/mnt_rpi_usb
mkdir UNUSED
mv * UNUSED
cd -
umount /tmp/mnt_rpi_usb
mount $DEVUSB'2' /tmp/mnt_rpi_usb
sed -i 's/mmcblk0p2/sda2/' /tmp/mnt_rpi_usb/etc/fstab
sed -i 's/mmcblk0p/sda/' /tmp/mnt_rpi_usb/usr/bin/raspi-config
sed -i 's/mmcblk0/sda/' /tmp/mnt_rpi_usb/usr/bin/raspi-config
umount /tmp/mnt_rpi_usb
clearecho "USB key OK"


echo "Run 'sudo progress -m' in another terminal"
dd bs=4M if=$RASPBIANIMGSD of=$DEVSDC
#tune2fs -U random $DEVSDC'p1'
#tune2fs -U random $DEVSDC'p2'
mkdir /tmp/mnt_rpi_sdc
mount $DEVSDC'p1' /tmp/mnt_rpi_sdc
sed -i 's/mmcblk0p2/sda2/' /tmp/mnt_rpi_sdc/cmdline.txt
umount /tmp/mnt_rpi_sdc
clear
echo "SD card OK"


echo "Don't forget to 'apt update' at boot"


# https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=12015
# https://www.raspberrypi.org/forums/viewtopic.php?f=26&t=10914&p=129474&hilit=resizefs#p122476
# https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=104646
# https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=113841&sid=9ea1b54b6dbff237e85be36f2ea93ea6&start=25