mirror of
https://github.com/ValdikSS/windows2usb.git
synced 2023-08-10 21:13:16 +03:00
120 lines
2.7 KiB
Bash
120 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
trap clean EXIT
|
|
|
|
function clean() {
|
|
rm -f "$pid_pipe" "$zenity_pipe" "$zenity_status_pipe" "$windows2usb_status_pipe"
|
|
kill 0
|
|
}
|
|
|
|
|
|
log_file="/tmp/windows2usb.log"
|
|
|
|
pid_pipe="$(mktemp -u)"
|
|
zenity_pipe="$(mktemp -u)"
|
|
zenity_status_pipe="$(mktemp -u)"
|
|
windows2usb_status_pipe="$(mktemp -u)"
|
|
|
|
mkfifo "$pid_pipe"
|
|
mkfifo "$zenity_pipe"
|
|
mkfifo "$zenity_status_pipe"
|
|
mkfifo "$windows2usb_status_pipe"
|
|
|
|
|
|
devices_available="$(lsblk -dn -I 8 -o RM,NAME,SIZE,MODEL | awk '($1 == 1) { print "FALSE " substr($0, index($0, $2)) }')"
|
|
|
|
while [[ -z "$device" ]]
|
|
do
|
|
device="$(zenity --list --radiolist \
|
|
--title='Choose device' \
|
|
--column='' --column='ID' --column='Size' --column='Name' \
|
|
${devices_available})"
|
|
|
|
test $? -eq 1 && exit 1
|
|
done
|
|
|
|
while [[ -z "$image" ]]
|
|
do
|
|
image="$(zenity --file-selection --title='Select image')"
|
|
|
|
test $? -eq 1 && exit 1
|
|
done
|
|
|
|
while [[ -z "$mode" ]]
|
|
do
|
|
mode="$(zenity --list --radiolist \
|
|
--title='Select bootloader mode' \
|
|
--column='' --column='ID' --column='Mode' --hide-column=2 \
|
|
FALSE 'mbr' 'BIOS Boot' \
|
|
TRUE 'gpt' 'UEFI Boot' \
|
|
FALSE 'gptntfs' 'UEFI Boot with NTFS partition')"
|
|
|
|
test $? -eq 1 && exit 1
|
|
done
|
|
|
|
echo "-------------------" >> "$log_file" 2>&1
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S')" >> "$log_file" 2>&1
|
|
echo "-------------------" >> "$log_file" 2>&1
|
|
|
|
|
|
(
|
|
zenity --progress --title='Writing' --pulsate --auto-close < <(tail -f "$zenity_pipe") &
|
|
|
|
zenity_pid="$!"
|
|
echo "$zenity_pid" > "$pid_pipe"
|
|
|
|
wait "$zenity_pid"
|
|
echo "$?" > "$zenity_status_pipe"
|
|
) &
|
|
|
|
read -st 3 zenity_pid <> "$pid_pipe"
|
|
|
|
|
|
(
|
|
windows2usb "/dev/${device}" "$image" "$mode" >> "$log_file" 2>&1 &
|
|
|
|
windows2usb_pid="$!"
|
|
echo "$windows2usb_pid" > "$pid_pipe"
|
|
|
|
wait "$windows2usb_pid"
|
|
echo "$?" > "$windows2usb_status_pipe"
|
|
) &
|
|
|
|
read -st 3 windows2usb_pid <> "$pid_pipe"
|
|
|
|
|
|
while sleep 1
|
|
do
|
|
if ! kill -0 "$zenity_pid" >/dev/null 2>&1 && [[ -p "$zenity_status_pipe" ]]
|
|
then
|
|
read -st 3 zenity_status <> "$zenity_status_pipe" || true
|
|
rm -f "$zenity_status_pipe"
|
|
|
|
if [[ -z "$zenity_status" ]] || [[ "$zenity_status" != 0 ]]
|
|
then
|
|
echo 'Cancel'
|
|
kill "$windows2usb_pid"
|
|
exit 1
|
|
else
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
if ! kill -0 "$windows2usb_pid" >/dev/null 2>&1 && [[ -p "$windows2usb_status_pipe" ]]
|
|
then
|
|
read -st 3 windows2usb_status <> "$windows2usb_status_pipe" || true
|
|
rm -f "$windows2usb_status_pipe"
|
|
|
|
echo '100' > "$zenity_pipe"
|
|
|
|
if [[ -z "$windows2usb_status" ]] || [[ "$windows2usb_status" != 0 ]]
|
|
then
|
|
zenity --error --text="Error occured, see log at ${log_file}"
|
|
exit 1
|
|
else
|
|
zenity --info --text="Image has been successfully written!"
|
|
exit 0
|
|
fi
|
|
fi
|
|
done
|