Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Sep 2009 17:49:45 +0200
From:      =?ISO-8859-1?Q?Samuel_Mart=EDn_Moro?= <faust64@gmail.com>
To:        freebsd-questions@freebsd.org, freebsd-hackers@freebsd.org
Subject:   Re: Making bootable USB keys
Message-ID:  <ce5f79aa0909030849u6015d7d6rc0de33da258ab61d@mail.gmail.com>
In-Reply-To: <ce5f79aa0909030835k1a69c33ay3f7b4bb23e4c857c@mail.gmail.com>
References:  <ce5f79aa0909030835k1a69c33ay3f7b4bb23e4c857c@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
hello.
again.

btw: my .img file is 0-filled in its 512 first bytes...

i downloaded the 8-0-BETA3-???.img, it starts with EB3C.
and I think each .img file start like that, right ?



thanks

Samuel Mart=EDn Moro
CamTrace
{EPITECH.} tek4



On Thu, Sep 3, 2009 at 5:35 PM, Samuel Mart=EDn Moro <faust64@gmail.com>wro=
te:

>
> Hello
>
> I'm having some troubles, trying to create bootable USB keys.
> I found (freebsd-hackers ML archives) a script, supposed to create the
> bootable image from my iso file.
> But, it still don't boot... (I may do it wrong)
>
> In details:
> -We distribute a FreeBSD (4.7, 5.4, 6.2 and 7.2) "custom" server.
> -We burn our install CD (and, in a few, our USB sticks) on a Ferdora 9
> (sorry...)
> -USB sticks must contain a FAT32 partition (we'ld like to provide doc for
> windows users)
>
> Well, my english isn't so great... so I'll post my code (more
> understandable)
>
> --maker.sh--
> #!/bin/sh
> ISO_DIR=3D/r00t
> ISO_PFIX=3Dr00t
> VERSION=3D5.9.3.0
> ISO_FILE=3D$ISO_DIR/$ISO_PFIX-$VERSION.img
> DEVICE=3D
> TMPDOC=3D/mnt/tmpdoc
> DOCDIR=3D/root/samuel/docdir
> ERR=3D
> SFX=3D
> MBR=3D/root/samuel/mbr
> BT1=3D/root/samuel/boot1
> BT2=3D/root/samuel/boot2
>
> if [ -e "$1" ]; then
>     DEVICE=3D$1
> elif [ "$1" -a -e "/dev/$1" ]; then
>     DEVICE=3D/dev/$1
> elif [ "$1" ]; then
>     echo "$0: incorrect device specified" >&2
>     exit
> else
>     echo "$0: must specify device" >&2
>     exit
> fi
> for i in `mount | cut -d ' ' -f 1`
> do
>     if [ "`echo $i | grep $DEVICE`" ]; then
>         echo "$0: $i already mounted" >&2
>         echo "        umount it manually or choose an other drive" >&2
>         exit
>     fi
> done
>
> if [ -e "$TMPDOC" -a -d "$TMPDOC" ]; then
>     echo "$0: removing $TMPDOC directory" >&2
>     rm -rf $TMPDOC
> elif [ -e "$TMPDOC" ]; then
>     mv $TMPDOC $TMPDOC.old
>     echo "$0: moved $TMPDOC to $TMPDOC.old" >&2
> fi
> mkdir $TMPDOC
>
> if [ "$2" ]; then
>     echo $2 | grep "\.img$" >/dev/null || SFX=3D".img"
> fi
>
> if [ -e "$2$SFX" ]; then
>     ISO_FILE=3D$2$SFX
> elif [ "$2" -a -e "$ISO_DIR/$2$SFX" ]; then
>     ISO_FILE=3D$ISO_DIR/$2
> elif [ "$2" -a -e "$ISO_DIR/$ISO_PFIX-$2$SFX" ]; then
>     ISO_FILE=3D"$ISO_DIR/$ISO_PFX-$2$SFX"
> else
>     echo "$0: will use default file \`$ISO_FILE'" >&2
>     echo "         as system image source" >&2
> fi
> if [ -e "$ISO_FILE" ]; then
>     MSize=3D`ls -l $ISO_FILE | awk '{print $5}'`
> else
>     echo "$0: $ISO_FILE doesn't exist!" >&2
>     rm -rf $TMPDOC
>     exit
> fi
> if [ -z "$MSize" -o "$MSize" -lt 1 ]; then
>     echo "$0: bad image size (size=3D$MSize)" >&2
>     rm -rf $TMPDOC
>     exit
> fi
>
> while :
> do
>     echo " [ Working on $DEVICE ]"
>
>     echo -n "    determining device geometry  "
>     infos=3D`fdisk -l $DEVICE 2>/dev/null | grep "[0-9]* heads"`
>     ident=3D`fdisk -l $DEVICE 2>/dev/null | awk '/Disk identifier/{print
> $3}'`
>     csz=3D`fdisk -l $DEVICE 2>/dev/null | awk '/Units =3D cylinders /{pri=
nt
> $7}'`
>     eval `echo $infos | awk '{print "hpc=3D" $1 " sec=3D" $3 " cyl=3D" $5=
}'`
>     if [ -z "$hpc" -o -z "$sec" -o -z "$cyl" -o -z "$csz" ]; then
>         echo " [ FAIL ]"
>         echo "$0: can't get infos for device $DEVICE" >&2
>         rm -rf $TMPDOC
>         exit
>     fi
>     echo " [ OK ]"
>
>     echo -n "    initializing partition table "
> #    dd if=3D/dev/zero of=3D$DEVICE bs=3D$csz count=3D1 >/dev/null 2>&1
>     dd if=3D$BT1 of=3D$DEVICE >/dev/null 2>&1
>     round=3D128
>     tocyl=3D`expr $hpc '*' $sec '*' $csz`
>     ret=3D`expr $MSize % $tocyl`
>     MSize=3D`expr $MSize / $tocyl`
>     test "$ret" -eq "0" || MSize=3D`expr $MSize + 1`
>     s2len=3D$MSize
>     s2off=3D`expr $cyl - $s2len - 1`
>     s1len=3D`expr $s2off - 1`
>     s1off=3D1
>     sfdisk -DLqf $DEVICE >/dev/null 2>&1 <<EOF
> $s1off $s1len b
> $s2off $s2len a5 *
> EOF
>     echo " [ OK ]"
>
>     echo -n "    formatting FAT32 partition   "
>     dd if=3D/dev/zero of=3D${DEVICE}1 bs=3D$csz count=3D1 >/dev/null 2>&1
>     mkdosfs -i 42424242 -n "Docs" -F 32 ${DEVICE}1 >/dev/null 2>&1
>     mount -t vfat ${DEVICE}1 $TMPDOC || ERR=3D1
>     if [ "$ERR" ]; then
>         echo " [ FAIL ]"
>         echo "$0: unable to mount ${DEVICE}1 on $TMPDOC"
>         rm -rf $TMPDOC
>         exit
>     fi
>     echo " [ OK ]"
>
>     echo -n "    copying documentation files  "
>     cp -rp $DOCDIR/* $TMPDOC/ >/dev/null 2>&1 || ERR=3D2
>     if [ "$ERR" ]; then
>         echo " [ FAIL ]"
>         echo "$0: unable to copy doc files"
>         ERR=3D
>     fi
>     umount ${DEVICE}1
>     echo " [ OK ]"
>
>     echo -n "    copying system               "
>     dd if=3D$ISO_FILE of=3D${DEVICE}2 status=3Dnoxfer >/dev/null 2>&1
>     echo " [ OK ]"
>
>     mbrsig $DEVICE 2>&1 | awk '{print "    marking device with serial " $=
3
> }'
>     echo " [ Device ready! ]"
>     echo ""
>     echo -n "<?> Create new USB key ?  [Y/N] : " && read i
>     test "$i" =3D "Y" -o "$i" =3D "y" -o "$i" =3D "O" -o "$i" =3D "o" || =
i=3D
>     test -z "$i" && echo " [ leaving ]" && break
>     echo " Please, remove current USB key, insert new one and press enter=
"
>     read i
> done
> rmdir $TMPDOC
> --EOF--
>
> So, this is a "USB stick generator" I'm working on.
> It seems to work. (I've not tested everything, but the basis is OK)
> The stick is correctly parted.
> The documentation is copied.
> My only problem is that it still don't wan't to boot...
>
> At the beginning, I was trying to paste my ISO file directly in ${DEVICE}=
2
> Then, I found the following shell script, which is supposed to make my
> bootable image from my ISO file
> I changed 2/3 things, but some of you may recognize it anyway:
>
> --ISOtoIMG.sh--
> #!/bin/sh
> MAKEFS=3Dmakefs
> MKLABEL=3Dbsdlabel
> BSDTAR=3Dtar
> DD=3D"dd status=3Dnoxfer"
>
> make_freebsd_image()
> {
>   local tree=3D$1
>   local imagefile=3D$2
>   local boot1=3D${tree}/boot/boot1
>   local boot2=3D${tree}/boot/boot2
>
>   echo "convert tree $tree image $imagefile"
>   ${MAKEFS} -t ffs -o bsize=3D4096 -o fsize=3D512 -f 50 ${imagefile} ${tr=
ee}
> >/dev/null 2>&1
>   ${MKLABEL} -w -f ${imagefile} auto >/dev/null 2>&1
>   ${MKLABEL} -f ${imagefile} 2>/dev/null | sed -e '/ c:/{p;s/c:/a:/;}' | =
\
>   ${MKLABEL} -R -f ${imagefile} /dev/stdin >/dev/null 2>&1
>   ${DD} if=3D${boot1} of=3D${imagefile} conv=3Dnotrunc >/dev/null 2>&1
>   ${DD} if=3D${boot2} iseek=3D1 ibs=3D276 2>/dev/null | \
>   ${DD} of=3D${imagefile} oseek=3D1 obs=3D788 conv=3Dnotrunc >/dev/null 2=
>&1
> }
>
> extract_image()
> {
>   [ -f $1 ] || return
>   local tmp=3D"${tree}.tree"
>   [ -e ${tmp} ] && rm -rf ${tmp}
>   mkdir -p $tmp
>   echo "extracting $tree in $tmp"
>   (cd $tmp && ${BSDTAR} xf $tree)
>   tree=3D$tmp
> }
>
> if [ -z "$1" ]; then
>   echo "$0: usage" >&2
>   echo "        $0 {ISO_input} | {system_root IMG_output}" >&2
>   exit
> fi
> tree=3D`realpath $1`
> [ "$2" ] && image=3D`realpath $2` || image=3D`echo $tree | sed "s/.iso/.i=
mg/"`
> extract_image $tree
> make_freebsd_image $tree $image
> [ -d "$tmp" ] && (chmod -R +w $tmp && rm -rf $tmp)
> --EOF--
>
> This seems to work, too...
> I'm just surprised:
> root@granit:~/samuel# l -h /r00t/r00t-5.9.3.0*
> -rw-r--r-- 1 root root 566M 2009-09-03 15:29 /r00t/r00t-5.9.3.0.img
> -rw-r--r-- 1 root root 526M 2009-08-08 06:58 /r00t/r00t-5.9.3.0.iso
> new file is 40M heavier than our iso image...
>
> Also, in the first script, I tried to do the first dd (initializing
> ${DEVICE}) with:
> - if=3D$MBR
> - if=3D$BT1
> - if=3D$BT2
> - if=3D/dev/zero
> none of that worked...
>
> So.
> Does someone understand what am I doing wrong?!
>
>
> Thanks for you help!
>
> Samuel Mart=EDn Moro
> CamTrace
> {EPITECH.} tek4
>
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ce5f79aa0909030849u6015d7d6rc0de33da258ab61d>