Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- EXPECTED_ARGS=2
- E_BADARGS=1
- if [ $# -ne $EXPECTED_ARGS ]
- then
- echo "usage:\n \t $0 file device"
- echo " \t $0 file size (k)"
- exit $E_BADARGS
- fi
- NAME=$1
- if [ -e "$NAME" ]; then
- echo file $NAME already exists !
- echo please remove it before.
- exit 1
- fi
- shift
- if [ $1 -gt 0 2>/dev/null ]; then
- # number
- SIZE=$1
- else
- # not a number
- if [ -b $1 ]; then
- SIZE=$(fdisk -l -u $1 | awk '/^Disk/{printf "%.0f", $5/1024 }')
- else
- echo "usage:\n \t $0 file device"
- echo " \t $0 file size (k)"
- exit 1
- fi
- fi
- echo creating $NAME image file of "$SIZE"k
- dd if=/dev/zero of=$NAME bs=1k count=$SIZE &> /dev/null &
- DD=$!
- while true; do
- ps --pid $DD >& /dev/null;
- if [[ $? -eq 0 ]]; then
- ls -s --block-size=1K $NAME | awk -v n=$NAME -v s=$SIZE '{printf "\r%s %10dk %3.0f %% done...", n, $1, $1 / s *100 }'
- else
- echo -e "\r$NAME Finsihed! "
- break
- fi
- sleep 1
- done
- LOOPDEV=$(losetup -f)
- echo Attaching $NAME on $LOOPDEV
- losetup $LOOPDEV $NAME
- echo creating partition table and partition
- parted -s $LOOPDEV mklabel msdos
- parted -s $LOOPDEV mkpart primary fat32 50k 100%
- UNIT=$(fdisk -u -l /dev/sdb | awk '/Units/{ print $9 }')
- SECTOR=$(fdisk -u -l $LOOPDEV | awk -v d=${LOOPDEV}p1 '$0 ~ d { print $2;}')
- OFFSET=$(expr $UNIT '*' $SECTOR)
- echo Offset of partition is $OFFSET !
- LOOPPART=$(losetup -f)
- echo Attaching partition on $LOOPPART at offset $OFFSET...
- losetup -o $OFFSET $LOOPPART $NAME
- echo Formating partition on $LOOPPART
- mkfs.vfat -F 32 -n IMAGE_GRUB $LOOPPART
- sleep 1
- losetup -d $LOOPPART
- parted -s $LOOPDEV set 1 boot on
- parted -s $LOOPDEV set 1 lba off
- echo Mounting on /mnt and installing grub
- mount -o offset=$OFFSET $LOOPDEV /mnt/
- grub-install --disk-module="part_msdos biosdisk" --no-floppy --root-directory=/mnt/ $LOOPDEV
- umount /mnt
- sleep 1
- losetup -d $LOOPDEV
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement