Xen Dom0: Difference between revisions

From Alpine Linux
mNo edit summary
(actually hyphens, not underscores)
(23 intermediate revisions by 11 users not shown)
Line 1: Line 1:
So before anything else verify that you can '''reliably''' log into your Alpine box through [[Setting_up_a_ssh-server|SSH]], because with some video chipset (intel in my case) xen will blank your screen so you will have to use SSH.
This guide will show you how to perform a Xen Dom0 install on a HDD, so you can have your Dom0. The first step is to perform a normal HDD install of Alpine Linux, which can be accomplished following the guide [[Install to disk]]. Once the install is finished, and you have rebooted into your new system, it's time to install the Xen packages:


Then upgrade your setup to [[Upgrading_to_Edge|Edge/testing]] (as of the date of writing, Xen is only available in Edge). Install Xen:
<pre>
# apk add xen xen-hypervisor seabios
</pre>


{{Cmd|apk add xen}}
Then [https://wiki.alpinelinux.org/wiki/Enable_Community_Repository enable the community repositories] and install ovmf from community.


Modify your extlinux.cfg (credits: http://lists.alpinelinux.org/alpine-devel/1406.html)
<pre>
since video card is not working for now, we will use a serial console:
# apk add ovmf
</pre>


'''seabios''' and '''ovmf''' provide BIOS and UEFI firmwares for Xen virtual machines. Please be advised that ovmf is part of the community repository. In order to download it, you will need to add the community repository to [[Alpine_Linux_package_management#Packages_and_Repositories|your configuration]].
This will install Xen Hypervisor, xl cli command and all the required packages. The next step is to modify your extlinux.conf and add an entry to boot Xen:
Normal boot:
<pre>
LABEL xen
  KERNEL /boot/mboot.c32
  APPEND /boot/xen.gz --- /boot/grsec root=UUID=<YOUR-DISK-UUID> modules=ext4 --- /boot/grsec.gz
</pre>
Serial console boot:
<pre>
<pre>
SERIAL 0 115200
LABEL xen
DEFAULT menu.c32
   KERNEL /boot/mboot.c32
PROMPT 0
   APPEND /boot/xen.gz com1=115200,8n1 console=com1 --- /boot/grsec root=UUID=<YOUR-DISK-UUID> modules=ext4  --- /boot/grsec.gz
MENU TITLE Alpine/Linux Boot Menu
</pre>
MENU HIDDEN
 
MENU AUTOBOOT Alpine will be booted automatically in # seconds.
{{Note|<nowiki>remember to change <YOUR-DISK-UUID> with the UUID of your boot disk (you can copy it from the normal Alpine Linux boot entry)</nowiki>}}
TIMEOUT 50
 
LABEL 0
com1=115200,8n1 console=com1 redirect xen and dom0 to a physical serial port, handy if you want to use a serial null modem cable instead of a keyboard+monitor combo or if your server has an kvm over ip.
  MENU DEFAULT
  MENU LABEL Linux 2.6.38.8-vs2.3.0.37-rc17
   KERNEL vmlinuz-2.6.38.8-vs2.3.0.37-rc17
   APPEND initrd=initramfs-2.6.38.8-vs2.3.0.37-rc17 root=UUID=f40e340b-ea49-445b-81c0-4d7104b56662 modules=sd-mod,usb-storage,ext4 quiet


LABEL 1
It's also a good idea to check [http://wiki.xen.org/wiki/Xen_Hypervisor_Boot_Options Xen Boot options] and set dom0_mem, dom0_vcpus_pin and dom0_max_vcpus at least.
  MENU LABEL Linux 2.6.36.3-scst
  KERNEL vmlinuz-2.6.36.3-scst
  APPEND initrd=initramfs-2.6.36.3-scst root=UUID=f40e340b-ea49-445b-81c0-4d7104b56662 modules=sd-mod,usb-storage,ext4 quiet


LABEL 2
The next step is to load the necessary kernel modules for Xen, we will add them to /etc/modules, so they will be loaded automatically on boot:
  MENU LABEL Linux 2.6.38.8-grsec
  KERNEL vmlinuz-2.6.38.8-grsec
  APPEND initrd=initramfs-2.6.38.8-grsec root=UUID=f40e340b-ea49-445b-81c0-4d7104b56662 modules=sd-mod,usb-storage,ext4 quiet


LABEL 3
<pre>
  MENU LABEL XEN
# echo "xen-netback" >> /etc/modules
  KERNEL mboot.c32
# echo "xen-blkback" >> /etc/modules
  APPEND /boot/xen-4.gz loglvl=all guest_loglvl=all com1=115200,8n1 console=com1 dom0_mem=256M --- /boot/vmlinuz-grsec root=UUID=f40e340b-ea49-445b-81c0-4d7104b56662 modules=sd-mod,usb-storage,ext4 console=hvc0 earlyprintk=xen nomodeset --- /boot/initramfs-grsec
# echo "tun" >> /etc/modules
</pre>
</pre>
Of course replace root=UUID= with '''your''' UUID in yours.


xl info won't work
The last step is to configure startup services, we will need udev and xencommons at least to be started on boot:


Start xecommons:
<pre>
<pre>
alpine:/boot# /etc/init.d/xencommons start
rc-update add xenconsoled
Starting xenstored...FATAL: Failed to open evtchn device: No such file or directory
rc-update add xendomains
rc-update add xenqemu
rc-update add xenstored
</pre>
</pre>
well this will fail but xl info will work anyway


Oh but wait, evtchn device is built in the kernel, so why is there no /dev/xen/evtch file ?
Ok, now you have a fully functional Xen install, it's time to boot into it.
let's start udev ! ;)
{{Cmd|rc-service udev start}}


That's all folks !
<pre>
# reboot
</pre>


on going debug:
Also remember to configure at least one network bridge following the [[Bridge]] guide.
vi /etc/rc.conf
rc_sys="xen0"
why ?


== Loop Devices ==
If you plan to use more than 8 DomU's, you may need to increase the amount of loop-devices in your Dom0.
In Alpine Linux, you will need to add the ''max_loop'' option to the ''loop'' module, then add the loop module to your initramfs.
Start by populating <code>/etc/modprobe.d/loop.conf</code> with the module options:
<pre>
# touch /etc/modprobe.d/loop.conf
# echo "options loop max_loop=32" > /etc/modprobe.d/loop.conf
</pre>
Now reflect the module options in the initramfs:
<pre>
# mkinitfs
# reboot
</pre>


Commands recap:
== See also ==
{{Cmd|
* [[Xen Dom0 on USB or SD]]
apk add xen
apk add udev
rc-service udev start ; rc-service udev-postmount start
rc-service xencommons start
}}
If you want "xm" command
{{Cmd|rc-service xend start}}


So let's install services at boot time :
[[Category:Virtualization]]
{{Cmd|
rc-update add udev sysinit
rc-update add udev-postmount default
rc-update add xencommons
rc-update add xend
}}

Revision as of 22:03, 27 November 2019

This guide will show you how to perform a Xen Dom0 install on a HDD, so you can have your Dom0. The first step is to perform a normal HDD install of Alpine Linux, which can be accomplished following the guide Install to disk. Once the install is finished, and you have rebooted into your new system, it's time to install the Xen packages:

# apk add xen xen-hypervisor seabios

Then enable the community repositories and install ovmf from community.

# apk add ovmf


seabios and ovmf provide BIOS and UEFI firmwares for Xen virtual machines. Please be advised that ovmf is part of the community repository. In order to download it, you will need to add the community repository to your configuration.

This will install Xen Hypervisor, xl cli command and all the required packages. The next step is to modify your extlinux.conf and add an entry to boot Xen:

Normal boot:

LABEL xen
  KERNEL /boot/mboot.c32
  APPEND /boot/xen.gz --- /boot/grsec root=UUID=<YOUR-DISK-UUID> modules=ext4 --- /boot/grsec.gz

Serial console boot:

LABEL xen
  KERNEL /boot/mboot.c32
  APPEND /boot/xen.gz com1=115200,8n1 console=com1 --- /boot/grsec root=UUID=<YOUR-DISK-UUID> modules=ext4  --- /boot/grsec.gz
Note: remember to change <YOUR-DISK-UUID> with the UUID of your boot disk (you can copy it from the normal Alpine Linux boot entry)

com1=115200,8n1 console=com1 redirect xen and dom0 to a physical serial port, handy if you want to use a serial null modem cable instead of a keyboard+monitor combo or if your server has an kvm over ip.

It's also a good idea to check Xen Boot options and set dom0_mem, dom0_vcpus_pin and dom0_max_vcpus at least.

The next step is to load the necessary kernel modules for Xen, we will add them to /etc/modules, so they will be loaded automatically on boot:

# echo "xen-netback" >> /etc/modules
# echo "xen-blkback" >> /etc/modules
# echo "tun" >> /etc/modules

The last step is to configure startup services, we will need udev and xencommons at least to be started on boot:

rc-update add xenconsoled
rc-update add xendomains
rc-update add xenqemu
rc-update add xenstored

Ok, now you have a fully functional Xen install, it's time to boot into it.

# reboot

Also remember to configure at least one network bridge following the Bridge guide.

Loop Devices

If you plan to use more than 8 DomU's, you may need to increase the amount of loop-devices in your Dom0.

In Alpine Linux, you will need to add the max_loop option to the loop module, then add the loop module to your initramfs.

Start by populating /etc/modprobe.d/loop.conf with the module options:

# touch /etc/modprobe.d/loop.conf
# echo "options loop max_loop=32" > /etc/modprobe.d/loop.conf

Now reflect the module options in the initramfs:

# mkinitfs
# reboot

See also