FreeBSD CD-ISO in USB Stick Image umwandeln
===========================================
.. |date| date::
.. sidebar:: Info
.. image:: ../images/logo-freebsd.png
Der folgende Artikel enthält hauptsächlich ein Skript, das FreeBSD-CD-ISO
Images in Images für USB-Sticks umwandelt. Damit ist die Erstellung eines
bootbaren FreeBSD-Installations-Sticks sehr komfortabel möglich. Da FreeBSD
mittlerweile USB-Stick Images anbietet die direkt auf USB-Sticks kopiert werden
können (mittels ``dd``) ist es nicht mehr notwendig ein USB-Stick-Image aus der
CD zu erzeugen.
Voraussetzungen
---------------
Die Daten auf dem USB Stick können nach dem Dump des
Images auf den USB Stick nicht mehr zugegriffen werden!
- USB-Stick
- FreeBSD-System
- Gewünschtes CD-ISO Image
Vorgehen
--------
Das Skript fbsd2img.sh wird folgendermaßen aufgerufen:
::
fbsd2img.sh SOURCE DESTINATION
Dabei steht SOURCE für das heruntergeladene CD-ISO, beispielsweise
`7.2-RELEASE-i386-bootonly.iso `__.
DEST steht für das zu erstellende USB-Image. Der entsprechende Befehl
könnte dementsprechend so aussehen:
::
fbsd2img.sh 7.2-RELEASE-i386-bootonly.iso 7.2-RELEASE-i386-bootonly.usb
Das so erstellte USB-Image kann per dd auf den USB-Stick übertragen
werden: Auf jeden Fall sicherstellen, dass das richtige
Device ausgewählt wird, da sonst Daten und die komplette
Partitionstabelle zerstört werden können!
::
dd if=7.2-RELEASE-i386-bootonly.usb of=/dev/REPLACE_WITH_TARGET_USB_DEVICE
Nach diesen beiden Befehlen ist der USB-Stick ein voll einsatzfähiges
FreeBSD-Installationsmedium :) Getestet mit:
- 7.0-Release Bootonly
- 7.2-Release Bootonly
- 8.0-Beta2 Bootonly
Anhang
------
Das folgende Skript ist das oben referenzierte fbsd2img.sh. Hinweise:
- Vor dem Ausführen vorsichtshalber ein dos2unix durchführen
- Das Skript muss ausführbar gemacht werden (chmod 0755 fbsd2img.sh)
oder einer Shell als Parameter übergeben werden (sh fbsd2img.sh)
- Das Skript speichert temporäre Dateien in /tmp. Soll also ein großes
FreeBSD-Image in ein USB-Image umgewandelt werden, muss dort genug
Platz zur Verfügung stehen. Andernfalls kann das Skript problemlos
auf die Verwendung eines alternativen tmp-Verzeichnisses angepasst
werden (Im Code markiert).
::
#!/bin/sh
#Dario Freni
#FreeSBIE developer (http://www.freesbie.org)
#GPG Public key at http://www.saturnero.net/saturnero.asc
#
# fbsd-install-iso2img.sh iso-path img-path
# You can set some variables here. Edit them to fit your needs.
# Set serial variable to 0 if you don't want serial console at all,
# 1 if you want comconsole and 2 if you want comconsole and vidconsole
serial=0
set -u
if [ $# -lt 2 ]; then
echo "Usage: $0 source-iso-path output-img-path"
exit 1
fi
isoimage=$1; shift
imgoutfile=$1; shift
export tmpdir=$(mktemp -d -t fbsdmount)
# ADJUST TMPDIR HERE!
# Temp file and directory to be used later
export tmpfile=$(mktemp -t bsdmount)
export isodev=$(mdconfig -a -t vnode -f ${isoimage})
echo "#### Building bootable UFS image ####"
ISOSIZE=$(du -k ${isoimage} | awk '{print $1}')
SECTS=$((($ISOSIZE + ($ISOSIZE/5))*2))
# Root partition size
echo "Initializing image..."
dd if=/dev/zero of=${imgoutfile} count=${SECTS}
ls -l ${imgoutfile}
export imgdev=$(mdconfig -a -t vnode -f ${imgoutfile})
bsdlabel -w -B ${imgdev}
newfs -O1 /dev/${imgdev}a
mkdir -p ${tmpdir}/iso ${tmpdir}/img
mount -t cd9660 /dev/${isodev} ${tmpdir}/iso
mount /dev/${imgdev}a ${tmpdir}/img
echo "Copying files to the image..."
( cd ${tmpdir}/iso && find . -print -depth | cpio -dump ${tmpdir}/img )
if [ ${serial} -eq 2 ];
then
echo "-D" > ${tmpdir}/img/boot.config
echo 'console="comconsole, vidconsole"' >> ${tmpdir}/img/boot/loader.conf
elif [ ${serial} -eq 1 ];
then
echo "-h" > ${tmpdir}/img/boot.config
echo 'console="comconsole"' >> ${tmpdir}/img/boot/loader.conf
fi
cleanup() {
umount ${tmpdir}/iso
mdconfig -d -u ${isodev}
umount ${tmpdir}/img
mdconfig -d -u ${imgdev}
rm -rf ${tmpdir} ${tmpfile}
}
cleanup
ls -lh ${imgoutfile}
Verweise
--------
- Das Skript geht ähnlich wie diese Anleitung vor:
http://miwi.bsdcrew.de/2009/06/freebsd-80-install-with-a-usb-stick/
* :ref:`genindex`
Zuletzt geändert: |date|