Advertisement
s4ros

create-bootable-usb

Jan 19th, 2019
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.28 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # set -x
  4.  
  5. if [[ $(id -u) -ne 0 ]]; then
  6.     echo "You must be root to execute this script."
  7.     exit 1
  8. fi
  9.  
  10. if [[ $# -lt 2 ]]; then
  11.     echo "Usage: $0 /path/to/windows.iso /dev/destination/pendrive"
  12.     exit 1
  13. fi
  14.  
  15. ISOFILE=$1
  16. ISODIR=/tmp/iso.$$
  17. DSTDEVICE=$2
  18. DSTDIR=/tmp/mounted.$$
  19.  
  20.  
  21. function check_dirs() {
  22.     if [[ ! -d "$ISODIR" ]]; then
  23.         mkdir -p $ISODIR
  24.     fi
  25.     if [[ ! -d "$DSTDIR" ]]; then
  26.         mkdir -p $DSTDIR
  27.     fi
  28. }
  29.  
  30.  
  31. function gogogo() {
  32.     # $1 - isofile
  33.     # $2 - /dst/device
  34.     echo "Checking for dependencies... "
  35.     apt-get install gparted grub-pc-bin p7zip-full ntfs-3g -y -q > /dev/null \
  36.     && check_dirs \
  37.     && echo "Preparing device $2"; create_partition $2 \
  38.     && mount $1 ${ISODIR} > /dev/null \
  39.     && mount ${2}1 ${DSTDIR} > /dev/null \
  40.     && echo "rsync $ISODIR -> $DSTDIR"; rsync --progress -a $ISODIR/ $DSTDIR/ \
  41.     ls -l $DSTDIR
  42.     echo
  43.     UUID=$(blkid | grep ${DSTDEVICE}1 | cut -d '"' -f 2)
  44.     echo "UUID: $UUID"
  45.     install_grub $UUID
  46.     echo "Syncing...."; sync
  47. }
  48.  
  49.  
  50. function install_grub() {
  51.     # $1 - device UUID
  52.     sudo grub-install --target=i386-pc --boot-directory="$DSTDIR/boot" ${DSTDEVICE}
  53.     cat <<- _EOF_ > $DSTDIR/boot/grub/grub.cfg
  54. echo "If you see this, you have successfully booted from USB :)"
  55. insmod ntfs
  56. insmod search_fs_uuid
  57. search --no-floppy --fs-uuid $1 --set root
  58. ntldr /bootmgr
  59. boot
  60. _EOF_
  61. }
  62.  
  63.  
  64. function create_partition() {
  65.     #
  66.     # create new partition table on device with bootable NTFS partition
  67.     #
  68.     echo "WARNING! Non turning back point ahead."
  69.     echo "If you continue, you will lose all data on $1 device."
  70.     echo "Press ENTER to proceed."
  71.     read
  72.     (
  73.         echo o
  74.         echo n
  75.         echo
  76.         echo
  77.         echo
  78.         echo
  79.         echo a
  80.         echo w
  81.     ) | fdisk $1 > /dev/null \
  82.     && mkfs.ntfs -f ${1}1 > /dev/null
  83. }
  84.  
  85.  
  86. function cleanup() {
  87.     umount $ISODIR
  88.     umount $DSTDIR
  89.     rm -rf $ISODIR $DSTDIR
  90. }
  91.  
  92. echo "WARNING! WARNING! WARNING! WARNING! WARNING!"
  93. echo "All data on $2 will be lost."
  94. echo -n "Are you sure, you want to continue? [y/n]: "
  95. read choice
  96. case "$choice" in
  97.     y|Y)
  98.         gogogo $ISOFILE $DSTDEVICE
  99.         ;;
  100.     *)
  101.         echo "Bye"
  102.         exit 0
  103. esac
  104. cleanup
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement