Create Alpine Linux PV DomU: Difference between revisions

From Alpine Linux
(replace virtgrsec with just virt. we no longer support grsec)
(14 intermediate revisions by 5 users not shown)
Line 1: Line 1:
To create an Alpine Linux PV DomU you will need a Dom0 and an Alpine Linux iso, here we will use the "mini" iso.
== Obtain a copy of Alpine Linux ==


== Copy the kernel ==
To create an Alpine Linux paravirtualized (PV) DomU you will need an Alpine Linux iso.
The first step it to mount the image and extract the kernel and initramfs:


<pre>
Download the latest alpine-virt iso from https://alpinelinux.org/downloads/
# mkdir -p /mnt/alpine_iso
 
# mount -o loop /path/to/the/iso /mnt/alpine_iso
In this example we will use {{path|/data/}} for our download and for our disk images.
# cp /mnt/alpine_iso/boot/grsec /path/to/save/kernel/
 
# cp /mnt/alpine_iso/boot/grsec.gz /path/to/save/kernel/
==Mount the ISO image ==
# umount /mnt/alpine_iso
 
# rmdir /mnt/alpine_iso
Next, mount the iso so we can read the kernel and initramfs:
</pre>
 
{{cmd | mount -t iso9660 -o loop /data/alpine-virt-{{AlpineLatest}}-x86_64.iso /media/cdrom }}
 
Now we have the kernel in {{path|/media/cdrom/boot/vmlinuz-virt}} and initramfs in {{path|/media/cdrom/boot/initramfs-virt}}.


Now we have the kernel at /path/to/save/kernel/grsec and the initramfs at /path/to/save/kernel/grsec.gz.
Alternatively you can use {{path|uniso}} or {{path|p7zip}} to extract the content to a temp area.


== Create the disk image ==
== Create the disk image ==
Now we should create an empty file, that will be the hard drive of the DomU, you can also use a physical partition if you like (in this example we are using a 3GB disk):
Now we should create an empty file, that will be the hard drive of the DomU (in this example we are using a 3GB disk):
 
{{cmd | <nowiki>dd if=/dev/zero of=/data/a1.img bs=1M count=3000</nowiki>}}


<pre>
# dd if=/dev/zero of=/path/to/disk.img bs=1M count=3000
</pre>


== Configure for booting ISO image ==
== Create a DomU config file that boots the ISO image ==
The next step is to create a basic configuration file, so we can launch the DomU (save it where you like, although the most common place is /etc/xen/).
The next step is to create a basic DomU configuration file, so we can launch the pv guest iso (save it where you like, although the most common place is {{path|/etc/xen/}}).


<pre>
{{cat | /etc/xen/a1.cfg | <nowiki># Alpine Linux PV DomU
# Alpine Linux PV DomU


# Kernel paths for install
# Kernel paths for install
kernel = "/path/to/save/kernel/grsec"
kernel = "/media/cdrom/boot/vmlinuz-virt"
ramdisk = "/path/to/save/kernel/grsec.gz"
ramdisk = "/media/cdrom/boot/initramfs-virt"
extra="alpine_dev=xvdc:iso9660 modules=loop,squashfs,sd-mod,usb-storage modloop=/boot/grsec.modloop.squashfs console=hvc0"
extra="modules=loop,squashfs console=hvc0"


# Path to HDD and iso file
# Path to HDD and iso file
disk = [
disk = [
         'format=raw, vdev=xvdc, access=r, target=/path/to/disk.img',
         'format=raw, vdev=xvda, access=w, target=/data/a1.img',
         'format=raw, vdev=xvdc, access=r, devtype=cdrom, target=/path/to/the/iso'
         'format=raw, vdev=xvdc, access=r, devtype=cdrom, target=/data/alpine-virt-</nowiki>{{AlpineLatest}}<nowiki>-x86_64.iso'
          ]
      ]


# Network configuration
# Network configuration
Line 44: Line 44:
# DomU settings
# DomU settings
memory = 512
memory = 512
name = "alpine"
name = "alpine-a1"
vcpus = 1
vcpus = 1
maxvcpus = 1
maxvcpus = 1
</pre>
</nowiki>}}


== Install the guest ==
== Install the guest ==
Now that we have all the necessary files, we can start the DomU to proceed with the install:
Now that we have all the necessary files, we can start the DomU to proceed with the install:


<pre>
{{cmd|xl create -f /etc/xen/a1.cfg  -c}}
# xl create -f /path/to/conf -c
 
</pre>
Login into the system with user "root" and no password.
 
We need disable the ext4 64bit feature since pv-grub does not support ext4. Then we proceed with the normal install:


Login into the system with user "root" and no password, and proceed with the normal install:
{{cmd |<nowiki>export MKFS_OPTS_BOOT="-O ^64bit"; setup-alpine</nowiki>}}


<pre>
After configuring the basic system, you will be asked where would you like to install Alpine, choose xvda and sys.
# setup-alpine
</pre>


After configuring the basic system, you will be asked where would you like to install Alpine, choose xvda and sys, as shown above:
This will create three partitions on your disk, xvda1 for /boot, xvda2 for swap and xvda3 for /


<pre>
<pre>
Line 80: Line 80:


Installation is complete. Please reboot.
Installation is complete. Please reboot.
#
</pre>
</pre>


== Adjust for booting from disk ==
Before you reboot, mount the boot partition and create a {{path|grub/menu.lst}} file for pv-grub.
As the installation suggests, halt the DomU machine and edit the config file, to remove the xvdc disk (iso image), and change to use pygrub. At the end it should look similar to this:
 
{{cmd |<nowiki>mount /dev/xvda1 /mnt
mkdir /mnt/grub</nowiki>}}
 
{{cat | /mnt/grub/menu.lst |<nowiki>default 0
timeout 5
title alpine-xen-pv
root (hd0,0)
kernel /boot/vmlinuz-virt modules=ext4 console=hvc0 root=/dev/xvda3
initrd /boot/initramfs-virt</nowiki>}}
 
Unmount and power off.
{{cmd |umount /mnt
poweroff}}
 
== Adjust the domU config file to boot from fresh install ==


<pre>
In your Dom0, edit your DomU config file to boot with pv-grub.
# Alpine Linux PV DomU
 
{{cat | /etc/xen/a1.cfg |<nowiki># Alpine Linux PV DomU


bootloader = '/usr/bin/pygrub'
kernel = "/usr/lib/xen/boot/pv-grub-x86_64.gz"


# Path to HDD and iso file
# Path to HDD and iso file
disk = [
disk = [
         'file:/path/to/disk.img,xvda,w',
         'format=raw, vdev=xvda, access=w, target=/data/a1.img'
        ]
      ]


# Network configuration
# Network configuration
Line 99: Line 118:


# DomU settings
# DomU settings
memory = 128
memory = 512
name = "alpine"
name = "alpine-a1"
vcpus = 1
vcpus = 1
</pre>
maxvcpus = 1
</nowiki>}}
 
Remember to unmount the loopback iso image.
{{cmd | umount /media/cdrom}}


So now you are good to go, you can boot into your new Alpine Linux DomU:
When you next boot, you will be presented with the grub boot menu, and your VM will boot.


<pre>
== See also ==
# xl create -c /path/to/conf
* [https://www.linkedin.com/pulse/setting-up-alpine-linux-370-domu-vm-xenserver-72-ali-poursamadi Setting up Alpine Linux 3.7.0 as a domU VM on XenServer 7.2]
</pre>


[[Category:Virtualization]]
[[Category:Virtualization]]

Revision as of 09:39, 13 August 2018

Obtain a copy of Alpine Linux

To create an Alpine Linux paravirtualized (PV) DomU you will need an Alpine Linux iso.

Download the latest alpine-virt iso from https://alpinelinux.org/downloads/

In this example we will use /data/ for our download and for our disk images.

Mount the ISO image

Next, mount the iso so we can read the kernel and initramfs:

mount -t iso9660 -o loop /data/alpine-virt-3.19.1-x86_64.iso /media/cdrom

Now we have the kernel in /media/cdrom/boot/vmlinuz-virt and initramfs in /media/cdrom/boot/initramfs-virt.

Alternatively you can use uniso or p7zip to extract the content to a temp area.

Create the disk image

Now we should create an empty file, that will be the hard drive of the DomU (in this example we are using a 3GB disk):

dd if=/dev/zero of=/data/a1.img bs=1M count=3000


Create a DomU config file that boots the ISO image

The next step is to create a basic DomU configuration file, so we can launch the pv guest iso (save it where you like, although the most common place is /etc/xen/).

Contents of /etc/xen/a1.cfg

# Alpine Linux PV DomU # Kernel paths for install kernel = "/media/cdrom/boot/vmlinuz-virt" ramdisk = "/media/cdrom/boot/initramfs-virt" extra="modules=loop,squashfs console=hvc0" # Path to HDD and iso file disk = [ 'format=raw, vdev=xvda, access=w, target=/data/a1.img', 'format=raw, vdev=xvdc, access=r, devtype=cdrom, target=/data/alpine-virt-3.19.1-x86_64.iso' ] # Network configuration vif = ['bridge=br0'] # DomU settings memory = 512 name = "alpine-a1" vcpus = 1 maxvcpus = 1

Install the guest

Now that we have all the necessary files, we can start the DomU to proceed with the install:

xl create -f /etc/xen/a1.cfg -c

Login into the system with user "root" and no password.

We need disable the ext4 64bit feature since pv-grub does not support ext4. Then we proceed with the normal install:

export MKFS_OPTS_BOOT="-O ^64bit"; setup-alpine

After configuring the basic system, you will be asked where would you like to install Alpine, choose xvda and sys.

This will create three partitions on your disk, xvda1 for /boot, xvda2 for swap and xvda3 for /

Available disks are:
  xvda	(3.1 GB  )
Which disk(s) would you like to use? (or '?' for help or 'none') [none] xvda
The following disk is selected:
  xvda	(3.1 GB  )
How would you like to use it? ('sys', 'data' or '?' for help) [?] sys
WARNING: The following disk(s) will be erased:
  xvda	(3.1 GB  )
WARNING: Erase the above disk(s) and continue? [y/N]: y
Initializing partitions on /dev/xvda...
Creating file systems...
Installing system on /dev/xvda3:


Installation is complete. Please reboot.

#

Before you reboot, mount the boot partition and create a grub/menu.lst file for pv-grub.

mount /dev/xvda1 /mnt mkdir /mnt/grub

Contents of /mnt/grub/menu.lst

default 0 timeout 5 title alpine-xen-pv root (hd0,0) kernel /boot/vmlinuz-virt modules=ext4 console=hvc0 root=/dev/xvda3 initrd /boot/initramfs-virt

Unmount and power off.

umount /mnt poweroff

Adjust the domU config file to boot from fresh install

In your Dom0, edit your DomU config file to boot with pv-grub.

Contents of /etc/xen/a1.cfg

# Alpine Linux PV DomU kernel = "/usr/lib/xen/boot/pv-grub-x86_64.gz" # Path to HDD and iso file disk = [ 'format=raw, vdev=xvda, access=w, target=/data/a1.img' ] # Network configuration vif = ['bridge=br0'] # DomU settings memory = 512 name = "alpine-a1" vcpus = 1 maxvcpus = 1

Remember to unmount the loopback iso image.

umount /media/cdrom

When you next boot, you will be presented with the grub boot menu, and your VM will boot.

See also