--- wikisrc/amazon_ec2.mdwn 2011/02/18 02:14:27 1.10
+++ wikisrc/amazon_ec2.mdwn 2011/02/18 03:52:23 1.17
@@ -15,7 +15,7 @@ Before you can start playing with Amazon
1. you "sign-up" directly on [Amazon Web Services](http://aws.amazon.com/) home-page. This is where you enter your credentials, and confirm your AWS account registration.
1. you sign-up to EC2 through [EC2 AWS home-page](http://aws.amazon.com/ec2/). You will be asked some more information, like a credit card (for billing), and a phone-number, for account validation.
-## What do you need to know
+## What do you need to know?
EC2 uses different types of credentials. In addition to your login and password, you need an access key, a X.509 certificate (with its private key), and a pair of RSA keys, for remote SSH access.
@@ -54,7 +54,7 @@ export EC2_SECRET_KEY=MYSECRETACCESSKEY
Please note that the rest of the tutorial will assume that these variables are set.
-### Installing EC2 API tools
+## Installing EC2 API tools
NetBSD provides EC2 API tools, to ease EC2 account management a little bit. The package is found inside [pkgsrc](http://www.pkgsrc.org), under [[!template id=pkg category=misc name=ec2-api-tools]].
@@ -65,7 +65,7 @@ make ACCEPTABLE_LICENSES+=amazon-softwar
Package depends on Java, so build will take some time to finish. While it builds, just continue reading.
-### EC2 vocabulary -- last notes
+## EC2 vocabulary -- last notes
Before starting to play with EC2, you need to be familiar with the EC2 vocabulary used throughout this tutorial.
@@ -77,11 +77,7 @@ These instances are tied to a *region* (
AKI, or *Amazon Kernel Image*, are a specific type of image. It represents the Xen guest para-virtualized kernel, as used by an AMI. Certain AKIs are allowed to boot customized operating systems, e.g. those that are still not officially supported by Amazon. Thanks to [PyGrub](http://wiki.xensource.com/xenwiki/PyGrub), it can boot a kernel that resides inside an AMI's snapshot.
-# Building your first AMI (Amazon Image)
-
-## Pre-built AMIs
-
-(For the future) Once NetBSD has decent support for Amazon EC2, we will publish the AMI identifiers so you can quickly boot up in a NetBSD environment without going through all the steps given below.
+# Build-up your NetBSD system
## Fetch and build NetBSD
@@ -93,7 +89,7 @@ This tutorial assumes that you will buil
XXX build and install /mnt/ec2
-## Configuration
+# Configuration of your NetBSD EC2 tree
/!\This part assumes that you have a non-configured NetBSD system extracted under */mnt/ec2*; that is, it should have not been modified through [[!template id=man name=sysinst section=8]], nor by you.
@@ -140,7 +136,7 @@ Image `NetBSD-AMI.img' complete
$ gzip -9n NetBSD-AMI.img
"""]]
-## Upload your OS
+# Upload NetBSD to EC2
We must now upload our NetBSD system to EC2. For that, we will have to create a minimalist EC2 instance, to which we will copy our files to construct our snapshots. For that, we will use an Amazon Linux AMI instance.
@@ -148,7 +144,7 @@ EC2 being localized in geographical regi
The examples listed here assume that the instances run in **US East**, within the **c** zone (e.g. **us-east-1c**). To have a list of EC2 regions, you can use the command **ec2-describe-regions**, and **ec2-describe-availability-zones** for availability zones.
-### Creating the instance
+## Create an Amazon Linux instance
Creating an instance straightforward. Amazon provides [different types of instances](http://aws.amazon.com/ec2/pricing/), with varying levels of billing and reliability. We will use a [*micro* instance](http://aws.amazon.com/ec2/faqs/#How_much_compute_power_do_Micro_instances_provide); its pricing is almost free.
@@ -166,15 +162,13 @@ $ sleep 5 && ec2-describe-instances i-5b
INSTANCE i-5babe737 ami-74f0061d ec2-67-202-24-108.compute-1.amazonaws.com ip-10-99-86-193.ec2.internal running <your_ssh_key_pair_name> 0 t1.micro 2011-02-17T23:22:37+0000 us-east-1c aki-427d952b monitoring-disabled 67.202.24.108 10.99.86.193 ebs
"""]]
-### Upload your files
+## Create and attach your NetBSD volumes
We will have to create and attach two EBS volumes:
1. one to contain the Grub *menu.lst* config file, as well as the NetBSD kernel.
1. the other one will contain the root file-system.
-#### Creating and attaching volumes
-
[[!template id=programlisting text="""
ec2-create-volume -s 1 -z us-east-1c # 1GiB -- will be used for Grub and kernel
VOLUME vol-24f88d4c 1 us-east-1c creating 2011-02-18T00:06:21+0000
@@ -197,9 +191,9 @@ VOLUME vol-24f88d4c 1
ATTACHMENT vol-24f88d4c i-5babe737 /dev/sdg attached 2011-02-18T00:14:10+0000
"""]]
-### Snapshots!
+## Snapshots!
-We have to upload the kernel and the NetBSD disk image created earlier, *NetBSD-AMI.img*, to our instance host:
+We can now upload the kernel and the NetBSD disk image created earlier, *NetBSD-AMI.img*, to our instance host:
[[!template id=programlisting text="""
# Upload kernel to Linux AMI
@@ -210,7 +204,15 @@ rsync -aPv -e "ssh -i $EC2_SSH_KEY" NetB
ec2-user@ec2-67-202-24-108.compute-1.amazonaws.com:
"""]]
-Connect to the instance, through its name. We will format and mount the Grub partition, create the *menu.lst* file, then copy files to their respective partitions.
+Before we can connect to our brand new instance, we have to allow connections on SSH port (22) through the AWS EC2 firewall:
+
+[[!template id=programlisting text="""
+$ ec2-authorize default -p 22
+GROUP default
+PERMISSION default ALLOWS tcp 22 22 FROM CIDR 0.0.0.0/0
+"""]]
+
+Then, log in to the instance, via its name. We will format and mount the Grub partition, create the *menu.lst* file, then copy files to their respective partitions.
[[!template id=programlisting text="""
$ ec2-describe-instances i-5babe737
@@ -224,13 +226,13 @@ $ ssh -i "$EC2_SSH_KEY" ec2-user@ec2-67-
[root@ip-10-99-86-193 ec2-user]# mount /dev/sdg /mnt/grub/
[root@ip-10-99-86-193 ec2-user]# mkdir -p /mnt/grub/boot/grub/
[root@ip-10-99-86-193 ec2-user]# cat > /mnt/grub/boot/grub/menu.lst << EOF
- default=0
- timeout=0
- hiddenmenu
-
- title NetBSD AMI
- root (hd0)
- kernel /boot/netbsd root=xbd1
+default=0
+timeout=0
+hiddenmenu
+
+title NetBSD AMI
+root (hd0)
+kernel /boot/netbsd root=xbd1
EOF
[root@ip-10-99-86-193 ec2-user]# mv netbsd /mnt/grub/boot/
[root@ip-10-99-86-193 ec2-user]# umount /dev/sdg
@@ -238,7 +240,7 @@ EOF
[root@ip-10-99-86-193 ec2-user]# sync
"""]]
-### Shutdown the Linux instance
+## Shutdown the Linux instance
We now have to detach volumes, snapshot them, then we shutdown the Linux instance.
@@ -255,6 +257,8 @@ SNAPSHOT snap-8aef2be6IMAGE aki-427d952b ec2-public-images/pv-grub-hd0-V1.01-x86_64.gz.manifest.xml amazon available public x86_64 kernel instance-store paravirtual xen
IMAGE aki-4c7d9525 ec2-public-images/pv-grub-hd00-V1.01-i386.gz.manifest.xml amazon available public i386 kernel instance-store paravirtual xen
-IMAGE aki-4e7d9527 ec2-public-images/pv-grub-hd00-V1.01-x86_64.gz.manifest.xml amazon available public x86_64 kernel instance-store paravirtual xen
+IMAGE aki-4e7d9527 ec2-public-images/pv-grub-hd00-V1.01-x86_64.gz.manifest.xml amazon available public x86_64 kernel instance-store paravirtual xen
"""]]
-We pick the one with the correct architecture (x86_64). Its ID is **aki-4e7d9527**. Then we can proceed to the creation of our AMI, with:
+Pick the one with the correct architecture (x86_64 here). **hd0** are for AMIs where the snapshot contains no partition (where the volume is itself the whole partition), while **hd00** are for snapshots partitioned in a classical way (via MBR). Choose **hd0** AKIs. In this case, that will be **aki-427d952b**.
+
+We can proceed to the creation of our AMI, with:
-1. */dev/sda1* as Grub partition (*/dev/sdg*, snapshot *snap-8aef2be6* of volume *vol-24f88d4c*)
-1. */dev/sda2* as root file-system (*/dev/sdf*, snapshot *snap-deef2bb2* of volume *vol-36f88d5e*)
+1. */dev/sda1* as Grub partition (*/dev/sdg*, snapshot **snap-8aef2be6** of volume **vol-24f88d4c**)
+1. */dev/sda2* as root file-system (*/dev/sdf*, snapshot **snap-deef2bb2** of volume **vol-36f88d5e**)
[[!template id=programlisting text="""
$ ec2-register -a x86_64 --kernel aki-4e7d9527 --region us-east-1 \
-b "/dev/sda1=snap-8aef2be6" -b "/dev/sda2=snap-deef2bb2" -n "NetBSD-x86_64-current" \
-d "<add your own description here>
-IMAGE ami-74d0231d
+IMAGE ami-74d0231d
"""]]
-# Play with your first NetBSD instance
+## Launch your first instance
You can now start your own NetBSD instance, via:
@@ -292,13 +298,20 @@ You can now start your own NetBSD instan
$ ec2-run-instances ami-74d0231d -t t1.micro -z us-east-1c
RESERVATION r-08218465 983624114127 default
INSTANCE i-953d72f9 ami-74d0231d pending 0 t1.micro 2011-02-18T02:05:46+0000 us-east-1c aki-4e7d9527 monitoring-disabled
+*** Wait a few minutes, micro instances take time to start ***
+# Query console output for your new instance
$ ec2-get-console-output i-953d72f9
-[...]
+Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007, 2008, 2009, 2010, 2011
+ The NetBSD Foundation, Inc. All rights reserved.
+Copyright (c) 1982, 1986, 1989, 1991, 1993
+ The Regents of the University of California. All rights reserved.
+NetBSD 5.99.45 (XEN3_DOMU) #9: Wed Feb 16 21:14:49 CET 2011
+ jym@paris:/home/jym/cvs/obj/sys/arch/amd64/compile/XEN3_DOMU
+[...]
"""]]
-## Create the instance
-
-## Connect to it
+## Connect to your NetBSD instance
## And now?