The Dell XPS13 L322X Ultrabook is a truly wonderful development machine. With a third generation dual core Intel i7 processor and fast SSD disk, you literally hold a Linux mini-server in the palm of your hands. This Ultrabook, originally imaged by Dell with Windows 8, was configured with dual-boot Debian 7.0 Wheezy and CentOS 6.3 - the best of both Open Source Linux variants.
For this project, the latest DevStack (community supported Open Source development branch of the OpenStack project started by RackSpace) was downloaded from the GIT repository:
# git clone git://github.com/openstack-dev/devstack.git
If you then follow the simple Quick Start Guide from DevStack while running Debian, you will most certainly be disappointed. The guide recommends running the following on a fresh install of Ubuntu 12.04 (Precise) or Fedora 16:
# cd devstack # ./stack.sh
You get a WARNING that the script has not been tested on your distro, and "If you wish to run this script anyway run with FORCE=yes". Most folks simply give up at this point, or start coloring between the lines with a supported O/S. But knowing that Ubuntu is an offspring of Debian gives us a fighting chance to change platforms.
Start by checking your default repos in /etc/apt/sources.list
### Testing (wheezy) deb http://ftp.debian.org/debian testing main contrib non-free deb-src http://ftp.debian.org/debian/ testing main contrib non-free ### Testing Security http://secure-testing-master.debian.net/ deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free ### Testing Proposed Updates deb http://ftp.debian.org/debian/ testing-proposed-updates main contrib non-free deb-src http://ftp.debian.org/debian/ testing-proposed-updates main contrib non-free ### sid deb http://ftp.debian.org/debian sid main contrib non-free deb-src http://ftp.debian.org/debian/ sid main contrib non-free ### experimental deb http://ftp.debian.org/debian experimental main contrib non-free deb-src http://ftp.debian.org/debian/ experimental main contrib non-free
Make sure you're running on the latest kernel and everything is up-to-date (# apt-get update and # apt-get upgrade). This is the running kernel version at deployment time:
# uname -a Linux xps13 3.2.0-4-amd64 #1 SMP Debian 3.2.39-2 x86_64 GNU/Linux # cat /proc/version Linux version 3.2.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-15) ) #1 SMP Debian 3.2.39-2
Install apache2 (version 2.2.22-13) if you don't already have it running. Install python and python-dev (both versions 2.6 and 2.7 are loaded on this system, default comes up at ver 2.7.3 on the python command line). OpenStack will install lots of python dependencies later. Install screen.
Install and configure mysql on the system (the DevStack shell script will also try to do that, but you run into a catch-22 with the OpenStack Keystone Identity Service trying to create and configure the database as 'root'@'localhost') and the script hangs (Bug #1118502 MYSQL is accessed as Root). Don't forget to set and remember the password for the mysql root and 'root'@'localhost' accounts (yes, you need to specifically configure both). The following mysql-related packages were installed:
# dpkg -l|grep mysql ii libdbd-mysql-perl 4.021-1+b1 amd64 Perl5 database interface to the MySQL database ii libmysqlclient18:amd64 5.5.29+dfsg-1 amd64 MySQL database client library ii mysql-client 5.5.29+dfsg-1 all MySQL database client (metapackage depending on the latest version) ii mysql-client-5.5 5.5.29+dfsg-1 amd64 MySQL database client binaries ri mysql-common 5.5.29+dfsg-1 all MySQL database common files, e.g. /etc/mysql/my.cnf ii mysql-server 5.5.29+dfsg-1 all MySQL database server (metapackage depending on the latest version) ii mysql-server-5.5 5.5.29+dfsg-1 amd64 MySQL database server binaries and system database setup ii mysql-server-core-5.5 5.5.29+dfsg-1 amd64 MySQL database server binaries ii mysql-utilities 1.0.5-1 all collection of scripts for managing MySQL servers ii python-mysql.connector 0.3.2-1 all pure Python implementation of MySQL Client/Server protocol ii python-mysqldb 1.2.3-1+b1 amd64 Python interface to MySQL
I am most concerned with the proper deployment of the mysql server because the keystone bug caused the most pain in the installation and necessitated some reboots to clear hanging processes (unstack.sh and even killing processes manually will not do if you're stopped at creating the database and users). Every time the stack.sh script hangs, you will need to start from scratch.
And finally, check that you have qemu and libvirt installed on your system:
# dpkg -l|egrep "(qemu|libvirt)" ii ipxe-qemu 1.0.0+git-20120202.f6840ba-3 all PXE boot firmware - ROM images for qemu ii kvm 1:1.1.2+dfsg-5 amd64 dummy transitional package from kvm to qemu-kvm ii libvirt-bin 0.9.12-11 amd64 programs for the libvirt library ii libvirt-dev 0.9.12-11 amd64 development files for the libvirt library ii libvirt-glib-1.0-0 0.0.8-1 amd64 libvirt glib mainloop integration ii libvirt0 0.9.12-11 amd64 library for interfacing with different virtualization systems ii python-libvirt 0.9.12-11 amd64 libvirt Python bindings ii qemu-keymaps 1.1.2+dfsg-5 all QEMU keyboard maps ii qemu-kvm 1.1.2+dfsg-5 amd64 Full virtualization on x86 hardware ii qemu-utils 1.1.2+dfsg-5 amd64 QEMU utilities
Create a user stack with group stack and home directory in /opt/stack, give sudo perms to user stack. This is the default, you may be able to change it to suit your needs.
Now that it was tested on Debian and proven to work, you may # vi stack.sh and comment the following lines out:
# Warn users who aren't on an explicitly supported distro, but allow them to # override check and attempt installation with ``FORCE=yes ./stack`` #if [[ ! ${DISTRO} =~ (oneiric|precise|quantal|raring|f16|f17|f18|opensuse-12.2) ]]; then # echo "WARNING: this script has not been tested on $DISTRO" # if [[ "$FORCE" != "yes" ]]; then # die $LINENO "If you wish to run this script anyway run with FORCE=yes" # fi #fiand set the following variable to False:
# Should cinder perform secure deletion of volumes? # Defaults to true, can be set to False to avoid this bug when testing: # https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1023755 CINDER_SECURE_DELETE=`trueorfalse False $CINDER_SECURE_DELETE`
A logical volume group named "stack-volumes" (derived from the formerly nova-volumes VG of the nova component of OpenStack) should be created on an empty physical volume. Since I had no free space to spare and the XPS13 was set up previously with 16G of swap space, I carved out an 8G disk partition of type 8e00 (Linux LVM), created a PV on /dev/sda7 to receive the stack-volumes VG and rebuilt swap on the remaining 8G on /dev/sda8. This required immediate coordination with the CentOS half that resides on the Ultrabook, because swap is mounted by either at boot time and the swap device name in /etc/fstab changed. Alternately, you may be able to create the LVM volume group on an USB stick (just remember to plug it in before you need it). Obviously, 8G is very skimpy for OpenStack VMs, but there are tiny machine images you may run as a developer.
Most all of the pre-requisites needed in Ubuntu which the script will load have a corresponding package in Debian. I found one notable exception: open-iscsi-utils is not available (the iscsiadm command is included in the open-iscsi package on Debian). Comment out this package name in devstack/files/apts/n-cpu before you run stack.sh, or you will get stuck with an unmet dependency.
DevStack provides a vanilla localrc file in samples. While not necessarily needed (the script prompts for account passwords), you may want to create a minimal localrc file in devstack for dedicated hardware, containing something like:
FLOATING_RANGE=192.168.1.224/27 FIXED_RANGE=10.11.12.0/24 FIXED_NETWORK_SIZE=256 FLAT_INTERFACE=eth0 DATABASE_PASSWORD=mysqlroot RABBIT_PASSWORD=fluffybunny SERVICE_TOKEN=withrespect SERVICE_PASSWORD=howmayihelpu ADMIN_PASSWORD=supersecret
In regards to the specified eth0 interface, while the XPS13 Ultrabook does not have an ethernet port, a USB dongle (the StarTech.com USB 3.0 to Gigabit Ethernet NIC 10/100/1000 Network Adapter, USB to RJ45 from Amazon.com) with a locally-compiled Asix ax88179_178a.ko kernel module was installed to connect to the network.
The following may also help in certain configurations to avoid install problems when http_proxy is set:
export no_proxy="localhost,127.0.0.1"
You are now finally ready to run stack.sh as root in Debian. The script will change environments to the stack user created earlier (remember, the account must have sudo perms for the script to execute properly) and will run in a screen session. When properly finished, you will get a summary of accounts and URLs.
Horizon is now available at http://10.11.12.13/ Keystone is serving at http://10.11.12.13:5000/v2.0/ Examples on using novaclient command line is in exercise.sh The default users are: admin and demo The password: supersecret This is your host ip: 10.11.12.13 stack.sh completed in 190 seconds. stack@xps13:~/devstack$ _
OpenStack services will be running after the script completed. Connecting to http://localhost/ with a web browser should present the OpenStack Dashboard login screen.
To thoroughly test the installation, run exercise.sh and watch for failed tests. To restart OpenStack services after you reboot, run rejoin-stack.sh
If you believe the folks at OpenStack.org, you only have two options to try OpenStack: 1) Public Clouds and and 2) Local Dev Environment: devstack.org, which was done as described above.
Looking at what we have installed with the DevStack script, it appears that a lot of the stuff is temporary (i.e., look in /usr/local/bin - you have nova, but there is no nova Debian package properly installed on the system). What I mean is, the install will only live in its present form until you run the next stack.sh script. So if you try to customize anything in the config files of the various components, it will be overwritten by the script when you run it again for any reason. This implies you can either modify the script to your liking, or try to load all .deb packages from a proper Debian-supported repository and install them on the system. As a sysadmin, I prefer the latter approach, as I like to receive weekly updates on packages and stay current with the latest releases on the system.
There is a third approach: build your own cloud. In past endeavors, I have built OpenNebula from source on Debian sparc just to see if it can be done, but it is not as popular as OpenStack, so we'll stick with mainstream Open Source technology that has a growing rate of adoption and lots of heavyweight sponsors.
The latest version of OpenStack is Grizzly, scheduled to be released in April 2013. The current stable release is Folsom. I am currently searching through Debian repos for packages that can be installed permanently on the system. For Grizzly, add the following repos to the sources.list file:
### OpenStack Grizzly deb http://ftp.gplhost.com/debian grizzly main deb-src http://ftp.gplhost.com/debian grizzly main deb http://ftp.gplhost.com/debian wheezy-backports main
Also download and install the repository key with apt-key add, then apt-get update.
Ken Pepple's conceptual diagram of the OpenStack architecture illustrates the 7 major components:
* Dashboard ("Horizon") provides a modular web-based user interface for all OpenStack services.
* Network ("Quantum") provides network connectivity as a service between interface devices managed by other OpenStack services.
* Compute ("Nova") provides virtual servers upon demand.
* Image ("Glance") provides a catalog and repository for virtual disk images.
* Object Store ("Swift") stores and retrieves files.
* Block Storage ("Cinder") provides persistent block storage to guest VMs.
* Identity ("Keystone") provides authentication and authorization for all OpenStack services.
Let's start with OpenStack Compute, codenamed Nova. An apt-get install nova-common (containing elements that are needed in all parts of Nova) will bring in the following new packages for Folsom besides nova-common: dbconfig-common nova-compute-kvm python-crypto python-daemon python-glance python-nova python-novaclient python-prettytable. The nova-common package configure will present a screen for database setup. Select NO - the package can be configured later on by running "dpkg-reconfigure -plow nova-common". We already have files /etc/nova/api-paste.ini and policy.json from DevStack, so you can view the differences before you install the maintainer's version. Best is to make a backup of api-paste.ini and policy.json, then install the maintainer's version. You can later edit the files and add the missing credentials, IPs, etc. to the new versions. The reason is, the config files that come with the package may list other options, and give some clues about what's deprecated in the version you installed.
With the new repo for Grizzly enabled, the dependency list is much longer, and the nova-common, nova-compute and python-nova packages from Folsom will also be upgraded. Unfortunately, this is where you run into problems. The package nova-common from Grizzly will not configure properly at post-install (throws a python ConfigObjError). I presume it's caused by a versioning mismatch, but tracing it involves lots of work. You get the same python error with cinder-common. I found references to bug #1110567 nova-common dpkg --configure broken in Ubuntu.
So, after loading some other components that behave (i.e., keystone, glance, novnc), and even some of the toys that come pre-installed in the XPS13 Ubuntu developer edition (juju, juju-jitsu, lxc, zookeeper, apt-cacher-ng, bzr, mr, byobu, debootstrap, gource, graphviz, tmux, vagrant, virtualbox), I disabled the Grizzly repo and reloaded stable Debian package versions for Nova.
A note about virtualbox: I had installed the Oracle distribution previously, so vboxdrv was already available for the kernel, and this created a conflict. Because of dependency requirements, I had to purge the Oracle package and reinstall the Debian version instead. DKMS then built and configured a new set of modules for the running kernel. I continue to run the Oracle version of virtualbox only on the CentOS half of the machine. This illustrates exactly why I'm trying to build a custom DevStack using Debian packages.
I purged all Folsom Nova packages and started from scratch with the Grizzly repo. Ran into the same python problem - downloaded the nova-2013.1~g3 source package, examining the config files, and working on a fix. Checked on Debian Bug #700620: nova-common: fails to upgrade from sid: configobj.ConfigObjError: Parsing failed with several errors.
Also, Debian currently uses python-novaclient ver 2.10.0, whereas DevStack uses python-novaclient ver 2.11.0, which was just introduced in Feb 2013. You can download ver 2.11.0 at:
# git clone git://github.com/openstack/python-novaclient.git
After building the python package, it will install in /usr/local/lib/python2.7/dist-packages/ (anything stored in /usr/local is a custom path, containing files that were not loaded from an official Debian repo). You can see here how many packages you need to install if you want to build OpenStack.
Will tinker with this some more and post updates when available.
Progress
April 2013
While waiting for the Easter Bunny and a package rev fix, I upgraded the Debian kernel on the XPS13 from ver 3.2 to the 3.8 experimental kernel:
# uname -a Linux xps13 3.8-trunk-amd64 #1 SMP Debian 3.8.5-1~experimental.1 x86_64 GNU/Linux # cat /proc/version Linux version 3.8-trunk-amd64 (debian-kernel@lists.debian.org) (gcc version 4.7.2 (Debian 4.7.2-5) ) #1 SMP Debian 3.8.5-1~experimental.1
Everything seems to work, with the exception of building the virtualbox kernel modules (Bug #696011), which fails in make with 'VM_RESERVED' undeclared. Old version is 4.1.18-dfsg-2+deb7u1 from sid. Upgraded all virtualbox packages to version 4.1.18-dfsg-2.1 from experimental, which now build and load the vbox modules with the new 3.8 kernel.
I was especially worried about Bug #689268: Intel HD 4000 (Ivy Bridge) graphics freeze. Not happening so far - worked with the GUI for several hours while away in a meeting, and the XPS13 Ultrabook behaved nicely. The screen brightness keyboard control and the Cypress trackpad have the same old issues, though.
Of course, this upgrade brings the host to a higher Debian rev level. The system packages now load and upgrade from sid and experimental, so you may comment out the Wheezy repos from the old sources list. Forgot to mention this (to clarify: the DevStack was first installed on a 3.2 kernel, but the XPS13 is now running on bleeding edge Debian experimental), and Thomas Goirand (zigo) pointed it out in a message. He also noted that now there is a Wheezy backport repository at GPLHost for Grizzly:
deb http://ftp.gplhost.com/debian grizzly-backports main
The good news is, the gplhost Grizzly repo now contains several package updates, which have started to come in (i.e., python-novaclient ver 2.12.0). This made it possible to install the nova ver 2013.1-1 packages without any python errors. Of course, you have the problem of /etc/nova being overwritten by the Debian packages, so make sure you keep a copy of the files generated by DevStack and the new config files.
# dpkg -l|grep nova ii nova-api 2013.1-1 all OpenStack Compute - compute API frontend ii nova-baremetal 2013.1-1 all Openstack Compute - baremetal virt ii nova-cells 2013.1-1 all Openstack Compute - cells ii nova-cert 2013.1-1 all OpenStack Compute - certificate manager ii nova-common 2013.1-1 all OpenStack Compute - common files ii nova-compute 2013.1-1 all OpenStack Compute - compute node ii nova-compute-kvm 2013.1-1 all OpenStack Compute - compute node (KVM) ii nova-conductor 2013.1-1 all OpenStack Compute - conductor service ii nova-console 2013.1-1 all OpenStack Compute - console ic nova-consoleauth 2013.1-1 all OpenStack Compute - Console Authenticator ii nova-network 2013.1-1 all OpenStack Compute - network manager ii nova-novncproxy 2013.1-1 all OpenStack Compute - NoVNC proxy ii nova-objectstore 2013.1-1 all OpenStack Compute - object store ii nova-scheduler 2013.1-1 all OpenStack Compute - virtual machine scheduler ii nova-spicehtml5proxy 2013.1-1 all Openstack Compute - Spice HTML5 Proxy ii nova-volume 2013.1-1 all OpenStack Compute - storage ii nova-xvpvncproxy 2013.1-1 all OpenStack Compute - XVP VNC proxy ii python-nova 2013.1-1 all OpenStack Compute - libraries ii python-novaclient 2:2.12.0-1 all client library for OpenStack Compute API
Note: Thomas Goirand advised that the following nova APIs, which are distinct under DevStack, are not missing, but were deliberately integrated under nova-api and served more efficiently with a single daemon in the 2013.1-1 distribution:
nova-api-ec2 - OpenStack Compute - EC2 API frontend nova-api-metadata - OpenStack Compute - metadata API frontend nova-api-os-compute - OpenStack Compute - compute API frontend nova-api-os-volume - OpenStack Compute - Volume API frontendnova-api is configured in /etc/nova/nova.conf as follows:
enabled_apis=ec2,osapi_compute,metadataSame comment for cinder configuration files in /etc/cinder. Installed cinder packages in Debian ver 2013.1-1:
# dpkg -l|grep cinder ii cinder-api 2013.1-1 all Openstack block storage as a service - API server ii cinder-common 2013.1-1 all Openstack block storage as a service - common files ii cinder-scheduler 2013.1-1 all Openstack block storage as a service - Scheduler server ii cinder-volume 2013.1-1 all Openstack block storage as a service - Volume server ii python-cinder 2013.1-1 all Openstack block storage as a service - Python libraries ii python-cinderclient 1:1.0.3-1 all python bindings to the OpenStack Volume API cinder packages missing from the 2013.1-1 distribution: cinder-backup cinder-clear-rabbit-queues cinder-rtstool cinder-volume-usage-audit
The way to check that you have everything is 1) see what packages are missing when comparing the new distribution with older releases, 2) compare corresponding package files in /usr/bin with the DevStack files installed by the script in /usr/local/bin, and 3) search for documented changes.
Regarding the missing cinder-rtstool, it was either renamed to rtstool, or removed, as indicated here.
Note: after corresponding with Thomas Goirand, it was a nice surprise to receive the first Grizzly package update coming in from the gplhost.com repo - cinder ver 2013.1-1 is now complete!
Same comment for glance configuration files in /etc/glance. Installed glance packages in Debian ver 2013.1-1:
# dpkg -l|grep glance ii glance 2013.1-1 all OpenStack Image Service - metapackage ii glance-api 2013.1-1 all OpenStack Image Service - API server ii glance-common 2013.1-1 all OpenStack Image Service - common files ii glance-registry 2013.1-1 all OpenStack Image Service - registry server ii python-glance 2013.1-1 all OpenStack Image Service - Python client library ii python-glanceclient 1:0.8.0-1 all Client library for Openstack glance server
Filed Debian Bug repport #704751 nova-consoleauth 2013.1-1 conflicts with nova-console 2013.1-1. Also filed Debian Bug report #704757 novnc 0.4+dfsg+1-6 conflicts with websockify 0.3.0-1.
In his response, Thomas Goirand (zigo) states that websockify is *not* in Debian yet (it is in the FTP master NEW queue), and he will fix the novnc package in the gplhost.com repository. Very good!
I will have to go through the config files and create permanent nova, cinder and glance configurations to keep on the system.
[PREV] Installing Debian Wheezy on a Dell XPS13 Ultrabook
[NEXT] Installing OpenNebula 4.0 on a Dell XPS13 Ultrabook running Debian sid
Cheers,
Mitch Halmu
NetSide Corporation
305-531-1995