version 1.21, 2011/02/19 02:42:58
|
version 1.23, 2011/02/19 04:34:56
|
Line 77 These instances are tied to a *region* (
|
Line 77 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. |
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. |
|
|
|
# Using pre-made AMIs |
|
|
|
XXX TODO |
|
|
# Build-up your NetBSD system |
# Build-up your NetBSD system |
|
|
## Fetch and build NetBSD |
## Fetch and build NetBSD |
Line 90 This tutorial assumes that you will buil
|
Line 94 This tutorial assumes that you will buil
|
[Details regarding on how you can fetch *src* are given in the NetBSD's guide](http://www.netbsd.org/docs/guide/en/chap-fetch.html). Here are the basic commands you should type to build and install NetBSD under */mnt/ec2*: |
[Details regarding on how you can fetch *src* are given in the NetBSD's guide](http://www.netbsd.org/docs/guide/en/chap-fetch.html). Here are the basic commands you should type to build and install NetBSD under */mnt/ec2*: |
|
|
[[!template id=programlisting text=""" |
[[!template id=programlisting text=""" |
# fetch src.tgz |
cd /usr/ |
# decompress |
# grab a recent src.tgz file (use curl(1), ftp(1), wget(1), ...) |
# build toolchain, kernel and distribution |
ftp -a 'http://ftp.netbsd.org/pub/NetBSD/NetBSD-current/tar_files/src.tar.gz' |
# install in /mnt/ec2 |
# Decompress |
|
tar -xzpf src.tar.gz |
|
cd src |
|
# build distribution and kernel |
|
./build.sh -O ../obj -T ../tools -D ../dest -R ../release -m amd64 -U distribution |
|
./build.sh -O ../obj -T ../tools -m amd64 kernel=XEN3_DOMU |
|
# install distribution in /mnt/ec2 |
|
./build.sh -O ../obj -T ../tools -D ../dest -R ../release -U install=/mnt/ec2 |
"""]] |
"""]] |
|
|
# Configuration of your NetBSD EC2 tree |
# Configuration of your NetBSD EC2 tree |
Line 105 Under */mnt/ec2*, edit the files to add
|
Line 116 Under */mnt/ec2*, edit the files to add
|
[[!template id=filecontent name=etc/rc.conf text=""" |
[[!template id=filecontent name=etc/rc.conf text=""" |
rc_configured=YES |
rc_configured=YES |
|
|
hostname=NetBSD-EC2-$(uname -m) |
|
sshd=YES # for remote shell access to instance |
sshd=YES # for remote shell access to instance |
"""]] |
"""]] |
|
|
Line 114 sshd=YES # for remote shell access to in
|
Line 124 sshd=YES # for remote shell access to in
|
PermitRootLogin without-password |
PermitRootLogin without-password |
"""]] |
"""]] |
|
|
This file is needed if you want to login via the SSH key pair created previously: |
This file is needed if you want to login via the EC2 SSH key pair created previously: |
|
|
[[!template id=filecontent name=etc/rc.d/ec2-init text=""" |
[[!template id=filecontent name=etc/rc.d/ec2-init text=""" |
#!/bin/sh |
#!/bin/sh |
Line 129 name="ec2_init"
|
Line 139 name="ec2_init"
|
start_cmd="ec2_init" |
start_cmd="ec2_init" |
stop_cmd=":" |
stop_cmd=":" |
|
|
SSH_KEY_URL="http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key" |
METADATA_URL="http://169.254.169.254/latest/meta-data/" |
|
SSH_KEY_URL="public-keys/0/openssh-key" |
|
HOSTNAME_URL="hostname" |
|
|
SSH_KEY_FILE="/root/.ssh/authorized_keys" |
SSH_KEY_FILE="/root/.ssh/authorized_keys" |
|
|
ec2_init() |
ec2_init() |
Line 137 ec2_init()
|
Line 150 ec2_init()
|
( |
( |
umask 022 |
umask 022 |
# fetch the key pair from Amazon Web Services |
# fetch the key pair from Amazon Web Services |
EC2_SSH_KEY=$(ftp -o - "$SSH_KEY_URL") |
EC2_SSH_KEY=$(ftp -o - "${METADATA_URL}${SSH_KEY_URL}") |
|
|
if [ -n "$EC2_SSH_KEY" ]; then |
if [ -n "$EC2_SSH_KEY" ]; then |
# A key pair is associated with this instance, add it |
# A key pair is associated with this instance, add it |
# to root 'authorized_keys' file |
# to root 'authorized_keys' file |
mkdir -p $(dirname "$SSH_KEY_FILE") |
mkdir -p $(dirname "$SSH_KEY_FILE") |
|
touch "$SSH_KEY_FILE" |
cd $(dirname "$SSH_KEY_FILE") |
cd $(dirname "$SSH_KEY_FILE") |
|
|
grep "$EC2_SSH_KEY" "$SSH_KEY_FILE" |
grep -q "$EC2_SSH_KEY" "$SSH_KEY_FILE" |
if [ $? -eq 0 ]; then |
if [ $? -ne 0 ]; then |
echo "Setting associated SSH key pair." |
echo "Setting EC2 SSH key pair: ${EC2_SSH_KEY##* }" |
echo "$EC2_SSH_KEY" >> "$SSH_KEY_FILE" |
echo "$EC2_SSH_KEY" >> "$SSH_KEY_FILE" |
fi |
fi |
fi |
fi |
|
|
|
# set hostname |
|
HOSTNAME=$(ftp -o - "${METADATA_URL}${HOSTNAME_URL}") |
|
echo "Setting EC2 hostname: ${HOSTNAME}" |
|
echo "$HOSTNAME" > /etc/myname |
|
hostname "$HOSTNAME" |
) |
) |
} |
} |
|
|
|
|
|
load_rc_config $name |
|
run_rc_command "$1" |
"""]] |
"""]] |
|
|
Create various files and directories: |
Create various files and directories: |
Line 161 Create various files and directories:
|
Line 184 Create various files and directories:
|
[[!template id=programlisting text=""" |
[[!template id=programlisting text=""" |
cd /mnt/ec2 |
cd /mnt/ec2 |
# Add proc and kern directories |
# Add proc and kern directories |
mkdir proc kern |
mkdir grub kern proc |
# EC2 network configuration, via DHCP |
# EC2 network configuration, via DHCP |
echo "dhcp" > etc/ifconfig.xennet0 |
echo "dhcp" > etc/ifconfig.xennet0 |
# Basic fstab entries |
# Basic fstab entries |
cat > etc/fstab << EOF |
cat > etc/fstab << EOF |
/dev/xbd1a / ffs rw 1 1 |
/dev/xbd1a / ffs rw 1 1 |
/dev/xbd0a /grub ext2 rw 2 2 |
/dev/xbd0a /grub ext2fs rw 2 2 |
kernfs /kern kernfs rw |
kernfs /kern kernfs rw |
ptyfs /dev/pts ptyfs rw |
ptyfs /dev/pts ptyfs rw |
procfs /proc procfs rw |
procfs /proc procfs rw |
Line 365 Copyright (c) 1982, 1986, 1989, 1991, 19
|
Line 388 Copyright (c) 1982, 1986, 1989, 1991, 19
|
The Regents of the University of California. All rights reserved. |
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 |
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 |
|
[...] |
[...] |
|
NetBSD/amd64 (ip-10-112-58-223.ec2.internal) (console) |
|
|
|
login: |
"""]] |
"""]] |
|
|
## Connect to your NetBSD instance |
## Connect to your NetBSD instance |
|
|
|
Connection is similar to the one you used for the Amazon Linux instance, except that you login as "root" instead of "ec2-user": |
|
|
|
[[!template id=programlisting text=""" |
|
$ ec2-describe-instances i-953d72f9 |
|
RESERVATION r-da8021b7 983624114127 default |
|
INSTANCE i-953d72f9 ami-74d0231d <strong>ec2-50-16-3-55.compute-1.amazonaws.com</strong> ip-10-112-58-223.ec2.internal running <your_ssh_key_pair_name> 0 t1.micro 2011-02-19T04:01:03+0000 us-east-1c aki-427d952b monitoring-disabled 50.16.3.55 10.112.58.223 ebs paravirtual xen |
|
BLOCKDEVICE /dev/sda1 vol-ec3c4a84 2011-02-19T04:01:31.000Z |
|
BLOCKDEVICE /dev/sda2 vol-ee3c4a86 2011-02-19T04:01:31.000Z |
|
$ ssh -i "$EC2_SSH_KEY" root@ec2-50-16-3-55.compute-1.amazonaws.com |
|
The authenticity of host 'ec2-50-16-3-55.compute-1.amazonaws.com (50.16.3.55)' can't be established. |
|
[...] |
|
Thank you for helping us test and improve NetBSD. |
|
|
|
Terminal type is xterm. |
|
We recommend that you create a non-root account and use su(1) for root access. |
|
ip-10-112-58-223# uname -a |
|
NetBSD ip-10-112-58-223.ec2.internal 5.99.45 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 amd64 |
|
ip-10-112-58-223# |
|
"""]] |
|
|
|
Done! |
|
|
## And now? |
## And now? |
|
|
|
Well, you got a NetBSD instance that is in almost every part similar to what a NetBSD domU can be. You can use this domU to host Internet services, run a database, extend your build farm, or use it as a sandbox. The AMI being built around snapshots, you can play and break your instance in every way you want; just restart one anew if you need to. Don't forget that Amazon will charge acccordingly :) |
|
|
|
Remember, you can query information regarding your AWS account through [[!template id=pkg category=misc name=ec2-api-tools]] package. It is quite easy to use these tools for scripting; for a more elaborate, graphical interface, use the [Amazon Management Console](https://console.aws.amazon.com/ec2/home). |