Install Alpine on Amazon EC2: Difference between revisions
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
The goal here is to have a "1GB" (the smallest possible) EBS 'virtual usb stick' that can boot and run Alpine Linux. | The goal here is to have a "1GB" (the smallest possible) EBS 'virtual usb stick' that can boot and run Alpine Linux. | ||
= Create | = Create an EBS backed Alpine Linux AMI = | ||
{{Note|You need to do this process at least once in each availability region. EBS can't be shared between Ireland and California, for instance.}} | {{Note|You need to do this process at least once in each availability region. EBS can't be shared between Ireland and California, for instance.}} | ||
* Create an Amazon instance in the desired availabity region. A micro instance is fine - we will need it only long enough to create our EBS usb stick. | |||
* Create a new 1GB EBS volume | |||
* Attach the new volume to the running instance | |||
* The new volume will have a name like /dev/xvdf or such | |||
* Format the volume as ext4 {{Cmd|mke2fs -t ext4 /dev/xvdf}} ''Do not partition it - just format the whole volume'' | |||
* wget a '''x86_64''' iso and extract it to the new volume. 32bit will not work. | |||
<pre> | |||
wget http://dl-4.alpinelinux.org/alpine/v2.4/releases/x86_64/alpine-2.4.5-x86_64.iso | |||
mkdir target | |||
mkdir source | |||
mount /dev/xvdf target | |||
mount -o loop alpine-2.4.5-x86_64.iso source | |||
cp -av source/boot target | |||
cp -av source/apks target | |||
umount source | |||
</pre> | |||
* Create a grub.conf on the new partition. | |||
<pre> | <pre> | ||
mkdir -p target/boot/grub | |||
cat - >target/boot/grub/grub.conf <<EOF | |||
default=0 | default=0 | ||
timeout=3 | timeout=3 | ||
hiddenmenu | hiddenmenu | ||
Line 40: | Line 33: | ||
title Alpine Linux | title Alpine Linux | ||
root (hd0) | root (hd0) | ||
kernel /boot/grsec alpine_dev=xvda1:ext4 | kernel /boot/grsec alpine_dev=xvda1:ext4 modules=loop,squashfs,sd-mod,ext4 console=hvc0 pax_nouderef BOOT_IMAGE=/boot/grsec | ||
modules=loop,squashfs,sd-mod,ext4 console=hvc0 | |||
initrd /boot/grsec.gz | initrd /boot/grsec.gz | ||
EOF | |||
</pre> | |||
:* Syslinux automatically adds BOOT_IMAGE to the kernel command line; grub does not, so make sure you specify it in the grub.conf | |||
:* You do not need any other grub files - just boot.conf | |||
* symlink the grub.conf to menu.lst | |||
<pre> | |||
ln -sf ./grub.conf target/boot/grub/menu.lst | |||
</pre> | |||
* Create an amazon.apkovl.tar.gz file to put on the target | |||
** This is probably easiest on a local alpine linux instance. Make sure the following are configured: | |||
*** eth0 uses dhcp | |||
*** networking is set to autostart | |||
*** sshd is installed and set to autostart | |||
*** your ssh public key is in /root/.ssh/authorized_keys | |||
*** the root password is set to something | |||
*** lbu include root/.ssh | |||
*** (optional) - eldete the /etc/ssh/*key* files, so they are created on the new box | |||
** {{Cmd|lbu package amazon.apkovl.tar.gz}} {{Warning|If you are packaging on a 32bit box, manually delete etc/apk/arch from the apkovl.tar.gz file}} | |||
** copy amazon.apkovl.tar.gz to target/ | |||
* Unmount target | |||
* '''Do the following from the Amazon web interface''' | |||
** Detach the new volume | |||
** Make note of the volume ID | |||
** Launch NEW instance. Use defaults, amazon linux, micro; we are going to canibalize it in a bit, so defaults are fine here. | |||
** Once the instance starts, ''stop'' but ''do not terminate'' the instance. | |||
** Under EBS, detach the existing volume, and attach the alpine linux volume as /dev/sda1 (note the 1 at the end) | |||
** Restart the instance | |||
* Log in and make sure it works | |||
* Do any final cleanups necessary, and if necessary lbu ci | |||
** Only make configs that are appropriate for an AMI, we are going to snapshot this instance and create an AMI out of it | |||
* Again from the Amazon web interface | |||
** Delete the 8GB volume that is no longer needed | |||
** ''Stop'' but do not terminate the instance | |||
** right click the stopped instance and choose 'Create Image (EBS AMI)' | |||
*** Image name should be unique for the image - example AlpineLinux-2.4.5 | |||
*** Description can be anything - example 'Base AlpineLinux Installation - no services' | |||
* Done. | |||
[[Category:Virtualization]] | [[Category:Virtualization]] |
Revision as of 22:29, 21 July 2012
This material is work-in-progress ... Do not follow instructions here until this notice is removed. |
The goal here is to have a "1GB" (the smallest possible) EBS 'virtual usb stick' that can boot and run Alpine Linux.
Create an EBS backed Alpine Linux AMI
Note: You need to do this process at least once in each availability region. EBS can't be shared between Ireland and California, for instance.
- Create an Amazon instance in the desired availabity region. A micro instance is fine - we will need it only long enough to create our EBS usb stick.
- Create a new 1GB EBS volume
- Attach the new volume to the running instance
- The new volume will have a name like /dev/xvdf or such
- Format the volume as ext4
mke2fs -t ext4 /dev/xvdf
Do not partition it - just format the whole volume - wget a x86_64 iso and extract it to the new volume. 32bit will not work.
wget http://dl-4.alpinelinux.org/alpine/v2.4/releases/x86_64/alpine-2.4.5-x86_64.iso mkdir target mkdir source mount /dev/xvdf target mount -o loop alpine-2.4.5-x86_64.iso source cp -av source/boot target cp -av source/apks target umount source
- Create a grub.conf on the new partition.
mkdir -p target/boot/grub cat - >target/boot/grub/grub.conf <<EOF default=0 timeout=3 hiddenmenu title Alpine Linux root (hd0) kernel /boot/grsec alpine_dev=xvda1:ext4 modules=loop,squashfs,sd-mod,ext4 console=hvc0 pax_nouderef BOOT_IMAGE=/boot/grsec initrd /boot/grsec.gz EOF
- Syslinux automatically adds BOOT_IMAGE to the kernel command line; grub does not, so make sure you specify it in the grub.conf
- You do not need any other grub files - just boot.conf
- symlink the grub.conf to menu.lst
ln -sf ./grub.conf target/boot/grub/menu.lst
- Create an amazon.apkovl.tar.gz file to put on the target
- This is probably easiest on a local alpine linux instance. Make sure the following are configured:
- eth0 uses dhcp
- networking is set to autostart
- sshd is installed and set to autostart
- your ssh public key is in /root/.ssh/authorized_keys
- the root password is set to something
- lbu include root/.ssh
- (optional) - eldete the /etc/ssh/*key* files, so they are created on the new box
lbu package amazon.apkovl.tar.gz
Warning: If you are packaging on a 32bit box, manually delete etc/apk/arch from the apkovl.tar.gz file- copy amazon.apkovl.tar.gz to target/
- This is probably easiest on a local alpine linux instance. Make sure the following are configured:
- Unmount target
- Do the following from the Amazon web interface
- Detach the new volume
- Make note of the volume ID
- Launch NEW instance. Use defaults, amazon linux, micro; we are going to canibalize it in a bit, so defaults are fine here.
- Once the instance starts, stop but do not terminate the instance.
- Under EBS, detach the existing volume, and attach the alpine linux volume as /dev/sda1 (note the 1 at the end)
- Restart the instance
- Log in and make sure it works
- Do any final cleanups necessary, and if necessary lbu ci
- Only make configs that are appropriate for an AMI, we are going to snapshot this instance and create an AMI out of it
- Again from the Amazon web interface
- Delete the 8GB volume that is no longer needed
- Stop but do not terminate the instance
- right click the stopped instance and choose 'Create Image (EBS AMI)'
- Image name should be unique for the image - example AlpineLinux-2.4.5
- Description can be anything - example 'Base AlpineLinux Installation - no services'
- Done.