Rebuild v1.2.0
Draft - Rebuild v1.2.0 has not been released
This page collects the documentation for the next release while it is being built. The changes it describes are on development branches and may still change. For the current release, see Rebuild v1.1.0.

Rebuild is a complete Linux image for Recore 3D printer controller boards. Rebuild comes with Klipper installed and the choice of either Mainsail, Fluidd or OctoPrint.
What is new in v1.2.0
Rebuild's own files are Debian packages
Everything Rebuild adds to the base system is now installed from two packages, rather than copied into the image by the build scripts:
- rebuild-recore, on every image including barebone: the board tools (
get-serial-number,get-recore-revisionand friends), the USB-C serial console, and the Wi-Fi hotspot fallback. - rebuild-printer, on the Fluidd, Mainsail and OctoPrint images: the tools that flash the AR100, STM32 and RP2040 firmware, the configurations that firmware is built from, first boot, SSH auto-disable, the boot splash, and the system settings the printer images share.
This means that a fix to any of these files can reach a board through apt upgrade, instead of requiring a new image and a reflash.
The tools have moved from /usr/local/bin to /usr/bin. On a board that is upgraded in place, the old paths keep working: they become links to the new ones. The files the old image had copied in are kept in /var/backups/rebuild-legacy.
Security
- The printer account is now a service account. It has no password, is not in the
sudogroup, and cannot log in over SSH. Klipper, Moonraker and KlipperScreen keep working: the rights they need are given to them explicitly. Log in as debian, and usesudo -u printer -ito work in Klipper's files, as before.
Klipper and the AR100
- Klipper is updated to v0.13.0-777.
- The firmware for the AR100 is built with AR100 improvements that are still on their way into Klipper: the timer and message handling rework from Klipper's maintainer, and building at
-O2with a correct size check. The changes are kept in/usr/share/rebuild/klipper-patches, and are dropped from Rebuild as they are merged into Klipper. They only affect the AR100 firmware; Klipper itself on the board is an unmodified upstream checkout. - The AR100 compiler is updated from GCC 15.1.0 to GCC 16.1.0, which includes fixes for code generation errors on OpenRISC (64-bit and 16-bit shifts, and branch placement).
- Each firmware file in
/opt/firmwarenow has the exact configuration it was built with next to it (ar100.config,stm32.config,stm32-32KB.config,rp2040.config), andklipper-versionrecords the Klipper version they were built from.
Fixes
- A reboot shortly after the board has started no longer hangs for 90 seconds. Moonraker is given 10 seconds to stop.
A smaller image
- Input shaper graphs are no longer drawn on the printer by default.
python3-matplotlibis not installed, which saves 242 MB. Klipper itself never used it. See Input shaper graphs below. - The ARM compiler no longer carries libraries for Cortex-A and Cortex-R processors, which Klipper never builds for, and the firmware package no longer carries firmware for Qualcomm processors. Together these save about 630 MB. Every Cortex-M variant is kept, so firmware for any microcontroller Klipper supports can still be built on the printer, with any options (CAN bus, USB to CAN bridge, and so on).
Getting started
Building firmware on the printer
The configurations Rebuild uses for its own firmware are installed with the image, in /usr/share/rebuild/firmware. To rebuild the STM32 firmware for a Recore A8 (32 KB flash):
sudo -u printer -i cd ~/klipper cp /usr/share/rebuild/firmware/stm32f031-32KB-serial.config .config make olddefconfig make exit
The same directory has stm32f031-serial.config, for the 16 KB STM32 on earlier boards, and ar100.config. Flashing works as described in v1.1.0.
Use one or two build jobs
A Recore without a fan can reach its critical temperature with all four cores compiling, and it then powers itself off. Build with make -j2 or plain make, not make -j4.
AR100 toolchain
The AR100 firmware is compiled with an OpenRISC GCC toolchain installed in /opt/or1k-elf. v1.2.0 uses GCC 16.1.0, binutils 2.46 and newlib 4.6, built for the Recore from OpenRISC's own build scripts. The build and the changes made for Rebuild are in intelligent-agent/or1k-toolchain-build (branch rebuild), and the toolchain is downloaded from http://feeds.iagent.no/toolchains/.
Input shaper graphs
Klipper's resonance measurement does not need anything extra. SHAPER_CALIBRATE runs inside Klipper, measures both axes, recommends a shaper for each and saves it with SAVE_CONFIG. That works on v1.2.0 exactly as before.
The graphs are optional. They are drawn by Klipper's scripts (scripts/calibrate_shaper.py, scripts/graph_accelerometer.py), which need the Python plotting library matplotlib. v1.2.0 no longer installs it. There are two ways to get graphs.
Draw the graphs on your computer (recommended)
The picture is looked at on a computer anyway, so draw it there. First measure on the printer, from the console in Fluidd or Mainsail:
TEST_RESONANCES AXIS=X TEST_RESONANCES AXIS=Y
Klipper writes the measurements to /tmp/resonances_x_*.csv and /tmp/resonances_y_*.csv on the printer. Copy them to your computer:
scp debian@recore.local:/tmp/resonances_*.csv .
Then, on the computer, with Python 3 installed:
git clone https://github.com/Klipper3d/klipper python3 -m pip install numpy matplotlib python3 klipper/scripts/calibrate_shaper.py resonances_x_*.csv -o shaper_calibrate_x.png python3 klipper/scripts/calibrate_shaper.py resonances_y_*.csv -o shaper_calibrate_y.png
Install matplotlib on the printer
If you would rather draw the graphs on the printer, as described in Klipper's documentation, install matplotlib first, logged in as debian:
sudo apt update sudo apt install python3-matplotlib
This takes about 240 MB. Klipper's scripts then work as described in its documentation.
Plugins that draw these graphs themselves, such as Shake&Tune, install their own copy of matplotlib and do not need either step.