LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
+VER ?= $(shell date +"%F")
+
LOCAL_MODULE := newinstaller
LOCAL_MODULE_TAGS := system_builder
rm -rf $(TARGET_INSTALLER_OUT)
$(ACP) -pr $(initrd_dir) $(TARGET_INSTALLER_OUT)
ln -s /bin/ld-linux.so.2 $(TARGET_INSTALLER_OUT)/lib
- mkdir -p $(addprefix $(TARGET_INSTALLER_OUT)/,android mnt proc sys tmp sfs)
+ mkdir -p $(addprefix $(TARGET_INSTALLER_OUT)/,android mnt proc sys tmp sfs hd)
+ echo "VER=$(VER)" > $(TARGET_INSTALLER_OUT)/scripts/10-ver
$(MKBOOTFS) $(TARGET_INSTALLER_OUT) | gzip -9 > $@
+INSTALL_RAMDISK := $(PRODUCT_OUT)/install.img
+$(INSTALL_RAMDISK): $(wildcard $(LOCAL_PATH)/install/*/*) | $(MKBOOTFS)
+ $(MKBOOTFS) $(dir $(dir $(<D))) | gzip -9 > $@
+
boot_dir := $(PRODUCT_OUT)/boot
$(boot_dir): $(wildcard $(LOCAL_PATH)/boot/isolinux/*) | $(ACP)
rm -rf $@
$(ACP) -pr $(dir $(<D)) $@
- $(hide) sed -i "s|CMDLINE|$(BOARD_KERNEL_CMDLINE)|" $@/isolinux/isolinux.cfg
-BUILT_IMG := $(addprefix $(PRODUCT_OUT)/,ramdisk.img system.$(if $(MKSQUASHFS),sfs,img) initrd.img)
+BUILT_IMG := $(addprefix $(PRODUCT_OUT)/,system.$(if $(MKSQUASHFS),sfs,img) ramdisk.img initrd.img install.img)
BUILT_IMG += $(if $(TARGET_PREBUILT_KERNEL),$(TARGET_PREBUILT_KERNEL),$(PRODUCT_OUT)/kernel)
ISO_IMAGE := $(PRODUCT_OUT)/$(TARGET_PRODUCT).iso
$(ISO_IMAGE): $(boot_dir) $(BUILT_IMG)
@echo ----- Making iso image ------
- $(hide) sed -i "s|DATE|`date +"%F"`|" $</isolinux/isolinux.cfg
+ $(hide) sed -i "s|VER|$(VER)|; s|CMDLINE|$(BOARD_KERNEL_CMDLINE)|" $</isolinux/isolinux.cfg
genisoimage -vJURT -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-input-charset utf-8 -V "Android LiveCD" -o $@ $^
default vesamenu.c32
-#prompt 1
timeout 600
-menu background splash.png
-menu title Android Live & Installation CD (DATE)
+menu background android-x86.png
+menu title Android Live & Installation CD VER
menu color border 0 #ffffffff #00000000
-menu color sel 7 #ffffffff #ff000000
+menu color sel 7 #ffffff00 #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
-menu color hotsel 0 #ff000000 #ffffffff
-menu color hotkey 7 #ffffffff #ff000000
+menu color hotsel 0 #ffffff00 #ff000000
+menu color hotkey 7 #ffffff00 #00000000
label live
- menu label Live CD - Run Android without installation
+ menu label Live CD - ^Run Android without installation
kernel /kernel
append initrd=/initrd.img CMDLINE quiet SRC= DATA= SDCARD=
label vesa
- menu label Live CD - VESA mode
+ menu label Live CD - ^VESA mode
kernel /kernel
append initrd=/initrd.img CMDLINE quiet vga=788 SRC= DATA= SDCARD=
label debug
- menu label Live CD - Debug mode
+ menu label Live CD - ^Debug mode
kernel /kernel
append initrd=/initrd.img CMDLINE vga=788 DEBUG=1 SRC= DATA= SDCARD=
label install
- menu label Installation - Install Android to harddisk
+ menu label Installation - ^Install Android to harddisk
kernel /kernel
- append initrd=/initrd.img CMDLINE vga=788 INSTALL=1
+ append initrd=/initrd.img CMDLINE INSTALL=1 DEBUG=
export PATH=$PATH:/system/bin
-if [ -n "$DEBUG" ]; then
+if [ -n "$DEBUG" -o -n "$INSTALL" ]; then
mknod /dev/tty2 c 4 2 && openvt
mknod /dev/tty3 c 4 3 && openvt
fi
mdev -s
for device in /dev/sr* /dev/sd[a-z]*; do
- mount -o ro $device /mnt || continue
+ # FIXME: any way to mount ntfs gracefully?
+ mount -o ro $device /mnt || \
+ mount.ntfs-3g -o rw $device /mnt || \
+ continue
cd /mnt/$SRC
if [ ! -e ramdisk.img -o ! \( -e system.img -o -e system.sfs \) ]; then
+ cd /
umount /mnt
continue
fi
ln -s ../system/lib/modules /lib
+if [ -n "$INSTALL" ]; then
+ cd /
+ zcat /mnt/$SRC/install.img | cpio -iud > /dev/null
+fi
+
if [ -n "$DEBUG" -o -n "$BUSYBOX" ]; then
mv /bin /lib .
system/bin/ln -s android/lib /lib
source $s
done
-load_modules
-
-[ -n "$INSTALL" ] && install_hd
+detect_hardware
+do_install
+load_modules
mount_data
mount_sdcard
exec switch_root /android /init
fi
-sh # aviod kernel panic
+sh # avoid kernel panic
#
# By Chih-Wei Huang <cwhuang@linux.org.tw>
-# Last updated 2009/07/18
+# Last updated 2009/08/14
#
# License: GNU Public License
# We explicitely grant the right to use the scripts
# PREDEV: any module the drivers depend on but can't be loaded automatically
# EXTMOD: any other module
-get_asus_info()
+asus_info()
{
# common for all Eee PC models
[ -c /dev/fb0 ] || FB0DEV=i915
esac
}
-get_vbox_info()
+vbox_info()
{
LANDEV=pcnet32
SNDDEV="snd-sb16 isapnp=0 irq=5"
+ VESA=1
}
-get_qemu_info()
+qemu_info()
{
LANDEV=8139cp
SNDDEV=snd-ens1370
}
-get_vmware_info()
+vmware_info()
{
LANDEV=pcnet32
SNDDEV=snd-ens1371
}
-check_product()
-{
- grep -q "$1" /sys/class/dmi/id/uevent
-}
-
detect_hardware()
{
- check_product ASUSTeK && get_asus_info && return 0
- check_product Acer.*AO && get_ao_info && return 0
- check_product VirtualBox && get_vbox_info && return 0
- check_product QEMU && get_qemu_info && return 0
- check_product VMware && get_vmware_info && return 0
+ [ "$AUTO" = "1" ] && return
+ case "`cat /sys/class/dmi/id/uevent`" in
+ *ASUSTeK*)
+ get_info=asus_info
+ ;;
+ *Acer*AO*)
+ get_info=ao_info
+ ;;
+ *VirtualBox*)
+ get_info=vbox_info
+ ;;
+ *QEMU*)
+ get_info=qemu_info
+ ;;
+ *VMware*)
+ get_info=vmware_info
+ ;;
+ *)
+ ;;
+ esac
+ [ -n "$get_info" ] && $get_info && FOUND=1
}
find_wifi_dev_name()
load_modules()
{
- [ -z "$AUTO" ] && detect_hardware
- if [ $? -eq 0 ]; then
+ if [ -n "$FOUND" ]; then
for m in $PREDEV $EXTMOD; do
modprobe $m
done
fi
mdev -s
+ [ -c /dev/video0 ] || modprobe vivi
[ -d /proc/asound/card0 ] || modprobe snd-dummy
[ -c /dev/fb0 ] || modprobe uvesafb mode_option=${UVESA_MODE:-800x600}-16 ${UVESA_OPTION:-mtrr=3 scroll=ywrap}
#
# By Chih-Wei Huang <cwhuang@linux.org.tw>
-# Last updated 2009/07/18
+# Last updated 2009/08/17
#
# License: GNU Public License
# We explicitely grant the right to use the scripts
# with Android-x86 project.
#
-install_hd()
+do_install()
{
+ [ -z "$INSTALL" ] && return
dialog --title " WARNING " --msgbox '\n Installation is not implemented yet.\n Press OK to run live version.' 8 45
}
#
# By Chih-Wei Huang <cwhuang@linux.org.tw>
-# Last updated 2009/07/21
+# Last updated 2009/08/13
#
# License: GNU Public License
# We explicitely grant the right to use the scripts
mount_data()
{
+ mountpoint -q data && return
if [ -b "$DATA" ]; then
mount $DATA data
elif [ -b "/dev/$DATA" ]; then
mount_sdcard()
{
+ mountpoint -q sdcard && return
if [ -n "$SDCARD" ]; then
[ -b "$SDCARD" ] && SDCARD=`echo $SDCARD | sed "s|/dev/||g"`
if [ -b "/dev/$SDCARD" ]; then
--- /dev/null
+#
+# By Chih-Wei Huang <cwhuang@linux.org.tw>
+# Last updated 2009/08/14
+#
+# License: GNU Public License
+# We explicitely grant the right to use the scripts
+# with Android-x86 project.
+#
+
+tempfile=/tmp/temp-$$
+menufile=/tmp/menu-$$
+
+rebooting()
+{
+ dialog --title " Rebooting... " --nocancel --pause "" 8 41 1
+ sync
+ umount -a
+ reboot -f
+}
+
+choose()
+{
+ dialog --clear --title " $1 " \
+ --menu "$2" 20 71 13 --file $menufile 2> $tempfile
+
+ retval=$?
+ choice=`cat $tempfile`
+}
+
+select_dev()
+{
+ fdisk -l | grep ^/dev | cut -b6-12,55- | awk '{
+ if (!match($2, "Extended")) {
+ printf("\"%-28s", $0)
+ system("echo -n `cat /sys/block/*/"$1"/../device/model`")
+ printf("\" \"\"\n")
+ }
+ } END {
+ printf("\"Create/Modify partitions\" \"\"\n\"Detect devices\" \"\"")
+ }' > $menufile
+ choose "Choose Partition" "Please select a partition to install Android-x86:"
+ return $retval
+}
+
+progress_bar()
+{
+ dialog --clear --title " $1 " --gauge "\n $2" 8 70
+}
+
+format_fs()
+{
+ local cmd
+ echo -e '"Do not format" ""\next3 ""\next2 ""\nntfs ""\nfat32 ""' > $menufile
+ choose "Choose filesystem" "Please select a filesystem to format $1:"
+ case "$choice" in
+ ext3)
+ cmd="mke2fs -jL"
+ ;;
+ ext2)
+ cmd="mke2fs -L"
+ ;;
+ ntfs)
+ cmd="mkntfs -fL"
+ ;;
+ fat32)
+ cmd="mkdosfs -vn"
+ ;;
+ *)
+ ;;
+ esac
+ if [ -n "$cmd" ]; then
+ dialog --title " Confirm " --no-label Skip --yesno \
+ "\n You chose to format $1 to $choice.\n All data in that partition will LOSE.\n\n Are you sure to format the partition $1?" 10 51
+ [ $? -ne 0 ] && return 1
+ $cmd Android-x86 /dev/$1 | awk '{
+ # FIXME: very imprecise progress
+ if (match($0, "done"))
+ printf("%d\n", i+=33)
+ }' | progress_bar "Formatting" "Formatting partition $1..."
+ fi
+}
+
+create_entry()
+{
+ title=$1
+ shift
+ echo -e "title $title\n\tkernel /$asrc/kernel$vga $@ SRC=/$asrc\n\tinitrd /$asrc/initrd.img\n" >> $menulst
+}
+
+create_menulst()
+{
+ menulst=/hd/grub/menu.lst
+ [ -n "$VESA" ] && vga=" vga=788"
+ echo -e "default=0\ntimeout=6\nroot (hd0,$1)\nsplashimage=/grub/android-x86.xpm.gz\n" > $menulst
+ cmdline=`cat /proc/cmdline | sed "s|\(initrd.*img *\)||; s|\(INSTALL=$INSTALL *\)||; s|\(SRC=$SRC *\)||; s|\(DEBUG=$DEBUG *\)||; s|\(BOOT_IMAGE.*\)||"`
+
+ create_entry "Android-x86 $VER" quiet $cmdline
+ create_entry "Android-x86 $VER (Debug mode)" $cmdline DEBUG=1
+}
+
+install_to()
+{
+ mountpoint -q /hd && umount /hd
+ while [ 1 ]; do
+ format_fs $1
+ for m in mount /sbin/mount.*; do
+ # FIXME: how to mount fuse filesystem automatically?
+ $m /dev/$1 /hd && break
+ done
+ [ $? -eq 0 ] && break
+ dialog --clear --title " Error " --defaultno --yesno \
+ "\n Cannot mount /dev/$1\n Do you want to format it?" 8 37
+ [ $? -ne 0 ] && return 255
+ done
+
+ fs=`cat /proc/mounts | grep /dev/$1 | awk '{ print $3 }'`
+ if [ "$fs" = "vfat" ]; then
+ dialog --title " Warning " --yesno \
+ "\nYou are going to install Android-x86 to a fat32 partition. Though this is possible, android cannot save user data to that partition. So data will be save to a RAMDISK(tmpfs), and lose after power off.\n\nAre you sure to continue?" 12 63
+ [ $? -ne 0 ] && return 1
+ fi
+
+ asrc=android-$VER
+ dialog --title " Confirm " --no-label Skip --yesno \
+ "\n Do you want to install boot loader GRUB?" 7 47
+ if [ $? -eq 0 ]; then
+ cp -af /grub /hd
+ d=0
+ while [ 1 ]; do
+ h=`echo $d | awk '{ printf("%c", $1+97) }'`
+ [ -d /sys/block/[sh]d$h/$1 ] && break
+ d=$(($d+1))
+ done
+ p=$((`echo $1 | sed "s/sd$h//"`-1))
+ create_menulst $p
+ echo "setup (hd$d) (hd$d,$p)" | grub > /dev/tty5
+ [ $? -ne 0 ] && return 255
+ fi
+
+ cd /mnt/$SRC
+ files="kernel initrd.img ramdisk.img system.*"
+ size=0
+ for s in `ls -ks $files | awk '{print $1}'`; do
+ size=$(($size+$s))
+ done
+ mkdir /hd/$asrc
+ ( ls $files | cpio -H newc -o | pv -ns ${size}k | ( cd /hd/$asrc; cpio -iud > /dev/null; echo $? > /tmp/result )) 2>&1 \
+ | progress_bar "Installing Android-x86" "Expect to write $size KB..."
+
+ chmod 644 /hd/$asrc/*
+ chown 0.0 /hd/$asrc/*
+ [ "$fs" != "vfat" ] && mkdir /hd/$asrc/data
+ sync
+
+ return $((`cat /tmp/result`*255))
+}
+
+install_hd()
+{
+ mdev -s
+ select_dev || rebooting
+ retval=1
+ case "$choice" in
+ [sh]d*)
+ install_to $choice
+ retval=$?
+ ;;
+ Create*)
+ cfdisk
+ ;;
+ Detect*)
+ dialog --title " Detecting... " --nocancel --pause "" 8 41 1
+ ;;
+ esac
+ return $retval
+}
+
+do_install()
+{
+ echo "0 0 0 0" > /proc/sys/kernel/printk
+ until install_hd; do
+ if [ $retval -eq 255 ]; then
+ dialog --title ' Error! ' --yes-label Retry --no-label Reboot \
+ --yesno '\n Installation failed!' 7 35
+ [ $? -eq 1 ] && rebooting
+ fi
+ done
+
+ echo -e '"Run Android-x86" ""\n"Reboot" ""' > $menufile
+ dialog --clear --title ' Congratulations! ' \
+ --menu "\n Android-x86 is installed successfully.\n " 11 51 13 \
+ "Run Android-x86" "" "Reboot" "" 2> $tempfile
+ case "`cat $tempfile`" in
+ Run*)
+ cd /android
+ umount system
+ if mountpoint -q /sfs; then
+ umount /sfs
+ mount -o loop /hd/$asrc/system.sfs /sfs
+ mount -o loop /sfs/system.img system
+ else
+ mount -o loop /hd/$asrc/system.img system
+ fi
+ [ -d /hd/$asrc/data ] && mount --bind /hd/$asrc/data data
+ ;;
+ Reboot)
+ rebooting
+ ;;
+ esac
+}