commit a2fb7aec1ab942bc49d820b07e6d04910da052ed Author: alexander Date: Wed Apr 17 12:07:09 2024 +0300 init iso2usb diff --git a/README.md b/README.md new file mode 100644 index 0000000..0438108 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# iso2usb + +Script for writing an ISO image to a USB device + +``` +sudo ./iso2usb.sh +``` + +### Example + +``` +sudo ./iso2usb.sh /dev/sde ./image.iso +``` diff --git a/iso2usb.sh b/iso2usb.sh new file mode 100755 index 0000000..9d7a8d9 --- /dev/null +++ b/iso2usb.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# title :iso2usb.sh +# description :Script for writing an ISO image to a USB device +# author :Alexander Zhirov +# date :20240122 +# version :0.1.0 +# usage :bash iso2usb.sh +#=============================================================================== + +set -e +# set -x + +PARTED=$(which parted) + +if [ ! -x ${PARTED} ] +then + echo "The parted utility is missing" && exit 1 +fi + +TMP_USB_PATH="/tmp/usb_$(date +"%Y%m%d-%H%M%S")" +TMP_ISO_PATH="/tmp/iso_$(date +"%Y%m%d-%H%M%S")" + +format_usb_device() { + local USB_DEVICE="${1}" + + parted -s ${USB_DEVICE} mklabel msdos + parted -s ${USB_DEVICE} mkpart primary fat32 0% 100% + parted -s ${USB_DEVICE} set 1 boot on + mkfs -Vt fat ${USB_DEVICE}1 +} + +mount_usb_device() { + local USB_DEVICE="${1}1" + mkdir -v ${TMP_USB_PATH} + mount -v ${USB_DEVICE} ${TMP_USB_PATH} +} + +umount_usb_device() { + local USB_DEVICE="${1}1" + umount -v ${USB_DEVICE} + rm -rv ${TMP_USB_PATH} +} + +mount_iso_image() { + local ISO_IMAGE="${1}" + mkdir -v ${TMP_ISO_PATH} + mount -o loop,ro ${ISO_IMAGE} ${TMP_ISO_PATH} +} + +umount_iso_image() { + umount -v ${TMP_ISO_PATH} + rm -rv ${TMP_ISO_PATH} +} + +copy_iso_to_usb() { + cp -rpv ${TMP_ISO_PATH}/* ${TMP_USB_PATH} +} + +main () { + local USB_DEVICE="${1}" + local ISO_IMAGE="${2}" + + [ -z "${USB_DEVICE}" ] && echo "USB device is not specified" && exit 1 + [ -z "${ISO_IMAGE}" ] && echo "ISO image is not specified" && exit 1 + + local PARTEDS=$(ls ${USB_DEVICE}* | grep -o "${USB_DEVICE}[0-9]") + + for PARTED in ${PARTEDS[@]} + do + if [ ! -z "$(mount | grep "${PARTED}" )" ] + then + umount "${PARTED}" + fi + done + + format_usb_device ${USB_DEVICE} + + mount_usb_device ${USB_DEVICE} + mount_iso_image ${ISO_IMAGE} + + copy_iso_to_usb + + umount_iso_image + umount_usb_device ${USB_DEVICE} +} + +main "${@}"