#!/bin/bash
# knoppix-mkbootfloppy - Generate bootfloppies for Knoppix
# (works for Knoppix 3.4)
# (C) Klaus Knopper May 2004
# 번역 : 서민구, 신재훈
# gdialog로 출력방법 변경 : 신재훈

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin"
export PATH

umask 022

# This does not need to run as root on Knoppix.
# [ "`id -u`" != "0" ] && exec sudo "$0" "$@"

# LANG et al.
[ -f /etc/sysconfig/i18n ] && { . /etc/sysconfig/i18n;  export LANG LC_ALL; }
[ -f /etc/sysconfig/knoppix-terminalserver ] && . /etc/sysconfig/knoppix-terminalserver

XDIALOG_HIGH_DIALOG_COMPAT=1
export XDIALOG_HIGH_DIALOG_COMPAT

TMP="/tmp/knoppix-mkbootfloppy.$$"
   
KERNEL=linux
MINIROOT=minirt.gz

# Utility functions, usually called in $0 "start"
# Variable substitution has to be finished before

bailout(){
# Leave and remove temporary files
   rm -f "$TMP"
   exit $1
}

trap bailout 2 15

DIALOG="dialog"
[ -n "$DISPLAY" ] && [ -x /usr/bin/gdialog ] && DIALOG="gdialog"

case "$LANGUAGE" in
de|at|ch)
CONTINUE="Weiter"
CANCEL="Abbruch"
TITLE0="Knoppix Bootfloppy erzeugen"
MESSAGE0="Formatiere Diskette und kopiere Daten..."
TITLE1="Diskette 1"
MESSAGE="Dieses Programm erzeugt zwei Disketten, mit denen Knoppix auf einem Rechner gestartet werden kann, dessen CD-Laufwerk nicht bootfhig ist. Sie bentigen neben der aktuellen KNOPPIX-CD (ab 3.4) zwei 1.44MB Disketten, die vom Programm VOLLSTNDIG GELSCHT, auf 1,7MB \"berformatiert\" und mit dem Linux-Kernel bzw. einer initialen Ramdisk versehen werden. Wenn Sie fortfahren wollen, legen Sie jetzt bitte die KNOPPIX-CD in ein CD-Rom Laufwerk ein, mounten sie, und klicken dann auf \"Weiter\"."
ERROR="Kann die KNOPPIX-CD/DVD in keinem Laufwerk finden (durchsucht wurden /cdrom*, /mnt/cdrom* und /media/cdrom*. Nochmal versuchen?"
MESSAGE1="Bitte legen Sie nun die 1. Diskette (zur Erzeugung der Kernel-Bootfloppy) ein."
FLOPPYERROR="Es ist ein Fehler beim Schreiben auf /dev/fd0u1722 aufgetreten. Diese Diskette ist vermutlich kaputt oder schreibgeschtzt. Nochmal versuchen?"
TITLE2="Diskette 2"
MESSAGE2="Bitte legen Sie nun die 2. Diskette (zur Erzeugung der Init-Ramdisk) ein."
SUCCESS="Das Erzeugen der Boot- und Initrd-Disketten war erfolgreich."
;;
ko)
CONTINUE="Continue"
CANCEL="Cancel"
TITLE0="Knoppix 부트디스크 생성"
MESSAGE0="플로피 디스크를 포맷하고 데이터를 복사하는 중...\n주의 : 디스크 드라이버의 읽기가 완전히 끝날때까지 함부로 ok버튼을 클릭하지 마시오.\n부트디스크 생성 작업이 실패할 수 있습니다."
TITLE1="디스크 1"
MESSAGE="이 프로그램은 CD에서 직접 부트할 수 없는 컴퓨터에서 Knoppix로 부팅할 수 있게 해 주는 두 장의 플로피 디스크를 생성합니다. 또 현재 KNOPPIX-CD (3.4 이상)는 완전하게 비어 있는 두 장의 1.44MB 플로피 디스크를 1.7MB로 \"오버포맷\"하고, 리눅스 커널과 초기화 램디스크를 설치합니다. 계속 진행하고 싶으시면 KNOPPIX-CD를 CD-ROM 드라이브에 넣고 CD에 접근할 수 있도록 마운트 한 후 \"계속\"을 선택하십시오."
ERROR="어떤 CD-Rom 드라이브에서도 KNOPPIX-CD를 찾을 수 없습니다. (다음에서 찾았습니다 /cdrom*, /mnt/cdrom*, /media/cdrom*). 다시 시도할까요?"
MESSAGE1="커널 부팅 플로피 디스크를 만들 첫번째 플로피 디스크를 넣으십시오."
FLOPPYERROR="/dev/fd0u1722에 쓰는 작업에 오류가 발생했습니다. 플로피 디스크가 쓰기 불가능하거나 오류가 있습니다. 다시 시도할까요?"
TITLE2="디스크 2"
MESSAGE2="초기화 램디스크를 만들 두번째 플로피 디스크를 넣으십시오."
SUCCESS="부트 및 initrd 플로피 디스크를 성공적으로 만들었습니다."
;;
*)
CONTINUE="Continue"
CANCEL="Cancel"
TITLE0="Knoppix Bootfloppy Creator"
MESSAGE0="Formatting floppy disk and copying data..."
TITLE1="Disk 1"
MESSAGE="This program creates two floppy disks, which can be used in order to boot Knoppix on a computer that cannot boot directly from CD. Besides a current KNOPPIX-CD (3.4 and up), you will need two 1.44MB floppy disks, which be COMPLETELY ERASED, \"overformatted\" with 1.7MB, and installed with a Linux-kernel and an initial ramdisk. If you want to continue, please insert the KNOPPIX-CD into a CD-Rom drive now, mount the CD so that it is accessible, and click on \"Continue\"."
ERROR="Can't find the KNOPPIX-CD in any CD-Rom drive (searched /cdrom*, /mnt/cdrom* and /media/cdrom*). Try again?"
MESSAGE1="Please insert the first floppy disk now (for creating the Kernel-bootfloppy)."
FLOPPYERROR="There has been an error while writing to /dev/fd0u1722. The floppy disk is probably not writable or defective. Try again?"
TITLE2="Disk 2"
MESSAGE2="Please insert the second floppy disk now (for creating the initial ramdisk)."
SUCCESS="Creation of boot- and initrd floppy disks was successful."
;;
esac

gauge(){
status=0
while [ ! -e "$TMP.done" ]; do echo "$status" ; status="`expr \( 100 - $status \) / 8 + $status + 1`"; sleep 8; done | $DIALOG --title "$TITLE0" --gauge "$MESSAGE0" 8 65 0
}

endgauge(){
touch "$TMP.done" ; wait ; rm -f "$TMP.done"
}

format(){
grep -q "drive o: .*/dev/fd0u1722" $HOME/.mtoolsrc 2>/dev/null || echo "drive o: file=\"/dev/fd0u1722\" exclusive" >> $HOME/.mtoolsrc
if [ ! -b /dev/fd0u1722 ]; then
sudo mknod /dev/fd0u1722 b 2 60 && sudo chmod 666 /dev/fd0u1722
fi
fdformat /dev/fd0u1722 >/dev/null && mformat o: >/dev/null
return "$?"
}

$DIALOG --title "$TITLE0" --yesno "$MESSAGE" 12 75 || bailout 1
while :; do
rm -f "$TMP" "$TMP".done
# Find CD-Rom boot/isolinux directrory
SRCDIR=""
for i in / /mnt /media; do
 for d in `ls -1d "$i"/*cdrom* 2>/dev/null`; do
  [ -e "$d"/boot/isolinux/"$KERNEL" -a -e "$d"/boot/isolinux/"$MINIROOT" ] && SRCDIR="$d"/boot/isolinux && break 2
 done
done
[ -z "$SRCDIR" ] && { $DIALOG --title "$TITLE0" --yesno "$ERROR" 7 75 && continue || bailout 1; }
break
done


$DIALOG --title "$TITLE1" --yesno "$MESSAGE1" 7 65 || bailout 1
while :; do
rm -f "$TMP" "$TMP".done
gauge &
format && syslinux /dev/fd0u1722 && \
mcopy "$SRCDIR"/{"$KERNEL",boot.msg,logo.16,f2,f3} o: && \
{ rm -f "$TMP"; perl -p -e 's|^APPEND|APPEND load_ramdisk=1 prompt_ramdisk=1 root=/dev/fd0 rw|g;s|quiet ||g;s|initrd=[^ ]* ||g;' "$SRCDIR"/isolinux.cfg >"$TMP" && mcopy "$TMP" o:syslinux.cfg >/dev/null; }
[ "$?" != "0" ] && { endgauge; $DIALOG --title "$TITLE1" --yesno "$FLOPPYERROR" 9 65 && continue || bailout 1; }
for i in `ls -1 "$SRCDIR"/*.kbd 2>/dev/null`; do mcopy "$i" o:; done
endgauge
break
done

$DIALOG --title "$TITLE2" --yesno "$MESSAGE2" 7 65 || bailout 1
while :; do
rm -f "$TMP" "$TMP".done
gauge &
format && dd if="$SRCDIR"/"$MINIROOT" of=/dev/fd0u1722 bs=18k
[ "$?" != "0" ] && { endgauge; $DIALOG --title "$TITLE2" --yesno "$FLOPPYERROR" 9 65 && continue || bailout 1; }
endgauge
break
done

$DIALOG --title "$TITLE0" --msgbox "$SUCCESS" 6 65
bailout 0
