OSDN Git Service

update installer
[android-x86/bootable-newinstaller.git] / install / scripts / 1-install
1 #
2 # By Chih-Wei Huang <cwhuang@linux.org.tw>
3 # Last updated 2010/10/14
4 #
5 # License: GNU Public License
6 # We explicitely grant the right to use the scripts
7 # with Android-x86 project.
8 #
9
10 tempfile=/tmp/temp-$$
11 menufile=/tmp/menu-$$
12
13 rebooting()
14 {
15         dialog --title " Rebooting... " --nocancel --pause "" 8 41 1
16         sync
17         umount -a
18         reboot -f
19 }
20
21 choose()
22 {
23         dialog --clear --title " $1 " \
24                 --menu "$2" 20 71 13 --file $menufile 2> $tempfile
25
26         retval=$?
27         choice=`cat $tempfile`
28 }
29
30 select_dev()
31 {
32         fdisk -l | grep ^/dev | cut -b6-12,55- | awk '{
33                 if (!match($2, "Extended")) {
34                         printf("\"%-28s", $0)
35                         system("echo -n `cat /sys/block/*/"$1"/../device/model`")
36                         printf("\" \"\"\n")
37                 }
38         } END {
39                 printf("\"Create/Modify partitions\" \"\"\n\"Detect devices\" \"\"")
40         }' > $menufile
41         choose "Choose Partition" "Please select a partition to install Android-x86:"
42         return $retval
43 }
44
45 progress_bar()
46 {
47         dialog --clear --title " $1 " --gauge "\n $2" 8 70
48 }
49
50 format_fs()
51 {
52         local cmd
53         echo -e '"Do not format" ""\next3 ""\next2 ""\nntfs ""\nfat32 ""' > $menufile
54         choose "Choose filesystem" "Please select a filesystem to format $1:"
55         case "$choice" in
56                 ext3)
57                         cmd="mke2fs -jL"
58                         ;;
59                 ext2)
60                         cmd="mke2fs -L"
61                         ;;
62                 ntfs)
63                         cmd="mkntfs -fL"
64                         ;;
65                 fat32)
66                         cmd="mkdosfs -vn"
67                         ;;
68                 *)
69                         ;;
70         esac
71         if [ -n "$cmd" ]; then
72                 dialog --title " Confirm " --no-label Skip --yesno \
73                         "\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
74                 [ $? -ne 0 ] && return 1
75                 $cmd Android-x86 /dev/$1 | awk '{
76                         # FIXME: very imprecise progress
77                         if (match($0, "done"))
78                                 printf("%d\n", i+=33)
79                 }' | progress_bar "Formatting" "Formatting partition $1..."
80         fi
81 }
82
83 create_entry()
84 {
85         title=$1
86         shift
87         echo -e "title $title\n\tkernel /$asrc/kernel$vga $@ SRC=/$asrc\n\tinitrd /$asrc/initrd.img\n" >> $menulst
88 }
89
90 create_menulst()
91 {
92         menulst=/hd/grub/menu.lst
93         [ -n "$VESA" ] && vga=" vga=788"
94         echo -e "default=0\ntimeout=6\nroot (hd0,$1)\nsplashimage=/grub/android-x86.xpm.gz\n" > $menulst
95         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.*\)||"`
96
97         create_entry "Android-x86 $VER (HDPI)" quiet $cmdline HDPI=1
98         create_entry "Android-x86 $VER (MDPI)" quiet $cmdline MDPI=1
99         create_entry "Android-x86 $VER (Debug mode)" $cmdline DEBUG=1
100 }
101
102 create_winitem()
103 {
104         win=`fdisk -l /dev/$(echo $1 | cut -b-3) | grep ^/dev | cut -b6-12,55- | awk '{
105                 if (match($2, "NTFS"))
106                         print $1
107         }' | head -1`
108         if [ -n "$win" ]; then
109                 dialog --title " Confirm " --yesno \
110                         "\nThe installer found a Windows partition in /dev/$win.\n\nDo you want to create a boot item for Windows?" 9 59
111                 [ $? -ne 0 ] && return 1
112                 p=$((`echo $win | cut -b4-`-1))
113                 echo -e "title Windows\n\trootnoverify (hd$d,$p)\n\tchainloader +1\n" >> $menulst
114         fi
115 }
116
117 install_to()
118 {
119         mountpoint -q /hd && umount /hd
120         while [ 1 ]; do
121                 format_fs $1
122                 try_mount rw /dev/$1 /hd && break
123                 dialog --clear --title " Error " --defaultno --yesno \
124                         "\n Cannot mount /dev/$1\n Do you want to format it?" 8 37
125                 [ $? -ne 0 ] && return 255
126         done
127
128         fs=`cat /proc/mounts | grep /dev/$1 | awk '{ print $3 }'`
129         if [ "$fs" = "vfat" ]; then
130                 dialog --title " Warning " --yesno \
131                         "\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
132                 [ $? -ne 0 ] && return 1
133         elif [ "$fs" = "fuseblk" ]; then
134                 dialog --title " Warning " --yesno \
135                         "\nYou are going to install Android-x86 to an NTFS partition. Though this is possible, some user data cannot be saved properly to that partition and will lose after power off.\n\nAre you sure to continue?" 11 63
136                 [ $? -ne 0 ] && return 1
137         fi
138
139         asrc=android-$VER
140         dialog --title " Confirm " --no-label Skip --yesno \
141                 "\n Do you want to install boot loader GRUB?" 7 47
142         if [ $? -eq 0 ]; then
143                 cp -af /grub /hd
144                 d=0
145                 while [ 1 ]; do
146                         h=`echo $d | awk '{ printf("%c", $1+97) }'`
147                         [ -d /sys/block/[sh]d$h/$1 ] && break
148                         d=$(($d+1))
149                 done
150                 p=$((`echo $1 | cut -b4-`-1))
151                 create_menulst $p
152                 create_winitem $1 $d
153                 rm -f /hd/boot/grub/stage1
154                 echo "setup (hd$d) (hd$d,$p)" | grub > /dev/tty5
155                 [ $? -ne 0 ] && return 255
156         fi
157
158         cd /mnt/$SRC
159         files="kernel initrd.img ramdisk.img system.*"
160         size=0
161         for s in `ls -ks $files | awk '{print $1}'`; do
162                 size=$(($size+$s))
163         done
164         mkdir /hd/$asrc
165         ( ls $files | cpio -H newc -o | pv -ns ${size}k | ( cd /hd/$asrc; cpio -iud > /dev/null; echo $? > /tmp/result )) 2>&1 \
166                 | progress_bar "Installing Android-x86" "Expect to write $size KB..."
167
168         chmod 644 /hd/$asrc/*
169         chown 0.0 /hd/$asrc/*
170         [ "$fs" != "vfat" ] && mkdir /hd/$asrc/data
171         sync
172
173         return $((`cat /tmp/result`*255))
174 }
175
176 install_hd()
177 {
178         mdev -s
179         select_dev || rebooting
180         retval=1
181         case "$choice" in
182                 [sh]d*)
183                         install_to $choice
184                         retval=$?
185                         ;;
186                 Create*)
187                         cfdisk
188                         ;;
189                 Detect*)
190                         dialog --title " Detecting... " --nocancel --pause "" 8 41 1
191                         ;;
192         esac
193         return $retval
194 }
195
196 do_install()
197 {
198         until install_hd; do
199                 if [ $retval -eq 255 ]; then
200                         dialog --title ' Error! ' --yes-label Retry --no-label Reboot \
201                                 --yesno '\n      Installation failed!' 7 35
202                         [ $? -eq 1 ] && rebooting
203                 fi
204         done
205
206         [ -n "$VESA" ] || runit="Run Android-x86"
207         dialog --clear --title ' Congratulations! ' \
208                 --menu "\n Android-x86 is installed successfully.\n " 11 51 13 \
209                 "$runit" "" "Reboot" "" 2> $tempfile
210         case "`cat $tempfile`" in
211                 Run*)
212                         cd /android
213                         umount system
214                         if mountpoint -q /sfs; then
215                                 umount /sfs
216                                 mount -o loop /hd/$asrc/system.sfs /sfs
217                                 mount -o loop /sfs/system.img system
218                         else
219                                 mount -o loop /hd/$asrc/system.img system
220                         fi
221                         [ -d /hd/$asrc/data ] && mount --bind /hd/$asrc/data data
222                         ;;
223                 *)
224                         rebooting
225                         ;;
226         esac
227 }