Build an OEM Expandable Disk Image¶
An OEM disk represents the system disk with the capability to auto expand the disk and its filesystem to a custom disk geometry. This allows deploying the same OEM image on target systems of a different hardware setup.
The following example shows how to build and deploy an OEM disk image based on openSUSE Leap using a QEMU virtual machine as OEM target system:
Make sure you have checked out the example image descriptions, see Example Appliance Descriptions.
Build the image with KIWI:
$ sudo kiwi-ng --type oem system build \ --description kiwi-descriptions/suse/x86_64/suse-leap-42.3-JeOS \ --target-dir /tmp/myimage
Find the following result images below
/tmp/myimage
.- The OEM disk image with the suffix
.raw
is an expandable virtual disk. It can expand itself to a custom disk geometry. - The OEM installation image with the suffix
install.iso
is a hybrid installation system which contains the OEM disk image and is capable to install this image on any target disk.
- The OEM disk image with the suffix
Deployment Methods¶
The basic idea behind an OEM image is to provide the virtual disk data for OEM vendors to support easy deployment of the system to physical storage media.
There are the following basic deployment strategies:
-
Manually deploy the OEM disk image onto the target disk
-
Boot the OEM installation image and let KIWI’s OEM installer deploy the OEM disk image from CD/DVD or USB stick onto the target disk
-
PXE boot the target system and let KIWI’s OEM installer deploy the OEM disk image from the network onto the target disk
Manual Deployment¶
The manual deployment method can be tested using virtualization software such as QEMU, and an additional virtual target disk of a larger size. The following steps shows how to do it:
Create a target disk
$ qemu-img create target_disk 20g
Note
Retaining the Disk Geometry
If the target disk geometry is less or equal to the geometry of the OEM disk image itself, the disk expansion performed for a physical disk install during the OEM boot workflow will be skipped and the original disk geometry stays untouched.
Dump OEM image on target disk
$ dd if=LimeJeOS-Leap-42.3.x86_64-1.42.3.raw of=target_disk conv=notrunc
Boot the target disk
$ qemu -hda target_disk -m 4096
At first boot of the target_disk the system is expanded to the configured storage layout. By default the system root partition and filesystem is resized to the maximum free space available.
CD/DVD Deployment¶
The deployment from CD/DVD via the installation image can also be tested using virtualization software such as QEMU. The following steps shows how to do it:
Create a target disk
Follow the steps above to create a virtual target disk
Boot the OEM installation image as CD/DVD with the target disk attached
$ qemu -cdrom LimeJeOS-Leap-42.3.x86_64-1.42.3.install.iso -hda target_disk -boot d -m 4096
Note
USB Stick Deployment
Like any other iso image built with KIWI, also the OEM installation image is a hybrid image. Thus it can also be used on USB stick and serve as installation stick image like it is explained in Build an ISO Hybrid Live Image
Network Deployment¶
The deployment from the network downloads the OEM disk image from a PXE boot server. This requires a PXE network boot server to be setup as explained in Setting Up a Network Boot Server
If the PXE server is running the following steps shows how to test the deployment process over the network using a QEMU virtual machine as target system:
Make sure to create an installation PXE TAR archive along with your OEM image by replacing the following setup in kiwi-descriptions/suse/x86_64/suse-leap-42.3-JeOS/config.xml
instead of <type image="oem" installiso="true" ... setup <type image="oem" installpxe="true" ...
Rebuild the image, unpack the resulting
LimeJeOS-Leap-42.3.x86_64-1.42.3.install.tar.xz
file to a temporary directory and copy the initrd and kernel images to the PXE server:# Unpack installation tarball mkdir /tmp/pxe && cd /tmp/pxe tar -xf LimeJeOS-Leap-42.3.x86_64-1.42.3.install.tar.xz # Copy kernel and initrd used for pxe boot scp pxeboot.initrd.xz PXE_SERVER_IP:/srv/tftpboot/boot/initrd scp pxeboot.kernel PXE_SERVER_IP:/srv/tftpboot/boot/linux
Copy the OEM disk image, MD5 file, system kernel and initrd to the PXE boot server:
Activation of the deployed system is done via
kexec
of the kernel and initrd provided here.# Copy system image and MD5 checksum scp LimeJeOS-Leap-42.3.xz PXE_SERVER_IP:/srv/tftpboot/image/ scp LimeJeOS-Leap-42.3.md5 PXE_SERVER_IP:/srv/tftpboot/image/ # Copy kernel and initrd used for booting the system via kexec scp LimeJeOS-Leap-42.3.initrd PXE_SERVER_IP:/srv/tftpboot/image/ scp LimeJeOS-Leap-42.3.kernel PXE_SERVER_IP:/srv/tftpboot/image/
Add/Update the kernel command line parameters
Edit your PXE configuration (for example
pxelinux.cfg/default
) on the PXE server and add these parameters to the append line, typically looking like this:append initrd=boot/initrd rd.kiwi.install.pxe rd.kiwi.install.image=tftp://192.168.100.16/image/LimeJeOS-Leap-42.3.xz
The location of the image is specified as a source URI which can point to any location supported by the
curl
command. KIWI callscurl
to fetch the data from this URI. This also means your image, MD5 file, system kernel and initrd could be fetched from any server and doesn’t have to be stored on thePXE_SERVER
.Note
The initrd and Linux Kernel for pxe boot are always loaded via tftp from the
PXE_SERVER
.
Create a target disk
Follow the steps above to create a virtual target disk
Connect the client to the network and boot QEMU with the target disk attached to the virtual machine.
$ qemu -boot n -hda target_disk -m 4096
Note
QEMU bridged networking
In order to let qemu connect to the network we recommend to setup a network bridge on the host system and let qemu connect to it via a custom /etc/qemu-ifup. For details see https://en.wikibooks.org/wiki/QEMU/Networking