-*- org -*-
See https://github.com/sourceruckus/ruckusrd/commits/master for full log.
2024-mm-dd: Ruckusrd v0.22.0 (under development)
- Added new `initramsys-net` boot parameter. This implies `initramsys` but enables networking and starts sshd. Configuration can be specified as an argument (e.g., `initramsys-net=DEV=eth0,VLAN=20`). See manpage for more details.
- Split most functions out of `linuxrc` into `ruckusrd-common.sh` to share with other new scripts and to help facilitate development/debugging.
- Added new `mount_sysroot`, `mount_sysroot_vfs`, and `umount_sysroot` scripts to facilitate easy assembly/disassembly of sysroot from inside the `initramsys` environment.
2024-10-14: Ruckusrd v0.21.1
- Fixed silly bug causing boot failures for non-ZFS hosts
2024-10-13: Ruckusrd v0.21.0
- Upgraded all subprojects to latest available versions as of 10/10/24.
- Support sqsh_layer= and sqsh_layerdev= when using ZFS
- Added firstboot_wizard, which runs if `firstboot` boot parameter is present (and if sysroot.ruckusrd_firstboot_done hasn’t been created yet). So far, it sets hostname, generates a new system uuid, sets root password, adds localadmin user, sets localadmin password, sets timezone, sets locale, and helps install some close-to-correct NetworkManager connection files.
- Added a ton of info to the ruckusrd.1 manpage (e.g., boot parameters, sqsh_layer explanation, usage examples, see also).
2024-10-04: RuckusRD v0.20.1
- Fixed bootup problems with Ubuntu 24.04, and anywhere else where /sbin/init is a relative symlink instead of an absolute one.
2024-10-01: RuckusRD v0.20.0
- Added –no-ucode flag to prevent addition of microcode (for testing).
- Preppended “ruckusrd:” to all initramfs messages, to better differentiate from kernel messages.
- Added new `initramsys` boot parameter to invoke the initramfs’s init instead of switching rootfs and invoking the sysroot’s init. This gives us a more complete maintenance system (complete with multiple TTYs to login on) and opens the door for using a ruckusrd initramfs on it’s own to facilitate installation on blank drives.
- Included Glibc’s NSS shared libs on the initramfs, so things like dropbear will be able to authenticate users.
- Include scripts for udhcpcd in the initramfs, so using dhcp actually works. Ha, woops.
- Upgraded less to latest version as of 6/20/24 and fixed “terminal is not fully functional” errors in initramfs.
- Added newt (whiptail) to initramfs for creating dialog-based prompts, perhaps for an installer or rescue interface down the road.
- The fwdev= mount code now waits for device hotplug to finish, so we can now boot with USB flash drive for fwdev.
- Added firmwarenator and microcodenator to the initramfs so our maint shell can be used to create machine-specific fw.sqsh and ucode.img files.
2024-05-30: RuckusRD v0.19.0
- Upgraded all subprojects to latest available versions as of 9/11/23.
- Upgraded microcode, firmware, and zfs to latest version as of 05/24/24.
- Added `sqshfstype` command line arg to linuxrc and fixed bug where `rootfstype` was ignored.
- Added fsarchiver to the initramfs.
- Fixed silly decho -n output bug
2022-05-13: RuckusRD v0.18.0
This release is primarily focused on two things: 1) build system overhaul stemming from splitting utils out into seperate packages, and 2) adding more comfort (e.g, man pages) and capability (e.g., real fdisk w/ GPT support) to the initramfs maint shell. Plus bug-fixes and subproject updates.
- Removed doit, which moved into its own package.
- Removed extractenator, which moved into its own package.
- Removed kernel-builder and kernel-tar, which moved into the new kernel-builder package.
- Removed firmwarenator, which moved into its own package.
- Removed microcodenator, which moved into its own package.
- Cleaned up initrd output, now completely quiet when `quiet` specified on kernel command line, added `verbose` for traditionally noisey output.
- Preload common modules needed for accessing fwdev.
- Copy host sytem modprobe config into initramfs.
- Don’t append command line modprobe options to system modprobe config.
- Allow fwdev=DEV1,DEV2,… on command line.
- Put manpages back in initramfs. We had been removing them to save space, but our initramfs is hopelessly large and super useful now… we might find ourselves wanted manpages.
- Added etc/ruckusrd.conf and ~.ruckusrd.conf config file support.
- Added libuuid, libblkid, fdisk, cfdisk, sfdisk, and blkid from util-linux to the initramfs because busybox fdisk didn’t like manipilating GPTs.
- Added groff to the initramfs because the busybox man applet just wraps around it (i.e., it doesn’t work unless you also have groff).
- Added less to the initramfs to make manpages look nicer.
- Added zstd to initramfs so we can use it in squashfs, rsync, and zfs, as well as have it available in the maint shell.
- Upgraded busybox, eudev, lvm2, e2fsprogs, squashfs-tools, dropbear, linux-firmware, intel-ucode, wireless-regdb, zfs.
- Overhauled command line parsing using getopt with better usage description.
- Added help2man generated man page.
- The fw.sqsh file generated in subprojects now uses zstd for compression.
2022-01-16: RuckusRD v0.17.2
Point release fixing a couple minor issues:
- Apt was reporting installed size as 16K instead of around 1M.
- Kernel/header injection (modinject) was failing if /lib/modules didn’t already exist.
- Broken symlink checking was checking symlinks with absolute paths against the host system, resulting in false positives during building (e.g., zfs wasn’t installed on host system).
- Tweaked build rules for subprojects to get them building on my embedded Ubuntu 20.04 test system.
2021-11-17: RuckusRD v0.17.1
Teeny point release. Looks like we forgot to actually install microcodenator, even though we called it out in the previous release.
2021-09-25: RuckusRD v0.17.0
Firmware and microcode handling improvements. Building now generates fw.sqsh and ucode.img in subprojects. These two files can/should be installed by the user into /boot, where they can then be updated independently. If present (or specified explicitly) when running ruckusrd, /boot/ucode.img is prepended to a generated initrd file to support early loading of CPU microcode. During boot, if /fw.sqsh exists it is mounted to provide firmware to early loaded kernel modules. The contents of fw.sqsh (i.e., /lib/firmware) are included by modinject to keep post-boot /lib/firmware consistent with initrd.
Both fw.sqsh and ucode.img are universal images. They have ALL the firmware and ALL the microcode rolled up into larger files. For systems that don’t want to use a big distro-style image, host-specific fw.img and ucode.img can be generated via the firmwarenator and microcodenator scripts.
- BusyBox, OpenZFS, linux-firmware, intel-ucode, wireless-regdb subprojectes all updated to latest stable.
- Build subprojects/fw.sqsh, added fwdev= linuxrc commandline arg to specify device the user has copied it to.
- Build subprojects/ucode.img, added –with-ucode= flag to ruckusrd to specify path (default is /boot/ucode.img).
- Added –sqsh to firmwarenator, causing it to create a squahsfs image instead of a cpio archive.
- Finished initial implementation of firmwarenator.
2021-09-07: RuckusRD v0.16.0
The driving feature for this release is the inclusion of ALL kernel modules on the initramfs and the new modinject option in the generated initird’s linuxrc script. In short, you no longer have to install kernel modules and headers everywhere you want to run the kernel, you just boot it up and the initrd installs modules and headers exactly the same way kernel-installer used to. An initrd built by kernel-builder will automatically have modinject enabled. Any built by manually calling ruckusrd will keep the traditional behavior unless you specify ‘-o modinject=1’.
2021-04-30: RuckusRD v0.15.0
This release is mostly centered around making our maint shell so useful you can’t live without it, as well as imcremental improvements to kernel development scripts.
- Added rsync, dropbear (ssh client), syslinux, and efibootmgr as subprojects and install them in the initramfs.
- Fixed a long-standing limitation/bug in maint shell so now bash can have full job control. This means you can ctrl-C out of a ping, for example.
- Added a new script, firmwarenator, which helps you create a custom fw.img for appending to your initrd. There isn’t yet any automatic generation, but you can append a fw.img to the installed initrd pretty easily.
- Added linux-firmware, wireless-regdb, and intel-ucode git repos as subprojects. These aren’t used in any way quite yet, but are planned to be used in a future release. For now, they’re a convenience for development.
- The kernel-builder script now calls kernel-tar at the end, and kernel-installer has been removed. I’ll just be maintaining a single installer now, thanks.
2021-02-24: RuckusRD v0.14.0
This is a pretty big release, mostly centered around tidying up the initramfs (e.g., remove static libs), adding networking support to the initramfs, and adding ZFS experimental rootfs support. There are a few noteable side-effects to be aware of:
- The initramfs images are now a bit larger. We’re including quite a bit more of the kernel’s modules, and the OpenZFS userland tools, and things have gotten bigger.
- Because we have networking modules on the initramfs, you’re more likely to need to include firmware during boot. This can be done by creating a /boot/fw.img and specifying it to the kernel as an additional initrd. The only device tested that had bad heartburn was my laptop, but it’s a problem that will only get more common.
- ZFS rootfs support is EXPERIMENTAL. It worked for me, but I’m sure needs refinement. The syntax is root=ZFS=zpool/dataset.
In addition to that, my conventient kernel build/install tools have overgone a bit of an overhaul. Changes of note:
- Added zstd support for initramfs. Ruckusrd will autodetect which compression method to use, tunable with -c for “best” or “fast”.
- Extractenator (and thus kernel_tar) now uses zstd -T0 -10 by default.
- Extractenator, kernel_tar, and the resulting installers, all have –dry-run and –help now.
- Files created by extractenator can now take a –remote-nodes flag for installing onto a list of remote systems.
2020-06-23: RuckusRD v0.13.2
Point release for 0.13:
- Added .config to installed kernel headers
- Fixed broken stable symlink for kernel headers
- Enabled alternate compressors in squashfs-tools
2020-06-06: RuckusRD v0.13.1
Point release for 0.13:
- The ruckusrd_umount service now works propperly with systemd (i.e., everything gets unmounted propperly upon shutdown).
- The kernel_builder script now creates a .y symlink when NOVERSION=stable and the kernel_instaler script now removes what the link points to (if it exists on the system already). (i.e., we’re no long leave useless modules/headers behind when NOVERSION=stable).
2020-05-29: RuckusRD v0.13.0
In addition to misc cleanup and bugfixes, this release makes a few notable changes to the kernel command line options and updates our submodules to the latest versions.
- The sqsh_layers code now looks in both rootdev and sqsh_layerdev for layers (i.e., rootdev can be used to override what’s in sqsh_layerdev).
- New ‘overlayflags’ option allows passing overlayfs mount options on kernel command line. Previously, default mount opts are used. This can lead to problems though, because OverlayFS has a bunch of tunables at kernel config time that will break existing filesystems. We need this so that we can ensure tempermental kernel config options are always on or off consistently regardless of how the kernel defaults are set. For example, I had index=on set as the default in my older kernels, and I’m moving away from that since it doesn’t look like any distro kernels do that (and I’m having multi-lower sqsh problems), so I’ve now got some kernels w/ index=on and some w/ index=off… and you cannot switch back and forth w/out borking your overlay forever.
- Added a bunch of initramfs breakpoints as kernel command line options (shell_mountdevs, shell_sqshprep, and shell_mountoverlay).
2020-05-12: RuckusRD v0.12.3
Point release for 0.12:
- Added doit utility script, for running things in the background w/ email alert upon completion.
- Use upper as additional ro layer when using ram_layer. Otherwise, using ram_layer reverts you to your base image… Oops.
- Added NOVERSION=stable to kernel_builder for cleaner stable kernel upgrades.
- Added xvda to list of drives the early boot process waits for. Without this, xen virtual machines were suffering from a 10 second pause.
2019-07-06: RuckusRD v0.12.2
Point release for 0.12 with a couple minor additions:
- The kernel_builder, kernel_installer, and kernel_tar scripts now handle installlation of headers in /usr/src/linux-headers-VERSION.
- An example debian control file and utility script are now included in the sourcetree and installed in docdir.
- A ‘dpkg’ target has been added to the generated Makefile. After ./configure, this target will create a semi-proper .deb package that can be installed via dpkg (or gdebi, if that’s your style). The resulting package isn’t really suitable for distribution, but it does allow you to install and keep track of things via dpkg locally.
2019-06-27: RuckusRD v0.12.1
Quick point release for 0.12.
2019-06-16: RuckusRD v0.12.0
This release sees us moving forward with a huge development effort to rid ourselves of almost all host system dependencies. We’re now building our own busybox, eudev, lvm, mdadm, e2fsprogs, and squashfs utils to include on the initramfs instead of slurping them up from the host system. Primarily, this means we now have a stable baseline to maintain our linuxrc script against. And it’s actually mostly compatible with Systemd-based systems. It also gives us an incredibly capable maint shell on the initramfs.
This new release builds, installs, and functions well (including the sqsh_layers stuff) on RHEL/CentOS 7.6 and Ubuntu 18.04, so that’s a huge improvement.
2018-11-13: RuckusRD v0.11.2
Another quick bugfix release for 0.11.
2018-11-09: RuckusRD v0.11.1
Quick bugfix release for 0.11.
2018-10-05: RuckusRD v0.11.0
This release adds the new Squash Layers mode, the OverlayFS based successor to our old device-mapper based squashfs mode. All the old squashfs boot args will remain for a release or two, but will eventually be removed. See README.overlayfs.
It also adds a new utility: extractenator. This script is basically a generic, extensible version of portions of the kernel_tar script for creating self extracting executables. kernel_tar has been modified to use extractenator, which does slightly change the on-disk format of the created executable.
2018-05-29: RuckusRD v0.10.3
This release adds a few handy utility scripts for building and installing the Linux kernel.
2014-03-06: RuckusRD v0.10.2
This release fixes a few bugs and adds a -b basedir flag for getting kernel modules from a staging area instead of /lib/modules.
2014-02-15: RuckusRD v0.10.1
This release fixes a bunch of minor bugs, and make some minor changes under the hood. Most notable:
- We now include all progs (and we’ve added a bunch more to configure) in the initramfs image. This makes our configure.ac a little cleaner and make life much easier when troubleshooting busted initramfs images.
- RAID/LVM init failures are no longer treated as fatal (although, if they were needed for your rootfs, you’ll obviously be unbootable).
- I’ve ironed out most (all?) of the upstream udev issues. We now are able to use either udevstart or udevadm, we use blkid but fall back to vol_id, we copy /lib/udev rules into initramfs if found, etc.
- We can now boot regardless of whether loop is built-in to the kernel or built as a module.
2014-01-19: RuckusRD v0.10.0
This release adds squashfs=, squashdev=, and root_true_rw boot options, and some rambling documentation.
NOTE: This does introduce a slight usage change. In v0.9.8 the rw flag changed both the rootfs and the root-true device to read-write. The behavior has been changed such that rw ONLY effects the rootfs and the new root_true_rw flag ONLY effects the root-true device.
2014-01-10: RuckusRD v0.9.8
This release makes the initramfs not fail if fsck returns non-zero (which may or may not indicate a failure) and makes the rw boot arg also leave the root-true device mounted read-write.
2014-01-04: RuckusRD v0.9.7
This release fixes the long-standing can’t-umount-root-true on reboot problem, runs fsck on the root dev at bootup, and fixes some permissions issues w/ conf.
2013-04-17: RuckusRD v0.9.6
This release fixes a bug that was causing symlinks in the conf dir to not get installed.
2013-02-13: RuckusRD v0.9.5
This release ensures that we always overwrite symlinks and adds a chrooted ldconfig call into the linuxrc script (in case we’re adding libs via the conf dir).
2013-02-01: RuckusRD v0.9.4
This release changes the behavior regarding copying/symlinking of files in root-true/conf into the sysroot. We now always copy. Symlinking is no longer supported.
2012-12-03: RuckusRD v0.9.3
This release fixes a bug that didn’t allow conf symlinks to overwrite existing files and a bug that caused a boot failure if the user overrides /etc/fstab with a symlink.
2012-11-20: RuckusRD v0.9.2
This release fixes a bug in the root-true/conf parsing code that caused systems to fail to boot if the conf dir existed but was empty.
2012-11-17: RuckusRD v0.9.1
This release adds SCSI and block device drivers to the initramfs and adds a generic mechanism for storing config files on the resulting boot media.
2012-07-06: RuckusRD v0.9.0
First tagged development release.