You are not logged in.

#1 2009-12-27 00:23:12

jzimmek
Member
Registered: 2009-10-04
Posts: 5

howto: install archlinux on amazon ec2

after having some trouble getting archlinux running on amazon ec2, i want to share my steps of how to get things working.

this is no deepdive tutorial on ec2 in general, nor a "run a server"-guide. i prerequisite you have a amazon ec2, s3 account and a basic understanding of amazon cloud service.

we will bootstrap our archlinux from within a running karmic instance, provided by the ubuntu folks. they ship a recent kernel 2.6.31-302-ec2, amazon still has a 2.6.21 which will have trouble with current udev-versions.

official ubuntu ami and informations can be found here: https://help.ubuntu.com/community/EC2StartersGuide

*** step I - starting a ubuntu instance ***

start up ami-a62a01d2 - (ubuntu 9.10 europe) and login (as user ubuntu) via ssh

*** step II - prepare archlinux chroot ***

# change to root
sudo su
cd /

# mount newarch on existing ubuntu swap partition
mkdir /newarch
swapoff /dev/sda3
mkfs.ext3 /dev/sda3
mount /dev/sda3 /newarch


# download and extract pacman.static
wget http://repo.archlinux.fr/i686/pacman-static-3.2.2-1.pkg.tar.gz
tar xzvf pacman-static-3.2.2-1.pkg.tar.gz

mkdir -p /newarch/var/lib/pacman

cat >/etc/pacman.conf <<\EOF
[options]
HoldPkg     = pacman glibc
SyncFirst   = pacman
 
[core]
Server = http://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/i686
Server = http://mirror.umoss.org/archlinux/$repo/os/i686
Server = http://mirror.rit.edu/archlinux/$repo/os/i686
Server = http://mirrors.gigenet.com/archlinux/$repo/os/i686
Include = /etc/pacman.d/mirrorlist
 
[extra]
Server = http://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/i686
Server = http://mirror.umoss.org/archlinux/$repo/os/i686
Server = http://mirror.rit.edu/archlinux/$repo/os/i686
Server = http://mirrors.gigenet.com/archlinux/$repo/os/i686
Include = /etc/pacman.d/mirrorlist
 
[community]
Server = http://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/i686
Server = http://mirror.umoss.org/archlinux/$repo/os/i686
Server = http://mirror.rit.edu/archlinux/$repo/os/i686
Server = http://mirrors.gigenet.com/archlinux/$repo/os/i686
Include = /etc/pacman.d/mirrorlist
EOF

pacman.static --noconfirm -Sy base -r /newarch

# prepare chroot
mount /dev/ /newarch/dev/ --bind
mount /sys/ /newarch/sys/ --bind
mount /proc/ /newarch/proc/ --bind

cp /etc/resolv.conf /newarch/etc/

cp -R /lib/modules/2.6.31-302-ec2 /newarch/lib/modules/

*** step III - entering chroot, complete installation and leaving chroot ***

# entering chroot
chroot /newarch

cat >/etc/locale.gen <<\EOF
en_US.UTF-8 UTF-8  
en_US ISO-8859-1
EOF

locale-gen

# TODO do we really need this ?
grep -v rootfs /proc/mounts > /etc/mtab

cat >/etc/fstab <<\EOF
# /etc/fstab: static file system information.
# <file system>                                 <mount point>   <type>  <options>       <dump>  <pass>
proc                                            /proc           proc    defaults        0       0
/dev/sda3                                       None            swap    defaults        0       0
/dev/sda1                                       /               ext3    defaults        0       0
/dev/sda2                                       /mnt            ext3    defaults        0       0
EOF

# take a mirror in your country
cat >/etc/pacman.d/mirrorlist <<\EOF
Server = http://archlinux.limun.org/$repo/os/i686
Server = ftp://www.archlinuxppc.org/i686/$repo/os/i686
Server = ftp://mirror.giantix-server.de/archlinux/$repo/os/i686
Server = http://mirror.giantix-server.de/archlinux/$repo/os/i686
Server = ftp://ftp5.gwdg.de/pub/linux/archlinux/$repo/os/i686
Server = http://ftp5.gwdg.de/pub/linux/archlinux/$repo/os/i686
Server = ftp://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/i686
Server = http://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/i686
Server = ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/archlinux/$repo/os/i686
Server = http://ftp-stud.hs-esslingen.de/pub/Mirrors/archlinux/$repo/os/i686
EOF

# install openssh
pacman --noconfirm -S openssh curl

# add sshd in DAEMONS array
sed -i 's/netfs crond)/netfs crond sshd)/' /etc/rc.conf

# enable remote access
cat >/etc/hosts.allow <<\EOF
sshd: ALL: ALLOW
EOF

cat >/etc/rc.local <<\EOF
mkdir -p /root/.ssh
curl --retry 3 --retry-delay 5 --silent --fail -o /root/.ssh/authorized_keys http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key

if curl --retry 3 --retry-delay 5 --silent --fail -o /root/user-data http://169.254.169.254/1.0/user-data; then
   bash /root/user-data
fi
rm -f /root/user-data
EOF

# leaving chroot
exit

*** step IV - install ec2 tools and do some cleanup ***

# enable multiverse in source.list
sed -i 's/karmic main universe/karmic main universe multiverse/' /etc/apt/sources.list

apt-get update

apt-get --yes install ec2-api-tools ec2-ami-tools

# do some cleanup before rebundling
rm -f /root/.*hist* $HOME/.*hist*
rm -f /var/log/*.gz

*** step V - export your amazon security credentials ***

export AMAZON_USER_ID='XXXXXXXXXXX'
export AMAZON_ACCESS_KEY_ID='XXXXXXXXXXXXXX'
export AMAZON_SECRET_ACCESS_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

export RELEASE=`date '+%Y%m%d%H%M%S'`

# enter your s3 bucket here
export BUCKET="XXXXXXXXXXXXX"

export PREFIX="archlinux-i686-${RELEASE}"

cat >/mnt/pk.pem <<\EOF
-----BEGIN PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXX
-----END PRIVATE KEY-----
EOF

cat >/mnt/cert.pem <<\EOF
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXX
-----END CERTIFICATE-----
EOF

export EC2_PRIVATE_KEY=/mnt/pk.pem
export EC2_CERT=/mnt/cert.pem

*** step VI - bundle, upload and register your archlinux instance ***

ec2-bundle-vol \
-v /newarch \
-r i386 \
-d /mnt \
-p ${PREFIX} \
-u ${AMAZON_USER_ID} \
-k ${EC2_PRIVATE_KEY} \
-c ${EC2_CERT} \
-s 10000 \
-e /mnt,/root

ec2-upload-bundle \
-b ${BUCKET} \
-m /mnt/${PREFIX}.manifest.xml \
-a ${AMAZON_ACCESS_KEY_ID} \
-s ${AMAZON_SECRET_ACCESS_KEY}

ec2-register --region eu-west-1 -K ${EC2_PRIVATE_KEY} -C ${EC2_CERT} ${BUCKET}/${PREFIX}.manifest.xml

the last command will print out something like this:

IMAGE   ami-affbd0db

congratulations, this is your very own archlinux ami.


regards
jan zimmek

Offline

#2 2009-12-27 01:23:35

tomk
Forum Fellow
From: Ireland
Registered: 2004-07-21
Posts: 9,839

Re: howto: install archlinux on amazon ec2

Cool stuff jzimmek - you should consider adding it to the wiki, which is more appropriate for howtos like this.

Offline

#3 2010-06-23 02:18:06

RkG
Member
Registered: 2010-05-13
Posts: 12
Website

Re: howto: install archlinux on amazon ec2

Thanks for the excelent tutorial, I've followed (when the instructions still working) it and sucessfully generated my ami, (now that pacman-static doesn't exists its a bit tricky)... now my only problem is that instances aren't booting, the log is also empty... maybe the kernel version isn't compatible or something similar? Any suggestions? Thank you

Last edited by RkG (2010-06-23 02:29:58)


"Making the simple complicated is commonplace; making the complicated simple, awesomely simple, that's creativity." — Jazz composer and bassist, Charles Mingus

Offline

#4 2012-06-26 17:22:10

drozzy
Member
Registered: 2012-04-26
Posts: 5

Re: howto: install archlinux on amazon ec2

Just curious, how much do you end up paying for archlinux ami? Do you think I can convert my free-trial ubuntu ami into Archlinux? That would be great.
Also, are there any archlinux pre-made ami's available?

Last edited by drozzy (2012-06-26 17:23:00)

Offline

#5 2012-06-29 05:46:11

shadyabhi
Member
From: Bangalore
Registered: 2010-05-23
Posts: 262
Website

Re: howto: install archlinux on amazon ec2

drozzy wrote:

Just curious, how much do you end up paying for archlinux ami? Do you think I can convert my free-trial ubuntu ami into Archlinux? That would be great.
Also, are there any archlinux pre-made ami's available?

I run this instance https://aws.amazon.com/amis/archlinux under free tier. No issues of being charged at all.

Last edited by shadyabhi (2012-06-29 05:46:39)

Offline

Board footer

Powered by FluxBB