This post is heavily based on Yohei Kuga’s post on Google+
https://plus.google.com/113091037050058478853/posts/8tYdBrbxu8i
We’ve spent a lot of time installing LXC in various ways and using different configurations. Recently Yohei Kuga posted a neat and minimal process, which was certainly more streamlined than our approach. I’ve expanded his notes and tested everything to ensure it works.
Download Raspbian and bake an SD Card
See:
http://www.raspberrypi.org/downloads
We used the 2013-02-09-wheezy-raspbian.zip image.
We made no other changes to this image other than those instructions listed below.
Switch to Root User on the Pi
These commands must be run as root. You can use “su”, or for convenience (I know):
# sudo su root
Expand to fill SD Card
Expand to fill SD card and reboot after entering:
# raspi-config
Update Raspbian
# apt-get update
# apt-get dist-upgrade
Install git
# sudo apt-get install git-core
Update Firmware
The clone will take a while. You might consider cloning on a desktop machine to save time. Just transfer the firmware/boot and modules/ directories from your desktop PC to the Pi after the checkout.
# cd /opt
# git clone git://github.com/raspberrypi/firmware.git
# cd firmware/boot
# cp * /boot
# cd ../modules
# cp -r * /lib/modules
# reboot
Increase the Swap File Size
I found that in order to check out the source on the Pi, you’ll need a swap file with the 256MB Pi, otherwise it will run out of RAM during the checkout (with fatal: index-pack failed).
# pico /etc/dphys-swapfile
# change to 500 (MB)
# sudo dphys-swapfile setup
# reboot
Prepare to Build Kernel
The clone will take a while. Again, you may consider using a desktop PC. Of course, if you do that, you’ll need to issue the “zcat” command from your Pi and copy the resulting “.config” file to the “linux” directory on your desktop PC.
# cd /opt
# mkdir raspberrypi
# cd raspberrypi
# git clone git://github.com/raspberrypi/linux.git
# cd linux
# zcat /proc/config.gz > .config
Decrease the Swap Space File
# pico /etc/dphys-swapfile
# change to 100 (MB)
# dphys-swapfile setup
# reboot
Install Packages for Kernel Compilation
# apt-get install ncurses-dev
Kernel Options
You’ll now need to set some kernel options to support LXC, via the menu config tool.
# cd /opt/raspberrypi/linx
# make menuconfig
You need to enable these options:
* General -> Control Group Support -> Memory Resource Controller for Control Groups (*and its three child options*)
(this has high overhead;only enable if you really need it, or else enable and remember to disable using the Kernel command line option “cgroup_disable=memory”)
* General -> Control Group Support -> cpuset support
* Device Drivers -> Character Devices -> Support multiple instances of devpts
* Device Drivers -> Network Device Support -> Virtual ethernet pair device
Build Kernel
# make
# make modules_install
# cd /opt/raspberrypi
# git clone git://github.com/raspberrypi/tools.git
# cd tools/mkimage
# python ./imagetool-uncompressed.py /opt/raspberrypi/linux/arch/arm/boot/Image
# cp /boot/kernel.img /boot/kernel-old.img
# cp kernel.img /boot/
# reboot
Download Latest LXC
The LXC tools provided with Raspbian are out-of-date.
# mkdir /opt/lxc
# cd /opt/lxc
# git clone https://github.com/lxc/lxc.git
# apt-get install automake libcap-dev
# cd lxc
# ./autogen.sh && ./configure && make && make install
Testing the Install
Check LXC is happy with your kernel:
# lxc-checkconfig
User namespace should be “missing” (it checks for a kernel option that no longer exists) and Cgroup namespace should say “required”.
Pingback: Creating an LXC Container on the Raspberry Pi | raspberrypicloud
Pingback: OpenStack on Raspberry Pi: Part 2 – Getting Started | Professional OpenStack
Pingback: Wir backen uns einen Kernel für Raspbian, der Linux Container unterstützt | Bananasoft.org
Had to “apt-get install bc” to get it to compile..
Hi everybody,
i tried to put the lxc kernel modules into the std. raspbian kernel
https://github.com/raspberrypi/linux/pull/603
so there is now need to compile the kernel by your self. just make a rpi-update
Thank you so much!
Pingback: Create a LXC-friendly kernel (Raspberry Pi) | 0ddn1x: tricks with *nix
On the section for building the Kernel I am stuck on this part
zcat /proc/config.gz > .config
should the file /proc/config.gz exist in /proc?
Same problem here!