Una cosa rapideta per crear un disc imatge del tipus Floppy 1.44M.
zypper install dosfstools
mkdir -p /media/floppya/
dd bs=512 count=2880 if=/dev/zero of=floppyA.img
mkfs.msdos floppyA.img
mount -o loop floppyA.img /media/floppya/
Script per crear una imatge USB de 128MB o un FLOPPY de 1.44MB
#!/bin/bash
# FREEDOS-MAKER- by Sergi Coll - GPLv2 - No Warranty
# 0.1a 201602121000 Initial Release
# zypper install dosfstools
#VARS
VER=0.1a
DAEMONNAME=`basename $0`
PID=($)
LOGDIR=/var/log/
LOGFILE=$DAEMONNAME.log
DATA=`date +"%h %d %H:%M:%S"`
#
FITXER=freedos-maker.img
FITXER_FLOPPY=freedos-floppy.img
SECTOR=512
FLOPPY_TAMANY=2880
FITXER_TAMANY=128M
LOOPDEVICE=/dev/loop1
LOOPDEVICE_ISO=/dev/loop2
LOOPDEVICE_FLOPPY=/dev/loop3
SYSLINUX_MBR=/usr/share/syslinux/mbr.bin
SYSLINUX_MODULS=/usr/share/syslinux/
MOUNTPOINT=/media/usb
MOUNTPOINT_ISO=/media/iso
MOUNTPOINT_FLOPPY=/media/floppy
#
VMRAM=256
VMVNCDISPLAY=200
#FUNCIONS
function logprint {
DATA=`date +"%h %d %H:%M:%S"`
echo "$DATA $HOSTNAME $0[$PID] : $1" >> $LOGDIR$LOGFILE
}
function creacio-imatge {
logprint "DD: Crearem el fitxer $FITXER de tamany $FITXER_TAMANY"
dd if=/dev/zero of=${FITXER} bs=${FITXER_TAMANY} count=0 seek=1 >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "DD CHECK: S'ha creat correctament el fitxer $FITXER de tamany $FITXER_TAMANY"
else
logprint "DD CHECK: Problema a la creació del fitxer $FITXER de tamany $FITXER_TAMANY. Abortem..."
exit 1
fi
logprint "SFDISK: Crearem les particions del disk"
echo 0,,C,* | sfdisk $FITXER >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "SFDISK CHECK: S'ha creat correctament les particions en el fitxer $FITXER"
else
logprint "SFDISK CHECK: Problema en la creació de particions en el fitxer $FITXER. Abortem..."
exit 1
fi
losetup -P $LOOPDEVICE $FITXER >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
partprobe $LOOPDEVICE
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Configuració del losetup del $FITXER OK"
else
logprint "LOOP CHECK: Problema en la configuració del losetup del $FITXER"
exit 1
fi
logprint "MKFS: Crearem un sistema de fitxers FAT a ${LOOPDEVICE}p1"
mkfs.msdos -F 32 -n FREEDOS ${LOOPDEVICE}p1 >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "MKFS CHECK: Format OK en la partició 1 ${LOOPDEVICE}p1 del $FITXER"
else
logprint "MKFS CHECK: Problema en la formatació de la partició 1 ${LOOPDEVICE}p1 del $FITXER. Abortem..."
exit 1
fi
logprint "Instal·lant MBR ..."
dd if=$SYSLINUX_MBR of=${LOOPDEVICE} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
logprint "Instal·lant SYSLINUX ..."
syslinux -m -a -i ${LOOPDEVICE}p1 >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
#mount ${loopdevice}p1 $mountpoint >> $logdir$logfile 2>> $logdir$logfile
#umount ${loopdevice}p1 >> $logdir$logfile 2>> $logdir$logfile
losetup -d ${LOOPDEVICE} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
sync
}
function floppy {
logprint "DD: Crearem el fitxer $FITXER"
dd if=/dev/zero of=${FITXER_FLOPPY} bs=${SECTOR} count=${FLOPPY_TAMANY} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "DD CHECK: S'ha creat correctament el fitxer $FITXER_FLOPPY de tamany $FITXER_TAMANY"
else
logprint "DD CHECK: Problema a la creació del fitxer $FITXER_FLOPPY de tamany $FITXER_TAMANY. Abortem..."
exit 1
fi
losetup -P $LOOPDEVICE_FLOPPY $FITXER_FLOPPY >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
partprobe $LOOPDEVICE_FLOPPY
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Configuració del losetup del $FITXER_FLOPPY OK"
else
logprint "LOOP CHECK: Problema en la configuració del losetup del $FITXER_FLOPPY"
exit 1
fi
logprint "MKFS: Crearem un sistema de fitxers FAT a ${LOOPDEVICE_FLOPPY}p1"
mkfs.msdos -n FREEDOS ${LOOPDEVICE_FLOPPY} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "MKFS CHECK: Format OK en la partició 1 ${LOOPDEVICE_FLOPPY}p1 del $FITXER"
else
logprint "MKFS CHECK: Problema en la formatació de la partició 1 ${LOOPDEVICE_FLOPPY}p1 del $FITXER. Abortem..."
exit 1
fi
logprint "Instal·llant MBR ..."
syslinux -m -a -i ${LOOPDEVICE_FLOPPY} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
losetup -d ${LOOPDEVICE_FLOPPY} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
sync
}
function mount-image {
logprint "Muntant imatge $FITXER al ${LOOPDEVICE}..."
losetup -P $LOOPDEVICE $FITXER >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
partprobe $LOOPDEVICE
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Configuració del losetup del $FITXER OK"
else
logprint "LOOP CHECK: Problema en la configuració del losetup del $FITXER"
exit 1
fi
logprint "MOUNT: Muntant partició"
mount ${LOOPDEVICE}p1 $MOUNTPOINT
if [ $? -eq 0 ]; then
logprint "MOUNT CHECK: Muntant ${LOOPDEVICE}p1 a $MOUNTPOINT OK"
else
logprint "MOUNT CHECK: Problema muntant ${LOOPDEVICE}p1 a $MOUNTPOINT. Abortem ..."
exit 1
fi
}
function umount-image {
logprint "Dsmuntant imatge $FITXER al ${LOOPDEVICE}..."
umount ${LOOPDEVICE}p1
losetup -d ${LOOPDEVICE} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Desconfiguració del losetup del $FITXER OK"
else
logprint "LOOP CHECK: Problema en la desconfiguració del losetup del $FITXER"
exit 1
fi
}
function mount-image-floppy {
mkdir -p $MOUNTPOINT_FLOPPY >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
logprint "Muntant imatge $FITXER_FLOPPY al ${LOOPDEVICE_FLOPPY}..."
losetup -P $LOOPDEVICE_FLOPPY $FITXER_FLOPPY >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
partprobe $LOOPDEVICE_FLOPPY
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Configuració del losetup del $FITXER_FLOPPY OK"
else
logprint "LOOP CHECK: Problema en la configuració del losetup del $FITXER_FLOPPY"
exit 1
fi
logprint "MOUNT: Muntant partició"
mount ${LOOPDEVICE_FLOPPY} $MOUNTPOINT_FLOPPY
if [ $? -eq 0 ]; then
logprint "MOUNT CHECK: Muntant ${LOOPDEVICE_FLOPPY}p1 a $MOUNTPOINT_FLOPPY OK"
else
logprint "MOUNT CHECK: Problema muntant ${LOOPDEVICE_FLOPPY}p1 a $MOUNTPOINT_FLOPPY. Abortem ..."
exit 1
fi
}
function umount-image-floppy {
logprint "Dsmuntant imatge $FITXER_FLOPPY al ${LOOPDEVICE_FLOPPY}..."
umount ${LOOPDEVICE_FLOPPY}
losetup -d ${LOOPDEVICE_FLOPPY} >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "LOOP CHECK: Desconfiguració del losetup del $FITXER_FLOPPY OK"
else
logprint "LOOP CHECK: Problema en la desconfiguració del losetup del $FITXER_FLOPPY"
exit 1
fi
}
function test-vm {
logprint "Arrancant VM per provar la iamtge"
#qemu-system-x86_64 -enable-kvm -m $VMRAM -vnc 0.0.0.0:${VMVNCDISPLAY} -k en-us -usb -usbdevice disk:$FITXER -cdrom systemrescuecd.iso -boot menu=on -daemonize >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
qemu-system-x86_64 -enable-kvm -m $VMRAM -vnc 0.0.0.0:${VMVNCDISPLAY} -k en-us -usb -usbdevice disk:$FITXER -boot menu=on -daemonize >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
#qemu-system-x86_64 -enable-kvm -m $VMRAM -vnc 0.0.0.0:${VMVNCDISPLAY} -k en-us -hda $FITXER -boot menu=on -daemonize >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "QEMU CHECK: VNC PORT: $((VMVNCDISPLAY+5900)) OK"
echo "QEMU CHECK: VNC PORT: $((VMVNCDISPLAY+5900)) OK"
else
logprint "QEMU CHECK: Problema en arrancar QEMU"
exit 1
fi
}
function test-vm-floppy {
logprint "Arrancant VM per provar la iamtge de disquet"
qemu-system-x86_64 -enable-kvm -m $VMRAM -vnc 0.0.0.0:${VMVNCDISPLAY} -k en-us -fda $FITXER_FLOPPY -boot menu=on -daemonize >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
if [ $? -eq 0 ]; then
logprint "QEMU CHECK: VNC PORT: $((VMVNCDISPLAY+5900)) OK"
echo "QEMU CHECK: VNC PORT: $((VMVNCDISPLAY+5900)) OK"
else
logprint "QEMU CHECK: Problema en arrancar QEMU"
exit 1
fi
}
function info
{
echo ""
echo "FREEDOS-MAKER - v$VER"
echo ""
ls -lhas $FITXER
ls -lhas $FITXER_FLOPPY
}
function help
{
echo ""
echo "FREEDOS-MAKER - v$VER"
echo "Ús: "`basename $0`" [OPCIÓ]"
echo ""
echo " -h Ajuda"
echo " -i Info"
echo " -c Creació Imatge"
echo " -s Instal·la FreeDOS a la imatge"
echo " -m Monta Imatge"
echo " -u Desmonta Imatge"
echo " -q Prova la imatge amb una màquina virtual amb QEMU"
echo " -f Crea disquet"
echo " -e Instal·la FreeDOS al disquet"
echo " -k Monta Disquet"
echo " -j Desmonta Disquet"
echo " -w Prova el floppy amb una màquina virtual amb QEMU"
echo ""
echo " Creació ràpida de la imatge"
echo " $0 -c ; $0 -s; $0 -q"
echo ""
echo " Creació ràpida del disquet"
echo " $0 -f ; $0 -e; $0 -w"
echo ""
}
function isos
{
$0 -m
# FREEDOS
ISO=freedos.iso
URL="http://www.freedos.org/download/download/fd11src.iso"
if [ ! -f $ISO ]; then
curl -o $ISO $URL
fi
mkdir -p $MOUNTPOINT_ISO >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
mount freedos.iso $MOUNTPOINT_ISO >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
mkdir $MOUNTPOINT/fdos >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
find $MOUNTPOINT_ISO/freedos/packages |grep .zip | xargs -l unzip -d $MOUNTPOINT/fdos >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
cp $MOUNTPOINT/fdos/autoexec.txt $MOUNTPOINT/autoexec.bat >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
cp $MOUNTPOINT/fdos/config.txt $MOUNTPOINT/config.sys >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
umount $MOUNTPOINT_ISO >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
cat <$MOUNTPOINT/syslinux.cfg
default fdos
prompt 1
timeout 3
label fdos
menu label fdos - Load FreeDOS 1.1 from USB flash drive
com32 /fdos/bin/chain.c32
append freedos=/fdos/bin/kernel.sys
EOF
$0 -u
}
function isos-floppy
{
$0 -k
# FREEDOS
ISO=freedos.iso
URL="http://www.freedos.org/download/download/fd11src.iso"
if [ ! -f $ISO ]; then
curl -o $ISO $URL
fi
mkdir -p $MOUNTPOINT_ISO >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
mount freedos.iso $MOUNTPOINT_ISO >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
mkdir $MOUNTPOINT_FLOPPY/fdos >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
unzip $MOUNTPOINT_ISO/freedos/packages/base/commandx.zip bin/command.com -d $MOUNTPOINT_FLOPPY/fdos >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
unzip $MOUNTPOINT_ISO/freedos/packages/base/kernelx.zip bin/kernel.sys -d $MOUNTPOINT_FLOPPY/fdos >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
cp /usr/share/syslinux/chain.c32 $MOUNTPOINT_FLOPPY/fdos/bin >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
umount $MOUNTPOINT_ISO >> $LOGDIR$LOGFILE 2>> $LOGDIR$LOGFILE
cat <$MOUNTPOINT_FLOPPY/config.sys
SHELLHIGH=A:\FDOS\BIN\COMMAND.COM A:\FDOS\bin /E:1024 /P=A:\AUTOEXEC.BAT
SET DOSDIR=A:\FDOS
EOF
cat <$MOUNTPOINT_FLOPPY/autoexec.bat
@echo off
set lang=EN
set PATH=%dosdir%\bin
set NLSPATH=%dosdir%\NLS
set HELPPATH=%dosdir%\HELP
set temp=%dosdir%\temp
set tmp=%dosdir%\temp
SET BLASTER=A220 I5 D1 H5 P330
set DIRCMD=/P /OGN
SET autofile=A:\autoexec.bat
SET CFGFILE=A:\fdconfig.sys
alias reboot=fdapm warmboot
alias halt=fdapm poweroff
echo.
echo Welcome to FreeDOS 1.1
echo.
EOF
cat <$MOUNTPOINT_FLOPPY/syslinux.cfg
default fdos
prompt 1
timeout 3
label fdos
menu label fdos - Load FreeDOS 1.1 from USB flash drive
com32 /fdos/bin/chain.c32
append freedos=/fdos/bin/kernel.sys
EOF
$0 -j
}
###########################################################################
#MAIN
###########################################################################a
touch -a $LOGDIR$LOGFILE 2>/dev/null
if [ "$?" != 0 ]; then
echo "ERROR: Problems with Log $LOGDIR$LOGFILE. Exiting..."
exit 2
fi
if [ ! $* ]; then
help
exit
fi
while getopts "hcqimusfwjke" OPTION; do
case "$OPTION" in
h) help; exit 10 ;;
c) creacio-imatge ;;
i) info;;
m) mount-image;;
u) umount-image;;
k) mount-image-floppy;;
j) umount-image-floppy;;
q) test-vm ;;
s) isos ;;
e) isos-floppy ;;
f) floppy ;;
w) test-vm-floppy ;;
\?) help; exit 10 ;;
esac
done