Topic: þï[How-to] Install Ubuntu 8.1 in Virtual PC 2007 for iPhone SDK / Android SDK development

  Print this page

þï[How-to] Install Ubuntu 8.1 in Virtual PC 2007 for iPhone SDK / Android SDK development Copy to clipboard
Posted by: javacom
Posted on: 2008-11-06 11:52

[color=brown][How-to] Install Ubuntu 8.1 in Virtual PC 2007 for iPhone SDK / Android SDK development[/color]

Install Linux in VMWare is rather straight forward but in Microsoft Virtual PC, it will have screen display problem and fail during installation. The following guide describe the steps involved for the installation, the only pitfall is that sound is not working for the virtual machine of Ubuntu in Virtual PC 2007

Requirement:
Windows XP Pro or above
Microsoft Virtual PC 2007 is free, you can download it from
http://www.microsoft.com/windows/downloads/virtualpc/default.mspx

Ubuntu 8.1 is also free
you should download the 32 bit Intel i386 Desktop version
http://www.ubuntu.com/getubuntu/download
MD5 (ubuntu-8-1.10-desktop-i386.iso) = 24ea1163ea6c9f5dae77de8c49ee7c03

[color=brown]Here are the steps to install Ubuntu 8.1 in Virtual PC 2007.[/color]

(1) Setup the new Virtual Machine in VPC 2007 and mount the iso image (ubuntu-8-1.10-desktop-i386.iso).

The virtual machine setting is : Harddisk Size 8G (after installation of SDKs and packages of this guide, it will take up about 5G)

Ram 512MB (more ram is not that useful in this VM)

(2) Inside the Ubuntu Install Screen, first Press "[color=red]F4[/color]" and Select "[color=red]Safe Graphics mode[/color]"

(3) Then press [color=red]down arrow[/color] and highlight the menu "Install Ubuntu" ([color=red]highlight only and don't press Enter[/color])

(4) Press "[color=red]F6[/color]" to bring up the "Other Options"
Then type "[color=red]vesa vga=771[/color]" at the end of the option line
Then Press "Enter", the installation will start instantly.

Note: If you want other resolution, you can try say vga=791 instead of vga=771

I did not try all these, some of them might not work. The codes are listed out for reference only.

vga=769 means 600x480 8 bits color
vga=785 means 600x480 16 bits color
vga=786 means 600x480 24 bits color
vga=771 means 800x600 8 bits color
vga=788 means 800x600 16 bits color
vga=789 means 800x600 24 bits color
vga=773 means 1024x768 8 bits color
vga=791 means 1024x768 16 bits color
vga=792 means 1024x768 24 bits color

During Installation just choose your timezone and language, you will be asked for the username and password and remember what you type

I choose English Language because I found out that if you choose Chinese, the default folder name will also be in Chinese which is very odd for me. If you choose English, you can enable the lanaguage support in the desktop and add input method later.

I use sdkuser as username for the installation guide below

(5) After installation, it will prompt to restart. But the restart might not work and you have to manually reset the VM in VPC 2007

(6) Then release the mounted iso image and to reset the VM that is in VPC 2007 menu do Action -> Reset

[img]http://1.bp.blogspot.com/_3LRNVfBfliQ/SRGcbnQfx-I/AAAAAAAAAls/FmV1eMvLTgw/s400/vpcubunu.png[/img]

After you have installed the Ubuntu 8.1 in VPC 2007, you will have to start installation the necessary packages in Ubuntu

The purpose of this virtual machine is to develop apps for iPhone SDK and Android SDK. So it will have
(a) llvm-gcc for iPhone toolchain SDK 2.0
(b) Android SDK
(c) Eclipse IDE
(d) apache 2 websever with php and sqlite3 support (so that you can test some http get/post locally and install your local cydia repository as well)
(e) samba and open ssh server (so that you can smb mount it or ssh/scp to it)

[color=brown](7) Install build essential packages so that you can compile llvm-gcc for iPhone toolchain SDK2.0[/color]

you need to open the Terminal and type these commands
[code]
sudo apt-get update
sudo apt-get install build-essential bison flex[/code]

[color=brown](8) install server packages so that you can have local webserver and ssh and samba server[/color]
[code]
sudo apt-get install apache2 php5 libapache2-mod-php5 php5-cli php5-common php5-cgi php5-sqlite openssh-server samba
[/code]

Install php5-sqlite3
[code]
sudo apt-get install php-db php-pear
wget http://us.archive.ubuntu.com/ubuntu/pool/universe/p/php-sqlite3/php-sqlite3_0.5-1_i386.deb
sudo dpkg -i php-sqlite3_0.5-1_i386.deb
[/code]

[color=brown](9) Create Project folder for smb mount (guest login ok) so that you can use windows / smb mount the virtual machine folder[/color]
(assume sdkuser is the default user account)

[code]mkdir -p /home/sdkuser/Projects
chmod 777 /home/sdkuser/Projects[/code]

edit the smb.conf
[code]sudoedit /etc/samba/smb.conf[/code]
and add the followings at the end

[code]

[Projects]
[$#160][$#160][$#160]comment = Projects Folder Share
[$#160][$#160][$#160]writable = yes
[$#160][$#160][$#160]locking = no
[$#160][$#160][$#160]path = /home/sdkuser/Projects
[$#160][$#160][$#160]public = yes
[$#160][$#160][$#160]browseable = yes
[$#160][$#160][$#160]guest ok = yes
[$#160][$#160][$#160]create mask = 0666
[$#160][$#160][$#160]directory mask = 0777
[/code]

Note : you have to restart samba server to make the new configuration effective if you need to use it right now

[code]sudo /etc/init.d/samba restart[/code]

[color=brown](10) install jdk6 so that you can compile Andriod app[/color]

[code]sudo apt-get install sun-java6-jdk[/code]

[color=brown](11) Download Android SDK[/color] http://dl.google.com/android/android-sdk-linux_x86-1.0_r1.zip from http://code.google.com/android/download_list.html

Install the SDK in ~/Android/

[code]mkdir -p ~/Android/
sudo unzip ~/Desktop/android-sdk-linux_x86-1.0_r1.zip -d ~/Android/
sudo chown -R sdkuser:sdkuser ~/Andriod
[/code]

Create sd card & test emulator and create data directory

[code]~/Android/android-sdk-linux_x86-1.0_r1/tools/mksdcard -l SD500M 500M ~/Android/sd500m.img

~/Android/android-sdk-linux_x86-1.0_r1/tools/emulator -datadir ~/Android -scale 0.7 -sdcard ~/Android/sd500m.img &
[/code]

[color=brown](12) Download and Install Eclipse 3.4.1[/color] (you can't use the debian package eclipse which is 3.2 only)
from http://www.eclipse.org/downloads/
http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-java-ganymede-SR1-linux-gtk.tar.gz

Install eclipse in /usr/lib

[code]cd /usr/lib; sudo tar -xzvf ~/Desktop/eclipse-java-ganymede-SR1-linux-gtk.tar.gz
[/code]

Add main menu & icon for eclipse in GNOME

[code]sudoedit /usr/share/applications/eclipse.desktop
[/code]

and save this

[code]
[Desktop Entry]
Name=Eclipse
Comment=Develop applications in a variety of different programming languages
Exec=/usr/lib/eclipse/eclipse
Icon=eclipse48.png
Terminal=false
Type=Application
Categories=Development;
StartupNotify=true[/code]

There is no eclipse icon in the download file eclipse-java-ganymede-SR1-linux-gtk.tar.gz. You can get it from eclipse 3.2.2 package and install it manually

download the eclipse 3.2.2 package
[code]wget http://us.archive.ubuntu.com/ubuntu/pool/universe/e/eclipse/eclipse_3.2.2-5ubuntu2_i386.deb[/code]

extract the package and copy the icons to /usr/share/pixmaps/ and clean up
[code]dpkg -x eclipse_3.2.2-5ubuntu2_i386.deb tmp
sudo cp tmp/usr/share/pixmaps/* /usr/share/pixmaps/
rm -fr tmp
[/code]

Install Android sdk plug-in for Eclipse
(based on http://code.google.com/android/intro/installing.html#installingplugin)
add this site and install in Eclipse
http://dl-ssl.google.com/android/eclipse/

Edit Eclipse's preference for Andriod (Window -> Preferences -> Android)

SDK location
/home/sdkuser/Android/android-sdk-linux_x86-1.0_r1/

emulator options
-scale 0.7 -sdcard /home/sdkuser/Android/sd500m.img

Test HelloActivity in Eclipse
(a) Create a New Android Project in Eclipse (File -> New -> Project... -> Android -> Android Project)
(b) Choose Create project from existing source and browse to ~/Android/android-sdk-linux_x86-1.0_r1/samples/HelloActivity
(c) Run HelloActivity as Android Application
(d) Then the emulator will start Hello, World! will be on the emulator screen

Note: Please don't set the workspace of Eclipse to the sample project folder
~/Android/android-sdk-linux_x86-1.0_r1/samples/
or else you will get error when importing project from existing source

[color=brown](13) Install iPhone llvm-gcc and toolchain SDK2.0[/color]
Refer to this article and download the file UpgradeToolChain2.tgz and run the build_20.sh to build the llvm-gcc for iPhone

http://www.iphone.org.hk/cgi-bin/ch/topic_show.cgi?id=9359

[color=red]new!! install ldid in Linux, so that you can fake codesign it [/color]

[code]
cd ~/Projects
wget http://svn.telesphoreo.org/trunk/data/ldid/ldid-1.0.476.tgz
tar -zxf ldid-1.0.476.tgz
cd ldid-1.0.476
g++ -I . -o util/ldid{,.cpp} -x c util/{lookup2,sha1}.c
sudo cp -a util/ldid /usr/bin
[/code]

If you need to codesign the iPhone binary in Linux
add this to your build script
[code]
export CODESIGN_ALLOCATE=/usr/toolchain2/pre/bin/arm-apple-darwin9-codesign_allocate; ldid -S $(PROJECTNAME)
[/code]
[color=brown](14) test apache2 and php[/color] so as to see the php info page in the local webserver

In Firefox browser of Ubuntu enter this address
http://localhost/

enable php5 (sometimes you need this)
[code]a2enmod php5[/code]

restart apache server
[code]sudo /etc/init.d/apache2 restart[/code]

create this test.php script in /var/www
[code]sudo chown -R sdkuser:sdkuser /var/www
echo "<?php phpinfo(); ?>" > /var/www/test.php[/code]

and see the php server info in Firefox browser of Ubuntu
http://localhost/test.php

[color=brown](15) create sqlite3 db for testing[/color]
[code]
sudo chown -R sdkuser:sdkuser /var/www
cd /var/www
sqlite3 test.db
sqlite> create table test (id integer primary key, value text);
sqlite> insert into test (value) values('eenie');
sqlite>
sqlite> insert into test (value) values('meenie');
sqlite> insert into test (value) values('miny');
sqlite> insert into test (value) values('mo');
sqlite> select * from test;
sqlite>
sqlite> .exit
[/code]

and test sqlite3 & php5-sqlite3 by using testdb.php script to test the access to sqlite3 db on webserver

[code]
<// Version 0.01
<html>
<head><meta http-equiv="Content-Type" content="text-html; charset=UTF-8" /></head>
<title>iPhone Database</title>
<body>
<?php

$ip_dbpath[] = '/var/www/test.db';

// $ip_dbpath[] = '/var/www/sms.db';
// $ip_dbpath[] = '/var/www/call_history.db';
// $ip_dbpath[] = '/var/www/notes.db';
// $ip_dbpath[] = '/var/www/AddressBook.sqlitedb';
// $ip_dbpath[] = '/var/www/Calendar.sqlitedb';

// db location in iPhone /private/var/mobile/Library/SMS/sms.db
// db location in iPhone /private/var/mobile/Library/CallHistory/call_history.db
// db location in iPhone /private/var/mobile/Library/Notes/notes.db
// db location in iPhone /private/var/mobile/Library/AddressBook/AddressBook.sqlitedb
// db location in iPhone /private/var/mobile/Library/Calendar/Calendar.sqlitedb

$ip_dbdesc[] = 'test';

// $ip_dbdesc[] = 'SMS';
// $ip_dbdesc[] = 'Call History';
// $ip_dbdesc[] = 'Notes';
// $ip_dbdesc[] = 'Address Book';
// $ip_dbdesc[] = 'Calendar';

$ip_query[] = 'SELECT * from test order by 1';
// $ip_query[] = 'SELECT date, address, text FROM message order by 1 desc, 2;';
// $ip_query[] = 'SELECT date, address, duration FROM call order by 1 desc;';
// $ip_query[] = 'SELECT creation_date, data, title FROM Note inner join note_bodies on Note.ROWID = note_bodies.note_id order by 1;';
// $ip_query[] = 'SELECT First, Last, Middle, CreationDate, ModificationDate FROM ABPerson;';
// $ip_query[] = 'SELECT start_date, end_date, summary, location, description FROM Event order by 1, 2;';

// $dbcount = sizeof($ip_dbpath);
// if you uncomment the above db & query and add copy the iPhone db , you can list out the content of sqlitedb of iPhone
$dbcount = 1;

for ($dbnum=0;$dbnum<$dbcount;$dbnum++){

try {
[$#160][$#160][$#160]$dbpath = $ip_dbpath[ $dbnum ];
[$#160][$#160][$#160]$dbh = new PDO('sqlite:'.$dbpath);
[$#160][$#160][$#160]$query = $ip_query[ $dbnum ];
[$#160][$#160][$#160]$stmt = $dbh->prepare($query);
[$#160][$#160][$#160]$stmt->execute();
}
catch (PDOException $e) {
[$#160][$#160][$#160]die("Could not open database" . $e->getMessage());
}
$colcount = $stmt->columnCount();
echo "<h1>". $ip_dbdesc[ $dbnum ] . "</h1>";
echo "<table cellpadding=10 border=1>";

[$#160][$#160][$#160]for ($i=0;$i<$colcount;$i++) {
[$#160][$#160][$#160][$#160][$#160][$#160]$meta = $stmt->getColumnMeta($i);
[$#160][$#160][$#160][$#160][$#160][$#160]echo "<td>".$meta["name"]."</td>";
[$#160][$#160][$#160]}

[$#160][$#160][$#160]while ($row = $stmt->fetch()) {
[$#160][$#160][$#160][$#160][$#160][$#160][$#160]echo "<tr>";
[$#160][$#160][$#160][$#160][$#160][$#160][$#160]for ($i=0;$i<$colcount;$i++) {
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]$meta = $stmt->getColumnMeta($i);
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]if ($meta["native_type"] == "null") {
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]echo "<td> </td>";
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]}
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]elseif (preg_match("/date$/i", $meta["name"])) {
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]echo "<td>". date("j M Y D g.i a", $row[$i])."</td>";
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]}
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]elseif (preg_match("/[call|sms]$/i", $meta["name"]) && $meta["name"] == "address" && strlen(rtrim($row[ $i])) == 8) {
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]echo "<td><A href='Tel:".$row[$i]."'>".$row[$i]."</A></td>";
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]}
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]else {
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]echo "<td>".$row[ $i]."</td>";
[$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160][$#160]}
[$#160][$#160][$#160][$#160][$#160][$#160][$#160]}
[$#160][$#160][$#160][$#160][$#160][$#160][$#160]echo "</tr>";
[$#160][$#160][$#160]}
[$#160][$#160][$#160]echo "</table>";
}
?>
</body>
</html>
[/code]

[img]http://2.bp.blogspot.com/_3LRNVfBfliQ/SRAFBWISjWI/AAAAAAAAAlk/u5I-YoE76iE/s400/ubuntu_android.png[/img]

Additional Notes
-----------------------
If you need to install flash plugin in firefox
[code]sudo apt-get install flashplugin-nonfree[/code]

If you need to install java plugin in firefox
[code]sudo apt-get install sun-java6-plugin[/code]

If you need to install xpdf
[code]sudo apt-get install xpdf-reader[/code]

If you need to install jedit
[code]sudo apt-get install jedit[/code]

If you need to add Chinese Language Support and Input Method

System -> Administration -> Language Support
Choose Chinese
and Support complex characters

System -> Preferences -> SCIM Input Method Setup

You may need to change the hot-key to turn-on/off SCIM as it may collide with your host OS if you need it. Alternatively, you can change input method in the top menu bar near the date

¦^ÂСG 脱[How-to] Install Ubuntu 8.1 in Virtual PC 2007 for iPhone SDK / Android SDK developme Copy to clipboard
Posted by: soft25
Posted on: 2009-11-04 10:25

--

Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Type: text/html; charset=big5 ¡º «u¡DºÆ¡D¤H¡Dºô ¡º
¡º «u¡DºÆ¡D¤H¡Dºô ¡ººô¯¸²{¤w¾E²¾¦Ü·sªºª©­± Apple.ORG.HK Apple¤Hºô




[¿ù»~«H®§]
Table './iphone1/ut_online' is marked as crashed and should be repaired

½Ð³qª¾°Q½×°ÏºÞ²z­û <kk@hkfoot.com>¡C