I've just released the debian bookworm image for the B3. This time I tried to anticipate and be able to release it shorlty after the official release. As usual for the debian images, this image is constructed from 3 different projects : the bookworm OS image itself, an install/rescue system and an installer script. Also I've done a lot of work on the kernel package which had trouble booting during my first tries. More details on these further in this post.
Current users of the bullseye image can also directly upgrade their systems using standard system tools. More details below.
First the link and quick howtos for install and upgrade:
- b3-bookworm-install-1.0.zip (sha1: 5fbd744531d4785da95f01bc8cc7fe166aeab60d)
This works the same way as the bullseye image:
- Unzip the downloaded file on a fat-formatted usb key with a partition table
- By default the installer will wipe the entire disk. If you wish to keep the existing data of your device, edit the install.ini file inside the install directory and set wipe to false at the bottom of the file. The installer will then only format the first partition of the drive.
- Plug the usb key on the B3 and apply power while pushing the rear button.
- The rescue/install system will start, format the drive, extract the bookworm image and reboot the server.
- By default the network is configured for dhcp on both network interfaces. It can be changed in the install.ini file. The installer will copy the network settings from install.ini to the bookworm system by default. This can also be changed in the install.ini file.
- If the LED turns red, something went wrong. Turn off the server and post the install.log file which is created in the install directory of the key so I can help you out.
- When the LED is solid blue you can ssh into the box with user 'excito' (no quotes) and password 'excito' (no quotes). Then you can 'su' ; the root password is 'excito' (no quotes). Note that on the first boot the system generates new ssh keys, it can take a minute or two before the ssh server is reachable after the LED turns blue.
- Once you're logged in I strongly recommend to set the locale and timezone of your server (its defaults are POSIX and UTC). Run the following commands :
Code: Select all
dpkg-reconfigure locales dpkg-reconfigure tzdata
I recommend you go through the bookworm release notes which include upgrade instructions. The only b3 specific task you need to do is to update the /etc/apt/sources.list.d/excito.list, change bullseye to bookworm inside when preparing apt sources (step 4.3 of the upgrade guide) and manually upgrade the kernel. If you use non-free firmware (who knows), you need to add the non-free-firmware component in your sources.list.
That being said if you want to go fast and don't mind fixing broken stuff after the upgrade here is a very quick-and-dirty how-to :
- update packages to the latest version with apt update and apt upgrade
- replace bullseye with bookworm in /etc/apt/sources.list and /etc/apt/sources.list.d/excito.list
- Replace the bullseye security repository definition with
Code: Select all
deb https://deb.debian.org/debian-security bookworm-security main contrib
- run and
Code: Select all
apt update
Code: Select all
apt full-upgrade
- Due to changes in kernel package numbering, run the following command to forcibly upgrade the kernel:
Code: Select all
apt install -y --allow-downgrades bubba3-kernel=`apt-cache show bubba3-kernel | grep "Version: 6" | cut -f2 -d' '`
- reboot the b3, check the running kernel with uname -a (should be a 6.1.x kernel) and check services with systemctl status
- Fix whatever needs to be fixed
- run to cleanup old packages.
Code: Select all
apt autoremove --purge
The bookworm OS is a very minimal debian install with only the core packages needed to start and ssh into the server. The image was bootstraped directly from standard debian utils (not built from upgrade of a previous version). There is a github repository which describes all the steps taken to build it.
Linux kernel
The kernel used is Linux LTS 6.1.x series with Excito patches. This is actually the series used in debian and it's LTS upstream. Sources are available on github. I spent quite some time to make the kernel run on the B3, mainly due to the old UBoot version. I tried to run the official debian kirkwood kernel from an interstitial kernel but tests were not successful. That's why I'm keeping the classic patched package.
Here are the most notable changes in the kernel package :
- Patches upgrading the dtc library (this one and this one) have been reverted because they are apparently not compatible with the U-Boot version (both 2010 and 2013 versions). Those reverts do not prevent the kernel from booting but it may complicate things on the next major upgrade.
- I've created a special minimal configuration which produces (I think) the smallest possible bootable kernel on the b3 (~780ko). Obviously it's not capable of booting any OS but allows to check that U-Boot is capable of booting the kernel version tested. As I had to build many many times looking for the problematic commits it saved me quite a lot of time. I've kept it in the source tree but it's obviously not used for the official build.
- I've completely reviewed the configuration and added many modules which could potentially be useful (USB mostly) This has increased the build time a lot on the B3 (22h now, it was 8h for the 5.10 series) but it's more complete now. I initially tried taking the debian configuration for kirkwood but the build time was craaazy long and most of the stuff was useless on the B3 so I simply added stuff in the old configuration. Nevertheless if you miss anything ping me and I'll add it to the configuration.
- I took some time rewriting large parts of the debian/rules build script. It was initialy a stripped down vesion of the official debian package (way up to the squeeze version) so I upgraded it based on the current bookworm official version (that also fixed parallel build which was broken on bookworm). The main goal was to fix the kernel headers package building which never worked (at least AFAIK), the challenge being to be able to cross-build them. Fortunately the official package allows it so I took the needed portions and added them to the bubba3 package. Now the headers are properly built both natively and crossly ! That way you can compile a custom module directly on the B3 (it was on my todo list from quite some time, it will probably never be used but it's satisfying and was a lot of fun).
- I ran litian on the package and tried to fix as much as I could.
- I've setup my b3 at home to automatically build and quickly validate the kernel when there is a new release in the 6.1 series. What it does is basically do a build, install the package locally and reboot. If the reboot is successful and the wired network is working, the package is pushed to the repository. That way it will be kept up with upstream (esp. for security patches) on a regular basis. If you think this approach is harsh, feel free to comment it here, I'm open to discussion for alternatives !
Miscellaneous
- Excito-specific packages (kernel and button and led management) are available in a debian repository I maintain on the B2BCS hosting servers. The image is pre-configured to use it so further upgrades can be installed with apt tools. Everything is on github too.
- U-Boot tools are installed and configured so you can play with u-boot if you dare. WARNING this is risky business, use it at your own risk.
- The root password is 'excito' (without quotes) and I've also created an excito user with the same password. Note that by default you can not ssh directly as root with a password.
- SSH host keys are generated on the first boot and it takes a few seconds.
- The default network configuration is DHCP for both interfaces. It may be overridden by the install.ini configuration.
- Due to the shutdown of the easyfind service, the easyfind-client package has not been ported to this version.
Full sources and rudimentary compilation instructions are available on github.
The installer script
The installer script has been ported to python 3.x following removal of version 2.x in buildroot. One bug has also been fixed. The rest is pretty much the same as before and is still configured through the install.ini file on the USB install key. It's heavily commented so all the options can be understood and changed accordingly.
Also in rescue-only or if reboot is disabled, the install script on exit will also still animate the LED to dictate the first IP address of the box. It's bonus

Conclusion
As always ask as many questions as you want I will be more than happy to answer them.
Charles