FreeBSD Image for Openstack
Introduction
My job as research grant includes also some system and cluster administration, install and maintain an Openstack Cluster among them. The Openstack cluster is for research purposes and all relevant services are configured, the cluster offer also a lot of different OS images like Windows, and various Linux distributions. All of these images could be found from distributions main page, or can be built like the Windows Server/10; inside the lab we use also *BSD distributions as server systems and I’ve noticed that FreeBSD image for Openstack was not available. I’ve followed a lot of articles where you can create a FreeBSD image for Openstack using the BSDCloudInit, but the images didn’t boot or start properly; then I looked at a bug report on FreeBSD bugzilla and found some configuration made by Diego Casati and I’ve take these files and tried to improve them. The entire process relies on release(7) build process.
Prerequisites
In order to build properly the image is necessary to have src
component installed and the openstack cli
variables properly configured (for configuration params see this website) to interact with your Openstack Cluster.
Installation
Go to the FreeBSD-Image releases and fetch it using fetch <latest-release-url>
, then untar it using tar -C /usr/src/release -xvf openstack.tar.xz
.
After move to /usr/src
folder and compile the userland and the kernel running make -j <proc_num> buildworld buildkernel
, and grab a coffee.
When the compilation is done move to the /usr/src/release
folder and run: make cloudware-release WITH_CLOUDWARE=yes CLOUDWARE=OPENSTACK
, and grab another coffee.
When everything is done run: make openstack-upload
to upload the image to your Openstack Cluster.
Then run openstack server create --image FreeBSD-<your-FreeBSD-version> <server-params> <server-name>
in order to run it on your cluster.
Customization
You can add packages and/or services before create the image adding params to the openstack.conf
file in /usr/src/release/tools/
folder.
For extra packages you have to add the ports name or the package name to VM_EXTRA_PACKAGES
. For instance add python2.7
package in order to be compatible with Ansible
For extra services add the service name to VM_RC_LIST
. For instance add jail
in order to have jail service enabled at boot.
Known issues
The current release (v1.1) will boot and work properly but the logs on horizon are not available.