From 838c82856e5ea4c467eb12d8d7b349eb68768801 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Sat, 14 Oct 2023 17:46:32 +0200 Subject: [PATCH] Add Home Assistant OS 11 blog post (#29348) * Add Home Assistant OS 11 blog post * Add picture caption/small reword * Add note about Green LED support * Apply suggestions from code review Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_posts/2023-10-14-home-assistant-os-release-11.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_posts/2023-10-14-home-assistant-os-release-11.markdown --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- ...0-14-home-assistant-os-release-11.markdown | 56 ++++++++++++++++++ .../home-assistant-os-11-landing-page.png | Bin 0 -> 26667 bytes 2 files changed, 56 insertions(+) create mode 100644 source/_posts/2023-10-14-home-assistant-os-release-11.markdown create mode 100644 source/images/blog/2023-10-14-home-assistant-os-11/home-assistant-os-11-landing-page.png diff --git a/source/_posts/2023-10-14-home-assistant-os-release-11.markdown b/source/_posts/2023-10-14-home-assistant-os-release-11.markdown new file mode 100644 index 00000000000..2b8f74d698b --- /dev/null +++ b/source/_posts/2023-10-14-home-assistant-os-release-11.markdown @@ -0,0 +1,56 @@ +--- +layout: post +title: "Home Assistant OS 11: Low-latency scheduler and VM snapshot improvements" +description: "Home Assistant OS 11 released with low-latency scheduler enabled and VM snapshot improvements on KVM/Proxmox." +date: 2023-10-14 00:00:00 +date_formatted: "October 14, 2023" +author: Stefan Agner +comments: true +categories: + - Announcements +--- +With Home Assistant OS 11, there is no big or flashy feature to highlight. Rather, there are a lot of small improvements and little gems. The increased use of Bluetooth has uncovered quite some issues on Home Assistant OS; some of which we are still working on. One of the main issues in Home Assistant OS 10 was caused by a bug in the processing of Bluetooth advertisements in the Linux kernel’s Bluetooth stack itself. With the help of our community, we managed to reproduce, pinpoint, and provide the necessary hints to the Bluetooth developers. This led to a fix in the Bluetooth stack not only for Home Assistant OS and Supervised users but for the Linux community in general 🎉 (see issue https://github.com/home-assistant/operating-system/issues/2535 for details). + +We’ve also worked on the landing page which is bundled with Home Assistant OS 11. The landing page is visible to the user when starting a fresh installation of Home Assistant OS for the first time. It features the same new look as the Home Assistant Core onboarding flow, and tracks issues during the bootstrapping phase, automatically displaying errors if they occur during that critical setup phase. + +Screenshot of the new Home Assistant landing page + +The new landing page shipped with Home Assistant OS 11 + +This month we at Nabu Casa got a new addition to the Home Assistant OS team: With [Jan Čermák](https://github.com/sairon) joining, we will have more bandwidth to implement new features as well as to tackle issues reported by our community. Welcome Jan! + +And finally: Home Assistant OS 11 will be pre-installed in the next batch of Home Assistant Green 🎉 + +Enjoy the latest version of Home Assistant OS! + +Stefan + + + +- [Linux' preemptible kernel configuration](#linux-preemptible-kernel-configuration) +- [VM filesystem freeze is being relayed to Home Assistant](#vm-filesystem-freeze-is-being-relayed-to-home-assistant) +- [Docker and containerd upgrades](#docker-and-containerd-upgrades) +- [More Highlights in Home Assistant OS 11](#more-highlights-in-home-assistant-os-11) + + +## Linux' preemptible kernel configuration +We've applied Linux's preemptible kernel configuration across the board. The result is lower latencies even on busy systems (for example due to slow I/O operations), making your smart home even more responsive. + +## VM filesystem freeze is being relayed to Home Assistant +VM filesystem freeze (as triggered by VM snapshots) is a neat feature for more advanced setups based on Proxmox (or other KVM based VMs). +Today, Home Assistant's recorder integration uses a database underneath (by default this is SQLite). When Home Assistant takes a backup, the Supervisor notifies the database engine before copying the database files (currently, this is implemented for SQLite and MariaDB). So far, this didn't work for VM filesystem freezes With that notification, the database engine can take the necessary steps to ensure that the database files are in a consistent state before the backup takes place. +However, when creating a snapshot using the VM snapshot feature, the database doesn’t know about this, and the snapshot can end up with an inconsistent state of the database. On snapshot restore, the database may or may not be able to recover from that inconsistent state. This can lead to partial or even complete data loss of the recorder data. +With Home Assistant OS 11, on Proxmox/KVM-based VMs, when using the snapshot feature, the file system freeze is now relayed to Home Assistant. Home Assistant then uses the same notification mechanism as backups are using. This ensures that VM snapshots are always coherent, making sure rollbacks of your smart home systems are reliable. + +## Docker and containerd Upgrades + +In this release, Home Assistant OS has adopted the latest versions of Docker (v24.0.6) and containerd (v1.7.6), ensuring better performance and container management. We’ve also improved the containerd configuration to drop unnecessary components. With this, containerd uses less CPU and memory resources, ensuring better overall performance. + +## More Highlights in Home Assistant OS 11 + +- **Consistent network interface naming**: On Arm-based boards, network names are now enumerated based on the device tree. This means that the first Ethernet device will no longer be named eth0 but end0. The same network configuration used previously is automatically applied to the network interface with the new name. +**This can be a breaking change ⚠️**: If you use the name of the Ethernet interface in custom scripts or automation, you'll have to adjust to the new name (as shown in the network settings)! +- **Bluetooth improvements**: Updating to a newer version of BlueZ, fix for the Bluetooth LE advertisement stall bug, and optimizing Bluetooth device cache management. +- **Improved kernel configuration**: Our improved kernel configuration aims to improve Docker's overlayfs performance, making container operations smoother. +- **Support for LED control on Home Assistant Green**: The three LEDs on the front of Home Assistant Green can now be controlled through hardware settings. +- **Adjusted development workflow** (my personal favorite, but I might be biased 😉): Our adjusted development workflow allows for more incremental changes and incorporates more automations. This will make it easier for developers to work on and improve Home Assistant OS. diff --git a/source/images/blog/2023-10-14-home-assistant-os-11/home-assistant-os-11-landing-page.png b/source/images/blog/2023-10-14-home-assistant-os-11/home-assistant-os-11-landing-page.png new file mode 100644 index 0000000000000000000000000000000000000000..efd225fa7ba0d04d12e750dd8b573ebb21da36ef GIT binary patch literal 26667 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 Ky+U1Tz<&Uvja*Ft literal 0 HcmV?d00001