Importing OpenSolaris EC2 Image on Local Xen Environment

In this blog entry, I am going to walk you through the steps for importing OpenSolaris Amazon EC2 AMI on local Xen environment running on OpenSolaris 2008.11.
I assume
- you are running OpenSolaris 2008.11 build rc2 dom0.
- ec2 ami/api tools installed at /opt/ec2
- your ec2 certificate and private key files available at /opt/ec2/keys
- your ec2 keypair file located at /opt/ec2
[ Step-1 ]
Launch fresh OpenSolaris 2008.11 AMI Instance
ec2-run-instances ami-7db75014 -k your-keypair
Login in with your keypair file
![]()
ssh -i /opt/ec2/your-keypair root@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
[ Step-2 ]
Remove EC2 specific stuff from the instance.
Open “/etc/ssh/sshd_config” and replace “PermitRootLogin without-password” with “PermitRootLogin yes” and save the file.
Set the root password
![]()
passwd
passwd: Changing password for root
New Password:
Re-enter new Password:
passwd: password successfully changed for root
Disable and remove ec2 specific services
svcadm disable svc:/ec2/sshkey:default
svcadm disable svc:/ec2/fixes:default
svcadm disable svc:/ec2/mount:default
svccfg delete svc:/ec2/sshkey:default
svccfg delete svc:/ec2/fixes:default
svccfg delete svc:/ec2/mount:default
[ Step-3 ]
Log out of the ec2 instance and transfer your keys at /mnt/keys to begin re-bundling image.
![]()
scp -i /opt/ec2/id-your-keypair -r /opt/ec2/keys/ root@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:/mnt
[ Step-4 ]
Login back to ec2 instance.
![]()
ssh -i /opt/ec2/your-keypair root@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
[ Step-5 ]
Start bundling the image.
![]()
# cd /mnt
# /opt/ec2/sbin/rebundle.sh -v opensolaris_2008_11_ami.img
Creating image file /mnt/opensolaris_2008_11_ami.img
Preparing clone pool on /dev/lofi/1
Cloning
#
rebundle.sh will take about 10-15 minutes to create raw opensolaris image.
[ Step-6 ]
Bundle image and create parts.
![]()
export BUCKET=my-bucket
export JAVA_HOME=/usr/jdk/latest
export EC2_HOME=/opt/ec2
export PATH=$PATH:$EC2_HOME/bin
export RUBYLIB=$EC2_HOME/lib
export EC2_URL=https://ec2.amazonaws.com
export EC2_PRIVATE_KEY=/mnt/keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=/mnt/keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_KEYID=xxxxxxxxxxxxxxxxxxxxxxx
export EC2_KEY=”xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
export DIRECTORY=/mnt
export IMAGE=opensolaris_2008_11_ami.img
# ec2-bundle-image -c $EC2_CERT -k $EC2_PRIVATE_KEY \
–kernel aki-6552b60c –ramdisk ari-6452b60d \
–block-device-mapping “root=rpool/52@0,ami=0,ephemeral0=1″ \
–user <user-id> –arch i386 \
-i $DIRECTORY/$IMAGE -d $DIRECTORY/parts
[ Step-7 ]
Upload image parts on s3
![]()
# cd $DIRECTORY/parts
# ec2-upload-bundle -b $BUCKET -m opensolaris_2008_11_ami.img.manifest.xml \
–url http://s3.amazonaws.com \
–retry -a $EC2_KEYID -s $EC2_KEY
[ Step-8 ]
Log out of the instance.
Download image parts and unbundle it to re-create the raw image locally.
![]()
# mkdir /osol-ec2-image
# mkdir /osol-ec2-image/parts
# cd /osol-ec2-image/parts
# ec2-download-bundle -b my-bucket -m opensolaris_2008_11_ami.img.manifest.xml \
-a <your-access-key-id> -s <your-secret-key-id> \
–privatekey /opt/ec2/keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx .pem
# ec2-unbundle -m opensolaris_2008_11_ami.img.manifest.xml \
-k /opt/ec2/keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx .pem
# mv opensolaris_2008_11_ami.img
# cd /osol-ec2-image/
[ Step-9 ]
Create “domu.py” at /osol-ec2-image with following lines
vcpus = 1
memory = “1024″
disk = ['file://osol-ec2-image/opensolaris_2008_11_ami.img,0,w']
vif = ['']
on_shutdown = “destroy”
on_reboot = “restart”
on_crash = “destroy”
[ Step-10 ]
Launch domu image and login with root user and the password you set during step-2
![]()
xm create domu.py
Using config file “./domu.py”.
Started domain opensolaris-ec2-image
![]()
xm console opensolaris-ec2-image
v3.1.4-xvm chgset ‘Mon Oct 13 22:14:51 2008 -0700 15904:94bd0a643efe’
SunOS Release 5.11 Version snv_101b 32-bit
Copyright 1983-2008 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Hostname: dhcp-umpk16-85-23
Reading ZFS config: done.
Mounting ZFS filesystems: (5/5)
dhcp-umpk16-85-23 console login:
typo: /mny/keys should be /mnt/keys
thanks. Corrected that.