|
@@ -1,4 +1,26 @@
|
|
|
#!/usr/bin/env bash
|
|
|
+#-
|
|
|
+# Copyright © 2010-2012
|
|
|
+# Waldemar Brodkorb <wbx@openadk.org>
|
|
|
+#
|
|
|
+# Provided that these terms and disclaimer and all copyright notices
|
|
|
+# are retained or reproduced in an accompanying document, permission
|
|
|
+# is granted to deal in this work without restriction, including un‐
|
|
|
+# limited rights to use, publicly perform, distribute, sell, modify,
|
|
|
+# merge, give away, or sublicence.
|
|
|
+#
|
|
|
+# This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
|
|
|
+# the utmost extent permitted by applicable law, neither express nor
|
|
|
+# implied; without malicious intent or gross negligence. In no event
|
|
|
+# may a licensor, author or contributor be held liable for indirect,
|
|
|
+# direct, other damage, loss, or other issues arising in any way out
|
|
|
+# of dealing in the work, even if advised of the possibility of such
|
|
|
+# damage or existence of a defect, except proven that it results out
|
|
|
+# of said person’s immediate fault when using the work as intended.
|
|
|
+#
|
|
|
+# Alternatively, this work may be distributed under the terms of the
|
|
|
+# General Public License, any version, as published by the Free Soft-
|
|
|
+# ware Foundation.
|
|
|
|
|
|
filesystem=ext2
|
|
|
|
|
@@ -24,35 +46,32 @@ if [ $(id -u) -ne 0 ];then
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
-printf "Checking if mkfs is installed"
|
|
|
-mkfs=$(which mkfs.$filesystem)
|
|
|
-
|
|
|
-if [ ! -z $mkfs -a -x $mkfs ];then
|
|
|
- printf "...okay\n"
|
|
|
-else
|
|
|
- printf "...failed\n"
|
|
|
+tools='qemu-img'
|
|
|
+ostype=$(uname -s)
|
|
|
+
|
|
|
+case $ostype in
|
|
|
+(Darwin)
|
|
|
+ tools="$tools genext2fs"
|
|
|
+ ;;
|
|
|
+(Linux)
|
|
|
+ tools="$tools mke2fs parted"
|
|
|
+ ;;
|
|
|
+(*)
|
|
|
+ printf Sorry, not ported to the OS "'$ostype'" yet.\n
|
|
|
exit 1
|
|
|
-fi
|
|
|
-
|
|
|
-printf "Checking if parted is installed"
|
|
|
-parted=$(which parted)
|
|
|
-
|
|
|
-if [ ! -z $parted -a -x $parted ];then
|
|
|
- printf "...okay\n"
|
|
|
-else
|
|
|
- printf "...failed\n"
|
|
|
- exit 1
|
|
|
-fi
|
|
|
-
|
|
|
-printf "Checking if qemu-img is installed"
|
|
|
-qimg=$(which qemu-img)
|
|
|
-
|
|
|
-if [ ! -z $qimg -a -x $qimg ];then
|
|
|
- printf "...okay\n"
|
|
|
-else
|
|
|
- printf "...failed\n"
|
|
|
- exit 1
|
|
|
-fi
|
|
|
+ ;;
|
|
|
+esac
|
|
|
+
|
|
|
+for tool in $tools; do
|
|
|
+ printf "Checking if $tool is installed..."
|
|
|
+ if which $tool >/dev/null; then
|
|
|
+ printf " okay\n"
|
|
|
+ else
|
|
|
+ printf " failed\n"
|
|
|
+ f=1
|
|
|
+ fi
|
|
|
+done
|
|
|
+(( f )) && exit 1
|
|
|
|
|
|
if [ -z $1 ];then
|
|
|
printf "Please give the name of the image file\n"
|
|
@@ -71,44 +90,53 @@ else
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
-
|
|
|
printf "Generate qemu image (512 MB)\n"
|
|
|
-$qimg create -f raw $1 512M >/dev/null
|
|
|
-
|
|
|
-printf "Creating filesystem $filesystem\n"
|
|
|
+qemu-img create -f raw $1 512M >/dev/null
|
|
|
|
|
|
printf "Create partition and filesystem\n"
|
|
|
-$parted -s $1 mklabel msdos
|
|
|
-$parted -s $1 -- mkpart primary ext2 0 -0
|
|
|
-$parted -s $1 set 1 boot on
|
|
|
+case $ostype in
|
|
|
+(Darwin)
|
|
|
+ offset=16384
|
|
|
+ ;;
|
|
|
+(Linux)
|
|
|
+ parted -s $1 mklabel msdos
|
|
|
+ parted -s $1 -- mkpart primary ext2 0 -0
|
|
|
+ parted -s $1 set 1 boot on
|
|
|
+ offset=$(parted $1 unit b print | tail -2 | head -1 | cut -f 1 --delimit="B" | cut -c 9-)
|
|
|
+ ;;
|
|
|
+(*)
|
|
|
+ printf Sorry, not ported to the OS "'$ostype'" yet.\n
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+esac
|
|
|
|
|
|
-offset=$(parted $1 unit b print | tail -2 | head -1 | cut -f 1 --delimit="B" | cut -c 9-)
|
|
|
|
|
|
-dd if=$1 of=mbr bs=$offset count=1 2>/dev/null
|
|
|
-dd if=$1 skip=$offset of=$1.new 2>/dev/null
|
|
|
+printf "Creating filesystem $filesystem\n"
|
|
|
|
|
|
if [ "$filesystem" = "ext2" -o "$filesystem" = "ext3" -o "$filesystem" = "ext4" ];then
|
|
|
mkfsopts=-F
|
|
|
fi
|
|
|
|
|
|
-mkfs.$filesystem $mkfsopts ${1}.new >/dev/null
|
|
|
-
|
|
|
-if [ $? -eq 0 ];then
|
|
|
- printf "Successfully created partition\n"
|
|
|
- #$parted $1 print
|
|
|
-else
|
|
|
- printf "Partition creation failed, Exiting.\n"
|
|
|
- exit 1
|
|
|
-fi
|
|
|
-
|
|
|
-cat mbr ${1}.new > $1
|
|
|
-rm ${1}.new
|
|
|
-rm mbr
|
|
|
-
|
|
|
-tmp=$(mktemp -d)
|
|
|
-
|
|
|
-mount -o loop,offset=$offset -t $filesystem $1 $tmp
|
|
|
-
|
|
|
+case $ostype in
|
|
|
+(Darwin)
|
|
|
+ tmp=$(mktemp -d -t xxx)
|
|
|
+ tar -C $tmp -xzpf $2
|
|
|
+ printf "Fixing permissions\n"
|
|
|
+ chmod 1777 $tmp/tmp
|
|
|
+ chmod 4755 $tmp/bin/busybox
|
|
|
+ genext2fs -b 409600 -d $tmp ${1}.new
|
|
|
+ cat scripts/mbr ${1}.new > $1
|
|
|
+ rm ${1}.new
|
|
|
+ ;;
|
|
|
+(Linux)
|
|
|
+ dd if=$1 of=mbr bs=$offset count=1 2>/dev/null
|
|
|
+ dd if=$1 skip=$offset of=$1.new 2>/dev/null
|
|
|
+ mkfs.$filesystem $mkfsopts ${1}.new >/dev/null
|
|
|
+ cat mbr ${1}.new > $1
|
|
|
+ rm ${1}.new
|
|
|
+ rm mbr
|
|
|
+ tmp=$(mktemp -d)
|
|
|
+ mount -o loop,offset=$offset -t $filesystem $1 $tmp
|
|
|
if [ -z $initramfs ];then
|
|
|
printf "Extracting install archive\n"
|
|
|
tar -C $tmp -xzpf $2
|
|
@@ -121,8 +149,14 @@ else
|
|
|
cp $2-kernel $tmp/boot/kernel
|
|
|
cp $2-initramfs $tmp/boot/initramfs
|
|
|
fi
|
|
|
+ umount $tmp
|
|
|
+ ;;
|
|
|
+(*)
|
|
|
+ printf Sorry, not ported to the OS "'$ostype'" yet.\n
|
|
|
+ exit 1
|
|
|
+ ;;
|
|
|
+esac
|
|
|
|
|
|
-umount $tmp
|
|
|
printf "Successfully installed.\n"
|
|
|
printf "Be sure $1 is writable for the user which use qemu\n"
|
|
|
exit 0
|