OSDN Git Service

1-install: support formatting ext4 partition
[android-x86/bootable-newinstaller.git] / install / scripts / 1-install
index b4f879f..978b591 100644 (file)
@@ -1,6 +1,6 @@
 #
 # By Chih-Wei Huang <cwhuang@linux.org.tw>
-# Last updated 2011/01/09
+# Last updated 2012/07/07
 #
 # License: GNU Public License
 # We explicitely grant the right to use the scripts
@@ -10,7 +10,7 @@
 tempfile=/tmp/temp-$$
 menufile=/tmp/menu-$$
 
-CPIO=/system/xbin/cpio
+CPIO=cpio
 
 rebooting()
 {
@@ -29,6 +29,47 @@ choose()
        choice=`cat $tempfile`
 }
 
+partition_drive()
+{
+       echo -n > $menufile
+       for i in /sys/block/[shv]d[a-z] /sys/block/mmcblk?; do
+               if [ ! -d $i ]; then  # pathname expansion failed
+                       continue
+               fi
+               echo -n `basename $i` >> $menufile
+               if [ -f $i/removable -a `cat $i/removable` -eq 0 ]; then
+                       echo -n ' "Harddisk ' >> $menufile
+               else
+                       echo -n ' "Removable' >> $menufile
+               fi
+               if [ -f $i/size ]; then
+                       echo -n " (" `cat $i/size` "blocks)" >> $menufile
+               fi
+               echo '"' >> $menufile
+       done
+       count=`wc -l $menufile | awk '{ print $1 }'`
+       if [ $count -eq 0 ]; then
+               dialog --title " Error " --msgbox \
+                       "\nOK. There is no hard drive to edit partitions." 8 49
+               return 255
+       fi
+       if [ $count -eq 1 ]; then
+               choice=`awk '{ print $1 }' $menufile`
+               retval=0
+       else
+               choose "Choose Drive" "Please select a drive to edit partitions:"
+       fi
+       if [ $retval -eq 0 ]; then
+               cfdisk /dev/$choice
+               if [ $? -eq 0 ]; then
+                       retval=1
+               else
+                       retval=255
+               fi
+       fi
+       return $retval
+}
+
 select_dev()
 {
        fdisk -l | grep ^/dev | cut -b6-12,55- | awk '{
@@ -52,9 +93,13 @@ progress_bar()
 format_fs()
 {
        local cmd
-       echo -e '"Do not format" ""\next3 ""\next2 ""\nntfs ""\nfat32 ""' > $menufile
+       echo -e '"Do not format" ""\next4 ""\next3 ""\next2 ""\nntfs ""\nfat32 ""' > $menufile
        choose "Choose filesystem" "Please select a filesystem to format $1:"
        case "$choice" in
+               ext4)
+                       dialog --title " Notice " --msgbox "\nAndroid-x86 bootloader can't support booting from ext4. You need to install a bootloader supporting ext4 manually, e.g., grub2." 9 49
+                       cmd="make_ext4fs -L"
+                       ;;
                ext3)
                        cmd="mke2fs -jL"
                        ;;
@@ -65,7 +110,7 @@ format_fs()
                        cmd="mkntfs -fL"
                        ;;
                fat32)
-                       cmd="newfs_msdos -L"
+                       cmd="mkdosfs -n"
                        ;;
                *)
                        ;;
@@ -97,7 +142,9 @@ create_menulst()
        cmdline=`cat /proc/cmdline | sed "s|\(initrd.*img\s*\)||; s|quiet\s*||; s|\(vga=\w\+\?\s*\)||; s|\(DPI=\w\+\?\s*\)||; s|\(INSTALL=\w\+\?\s*\)||; s|\(SRC=\S\+\?\s*\)||; s|\(DEBUG=\w\+\?\s*\)||; s|\(BOOT_IMAGE.*\)||"`
 
        create_entry "Android-x86 $VER" quiet $cmdline
-       create_entry "Android-x86 $VER (Debug mode)" $cmdline DEBUG=1
+       create_entry "Android-x86 $VER (Debug mode)" $cmdline DEBUG=2
+       create_entry "Android-x86 $VER (Debug nomodeset)" nomodeset $cmdline DEBUG=2
+       create_entry "Android-x86 $VER (Debug video=LVDS-1:d)" video=LVDS-1:d $cmdline DEBUG=2
 }
 
 create_winitem()
@@ -140,7 +187,7 @@ create_data_img()
        if [ $? -eq 0 ]; then
                if create_img 512 data.img; then
                        losetup /dev/loop6 data.img
-                       mke2fs -jL /data /dev/loop6 > /dev/tty6
+                       make_ext4fs -L /data /dev/loop6 > /dev/tty6
                fi
                [ $? -ne 0 ] && dialog --msgbox "\n Failed to create data.img." 7 33
        else
@@ -149,30 +196,23 @@ create_data_img()
        fi
 }
 
-create_sdcard_img()
+try_upgrade()
 {
-       case "$fs" in
-               vfat|fuseblk)
-                       mkdir sd
-                       sdcard=sd/sdcard.img
-                       ;;
-               *)
-                       sdcard=data/sdcard.img
-                       ;;
-       esac
-
-       if create_img 2047 $sdcard; then
-               losetup /dev/loop7 $sdcard
-               newfs_msdos -L sdcard /dev/loop7 > /dev/tty7 2>&1
-       fi
-       if [ $? -eq 0 ]; then
-               [ -n "menulst" ] && sed -i "s|\(SDCARD=\S\+\?\s*\)||; s|\(SRC=\S\+\?\s*\)|\1 SDCARD=/$sdcard|" $menulst
-               msg="The fake SD card is created successfully"
-       else
-               msg="Failed to create a fake SD card"
-       fi
-       cd /
-       dialog --ok-label Reboot --msgbox "\n $msg." 7 47
+       [ -d $1 ] && return
+       PREV_VERS="4.4-r2 4.4-r1 4.4-RC2 4.4-RC1 4.4-test 4.3-test 4.2-test 4.0-r1 4.0-RC2 4.0-RC1"
+       for v in $PREV_VERS; do
+               prev=hd/android-$v
+               if [ -d $prev ]; then
+                       dialog --title " Question " --yesno \
+                               "\nAn older Android-x86 version $v is detected.\nWould you like to upgrade it?" 8 55
+                       if [ $? -eq 0 ]; then
+                               mv $prev $1
+                               rm -rf $1/data/dalvik-cache/* $1/data/system/wpa_supplicant
+                               sed -i 's/\(ctrl_interface=\)\(.*\)/\1wlan0/' $1/data/misc/wifi/wpa_supplicant.conf
+                               break
+                       fi
+               fi
+       done
 }
 
 install_to()
@@ -190,35 +230,47 @@ install_to()
        fs=`cat /proc/mounts | grep /dev/$1 | awk '{ print $3 }'`
 
        asrc=android-$VER
-       dialog --title " Confirm " --no-label Skip --yesno \
+       [ "$fs" != "ext4" ] && dialog --title " Confirm " --no-label Skip --defaultno --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 /sys/block/[shv]d$h/$1 ] && break
                        d=$(($d+1))
                done
                p=$((`echo $1 | cut -b4-`-1))
+               disk=`echo $1 | cut -b-3`
                create_menulst $p
                create_winitem $1 $d
                rm -f /hd/boot/grub/stage1
-               echo "setup (hd$d) (hd$d,$p)" | grub > /dev/tty5
+               echo "(hd$d) /dev/$disk" > /hd/grub/device.map
+               echo "setup (hd$d) (hd$d,$p)" | grub --device-map /hd/grub/device.map > /dev/tty5
                [ $? -ne 0 ] && return 255
        fi
 
-       [ "$fs" != "vfat" ] && dialog --title " Question " --defaultno --yesno \
-               "\nDo you want to install /system directory as read-write?\n\nLet /system be read-write make it easier to debug, but it needs more disk space and longer installation time." 10 61
+       dialog --title " Question " --yesno \
+               "\nDo you want to install /system directory as read-write?\n\nMaking /system be read-write is easier for debugging, but it needs more disk space and longer installation time." 10 61
        instal_rw=$?
 
        files="mnt/$SRC/kernel mnt/$SRC/initrd.img mnt/$SRC/ramdisk.img"
-       [ $instal_rw -eq 0 ] && files="$files android/system" || files="$files mnt/$SRC/system.*"
+       if [ $instal_rw -eq 0 ]; then
+               if [ "$fs" = "vfat" -o "$fs" = "fuseblk" ]; then
+                       [ -e /sfs/system.img ] && sysimg="/sfs/system.img" || sysimg="mnt/$SRC/system.*"
+               else
+                       sysimg="android/system"
+               fi
+       else
+               sysimg="mnt/$SRC/system.*"
+       fi
+       files="$files $sysimg"
        size=0
        for s in `du -sk $files | awk '{print $1}'`; do
                size=$(($size+$s))
        done
-       mkdir hd/$asrc
+       try_upgrade hd/$asrc
+       mkdir -p hd/$asrc
        cd hd/$asrc
        rm -rf system*
        ( ( cd /; find $files | $CPIO -H newc -o ) | pv -ns ${size}k | ( $CPIO -iud > /dev/null; echo $? > /tmp/result )) 2>&1 \
@@ -228,15 +280,16 @@ install_to()
        if [ $result -eq 0 ]; then
                chmod 644 *
                chown 0.0 *
-               mv mnt/$SRC/* . && rm -rf mnt
-               [ -d android ] && mv android/* . && rmdir android
+               for d in android mnt sfs ./$SRC; do
+                       [ -d $d ] && mv $d/* . && rmdir $d
+               done
 
                case "$fs" in
                        vfat|fuseblk)
                                create_data_img
                                ;;
                        *)
-                               mkdir data
+                               mkdir -p data
                                ;;
                esac
        fi
@@ -251,12 +304,13 @@ install_hd()
        select_dev || rebooting
        retval=1
        case "$choice" in
-               [sh]d*)
+               [shvm][dm]*)
                        install_to $choice
                        retval=$?
                        ;;
                Create*)
-                       cfdisk
+                       partition_drive
+                       retval=$?
                        ;;
                Detect*)
                        dialog --title " Detecting... " --nocancel --pause "" 8 41 1
@@ -277,18 +331,20 @@ do_install()
 
        [ -n "$VESA" ] || runit="Run Android-x86"
        dialog --clear --title ' Congratulations! ' \
-               --menu "\n Android-x86 is installed successfully.\n " 12 51 13 \
-               "$runit" "" "Create a fake SD card" "" "Reboot" "" 2> $tempfile
+               --menu "\n Android-x86 is installed successfully.\n " 11 51 13 \
+               "$runit" "" "Reboot" "" 2> $tempfile
        case "`cat $tempfile`" in
                Run*)
                        cd /android
                        umount system
-                       if mountpoint -q /sfs; then
-                               umount /sfs
+                       mountpoint -q /sfs && umount /sfs
+                       if [ -e /hd/$asrc/system.sfs ]; then
                                mount -o loop /hd/$asrc/system.sfs /sfs
                                mount -o loop /sfs/system.img system
-                       else
+                       elif [ -e /hd/$asrc/system.img ]; then
                                mount -o loop /hd/$asrc/system.img system
+                       else
+                               mount --bind /hd/$asrc/system system
                        fi
                        if [ -d /hd/$asrc/data ]; then
                                mount --bind /hd/$asrc/data data
@@ -296,10 +352,6 @@ do_install()
                                mount -o loop /hd/$asrc/data.img data
                        fi
                        ;;
-               Create*)
-                       create_sdcard_img
-                       rebooting
-                       ;;
                *)
                        rebooting
                        ;;