32-bit Arm Chef Infra and Cinc Client Builds for Linux

I’ve been doing builds of Chef and Cinc for 32-bit Arm systems (Raspberry Pi and similar) for awhile, so I figured I’d create a landing page for them. You may download the builds I’ve made or follow the instructions to make your own.

Available Builds

The 32-bit Arm build targets are Debian/Raspbian/Ubuntu on the armv6l (Raspberry Pi 1/Zero series) and armv7hl (Raspberry Pi 2/3/4 series). CentOS 7 RPMs are also provided for the armv7hl.

Version armv6l DEB armv7l DEB armv7l RPM
Chef Infra 16.5.64 chef-16.5.64-rpi-armv6l_armhf.deb chef-16.5.64-rpi3-armv7l_armhf.deb chef-16.5.64-1.el7.armv7hl.rpm
Chef Infra 16.4.41 chef-16.4.41-rpi-armv6l_armhf.deb chef-16.4.41-rpi3-armv7l_armhf.deb chef-16.4.41-1.el7.armv7hl.rpm
Chef Infra 16.3.45 chef-16.3.45-rpi-armv6l_armhf.deb chef-16.3.45-rpi3-armv7l_armhf.deb chef-16.3.45-1.el7.armv7hl.rpm
Chef Infra 16.3.38 chef-16.3.38-rpi-armv6l_armhf.deb chef-16.3.38-rpi3-armv7l_armhf.deb chef-16.3.38-1.el7.armv7hl.rpm
Chef Infra 16.2.73 chef-16.2.73-rpi-armv6l_armhf.deb chef-16.2.73-rpi3-armv7l_armhf.deb chef-16.2.73-1.el7.armv7hl.rpm
Chef Infra 16.2.50 chef-16.2.50-rpi-armv6l_armhf.deb chef-16.2.50-rpi3-armv7l_armhf.deb chef-16.2.50-1.el7.armv7hl.rpm
Chef Infra 16.2.44 chef-16.2.44-rpi-armv6l_armhf.deb chef-16.2.44-rpi3-armv7l_armhf.deb chef-16.2.44-1.el7.armv7hl.rpm
Chef Infra 16.1.16 chef-16.1.16-rpi-armv6l_armhf.deb chef-16.1.16-rpi3-armv7l_armhf.deb chef-16.1.16-1.el7.armv7hl.rpm
Chef Infra 16.1.0 chef-16.1.0-rpi-armv6l_armhf.deb chef-16.1.0-rpi3-armv7l_armhf.deb chef-16.1.0-1.el7.armv7hl.rpm
Chef Infra 16.0.287 chef-16.0.287-rpi-armv6l_armhf.deb chef-16.0.287-rpi3-armv7l_armhf.deb chef-16.0.287-1.el7.armv7hl.rpm
Chef Infra 16.0.275 chef-16.0.275-rpi-armv6l_armhf.deb chef-16.0.275-rpi3-armv7l_armhf.deb chef-16.0.275-1.el7.armv7hl.rpm
Chef Infra 16.0.257 chef-16.0.257-rpi-armv6l_armhf.deb chef-16.0.257-rpi3-armv7l_armhf.deb chef-16.0.257-1.el7.armv7hl.rpm
Chef Infra 15.14.0 chef-15.14.0-rpi-armv6l_armhf.deb chef-15.14.0-rpi3-armv7l_armhf.deb chef-15.14.0-1.el7.armv7hl.rpm
Chef Infra 15.13.8 chef-15.13.8-rpi-armv6l_armhf.deb chef-15.13.8-rpi3-armv7l_armhf.deb chef-15.13.8-1.el7.armv7hl.rpm
Chef Infra 15.12.22   chef-15.12.22-rpi3-armv7l_armhf.deb chef-15.12.22-1.el7.armv7hl.rpm
Chef Infra 15.11.3 chef-15.11.3-rpi-armv6l_armhf.deb chef-15.11.3-rpi3-armv7l_armhf.deb chef-15.11.3-1.el7.armv7hl.rpm
Chef Infra 15.10.12 chef-15.10.12-rpi-armv6l_armhf.deb chef-15.10.12-rpi3-armv7l_armhf.deb chef-15.10.12-1.el7.armv7hl.rpm
Chef Infra 15.9.17 chef-15.9.17-rpi-armv6l_armhf.deb chef-15.9.17-rpi3-armv7l_armhf.deb chef-15.9.17-1.el7.armv7hl.rpm
Chef Infra 15.8.23 chef-15.8.23-rpi-armv6l_armhf.deb chef-15.8.23-rpi3-armv7l_armhf.deb chef-15.8.23-1.el7.armv7hl.rpm
Chef Infra 15.7.32 chef-15.7.32-rpi-armv6l_armhf.deb chef-15.7.32-rpi3-armv7l_armhf.deb chef-15.7.32-1.el7.armv7hl.rpm
Chef Infra 15.6.10 chef-15.6.10-rpi-armv6l_armhf.deb chef-15.6.10-rpi3-armv7l_armhf.deb chef-15.6.10-1.el7.armv7hl.rpm
Chef Infra 15.5.15 chef-15.5.15-rpi-armv6l_armhf.deb chef-15.5.15-rpi3-armv7l_armhf.deb chef-15.5.15-1.el7.armv7hl.rpm
Chef Infra 15.4.45 chef-15.4.45-rpi-armv6l_armhf.deb chef-15.4.45-rpi3-armv7l_armhf.deb chef-15.4.45-1.el7.armv7hl.rpm
Chef Infra 15.3.14 chef-15.3.14-rpi-armv6l_armhf.deb chef-15.3.14-rpi3-armv7l_armhf.deb chef-15.3.14-1.el7.armv7hl.rpm
Chef Infra 15.1.36 chef-15.1.36-rpi-armv6l_armhf.deb chef-15.1.36-rpi3-armv7l_armhf.deb chef-15.1.36-1.el7.armv7hl.rpm
Chef Infra 15.0.300 chef-15.0.300-rpi-armv6l_armhf.deb chef-15.0.300-rpi3-armv7l_armhf.deb chef-15.0.300-1.el7.armv7hl.rpm
Cinc 16.5.64 cinc-16.5.64-rpi-armv6l_armhf.deb cinc-16.5.64-rpi3-armv7l_armhf.deb cinc-16.5.64-1.el7.armv7hl.rpm
Cinc 16.4.41 cinc-16.4.41-rpi-armv6l_armhf.deb cinc-16.4.41-rpi3-armv7l_armhf.deb cinc-16.4.41-1.el7.armv7hl.rpm
Cinc 16.3.47 cinc-16.3.47-rpi-armv6l_armhf.deb cinc-16.3.47-rpi3-armv7l_armhf.deb cinc-16.3.47-1.el7.armv7hl.rpm
Cinc 16.3.38 cinc-16.3.38-rpi-armv6l_armhf.deb cinc-16.3.38-rpi3-armv7l_armhf.deb cinc-16.3.38-1.el7.armv7hl.rpm
Cinc 16.2.73 cinc-16.2.73-rpi-armv6l_armhf.deb cinc-16.2.73-rpi3-armv7l_armhf.deb cinc-16.2.73-1.el7.armv7hl.rpm
Cinc 16.2.52 cinc-16.2.52-rpi-armv6l_armhf.deb cinc-16.2.52-rpi3-armv7l_armhf.deb cinc-16.2.52-1.el7.armv7hl.rpm
Cinc 16.2.44 cinc-16.2.44-rpi-armv6l_armhf.deb cinc-16.2.44-rpi3-armv7l_armhf.deb cinc-16.2.44-1.el7.armv7hl.rpm
Cinc 16.1.16 cinc-16.1.16-rpi-armv6l_armhf.deb cinc-16.1.16-rpi3-armv7l_armhf.deb cinc-16.1.16-1.el7.armv7hl.rpm
Cinc 16.1.0 cinc-16.1.0-rpi-armv6l_armhf.deb cinc-16.1.0-rpi3-armv7l_armhf.deb cinc-16.1.0-1.el7.armv7hl.rpm
Cinc 16.0.287 cinc-16.0.287-rpi-armv6l_armhf.deb cinc-16.0.287-rpi3-armv7l_armhf.deb cinc-16.0.287-1.el7.armv7hl.rpm
Cinc 16.0.275 cinc-16.0.275-rpi-armv6l_armhf.deb cinc-16.0.275-rpi3-armv7l_armhf.deb cinc-16.0.275-1.el7.armv7hl.rpm
Cinc 16.0.258 cinc-16.0.258-rpi-armv6l_armhf.deb cinc-16.0.258-rpi3-armv7l_armhf.deb cinc-16.0.258-1.el7.armv7hl.rpm
Cinc 15.14.0 cinc-15.14.0-rpi-armv6l_armhf.deb cinc-15.14.0-rpi3-armv7l_armhf.deb cinc-15.14.0-1.el7.armv7hl.rpm
Cinc 15.10.14 cinc-15.10.14-rpi-armv6l_armhf.deb cinc-15.10.14-rpi3-armv7l_armhf.deb cinc-15.10.14-1.el7.armv7hl.rpm
Cinc 15.9.17 cinc-15.9.17-rpi-armv6l_armhf.deb cinc-15.9.17-rpi3-armv7l_armhf.deb cinc-15.9.17-1.el7.armv7hl.rpm
Cinc 15.8.23 cinc-15.8.23-rpi-armv6l_armhf.deb cinc-15.8.23-rpi3-armv7l_armhf.deb cinc-15.8.23-1.el7.armv7hl.rpm
Cinc 15.7.32 cinc-15.7.32-rpi-armv6l_armhf.deb cinc-15.7.32-rpi3-armv7l_armhf.deb cinc-15.7.32-1.el7.armv7hl.rpm

Building with Omnibus

The Chef client is packaged with Omnibus, which builds the application and all of its runtime dependencies with the Omnibus-Toolchain. Omnibus is built with Ruby, so the instructions start with building Ruby. These instructions assume you have already installed either Debian 9, Raspbian 10, or CentOS 7 on your system already.

Preparation

There are several steps that need to be done before we get started. As the root user update to ensure the latest packages are installed and install the prerequisites for building Ruby and Omnibus-Toolchain.

For CentOS:

yum update
yum install -y autoconf automake bison flex gcc gcc-c++ gdbm-devel gettext git kernel-devel libffi-devel libyaml-devel m4 make ncurses-devel openssl-devel patch readline-devel rpm-build wget zlib-devel

For Debian/Raspbian:

apt-get update
apt-get upgrade
apt-get install -y autoconf build-essential fakeroot git libreadline-dev libssl-dev zlib1g-dev

ld.so.preload

Raspbian sets the file /etc/ld.so.preload to

/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so

in an attempt to support both the 6l and 7l armhf platforms. This breaks the Chef 32-bit Arm builds on Raspbian so I have replaced this line with

echo /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so > /etc/ld.so.preload

on the Raspberry Pi 3 and 4 and

echo /usr/lib/arm-linux-gnueabihf/libarmmem-v6l.so > /etc/ld.so.preload

on the Raspberry Pi Zero.

Omnibus User

Add the omnibus user for performing the builds.

adduser omnibus

Ensure the omnibus user has sudo privileges and add the following file to /etc/sudoers.d/omnibus. Feel free to use the wheel group or more limited permissions as necessary.

omnibus  ALL=(ALL)       NOPASSWD: ALL

You can now sudo su - omnibus and continue without changing users.

Build Scripts

If you want detailed instructions for the steps for building on these platforms check out Chef 15 Build Instructions for 32-bit Arm. The build is currently Ruby 2.7.1 and does not require any additional patches. I typically run them as the omnibus user with something similar to nohup bash RPM-chef-cinc-16.2.44.sh & and tail -f nohup.out to monitor the output.

Version DEB Build Script RPM Build Script
Chef Infra/Cinc 16.5.64 DEB-chef-cinc-16.5.64.sh RPM-chef-cinc-16.5.64.sh
Chef Infra/Cinc 16.4.41 DEB-chef-cinc-16.4.41.sh RPM-chef-cinc-16.4.41.sh
Chef Infra/Cinc 16.3.45 DEB-chef-cinc-16.3.45.sh RPM-chef-cinc-16.3.45.sh
Chef Infra/Cinc 16.3.38 DEB-chef-cinc-16.3.38.sh RPM-chef-cinc-16.3.38.sh
Chef Infra/Cinc 16.2.73 DEB-chef-cinc-16.2.73.sh RPM-chef-cinc-16.2.73.sh
Chef Infra/Cinc 16.2.50 DEB-chef-cinc-16.2.50.sh RPM-chef-cinc-16.2.50.sh
Chef Infra/Cinc 16.2.44 DEB-chef-cinc-16.2.44.sh RPM-chef-cinc-16.2.44.sh
Chef Infra/Cinc 16.1.16 DEB-chef-cinc-16.1.16.sh RPM-chef-cinc-16.1.16.sh
Chef Infra/Cinc 16.1.0 DEB-chef-cinc-16.1.0.sh RPM-chef-cinc-16.1.0.sh
Chef Infra/Cinc 16.0.287 DEB-chef-cinc-16.0.287.sh RPM-chef-cinc-16.0.287.sh
Chef Infra/Cinc 16.0.275 DEB-chef-cinc-16.0.275.sh RPM-chef-cinc-16.0.275.sh
Chef Infra/Cinc 16.0.257 DEB-chef-cinc-16.0.257.sh RPM-chef-cinc-16.0.257.sh
Chef Infra/Cinc 15.14.-8 DEB-chef-15.14.0.sh RPM-chef-15.14.0.sh
Chef Infra 15.13.8 DEB-chef-15.13.8.sh RPM-chef-15.13.8.sh
Chef Infra 15.12.22 DEB-chef-15.12.22.sh RPM-chef-15.12.22.sh
Chef Infra 15.11.3 DEB-chef-15.11.3.sh RPM-chef-15.11.3.sh
Chef Infra/Cinc 15.10.12 DEB-chef-cinc-15.10.12.sh RPM-chef-cinc-15.10.12.sh
Chef Infra/Cinc 15.9.17 DEB-chef-cinc-15.9.17.sh RPM-chef-cinc-15.9.17.sh
Chef Infra/Cinc 15.8.23 DEB-chef-cinc-15.8.23.sh RPM-chef-cinc-15.8.23.sh
Chef Infra/Cinc 15.7.32 DEB-chef-cinc-15.7.32.sh RPM-chef-cinc-15.7.32.sh
Chef Infra 15.6.10 DEB-chef-15.6.10.sh RPM-chef-15.6.10.sh
Chef Infra 15.5.15 DEB-chef-15.5.15.sh RPM-chef-15.5.15.sh
Chef Infra 15.3.14 DEB-chef-15.3.14.sh RPM-chef-15.3.14.sh
Chef Infra 15.1.36 DEB-chef-15.1.36.sh RPM-chef-15.1.36.sh
Chef Infra 15.0.300 DEB-chef-15.0.300.sh RPM-chef-15.0.300.sh
Chef Infra/Cinc 14.15.6 DEB-chef-cinc-14.15.6.sh RPM-chef-cinc-14.15.6.sh
Chef Infra 14.14.29 DEB-chef-14.14.29.sh RPM-chef-14.14.29.sh
Chef Infra 14.14.25 DEB-chef-14.14.25.sh RPM-chef-14.14.25.sh
Chef Infra 14.13.11 DEB-chef-14.13.11.sh RPM-chef-14.13.11.sh

Additional Notes

GPU Memory Usage

Because my systems are used primarily has headless servers, I’ve configured them to use less GPU memory by setting

gpu_mem=16

in the /boot/config.txt. I do this in the mattray::raspberrypi recipe used by all of my Raspbian systems.

Chef LEDs Handler Cookbook

If you’re using these builds you might be interested in the LEDs Handler cookbook. At the beginning of the Chef client run the LEDs blink a heartbeat pattern and at the end of the client run the LEDs are disabled. If the Chef client run fails the LEDs all stay on. It’s pretty simple but it’s a fun notification that the nodes are converging. It also works with Mac laptops running Linux, lighting up their keyboards when the Chef client is active.

Flashing LEDs

https://github.com/mattray/leds_handler-cookbook