Revision: 7953
Updated Code
at May 9, 2009 11:10 by sebastian_bergmann
Updated Code
#!/bin/bash
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# $Id$
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
err() {
echo "$*" 1>&2
exit 1
}
usage() {
err "Usage: $0 [--reset-mbr ] <isopath> <usb device>"
}
if [ $(id -u) != 0 ]; then
err "You need to be root to run this script"
fi
if [ ! -x /usr/bin/syslinux ]; then
err "syslinux needs to be installed for this script to run"
fi
while [ $# -gt 2 ]; do
case $1 in
--reset-mbr)
resetmbr="yes"
;;
*)
usage
;;
esac
shift
done
cleanup() {
[ -d "${ISOMNT}" ] && umount "${ISOMNT}" && rmdir "${ISOMNT}"
[ -d "${USBMNT}" ] && umount "${USBMNT}" && rmdir "${USBMNT}"
}
checkfs() {
device=$1
usbfs=$(/lib/udev/vol_id -t $device)
case "${usbfs}" in
vfat|msdos|ext[23])
;;
*)
err "USB filesystem must be vfat/ext2/ext3"
;;
esac
}
resetmbr() {
device=$1
sysdev=$(udevadm info -q path -n ${device})
if [ -e "/sys/${sysdev}/device" ]; then
dev=$(basename /sys${sysdev})
else
dev=$(basename $(readlink -f /sys${sysdev}/../))
fi
if [ ! -e /sys/block/${dev} -o ! -e /dev/${dev} ]; then
err "Error finding ${dev} block device. Bailing out"
fi
dev=/dev/$dev
if [ -f /usr/lib/syslinux/mbr.bin ]; then
cat /usr/lib/syslinux/mbr.bin > $dev
elif [ -f /usr/share/syslinux/mbr.bin ]; then
cat /usr/share/syslinux/mbr.bin > $dev
else
err "Unable to find syslinux mbr"
fi
}
copyfiles() {
echo "Copying files..."
for item in ${COPYLIST}; do
cp -af ${ISOMNT}/${item} ${USBMNT}
done
if [ ! -d ${USBMNT}/syslinux ]; then mkdir ${USBMNT}/syslinux; fi
cp ${ISOMNT}/isolinux/* ${USBMNT}/syslinux
}
sanitychecks() {
if [ -z "${ISOIMAGE}" -o ! -f "${ISOIMAGE}" ]; then
usage
fi
if [ -z "${USBDEV}" -o ! -b "${USBDEV}" ]; then
usage
fi
}
install_syslinux() {
device=$1
echo "Updating boot config"
# Figure out the filesystem and setup (sys|ext)linux accordingly
usbfs=$(/lib/udev/vol_id -t $device)
echo "Installing bootloader on ${device}"
case $usbfs in
msdos|vfat)
mv ${USBMNT}/syslinux/isolinux.cfg ${USBMNT}/syslinux/syslinux.cfg
syslinux -d syslinux ${device}
;;
ext[23])
mv ${USBMNT}/syslinux/isolinux.cfg ${USBMNT}/syslinux/extlinux.conf
extlinux -i ${USBMNT}/syslinux
;;
esac
# TODO: Mark the partition bootable.
# parted $device toggle N boot
}
ISOIMAGE=$1
USBDEV=$2
ISOMNT=$(mktemp -d /tmp/iso.XXXXXXXXXX)
USBMNT=$(mktemp -d /tmp/usb.XXXXXXXXXX)
# Files needed from the iso
COPYLIST="casper dists pool preseed .disk README.diskdefines md5sum.txt install"
sanitychecks
checkfs ${USBDEV}
if [ "$resetmbr" == "yes" ]; then resetmbr ${USBDEV}; fi
mount -o loop $ISOIMAGE $ISOMNT
mount $USBDEV $USBMNT
trap cleanup EXIT
copyfiles
install_syslinux ${USBDEV}
echo "Done!"
exit 0
Revision: 7952
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 24, 2008 11:07 by sebastian_bergmann
Initial Code
#!/bin/bash
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# $Id$
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
err() {
echo "$*" 1>&2
exit 1
}
usage() {
err "Usage: $0 [--reset-mbr ] <isopath> <usb device>"
}
if [ $(id -u) != 0 ]; then
err "You need to be root to run this script"
fi
if [ ! -x /usr/bin/syslinux ]; then
err "syslinux needs to be installed for this script to run"
fi
while [ $# -gt 2 ]; do
case $1 in
--reset-mbr)
resetmbr="yes"
;;
*)
usage
;;
esac
shift
done
cleanup() {
[ -d "${ISOMNT}" ] && umount "${ISOMNT}" && rmdir "${ISOMNT}"
[ -d "${USBMNT}" ] && umount "${USBMNT}" && rmdir "${USBMNT}"
}
checkfs() {
device=$1
usbfs=$(/lib/udev/vol_id -t $device)
case "${usbfs}" in
vfat|msdos|ext[23])
;;
*)
err "USB filesystem must be vfat/ext2/ext3"
;;
esac
}
resetmbr() {
device=$1
sysdev=$(udevinfo -q path -n ${device})
if [ -e "/sys/${sysdev}/device" ]; then
dev=$(basename /sys${sysdev})
else
dev=$(basename $(readlink -f /sys${sysdev}/../))
fi
if [ ! -e /sys/block/${dev} -o ! -e /dev/${dev} ]; then
err "Error finding ${dev} block device. Bailing out"
fi
dev=/dev/$dev
if [ -f /usr/lib/syslinux/mbr.bin ]; then
cat /usr/lib/syslinux/mbr.bin > $dev
elif [ -f /usr/share/syslinux/mbr.bin ]; then
cat /usr/share/syslinux/mbr.bin > $dev
else
err "Unable to find syslinux mbr"
fi
}
copyfiles() {
echo "Copying files..."
for item in ${COPYLIST}; do
cp -af ${ISOMNT}/${item} ${USBMNT}
done
if [ ! -d ${USBMNT}/syslinux ]; then mkdir ${USBMNT}/syslinux; fi
cp ${ISOMNT}/isolinux/* ${USBMNT}/syslinux
}
sanitychecks() {
if [ -z "${ISOIMAGE}" -o ! -f "${ISOIMAGE}" ]; then
usage
fi
if [ -z "${USBDEV}" -o ! -b "${USBDEV}" ]; then
usage
fi
}
install_syslinux() {
device=$1
echo "Updating boot config"
# Figure out the filesystem and setup (sys|ext)linux accordingly
usbfs=$(/lib/udev/vol_id -t $device)
echo "Installing bootloader on ${device}"
case $usbfs in
msdos|vfat)
mv ${USBMNT}/syslinux/isolinux.cfg ${USBMNT}/syslinux/syslinux.cfg
syslinux -d syslinux ${device}
;;
ext[23])
mv ${USBMNT}/syslinux/isolinux.cfg ${USBMNT}/syslinux/extlinux.conf
extlinux -i ${USBMNT}/syslinux
;;
esac
# TODO: Mark the partition bootable.
# parted $device toggle N boot
}
ISOIMAGE=$1
USBDEV=$2
ISOMNT=$(mktemp -d /tmp/iso.XXXXXXXXXX)
USBMNT=$(mktemp -d /tmp/usb.XXXXXXXXXX)
# Files needed from the iso
COPYLIST="casper dists pool preseed .disk README.diskdefines md5sum.txt install"
sanitychecks
checkfs ${USBDEV}
if [ "$resetmbr" == "yes" ]; then resetmbr ${USBDEV}; fi
mount -o loop $ISOIMAGE $ISOMNT
mount $USBDEV $USBMNT
trap cleanup EXIT
copyfiles
install_syslinux ${USBDEV}
echo "Done!"
exit 0
Initial URL
Initial Description
Initial Title
ISO Image to USB Stick
Initial Tags
ubuntu
Initial Language
Bash