<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Omni</id>
	<title>Alpine Linux - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Omni"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Omni"/>
	<updated>2026-05-01T07:56:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.23.0&amp;diff=31626</id>
		<title>Release Notes for Alpine 3.23.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.23.0&amp;diff=31626"/>
		<updated>2025-12-04T01:47:55Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Important changes */ iwlwifi linux-firmware-other -&amp;gt; linux-firmware-intel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== {{pkg|apk-tools}} v3 ===&lt;br /&gt;
&lt;br /&gt;
After 5 years of development in the &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; branch of apk-tools, apk v3 is now ready for Alpine v3.23.0. This should be a safe and seamless upgrade from apk v2, but might has some breaking changes if you use &amp;lt;code&amp;gt;libapk&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note that we will only transition the package manager to v3, but will keep the v2 index and package format. We plan to move to the v3 index and package format after Alpine v3.23.&lt;br /&gt;
&lt;br /&gt;
For more information, take a look at the release notes of apk v3: https://gitlab.alpinelinux.org/alpine/apk-tools/-/releases/v3.0.0&lt;br /&gt;
&lt;br /&gt;
=== /usr merge ===&lt;br /&gt;
&lt;br /&gt;
New installations can opt-in to being /usr-merged, by setting the &amp;lt;code&amp;gt;BOOTSTRAP_USR_MERGED&amp;lt;/code&amp;gt; environment variable to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; before running &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt;. Manual migration is also possible by installing the &amp;lt;code&amp;gt;merge-usr&amp;lt;/code&amp;gt; package and running its binary as root. For more details see the [https://alpinelinux.org/posts/2025-10-01-usr-merge.html official announcement].&lt;br /&gt;
&lt;br /&gt;
=== {{Pkg|linux-stable}} replaces {{Pkg|linux-edge}} ===&lt;br /&gt;
&lt;br /&gt;
For years, {{Pkg|linux-lts}} and {{Pkg|linux-edge}} grew apart and developed their own kernel configs, different architectures, etc.&lt;br /&gt;
&lt;br /&gt;
Now {{Pkg|linux-edge}} gets replaced with {{Pkg|linux-stable}} which has the identical configuration as {{Pkg|linux-lts}}, but follows the stable releases instead of the long-term releases (see https://kernel.org/).&lt;br /&gt;
&lt;br /&gt;
If you had {{Pkg|linux-edge}} installed, apk automatically installs {{Pkg|linux-stable}} as a replacement. There is a reasonably amount of kernel config differences, if you need a config option that existed previously in {{Pkg|linux-edge}}, please open a issue to add the required option to {{Pkg|linux-lts}}. Also this change might involve manual boot loader configuration, as the kernel has been renamed and follows {{Pkg|linux-lts}}&#039; packaging recipe.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;iwlwifi&amp;lt;/code&amp;gt; firmware has moved from {{Pkg|linux-firmware-other}} to {{Pkg|linux-firmware-intel}} ===&lt;br /&gt;
&lt;br /&gt;
This is important for Intel wireless users who have chosen a minimal set of firmware packages, with the {{Pkg|linux-firmware-none}} meta package plus {{Pkg|linux-firmware-other}}, you now need to &amp;lt;code&amp;gt;apk add linux-firmware-intel&amp;lt;/code&amp;gt; to get &amp;lt;code&amp;gt;iwlwifi*.ucode.zstd&amp;lt;/code&amp;gt; for your device.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== LLVM metapackage ===&lt;br /&gt;
&lt;br /&gt;
Unversioned LLVM symlinks to their versioned components are now moved from their versioned LLVM package to a meta-package. This should have no impact on your usage.&lt;br /&gt;
&lt;br /&gt;
=== nftrules subpackages ===&lt;br /&gt;
&lt;br /&gt;
nftables rulesets are now packaged in &amp;lt;code&amp;gt;$pkgname-nftrules&amp;lt;/code&amp;gt; subpackages, which contain rules for their individual packages in &amp;lt;code&amp;gt;/usr/share/nftables.avail/&amp;lt;/code&amp;gt;. To enable rules, you can symlink the specific rule-files to `/etc/nftables.d/`. ({{Issue|16177}})&lt;br /&gt;
&lt;br /&gt;
To install all available nftrules packages, you can install the metapackage {{Pkg|nftables-rulesets}}.&lt;br /&gt;
&lt;br /&gt;
=== udev rules subpackages ===&lt;br /&gt;
&lt;br /&gt;
Most udev rules were moved from main packages to their subpackages &amp;lt;code&amp;gt;$pkgname-udev&amp;lt;/code&amp;gt;. It will be automatically installed if the system has &amp;lt;code&amp;gt;udev&amp;lt;/code&amp;gt; installed, so it shouldn&#039;t require any manual intervention, but simplifies systems without udev.&lt;br /&gt;
&lt;br /&gt;
=== systemd service subpackages ===&lt;br /&gt;
&lt;br /&gt;
Although we don&#039;t have systemd packaged, many packages now have subpackages &amp;lt;code&amp;gt;$pkgname-systemd&amp;lt;/code&amp;gt;, that contain systemd services. This will have no effect on systems, but simplifies systemd integration for [https://postmarketos.org/blog/2025/06/22/v25.06-release/#introduction postmarketOS]. There is no plan to move the default init system away from OpenRC to systemd.&lt;br /&gt;
&lt;br /&gt;
=== curl HTTP/3 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|curl}} now got built with HTTP/3 support using nghttp3 and openssl-quic. ({{MR|89382}})&lt;br /&gt;
&lt;br /&gt;
=== nginx --with-compat ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|nginx}} is now compiled with &amp;lt;code&amp;gt;--with-compat&amp;lt;/code&amp;gt; (enables dynamic modules compatibility) to make it easier to build third-party nginx modules out-of-tree. There’s also a new subpackage {{pkg|nginx-mod-dev}} which provides the nginx sources and build dependencies needed for building nginx modules.&lt;br /&gt;
&lt;br /&gt;
Please note that using nginx from aports with binary modules built against a different version of nginx or for a different platform (i.e. a different distro or Alpine branch) is &#039;&#039;&#039;not supported and will not work correctly&#039;&#039;&#039;! The same applies to using nginx modules from aports with a different nginx build.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, many packages were upgraded. Make sure to read the individual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* BIRD 3.1.4&lt;br /&gt;
* busybox 1.37.0&lt;br /&gt;
* ffmpeg 8&lt;br /&gt;
* Garage 2.1.0&lt;br /&gt;
* GCC 15.2.0&lt;br /&gt;
* GNOME 49&lt;br /&gt;
* Go 1.25&lt;br /&gt;
* ISC BIND 9.20.16&lt;br /&gt;
* ISC Kea 3.0.2&lt;br /&gt;
* KDE Plasma 6.5.3&lt;br /&gt;
* Linux 6.18&lt;br /&gt;
* LLVM 21.1.2&lt;br /&gt;
* LXQt 2.30&lt;br /&gt;
* .NET 10&lt;br /&gt;
* NodeJS 24.11.1 (LTS)&lt;br /&gt;
* OpenJDK 25&lt;br /&gt;
* OpenSMTPD 7.8.0&lt;br /&gt;
* OpenZFS 2.4.0-rc4&lt;br /&gt;
* PHP 8.5.0&lt;br /&gt;
* Qt 6.10&lt;br /&gt;
* Ruby 3.4.7&lt;br /&gt;
* Rust 1.91.1&lt;br /&gt;
* Sway 1.11&lt;br /&gt;
* Valkey 9.0.0&lt;br /&gt;
* wlroots 0.19&lt;br /&gt;
* zigbee2mqtt 2.6.3&lt;br /&gt;
&lt;br /&gt;
=== GCC 15 ===&lt;br /&gt;
&lt;br /&gt;
We upgraded GCC from 14 to 15 and all packages have been built with GCC 15.&lt;br /&gt;
&lt;br /&gt;
Make sure to read their release changes (https://gcc.gnu.org/gcc-15/changes.html) and porting guide (https://gcc.gnu.org/gcc-15/porting_to.html).&lt;br /&gt;
&lt;br /&gt;
=== LLVM 21 ===&lt;br /&gt;
&lt;br /&gt;
We upgraded our LLVM suite to 21.1.2. Older clang packages are still available for version 20. But we removed relevant LLVM/Clang packages that are no longer needed by our distribution packages. If you still need older versions, please port your software to newer LLVM versions or use third-party builds.&lt;br /&gt;
&lt;br /&gt;
=== GNOME 49 ===&lt;br /&gt;
&lt;br /&gt;
https://release.gnome.org/49/&lt;br /&gt;
&lt;br /&gt;
* We kept gnome-session (and gdm, and similar) at 48 because of the [https://release.gnome.org/49/developers/index.html#stronger-systemd-dependencies stricter systemd dependency] ({{Issue|17514}})&lt;br /&gt;
* Our gdk-pixbuf didn&#039;t enable the glycin sandboxing library yet ({{Issue|17550}})&lt;br /&gt;
&lt;br /&gt;
=== ffmpeg 8 ===&lt;br /&gt;
&lt;br /&gt;
The {{Pkg|ffmpeg}} package got upgraded from version 6 to 8.&lt;br /&gt;
&lt;br /&gt;
Most consumers of ffmpeg are now built against ffmpeg 8, but some packages might still use ffmpeg 6 or 7, depending on its API compatability. Therefore the {{Pkg|ffmpeg6}} and {{Pkg|ffmpeg7}} packages are also still available.&lt;br /&gt;
&lt;br /&gt;
Also note that {{Pkg|ffmpeg4}} got removed and all consumers were migrated to at least ffmpeg 6.&lt;br /&gt;
&lt;br /&gt;
=== ifstate 2 ===&lt;br /&gt;
&lt;br /&gt;
The declarative network configuration tool {{Pkg|ifstate}} has been upgraded from version 1.x to version 2. It is not possible to use the old configuration file of ifstate 1.x with ifstate 2.x! The configuration file &#039;&#039;&#039;must&#039;&#039;&#039; be adapted to the new schema and file name to prevent breaking the host&#039;s network the next time it is booted! More information about the required config changes can be found in the [https://ifstate.net/2.2/docs/upgrades/#ifstate-20 ifstate documentation].&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== More Qt5 removals ===&lt;br /&gt;
&lt;br /&gt;
Just as [[Release_Notes_for_Alpine_3.22.0#Qt_5|last release]], we removed more Qt5 libraries that were no longer used by our distribution packages. ({{Issue|17114}})&lt;br /&gt;
&lt;br /&gt;
=== ffmpeg4 ===&lt;br /&gt;
&lt;br /&gt;
We removed &amp;lt;code&amp;gt;ffmpeg4&amp;lt;/code&amp;gt; from our repository and are only providing versions 6, 7 and 8.&lt;br /&gt;
&lt;br /&gt;
=== rssh ===&lt;br /&gt;
&lt;br /&gt;
rssh package has been removed due to the dead upstream.&lt;br /&gt;
&lt;br /&gt;
=== ircservices ===&lt;br /&gt;
&lt;br /&gt;
unmaintained upstream for years&lt;br /&gt;
&lt;br /&gt;
=== postgresql-age ===&lt;br /&gt;
&lt;br /&gt;
Apache AGE [https://github.com/apache/age/issues/2229 lacks behind] in supporting the latest version of PostgreSQL. The project seems to [https://github.com/apache/age/issues/2111#issuecomment-2441903180 lack sufficient manpower]. :(&lt;br /&gt;
&lt;br /&gt;
If you want a graph database on top of PostgreSQL, you can use {{pkg|agensgraph}}. However, unlike AGE, it’s not an extension, but a fork of PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;[[Release Notes for Alpine 3.22.0|← Previous page: Release Notes for Alpine 3.22.0]] — [[Draft Release Notes for Alpine 3.24.0|Next page: Release Notes for Alpine 3.24.0 →]]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.23.0&amp;diff=31610</id>
		<title>Release Notes for Alpine 3.23.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.23.0&amp;diff=31610"/>
		<updated>2025-12-03T13:08:36Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* systemd service subpackages */  what about s6?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== {{pkg|apk-tools}} v3 ===&lt;br /&gt;
&lt;br /&gt;
After 5 years of development in the &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; branch of apk-tools, apk v3 is now ready for Alpine v3.23.0. This should be a safe and seamless upgrade from apk v2, but might has some breaking changes if you use &amp;lt;code&amp;gt;libapk&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note that we will only transition the package manager to v3, but will keep the v2 index and package format. We plan to move to the v3 index and package format after Alpine v3.23.&lt;br /&gt;
&lt;br /&gt;
For more information, take a look at the release notes of apk v3: https://gitlab.alpinelinux.org/alpine/apk-tools/-/releases/v3.0.0&lt;br /&gt;
&lt;br /&gt;
=== /usr merge ===&lt;br /&gt;
&lt;br /&gt;
New installations can opt-in to being /usr-merged, by setting the &amp;lt;code&amp;gt;BOOTSTRAP_USR_MERGED&amp;lt;/code&amp;gt; environment variable to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; before running &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt;. Manual migration is also possible by installing the &amp;lt;code&amp;gt;merge-usr&amp;lt;/code&amp;gt; package and running its binary as root. For more details see the [https://alpinelinux.org/posts/2025-10-01-usr-merge.html official announcement].&lt;br /&gt;
&lt;br /&gt;
=== {{Pkg|linux-stable}} replaces {{Pkg|linux-edge}} ===&lt;br /&gt;
&lt;br /&gt;
For years, {{Pkg|linux-lts}} and {{Pkg|linux-edge}} grew apart and developed their own kernel configs, different architectures, etc.&lt;br /&gt;
&lt;br /&gt;
Now {{Pkg|linux-edge}} gets replaced with {{Pkg|linux-stable}} which has the identical configuration as {{Pkg|linux-lts}}, but follows the stable releases instead of the long-term releases (see https://kernel.org/).&lt;br /&gt;
&lt;br /&gt;
If you had {{Pkg|linux-edge}} installed, apk automatically installs {{Pkg|linux-stable}} as a replacement. There is a reasonably amount of kernel config differences, if you need a config option that existed previously in {{Pkg|linux-edge}}, please open a issue to add the required option to {{Pkg|linux-lts}}. Also this change might involve manual boot loader configuration, as the kernel has been renamed and follows {{Pkg|linux-lts}}&#039; packaging recipe.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== LLVM metapackage ===&lt;br /&gt;
&lt;br /&gt;
Unversioned LLVM symlinks to their versioned components are now moved from their versioned LLVM package to a meta-package. This should have no impact on your usage.&lt;br /&gt;
&lt;br /&gt;
=== nftrules subpackages ===&lt;br /&gt;
&lt;br /&gt;
nftables rulesets are now packaged in &amp;lt;code&amp;gt;$pkgname-nftrules&amp;lt;/code&amp;gt; subpackages, which contain rules for their individual packages in &amp;lt;code&amp;gt;/usr/share/nftables.avail/&amp;lt;/code&amp;gt;. To enable rules, you can symlink the specific rule-files to `/etc/nftables.d/`. ({{Issue|16177}})&lt;br /&gt;
&lt;br /&gt;
To install all available nftrules packages, you can install the metapackage {{Pkg|nftables-rulesets}}.&lt;br /&gt;
&lt;br /&gt;
=== udev rules subpackages ===&lt;br /&gt;
&lt;br /&gt;
Most udev rules were moved from main packages to their subpackages &amp;lt;code&amp;gt;$pkgname-udev&amp;lt;/code&amp;gt;. It will be automatically installed if the system has &amp;lt;code&amp;gt;udev&amp;lt;/code&amp;gt; installed, so it shouldn&#039;t require any manual intervention, but simplifies systems without udev.&lt;br /&gt;
&lt;br /&gt;
=== systemd service subpackages ===&lt;br /&gt;
&lt;br /&gt;
Although we don&#039;t have systemd packaged, many packages now have subpackages &amp;lt;code&amp;gt;$pkgname-systemd&amp;lt;/code&amp;gt;, that contain systemd services. This will have no effect on systems, but simplifies any future integrations with systemd in Alpine and for [https://postmarketos.org/blog/2025/06/22/v25.06-release/#introduction postmarketOS]. There is no plan to move the default init system away from OpenRC to systemd.&lt;br /&gt;
&lt;br /&gt;
=== curl HTTP/3 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|curl}} now got built with HTTP/3 support using nghttp3 and openssl-quic. ({{MR|89382}})&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, many packages were upgraded. Make sure to read the individual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* BIRD 3.1.4&lt;br /&gt;
* busybox 1.37.0&lt;br /&gt;
* Deno 2.3.1&lt;br /&gt;
* ffmpeg 8&lt;br /&gt;
* GCC 15.2.0&lt;br /&gt;
* GNOME 49&lt;br /&gt;
* Go 1.25&lt;br /&gt;
* ISC BIND 9.20.16&lt;br /&gt;
* ISC Kea 3.0.2&lt;br /&gt;
* KDE Plasma 6.5.3&lt;br /&gt;
* Linux 6.18&lt;br /&gt;
* LLVM 21.1.2&lt;br /&gt;
* LXQt 2.30&lt;br /&gt;
* .NET 10&lt;br /&gt;
* nginx 1.28&lt;br /&gt;
* NodeJS 24.11.1 (LTS)&lt;br /&gt;
* OpenJDK 25&lt;br /&gt;
* OpenZFS 2.4.0-rc4&lt;br /&gt;
* PHP 8.5.0&lt;br /&gt;
* Qt 6.10&lt;br /&gt;
* Ruby 3.4.7&lt;br /&gt;
* Rust 1.91.1&lt;br /&gt;
* wlroots 0.19&lt;br /&gt;
* zigbee2mqtt 2.6.3&lt;br /&gt;
&lt;br /&gt;
=== GCC 15 ===&lt;br /&gt;
&lt;br /&gt;
We upgraded GCC from 14 to 15 and all packages have been built with GCC 15.&lt;br /&gt;
&lt;br /&gt;
Make sure to read their release changes (https://gcc.gnu.org/gcc-15/changes.html) and porting guide (https://gcc.gnu.org/gcc-15/porting_to.html).&lt;br /&gt;
&lt;br /&gt;
=== LLVM 21 ===&lt;br /&gt;
&lt;br /&gt;
We upgraded our LLVM suite to 21.1.2. Older clang packages are still available for version 20. But we removed relevant LLVM/Clang packages that are no longer needed by our distribution packages. If you still need older versions, please port your software to newer LLVM versions or use third-party builds.&lt;br /&gt;
&lt;br /&gt;
=== GNOME 49 ===&lt;br /&gt;
&lt;br /&gt;
https://release.gnome.org/49/&lt;br /&gt;
&lt;br /&gt;
* We kept gnome-session (and gdm, and similar) at 48 because of the [https://release.gnome.org/49/developers/index.html#stronger-systemd-dependencies stricter systemd dependency] ({{Issue|17514}})&lt;br /&gt;
* Our gdk-pixbuf didn&#039;t enable the glycin sandboxing library yet ({{Issue|17550}})&lt;br /&gt;
&lt;br /&gt;
=== ffmpeg 8 ===&lt;br /&gt;
&lt;br /&gt;
The {{Pkg|ffmpeg}} package got upgraded from version 6 to 8.&lt;br /&gt;
&lt;br /&gt;
Most consumers of ffmpeg are now built against ffmpeg 8, but some packages might still use ffmpeg 6 or 7, depending on its API compatability. Therefore the {{Pkg|ffmpeg6}} and {{Pkg|ffmpeg7}} packages are also still available.&lt;br /&gt;
&lt;br /&gt;
Also note that {{Pkg|ffmpeg4}} got removed and all consumers were migrated to at least ffmpeg 6.&lt;br /&gt;
&lt;br /&gt;
=== ifstate 2 ===&lt;br /&gt;
&lt;br /&gt;
The declarative network configuration tool {{Pkg|ifstate}} has been upgraded from version 1.x to version 2. It is not possible to use the old configuration file of ifstate 1.x with ifstate 2.x! The configuration file &#039;&#039;&#039;must&#039;&#039;&#039; be adapted to the new schema and file name to prevent breaking the host&#039;s network the next time it is booted! More information about the required config changes can be found in the [https://ifstate.net/2.2/docs/upgrades/#ifstate-20 ifstate documentation].&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== More Qt5 removals ===&lt;br /&gt;
&lt;br /&gt;
Just as [[Release_Notes_for_Alpine_3.22.0#Qt_5|last release]], we removed more Qt5 libraries that were no longer used by our distribution packages. ({{Issue|17114}})&lt;br /&gt;
&lt;br /&gt;
=== ffmpeg4 ===&lt;br /&gt;
&lt;br /&gt;
We removed &amp;lt;code&amp;gt;ffmpeg4&amp;lt;/code&amp;gt; from our repository and are only providing versions 6, 7 and 8.&lt;br /&gt;
&lt;br /&gt;
=== rssh ===&lt;br /&gt;
&lt;br /&gt;
rssh package has been removed due to the dead upstream.&lt;br /&gt;
&lt;br /&gt;
=== ircservices ===&lt;br /&gt;
&lt;br /&gt;
unmaintained upstream for years&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;[[Release Notes for Alpine 3.22.0|← Previous page: Release Notes for Alpine 3.22.0]] — [[Draft Release Notes for Alpine 3.24.0|Next page: Release Notes for Alpine 3.24.0 →]]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.23.0&amp;diff=31609</id>
		<title>Release Notes for Alpine 3.23.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.23.0&amp;diff=31609"/>
		<updated>2025-12-03T13:06:43Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */ move alphabetically since I called it &amp;quot;OpenZFS&amp;quot;, I&amp;#039;ll let someone else decide if this is what it should be called or just &amp;quot;ZFS&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== {{pkg|apk-tools}} v3 ===&lt;br /&gt;
&lt;br /&gt;
After 5 years of development in the &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; branch of apk-tools, apk v3 is now ready for Alpine v3.23.0. This should be a safe and seamless upgrade from apk v2, but might has some breaking changes if you use &amp;lt;code&amp;gt;libapk&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note that we will only transition the package manager to v3, but will keep the v2 index and package format. We plan to move to the v3 index and package format after Alpine v3.23.&lt;br /&gt;
&lt;br /&gt;
For more information, take a look at the release notes of apk v3: https://gitlab.alpinelinux.org/alpine/apk-tools/-/releases/v3.0.0&lt;br /&gt;
&lt;br /&gt;
=== /usr merge ===&lt;br /&gt;
&lt;br /&gt;
New installations can opt-in to being /usr-merged, by setting the &amp;lt;code&amp;gt;BOOTSTRAP_USR_MERGED&amp;lt;/code&amp;gt; environment variable to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; before running &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt;. Manual migration is also possible by installing the &amp;lt;code&amp;gt;merge-usr&amp;lt;/code&amp;gt; package and running its binary as root. For more details see the [https://alpinelinux.org/posts/2025-10-01-usr-merge.html official announcement].&lt;br /&gt;
&lt;br /&gt;
=== {{Pkg|linux-stable}} replaces {{Pkg|linux-edge}} ===&lt;br /&gt;
&lt;br /&gt;
For years, {{Pkg|linux-lts}} and {{Pkg|linux-edge}} grew apart and developed their own kernel configs, different architectures, etc.&lt;br /&gt;
&lt;br /&gt;
Now {{Pkg|linux-edge}} gets replaced with {{Pkg|linux-stable}} which has the identical configuration as {{Pkg|linux-lts}}, but follows the stable releases instead of the long-term releases (see https://kernel.org/).&lt;br /&gt;
&lt;br /&gt;
If you had {{Pkg|linux-edge}} installed, apk automatically installs {{Pkg|linux-stable}} as a replacement. There is a reasonably amount of kernel config differences, if you need a config option that existed previously in {{Pkg|linux-edge}}, please open a issue to add the required option to {{Pkg|linux-lts}}. Also this change might involve manual boot loader configuration, as the kernel has been renamed and follows {{Pkg|linux-lts}}&#039; packaging recipe.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== LLVM metapackage ===&lt;br /&gt;
&lt;br /&gt;
Unversioned LLVM symlinks to their versioned components are now moved from their versioned LLVM package to a meta-package. This should have no impact on your usage.&lt;br /&gt;
&lt;br /&gt;
=== nftrules subpackages ===&lt;br /&gt;
&lt;br /&gt;
nftables rulesets are now packaged in &amp;lt;code&amp;gt;$pkgname-nftrules&amp;lt;/code&amp;gt; subpackages, which contain rules for their individual packages in &amp;lt;code&amp;gt;/usr/share/nftables.avail/&amp;lt;/code&amp;gt;. To enable rules, you can symlink the specific rule-files to `/etc/nftables.d/`. ({{Issue|16177}})&lt;br /&gt;
&lt;br /&gt;
To install all available nftrules packages, you can install the metapackage {{Pkg|nftables-rulesets}}.&lt;br /&gt;
&lt;br /&gt;
=== udev rules subpackages ===&lt;br /&gt;
&lt;br /&gt;
Most udev rules were moved from main packages to their subpackages &amp;lt;code&amp;gt;$pkgname-udev&amp;lt;/code&amp;gt;. It will be automatically installed if the system has &amp;lt;code&amp;gt;udev&amp;lt;/code&amp;gt; installed, so it shouldn&#039;t require any manual intervention, but simplifies systems without udev.&lt;br /&gt;
&lt;br /&gt;
=== systemd service subpackages ===&lt;br /&gt;
&lt;br /&gt;
Although we don&#039;t have systemd packaged, many packages now have subpackages &amp;lt;code&amp;gt;$pkgname-systemd&amp;lt;/code&amp;gt;, that contain systemd services. This will have no effect on systems, but simplifies any future integrations with systemd in Alpine and for [https://postmarketos.org/blog/2025/06/22/v25.06-release/#introduction postmarketOS]. There is no plan to move the default init system away from OpenRC.&lt;br /&gt;
&lt;br /&gt;
=== curl HTTP/3 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|curl}} now got built with HTTP/3 support using nghttp3 and openssl-quic. ({{MR|89382}})&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, many packages were upgraded. Make sure to read the individual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* BIRD 3.1.4&lt;br /&gt;
* busybox 1.37.0&lt;br /&gt;
* Deno 2.3.1&lt;br /&gt;
* ffmpeg 8&lt;br /&gt;
* GCC 15.2.0&lt;br /&gt;
* GNOME 49&lt;br /&gt;
* Go 1.25&lt;br /&gt;
* ISC BIND 9.20.16&lt;br /&gt;
* ISC Kea 3.0.2&lt;br /&gt;
* KDE Plasma 6.5.3&lt;br /&gt;
* Linux 6.18&lt;br /&gt;
* LLVM 21.1.2&lt;br /&gt;
* LXQt 2.30&lt;br /&gt;
* .NET 10&lt;br /&gt;
* nginx 1.28&lt;br /&gt;
* NodeJS 24.11.1 (LTS)&lt;br /&gt;
* OpenJDK 25&lt;br /&gt;
* OpenZFS 2.4.0-rc4&lt;br /&gt;
* PHP 8.5.0&lt;br /&gt;
* Qt 6.10&lt;br /&gt;
* Ruby 3.4.7&lt;br /&gt;
* Rust 1.91.1&lt;br /&gt;
* wlroots 0.19&lt;br /&gt;
* zigbee2mqtt 2.6.3&lt;br /&gt;
&lt;br /&gt;
=== GCC 15 ===&lt;br /&gt;
&lt;br /&gt;
We upgraded GCC from 14 to 15 and all packages have been built with GCC 15.&lt;br /&gt;
&lt;br /&gt;
Make sure to read their release changes (https://gcc.gnu.org/gcc-15/changes.html) and porting guide (https://gcc.gnu.org/gcc-15/porting_to.html).&lt;br /&gt;
&lt;br /&gt;
=== LLVM 21 ===&lt;br /&gt;
&lt;br /&gt;
We upgraded our LLVM suite to 21.1.2. Older clang packages are still available for version 20. But we removed relevant LLVM/Clang packages that are no longer needed by our distribution packages. If you still need older versions, please port your software to newer LLVM versions or use third-party builds.&lt;br /&gt;
&lt;br /&gt;
=== GNOME 49 ===&lt;br /&gt;
&lt;br /&gt;
https://release.gnome.org/49/&lt;br /&gt;
&lt;br /&gt;
* We kept gnome-session (and gdm, and similar) at 48 because of the [https://release.gnome.org/49/developers/index.html#stronger-systemd-dependencies stricter systemd dependency] ({{Issue|17514}})&lt;br /&gt;
* Our gdk-pixbuf didn&#039;t enable the glycin sandboxing library yet ({{Issue|17550}})&lt;br /&gt;
&lt;br /&gt;
=== ffmpeg 8 ===&lt;br /&gt;
&lt;br /&gt;
The {{Pkg|ffmpeg}} package got upgraded from version 6 to 8.&lt;br /&gt;
&lt;br /&gt;
Most consumers of ffmpeg are now built against ffmpeg 8, but some packages might still use ffmpeg 6 or 7, depending on its API compatability. Therefore the {{Pkg|ffmpeg6}} and {{Pkg|ffmpeg7}} packages are also still available.&lt;br /&gt;
&lt;br /&gt;
Also note that {{Pkg|ffmpeg4}} got removed and all consumers were migrated to at least ffmpeg 6.&lt;br /&gt;
&lt;br /&gt;
=== ifstate 2 ===&lt;br /&gt;
&lt;br /&gt;
The declarative network configuration tool {{Pkg|ifstate}} has been upgraded from version 1.x to version 2. It is not possible to use the old configuration file of ifstate 1.x with ifstate 2.x! The configuration file &#039;&#039;&#039;must&#039;&#039;&#039; be adapted to the new schema and file name to prevent breaking the host&#039;s network the next time it is booted! More information about the required config changes can be found in the [https://ifstate.net/2.2/docs/upgrades/#ifstate-20 ifstate documentation].&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== More Qt5 removals ===&lt;br /&gt;
&lt;br /&gt;
Just as [[Release_Notes_for_Alpine_3.22.0#Qt_5|last release]], we removed more Qt5 libraries that were no longer used by our distribution packages. ({{Issue|17114}})&lt;br /&gt;
&lt;br /&gt;
=== ffmpeg4 ===&lt;br /&gt;
&lt;br /&gt;
We removed &amp;lt;code&amp;gt;ffmpeg4&amp;lt;/code&amp;gt; from our repository and are only providing versions 6, 7 and 8.&lt;br /&gt;
&lt;br /&gt;
=== rssh ===&lt;br /&gt;
&lt;br /&gt;
rssh package has been removed due to the dead upstream.&lt;br /&gt;
&lt;br /&gt;
=== ircservices ===&lt;br /&gt;
&lt;br /&gt;
unmaintained upstream for years&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;[[Release Notes for Alpine 3.22.0|← Previous page: Release Notes for Alpine 3.22.0]] — [[Draft Release Notes for Alpine 3.24.0|Next page: Release Notes for Alpine 3.24.0 →]]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.23.0&amp;diff=31608</id>
		<title>Release Notes for Alpine 3.23.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.23.0&amp;diff=31608"/>
		<updated>2025-12-03T13:04:30Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */  zfs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== {{pkg|apk-tools}} v3 ===&lt;br /&gt;
&lt;br /&gt;
After 5 years of development in the &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; branch of apk-tools, apk v3 is now ready for Alpine v3.23.0. This should be a safe and seamless upgrade from apk v2, but might has some breaking changes if you use &amp;lt;code&amp;gt;libapk&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note that we will only transition the package manager to v3, but will keep the v2 index and package format. We plan to move to the v3 index and package format after Alpine v3.23.&lt;br /&gt;
&lt;br /&gt;
For more information, take a look at the release notes of apk v3: https://gitlab.alpinelinux.org/alpine/apk-tools/-/releases/v3.0.0&lt;br /&gt;
&lt;br /&gt;
=== /usr merge ===&lt;br /&gt;
&lt;br /&gt;
New installations can opt-in to being /usr-merged, by setting the &amp;lt;code&amp;gt;BOOTSTRAP_USR_MERGED&amp;lt;/code&amp;gt; environment variable to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; before running &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt;. Manual migration is also possible by installing the &amp;lt;code&amp;gt;merge-usr&amp;lt;/code&amp;gt; package and running its binary as root. For more details see the [https://alpinelinux.org/posts/2025-10-01-usr-merge.html official announcement].&lt;br /&gt;
&lt;br /&gt;
=== {{Pkg|linux-stable}} replaces {{Pkg|linux-edge}} ===&lt;br /&gt;
&lt;br /&gt;
For years, {{Pkg|linux-lts}} and {{Pkg|linux-edge}} grew apart and developed their own kernel configs, different architectures, etc.&lt;br /&gt;
&lt;br /&gt;
Now {{Pkg|linux-edge}} gets replaced with {{Pkg|linux-stable}} which has the identical configuration as {{Pkg|linux-lts}}, but follows the stable releases instead of the long-term releases (see https://kernel.org/).&lt;br /&gt;
&lt;br /&gt;
If you had {{Pkg|linux-edge}} installed, apk automatically installs {{Pkg|linux-stable}} as a replacement. There is a reasonably amount of kernel config differences, if you need a config option that existed previously in {{Pkg|linux-edge}}, please open a issue to add the required option to {{Pkg|linux-lts}}. Also this change might involve manual boot loader configuration, as the kernel has been renamed and follows {{Pkg|linux-lts}}&#039; packaging recipe.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== LLVM metapackage ===&lt;br /&gt;
&lt;br /&gt;
Unversioned LLVM symlinks to their versioned components are now moved from their versioned LLVM package to a meta-package. This should have no impact on your usage.&lt;br /&gt;
&lt;br /&gt;
=== nftrules subpackages ===&lt;br /&gt;
&lt;br /&gt;
nftables rulesets are now packaged in &amp;lt;code&amp;gt;$pkgname-nftrules&amp;lt;/code&amp;gt; subpackages, which contain rules for their individual packages in &amp;lt;code&amp;gt;/usr/share/nftables.avail/&amp;lt;/code&amp;gt;. To enable rules, you can symlink the specific rule-files to `/etc/nftables.d/`. ({{Issue|16177}})&lt;br /&gt;
&lt;br /&gt;
To install all available nftrules packages, you can install the metapackage {{Pkg|nftables-rulesets}}.&lt;br /&gt;
&lt;br /&gt;
=== udev rules subpackages ===&lt;br /&gt;
&lt;br /&gt;
Most udev rules were moved from main packages to their subpackages &amp;lt;code&amp;gt;$pkgname-udev&amp;lt;/code&amp;gt;. It will be automatically installed if the system has &amp;lt;code&amp;gt;udev&amp;lt;/code&amp;gt; installed, so it shouldn&#039;t require any manual intervention, but simplifies systems without udev.&lt;br /&gt;
&lt;br /&gt;
=== systemd service subpackages ===&lt;br /&gt;
&lt;br /&gt;
Although we don&#039;t have systemd packaged, many packages now have subpackages &amp;lt;code&amp;gt;$pkgname-systemd&amp;lt;/code&amp;gt;, that contain systemd services. This will have no effect on systems, but simplifies any future integrations with systemd in Alpine and for [https://postmarketos.org/blog/2025/06/22/v25.06-release/#introduction postmarketOS]. There is no plan to move the default init system away from OpenRC.&lt;br /&gt;
&lt;br /&gt;
=== curl HTTP/3 ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|curl}} now got built with HTTP/3 support using nghttp3 and openssl-quic. ({{MR|89382}})&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, many packages were upgraded. Make sure to read the individual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* BIRD 3.1.4&lt;br /&gt;
* busybox 1.37.0&lt;br /&gt;
* Deno 2.3.1&lt;br /&gt;
* ffmpeg 8&lt;br /&gt;
* GCC 15.2.0&lt;br /&gt;
* GNOME 49&lt;br /&gt;
* Go 1.25&lt;br /&gt;
* ISC BIND 9.20.16&lt;br /&gt;
* ISC Kea 3.0.2&lt;br /&gt;
* KDE Plasma 6.5.3&lt;br /&gt;
* Linux 6.18&lt;br /&gt;
* LLVM 21.1.2&lt;br /&gt;
* LXQt 2.30&lt;br /&gt;
* .NET 10&lt;br /&gt;
* nginx 1.28&lt;br /&gt;
* NodeJS 24.11.1 (LTS)&lt;br /&gt;
* OpenJDK 25&lt;br /&gt;
* PHP 8.5.0&lt;br /&gt;
* Qt 6.10&lt;br /&gt;
* Ruby 3.4.7&lt;br /&gt;
* Rust 1.91.1&lt;br /&gt;
* wlroots 0.19&lt;br /&gt;
* OpenZFS 2.4.0-rc4&lt;br /&gt;
* zigbee2mqtt 2.6.3&lt;br /&gt;
&lt;br /&gt;
=== GCC 15 ===&lt;br /&gt;
&lt;br /&gt;
We upgraded GCC from 14 to 15 and all packages have been built with GCC 15.&lt;br /&gt;
&lt;br /&gt;
Make sure to read their release changes (https://gcc.gnu.org/gcc-15/changes.html) and porting guide (https://gcc.gnu.org/gcc-15/porting_to.html).&lt;br /&gt;
&lt;br /&gt;
=== LLVM 21 ===&lt;br /&gt;
&lt;br /&gt;
We upgraded our LLVM suite to 21.1.2. Older clang packages are still available for version 20. But we removed relevant LLVM/Clang packages that are no longer needed by our distribution packages. If you still need older versions, please port your software to newer LLVM versions or use third-party builds.&lt;br /&gt;
&lt;br /&gt;
=== GNOME 49 ===&lt;br /&gt;
&lt;br /&gt;
https://release.gnome.org/49/&lt;br /&gt;
&lt;br /&gt;
* We kept gnome-session (and gdm, and similar) at 48 because of the [https://release.gnome.org/49/developers/index.html#stronger-systemd-dependencies stricter systemd dependency] ({{Issue|17514}})&lt;br /&gt;
* Our gdk-pixbuf didn&#039;t enable the glycin sandboxing library yet ({{Issue|17550}})&lt;br /&gt;
&lt;br /&gt;
=== ffmpeg 8 ===&lt;br /&gt;
&lt;br /&gt;
The {{Pkg|ffmpeg}} package got upgraded from version 6 to 8.&lt;br /&gt;
&lt;br /&gt;
Most consumers of ffmpeg are now built against ffmpeg 8, but some packages might still use ffmpeg 6 or 7, depending on its API compatability. Therefore the {{Pkg|ffmpeg6}} and {{Pkg|ffmpeg7}} packages are also still available.&lt;br /&gt;
&lt;br /&gt;
Also note that {{Pkg|ffmpeg4}} got removed and all consumers were migrated to at least ffmpeg 6.&lt;br /&gt;
&lt;br /&gt;
=== ifstate 2 ===&lt;br /&gt;
&lt;br /&gt;
The declarative network configuration tool {{Pkg|ifstate}} has been upgraded from version 1.x to version 2. It is not possible to use the old configuration file of ifstate 1.x with ifstate 2.x! The configuration file &#039;&#039;&#039;must&#039;&#039;&#039; be adapted to the new schema and file name to prevent breaking the host&#039;s network the next time it is booted! More information about the required config changes can be found in the [https://ifstate.net/2.2/docs/upgrades/#ifstate-20 ifstate documentation].&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== More Qt5 removals ===&lt;br /&gt;
&lt;br /&gt;
Just as [[Release_Notes_for_Alpine_3.22.0#Qt_5|last release]], we removed more Qt5 libraries that were no longer used by our distribution packages. ({{Issue|17114}})&lt;br /&gt;
&lt;br /&gt;
=== ffmpeg4 ===&lt;br /&gt;
&lt;br /&gt;
We removed &amp;lt;code&amp;gt;ffmpeg4&amp;lt;/code&amp;gt; from our repository and are only providing versions 6, 7 and 8.&lt;br /&gt;
&lt;br /&gt;
=== rssh ===&lt;br /&gt;
&lt;br /&gt;
rssh package has been removed due to the dead upstream.&lt;br /&gt;
&lt;br /&gt;
=== ircservices ===&lt;br /&gt;
&lt;br /&gt;
unmaintained upstream for years&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;[[Release Notes for Alpine 3.22.0|← Previous page: Release Notes for Alpine 3.22.0]] — [[Draft Release Notes for Alpine 3.24.0|Next page: Release Notes for Alpine 3.24.0 →]]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28105</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28105"/>
		<updated>2024-12-07T18:00:07Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* ISC DHCP */ dracut-modules-network&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH service requires restart ===&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, and on, of {{pkg|openssh}}, {{pkg|openssh-server}} is split into two binaries (&amp;lt;code&amp;gt;/usr/lib/ssh/sshd-session&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr/sbin/sshd&amp;lt;/code&amp;gt;). Due to this change, it will not be possible to &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; into a system that has upgraded from a release prior to &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; to this release or later, without restarting the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
We have previously brought attention to this - https://alpinelinux.org/posts/2024-07-02-openssh-upgrade-edge.html&lt;br /&gt;
&lt;br /&gt;
Managing services has always been out-of-scope for {{pkg|apk-tools}}, but this one time we will &#039;&#039;&#039;make an exception&#039;&#039;&#039; when the following conditions are met:&lt;br /&gt;
# You have both the {{pkg|openssh-server}} and {{pkg|openssh-server-common-openrc}} packages installed at a version lower than &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt;&lt;br /&gt;
# The &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service is started&lt;br /&gt;
&lt;br /&gt;
We will then, post {{pkg|openssh-server}} upgrade, have a &amp;lt;code&amp;gt;post-upgrade&amp;lt;/code&amp;gt; script that will:&lt;br /&gt;
# Print a message on what is about to happen and why&lt;br /&gt;
# Restart the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service&lt;br /&gt;
# If the command to restart the service fails for any reason, a warning message will be printed and an error code returned to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;, to be noticed by the end of the package upgrades (this will not interrupt the upgrade process).&lt;br /&gt;
&lt;br /&gt;
We have decided to do this in order to help keep you from getting locked out of your system(s) and be able to fix any issues with the upgrade.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* https://bugzilla.mindrot.org/show_bug.cgi?id=3706&lt;br /&gt;
* https://git.alpinelinux.org/aports/commit/?id=6adff08ae09961d4eea66b55a8cca14d3941fb53&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
Plans for /usr-merge are underway and we should be able to finalize it in Alpine Linux, version 3.22.&lt;br /&gt;
&lt;br /&gt;
Much preparation has gone into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counterparts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. As part of the merge, &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; will be mounted from the initramfs to make sure everybody has all necessary binaries in place.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate filesystems (partitions, volumes, disk drives or other) should proceed with care and report any issues.&#039;&#039;&#039;  They should also ensure that an entry &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; is added to &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; before upgrading, and all modules required to mount &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; from the initramfs are added to mkinitfs configuration. New/fresh installations of v3.21 will work out of the box without modification. Please note that &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; on separate filesystem than &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; is not officially supported.&lt;br /&gt;
&lt;br /&gt;
If you have one of these setups, and have doubts about the configuration, you can open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt;. We will also publish a blog post soon with further information on the timeline and progress of the merge, as well as how the changes may affect users.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change the default, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. ({{Issue|16613}})&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;main/bats&amp;lt;/code&amp;gt; was renamed to &amp;lt;code&amp;gt;main/bats-core&amp;lt;/code&amp;gt;. There is now a meta package &amp;lt;code&amp;gt;community/bats&amp;lt;/code&amp;gt; which contains:&lt;br /&gt;
&lt;br /&gt;
* {{pkg|bats-core}}&lt;br /&gt;
* {{pkg|bats-file}}&lt;br /&gt;
* {{pkg|bats-support}}&lt;br /&gt;
* {{pkg|bats-assert}}&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You can choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no longer exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* PHP 8.4&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 0.18&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
The Gnu Compiler Collection was upgraded to 14.2.0 and as a result, all packages built with {{pkg|gcc}} in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now Wayland ready¹, but Wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, as well as settings for  monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on Wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. A total of 5 LLVM versions are supported: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
=== GNOME 47 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|gnome-software}} has been held back to version 45, after several regressions in the apk plugin on update. See {{issue|16637}} for more details.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We will try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|hplip}} ({{Issue|16685}})&lt;br /&gt;
* {{pkg|imageflow}} ({{Issue|16679}})&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{Issue|16580}})&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}} ({{Issue|16686}})&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
If you are still running an ISC DHCP server, you are advised to migrate to a maintained alternative &#039;&#039;&#039;before&#039;&#039;&#039; upgrading to the 3.21 release.&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
Up to, and including, the 3.20 version of Alpine, the {{pkg|dhcp|branch=v3.20}} aport has the subpackage {{pkg|keama|branch=v3.20}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
Alternative DHCP servers packaged in Alpine include:&lt;br /&gt;
* {{pkg|kea}}&lt;br /&gt;
* {{pkg|freeradius-dhcp}}&lt;br /&gt;
* {{pkg|dnsmasq}}&lt;br /&gt;
* udhcpd - packaged in {{pkg|busybox-extras}}&lt;br /&gt;
&lt;br /&gt;
==== dracut-modules-network network-legacy removal ====&lt;br /&gt;
&lt;br /&gt;
As a consequence of the above, the &amp;lt;code&amp;gt;network-legacy&amp;lt;/code&amp;gt; module has been removed from {{pkg|dracut-modules-network}}, as it had a depedency on the {{pkg|dhclient}} sub-package of the ISC DHCP aport.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities for which issues have remained open for a year. The developers of Gogs were contacted multiple times by the Forgejo team but unfortunately received no response. Therefore we have removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were frustrated with the single-maintainer management model of Gogs. Forgejo is a fork of Gitea which was created as a result of the for-profit company Gitea Ltd taking over maintainership (see also https://forgejo.org/compare-to-gitea/).&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April and became unmaintained, therefore we have removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;br /&gt;
&lt;br /&gt;
=== .NET 6 ===&lt;br /&gt;
&lt;br /&gt;
.NET 6 reached EOL in 12 November 2024 (see https://devblogs.microsoft.com/dotnet/dotnet-6-end-of-support/) and the following packages have been moved to the testing repository ({{MR|73655}}):&lt;br /&gt;
* {{pkg|dotnet6-build|branch=edge|arch=}}&lt;br /&gt;
* {{pkg|dotnet6-runtime|branch=edge|arch=}}&lt;br /&gt;
* {{pkg|dotnet6-stage0|branch=edge|arch=}}&lt;br /&gt;
* {{pkg|lidarr|branch=edge|arch=}}&lt;br /&gt;
* {{pkg|prowlarr|branch=edge|arch=}}&lt;br /&gt;
* {{pkg|radarr|branch=edge|arch=}}&lt;br /&gt;
* {{pkg|sonarr|branch=edge|arch=}}&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28094</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28094"/>
		<updated>2024-12-05T12:19:55Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */ wlroots 0.18, not 18&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH service requires restart ===&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, and on, of {{pkg|openssh}}, {{pkg|openssh-server}} is split into two binaries (&amp;lt;code&amp;gt;/usr/lib/ssh/sshd-session&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr/sbin/sshd&amp;lt;/code&amp;gt;). Due to this change, it will not be possible to &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; into a system that has upgraded from a release prior to &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; to this release or later, without restarting the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
We have previously brought attention to this - https://alpinelinux.org/posts/2024-07-02-openssh-upgrade-edge.html&lt;br /&gt;
&lt;br /&gt;
Managing services has always been out-of-scope for {{pkg|apk-tools}}, but this one time we will &#039;&#039;&#039;make an exception&#039;&#039;&#039; when the following conditions are met:&lt;br /&gt;
# You have both the {{pkg|openssh-server}} and {{pkg|openssh-server-common-openrc}} packages installed at a version lower than &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt;&lt;br /&gt;
# The &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service is started&lt;br /&gt;
&lt;br /&gt;
We will then, post {{pkg|openssh-server}} upgrade, have a &amp;lt;code&amp;gt;post-upgrade&amp;lt;/code&amp;gt; script that will:&lt;br /&gt;
# Print a message on what is about to happen and why&lt;br /&gt;
# Restart the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service&lt;br /&gt;
# If the command to restart the service fails for any reason, a warning message will be printed and an error code returned to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;, to be noticed by the end of the package upgrades (this will not interrupt the upgrade process).&lt;br /&gt;
&lt;br /&gt;
We have decided to do this in order to help keep you from getting locked out of your system(s) and be able to fix any issues with the upgrade.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* https://bugzilla.mindrot.org/show_bug.cgi?id=3706&lt;br /&gt;
* https://git.alpinelinux.org/aports/commit/?id=6adff08ae09961d4eea66b55a8cca14d3941fb53&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
Plans for /usr-merge are underway and we should be able to finalize it in Alpine Linux, version 3.22.&lt;br /&gt;
&lt;br /&gt;
Much preparation has gone into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counterparts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. As part of the merge, &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; will be mounted from the initramfs to make sure everybody has all necessary binaries in place.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate filesystems (partitions, volumes, disk drives or other) should proceed with care and report any issues.&#039;&#039;&#039;  They should also ensure that an entry &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; is added to &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; before upgrading, and all modules required to mount &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; from the initramfs are added to mkinitfs configuration. New/fresh installations of v3.21 will work out of the box without modification. Please note that &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; on separate filesystem than &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; is not officially supported.&lt;br /&gt;
&lt;br /&gt;
If you have one of these setups, and have doubts about the configuration, you can open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt;. We will also publish a blog post soon with further information on the timeline and progress of the merge, as well as how the changes may affect users.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change the default, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. ({{Issue|16613}})&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;main/bats&amp;lt;/code&amp;gt; was renamed to &amp;lt;code&amp;gt;main/bats-core&amp;lt;/code&amp;gt;. There is now a meta package &amp;lt;code&amp;gt;community/bats&amp;lt;/code&amp;gt; which contains:&lt;br /&gt;
&lt;br /&gt;
* {{pkg|bats-core}}&lt;br /&gt;
* {{pkg|bats-file}}&lt;br /&gt;
* {{pkg|bats-support}}&lt;br /&gt;
* {{pkg|bats-assert}}&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You can choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no longer exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* PHP 8.4&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 0.18&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
The Gnu Compiler Collection was upgraded to 14.2.0 and as a result, all packages built with {{pkg|gcc}} in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now Wayland ready¹, but Wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, as well as settings for  monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on Wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. A total of 5 LLVM versions are supported: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
=== GNOME 47 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|gnome-software}} has been held back to version 45, after several regressions in the apk plugin on update. See {{issue|16663}} for more details.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We will try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|hplip}} ({{Issue|16685}})&lt;br /&gt;
* {{pkg|imageflow}} ({{Issue|16679}})&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{Issue|16580}})&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}} ({{Issue|16686}})&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
If you are still running an ISC DHCP server, you are advised to migrate to a maintained alternative &#039;&#039;&#039;before&#039;&#039;&#039; upgrading to the 3.21 release.&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
Up to, and including, the 3.20 version of Alpine, the {{pkg|dhcp|branch=v3.20}} aport has the subpackage {{pkg|keama|branch=v3.20}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
Alternative DHCP servers packaged in Alpine include:&lt;br /&gt;
* {{pkg|kea}}&lt;br /&gt;
* {{pkg|freeradius-dhcp}}&lt;br /&gt;
* {{pkg|dnsmasq}}&lt;br /&gt;
* udhcpd - packaged in {{pkg|busybox-extras}}&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities for which issues have remained open for a year. The developers of Gogs were contacted multiple times by the Forgejo team but unfortunately received no response. Therefore we have removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were frustrated with the single-maintainer management model of Gogs. Forgejo is a fork of Gitea which was created as a result of the for-profit company Gitea Ltd taking over maintainership (see also https://forgejo.org/compare-to-gitea/).&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April and became unmaintained, therefore we have removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28082</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28082"/>
		<updated>2024-12-04T20:31:22Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* ISC DHCP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH service requires restart ===&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, and on, of {{pkg|openssh}}, {{pkg|openssh-server}} is split into two binaries (&amp;lt;code&amp;gt;/usr/lib/ssh/sshd-session&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr/sbin/sshd&amp;lt;/code&amp;gt;). Due to this change, it will not be possible to &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; into a system that has upgraded from a release prior to &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; to this release or later, without restarting the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
We have previously brought attention to this - https://alpinelinux.org/posts/2024-07-02-openssh-upgrade-edge.html&lt;br /&gt;
&lt;br /&gt;
Managing services has always been out-of-scope for {{pkg|apk-tools}}, but this one time we will &#039;&#039;&#039;make an exception&#039;&#039;&#039; when the following conditions are met:&lt;br /&gt;
# You have both the {{pkg|openssh-server}} and {{pkg|openssh-server-common-openrc}} packages installed at a version lower than &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt;&lt;br /&gt;
# The &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service is started&lt;br /&gt;
&lt;br /&gt;
We will then, post {{pkg|openssh-server}} upgrade, have a &amp;lt;code&amp;gt;post-upgrade&amp;lt;/code&amp;gt; script that will:&lt;br /&gt;
# Print a message on what is about to happen and why&lt;br /&gt;
# Restart the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service&lt;br /&gt;
# If the command to restart the service would fail, for any reason, a warning message will be printed and an error code returned to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;, to be noticed by the end of the package upgrades (this will not interrupt the upgrade process).&lt;br /&gt;
&lt;br /&gt;
We have decided to do this in order to help keep you from getting locked out of your system(s) and be able to fix any issues with the upgrade.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* https://bugzilla.mindrot.org/show_bug.cgi?id=3706&lt;br /&gt;
* https://git.alpinelinux.org/aports/commit/?id=6adff08ae09961d4eea66b55a8cca14d3941fb53&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate filesystems (partitions, volumes, disk drives or other) should proceed with care. As part of the merge, &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; will be mounted from the initramfs to make sure everybody has all necessary binaries in place. However, there are currently some bugs being [https://gitlab.alpinelinux.org/alpine/mkinitfs/-/merge_requests/186 worked on]. Until those are worked out and backported, it is advisable to hold the upgrade back. Once it is ready, we will provide more detailed information. If you have one of those setups, and want to help testing, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll publish soon a blog post with further information, the timeline and the effects.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. ({{Issue|16613}})&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;main/bats&amp;lt;/code&amp;gt; was renamed to &amp;lt;code&amp;gt;main/bats-core&amp;lt;/code&amp;gt;. Now there is a meta package &amp;lt;code&amp;gt;community/bats&amp;lt;/code&amp;gt; which contains:&lt;br /&gt;
&lt;br /&gt;
* {{pkg|bats-core}}&lt;br /&gt;
* {{pkg|bats-file}}&lt;br /&gt;
* {{pkg|bats-support}}&lt;br /&gt;
* {{pkg|bats-assert}}&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* PHP 8.4&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 18&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
The Gnu Compiler Collection was upgraded to 14.2.0 and, as a result, all packages built with {{pkg|gcc}} are in Alpine 3.21 compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. A total of 5 LLVM versions are supported: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We will try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|hplip}} ({{Issue|16685}})&lt;br /&gt;
* {{pkg|imageflow}} ({{Issue|16679}})&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{Issue|16580}})&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}} ({{Issue|16686}})&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
If you are still running an ISC DHCP server, you are advised to migrate to a maintained alternative &#039;&#039;&#039;before&#039;&#039;&#039; upgrading to the 3.21 release.&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
Up to, and including, the 3.20 version of Alpine, the {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
Alternative DHCP servers packaged in Alpine include:&lt;br /&gt;
* {{pkg|kea}}&lt;br /&gt;
* {{pkg|freeradius-dhcp}}&lt;br /&gt;
* {{pkg|dnsmasq}}&lt;br /&gt;
* udhcpd - packaged in {{pkg|busybox-extras}}&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28078</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28078"/>
		<updated>2024-12-04T12:55:26Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */ busybox being a core part, move it to under Linux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH service requires restart ===&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, and on, of {{pkg|openssh}}, {{pkg|openssh-server}} is split into two binaries (&amp;lt;code&amp;gt;/usr/lib/ssh/sshd-session&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr/sbin/sshd&amp;lt;/code&amp;gt;). Due to this change, it will not be possible to &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; into a system that has upgraded from a release prior to &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; to this release or later, without restarting the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
We have previously brought attention to this - https://alpinelinux.org/posts/2024-07-02-openssh-upgrade-edge.html&lt;br /&gt;
&lt;br /&gt;
Managing services has always been out-of-scope for {{pkg|apk-tools}}, but this one time we will &#039;&#039;&#039;make an exception&#039;&#039;&#039; when the following conditions are met:&lt;br /&gt;
# You have both the {{pkg|openssh-server}} and {{pkg|openssh-server-common-openrc}} packages installed at a version lower than &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt;&lt;br /&gt;
# The &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service is started&lt;br /&gt;
&lt;br /&gt;
We will then, post {{pkg|openssh-server}} upgrade, have a &amp;lt;code&amp;gt;post-upgrade&amp;lt;/code&amp;gt; script that will:&lt;br /&gt;
# Print a message on what is about to happen and why&lt;br /&gt;
# Restart the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service&lt;br /&gt;
# If the command to restart the service would fail, for any reason, a warning message will be printed and an error code returned to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;, to be noticed by the end of the package upgrades (this will not interrupt the upgrade process).&lt;br /&gt;
&lt;br /&gt;
We have decided to do this in order to help keep you from getting locked out of your system(s) and be able to fix any issues with the upgrade.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* https://bugzilla.mindrot.org/show_bug.cgi?id=3706&lt;br /&gt;
* https://git.alpinelinux.org/aports/commit/?id=6adff08ae09961d4eea66b55a8cca14d3941fb53&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate filesystems (partitions, volumes, disk drives or other) should proceed with care, and it may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll publish soon a blog post about with further information, the timeline and the effects.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. ({{Issue|16613}})&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;main/bats&amp;lt;/code&amp;gt; was renamed to &amp;lt;code&amp;gt;main/bats-core&amp;lt;/code&amp;gt;. Now there is a meta package &amp;lt;code&amp;gt;community/bats&amp;lt;/code&amp;gt; which contains:&lt;br /&gt;
&lt;br /&gt;
* {{pkg|bats-core}}&lt;br /&gt;
* {{pkg|bats-file}}&lt;br /&gt;
* {{pkg|bats-support}}&lt;br /&gt;
* {{pkg|bats-assert}}&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* PHP 8.4&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 18&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
The Gnu Compiler Collection was upgraded to 14.2.0 and, as a result, all packages built with {{pkg|gcc}} are in Alpine 3.21 compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. A total of 5 LLVM versions are supported: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We will try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|hplip}} ({{Issue|16685}})&lt;br /&gt;
* {{pkg|imageflow}} ({{Issue|16679}})&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{Issue|16580}})&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}} ({{Issue|16686}})&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28077</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28077"/>
		<updated>2024-12-04T12:54:09Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */ move PHP together with the other languages and skip the patch release number, as with the others&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH service requires restart ===&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, and on, of {{pkg|openssh}}, {{pkg|openssh-server}} is split into two binaries (&amp;lt;code&amp;gt;/usr/lib/ssh/sshd-session&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr/sbin/sshd&amp;lt;/code&amp;gt;). Due to this change, it will not be possible to &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; into a system that has upgraded from a release prior to &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; to this release or later, without restarting the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
We have previously brought attention to this - https://alpinelinux.org/posts/2024-07-02-openssh-upgrade-edge.html&lt;br /&gt;
&lt;br /&gt;
Managing services has always been out-of-scope for {{pkg|apk-tools}}, but this one time we will &#039;&#039;&#039;make an exception&#039;&#039;&#039; when the following conditions are met:&lt;br /&gt;
# You have both the {{pkg|openssh-server}} and {{pkg|openssh-server-common-openrc}} packages installed at a version lower than &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt;&lt;br /&gt;
# The &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service is started&lt;br /&gt;
&lt;br /&gt;
We will then, post {{pkg|openssh-server}} upgrade, have a &amp;lt;code&amp;gt;post-upgrade&amp;lt;/code&amp;gt; script that will:&lt;br /&gt;
# Print a message on what is about to happen and why&lt;br /&gt;
# Restart the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service&lt;br /&gt;
# If the command to restart the service would fail, for any reason, a warning message will be printed and an error code returned to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;, to be noticed by the end of the package upgrades (this will not interrupt the upgrade process).&lt;br /&gt;
&lt;br /&gt;
We have decided to do this in order to help keep you from getting locked out of your system(s) and be able to fix any issues with the upgrade.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* https://bugzilla.mindrot.org/show_bug.cgi?id=3706&lt;br /&gt;
* https://git.alpinelinux.org/aports/commit/?id=6adff08ae09961d4eea66b55a8cca14d3941fb53&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate filesystems (partitions, volumes, disk drives or other) should proceed with care, and it may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll publish soon a blog post about with further information, the timeline and the effects.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. ({{Issue|16613}})&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;main/bats&amp;lt;/code&amp;gt; was renamed to &amp;lt;code&amp;gt;main/bats-core&amp;lt;/code&amp;gt;. Now there is a meta package &amp;lt;code&amp;gt;community/bats&amp;lt;/code&amp;gt; which contains:&lt;br /&gt;
&lt;br /&gt;
* {{pkg|bats-core}}&lt;br /&gt;
* {{pkg|bats-file}}&lt;br /&gt;
* {{pkg|bats-support}}&lt;br /&gt;
* {{pkg|bats-assert}}&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* PHP 8.4&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 18&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
The Gnu Compiler Collection was upgraded to 14.2.0 and, as a result, all packages built with {{pkg|gcc}} are in Alpine 3.21 compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. A total of 5 LLVM versions are supported: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We will try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|hplip}} ({{Issue|16685}})&lt;br /&gt;
* {{pkg|imageflow}} ({{Issue|16679}})&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{Issue|16580}})&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}} ({{Issue|16686}})&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28045</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28045"/>
		<updated>2024-12-03T18:47:29Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Preparations for /usr-merge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH service requires restart ===&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, and on, of {{pkg|openssh}}, {{pkg|openssh-server}} is split into two binaries (&amp;lt;code&amp;gt;/usr/lib/ssh/sshd-session&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr/sbin/sshd&amp;lt;/code&amp;gt;). Due to this change, it will not be possible to &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; into a system that has upgraded from a release prior to &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; to this release or later, without restarting the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
We have previously brought attention to this - https://alpinelinux.org/posts/2024-07-02-openssh-upgrade-edge.html&lt;br /&gt;
&lt;br /&gt;
Managing services has always been out-of-scope for {{pkg|apk-tools}}, but this one time we will &#039;&#039;&#039;make an exception&#039;&#039;&#039; when the following conditions are met:&lt;br /&gt;
# You have both the {{pkg|openssh-server}} and {{pkg|openssh-server-common-openrc}} packages installed at a version lower than &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt;&lt;br /&gt;
# The &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service is started&lt;br /&gt;
&lt;br /&gt;
We will then, post {{pkg|openssh-server}} upgrade, have a &amp;lt;code&amp;gt;post-upgrade&amp;lt;/code&amp;gt; script that will:&lt;br /&gt;
# Print a message on what is about to happen and why&lt;br /&gt;
# Restart the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service&lt;br /&gt;
# If the command to restart the service would fail, for any reason, a warning message will be printed and an error code returned to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;, to be noticed by the end of the package upgrades (this will not interrupt the upgrade process).&lt;br /&gt;
&lt;br /&gt;
We have decided to do this in order to help keep you from getting locked out of your system(s) and be able to fix any issues with the upgrade.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* https://bugzilla.mindrot.org/show_bug.cgi?id=3706&lt;br /&gt;
* https://git.alpinelinux.org/aports/commit/?id=6adff08ae09961d4eea66b55a8cca14d3941fb53&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate filesystems (partitions, volumes, disk drives or other) should proceed with care, and it may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll publish soon a blog post about with further information, the timeline and the effects.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 18&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
The Gnu Compiler Collection was upgraded to 14.2.0 and, as a result, all packages built with {{pkg|gcc}} are in Alpine 3.21 compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|hplip}} ({{Issue|16685}})&lt;br /&gt;
* {{pkg|imageflow}} ({{Issue|16679}})&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{Issue|16580}})&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}} ({{Issue|16686}})&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28027</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28027"/>
		<updated>2024-12-03T17:31:05Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* GCC 14 */ other packages are not, at least directly, built with gcc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH service requires restart ===&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, and on, of {{pkg|openssh}}, {{pkg|openssh-server}} is split into two binaries (&amp;lt;code&amp;gt;/usr/lib/ssh/sshd-session&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr/sbin/sshd&amp;lt;/code&amp;gt;). Due to this change, it will not be possible to &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; into a system that has upgraded from a release prior to &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; to this release or later, without restarting the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
We have previously brought attention to this - https://alpinelinux.org/posts/2024-07-02-openssh-upgrade-edge.html&lt;br /&gt;
&lt;br /&gt;
Managing services has always been out-of-scope for {{pkg|apk-tools}}, but this one time we will &#039;&#039;&#039;make an exception&#039;&#039;&#039; when the following conditions are met:&lt;br /&gt;
# You have both the {{pkg|openssh-server}} and {{pkg|openssh-server-common-openrc}} packages installed at a version lower than &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt;&lt;br /&gt;
# The &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service is started&lt;br /&gt;
&lt;br /&gt;
We will then, post {{pkg|openssh-server}} upgrade, have a &amp;lt;code&amp;gt;post-upgrade&amp;lt;/code&amp;gt; script that will:&lt;br /&gt;
# Print a message on what is about to happen and why&lt;br /&gt;
# Restart the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service&lt;br /&gt;
# If the command to restart the service would fail, for any reason, a warning message will be printed and an error code returned to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;, to be noticed by the end of the package upgrades (this will not interrupt the upgrade process).&lt;br /&gt;
&lt;br /&gt;
We have decided to do this in order to help keep you from getting locked out of your system(s) and be able to fix any issues with the upgrade.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* https://bugzilla.mindrot.org/show_bug.cgi?id=3706&lt;br /&gt;
* https://git.alpinelinux.org/aports/commit/?id=6adff08ae09961d4eea66b55a8cca14d3941fb53&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate partitions, volumes or disk devices should proceed with care, and it may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll publish soon a blog post about with further information, the timeline and the effects.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 18&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
The Gnu Compiler Collection was upgraded to 14.2.0 and, as a result, all packages built with {{pkg|gcc}} are in Alpine 3.21 compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|hplip}} ({{Issue|16685}})&lt;br /&gt;
* {{pkg|imageflow}} ({{Issue|16679}})&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{Issue|16580}})&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}} ({{Issue|16686}})&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28026</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=28026"/>
		<updated>2024-12-03T17:26:23Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* OpenSSH requires restart */ accepted and merged&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH service requires restart ===&lt;br /&gt;
&lt;br /&gt;
From the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, and on, of {{pkg|openssh}}, {{pkg|openssh-server}} is split into two binaries (&amp;lt;code&amp;gt;/usr/lib/ssh/sshd-session&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr/sbin/sshd&amp;lt;/code&amp;gt;). Due to this change, it will not be possible to &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; into a system that has upgraded from a release prior to &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; to this release or later, without restarting the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service.&lt;br /&gt;
&lt;br /&gt;
We have previously brought attention to this - https://alpinelinux.org/posts/2024-07-02-openssh-upgrade-edge.html&lt;br /&gt;
&lt;br /&gt;
Managing services has always been out-of-scope for {{pkg|apk-tools}}, but this one time we will &#039;&#039;&#039;make an exception&#039;&#039;&#039; when the following conditions are met:&lt;br /&gt;
# You have both the {{pkg|openssh-server}} and {{pkg|openssh-server-common-openrc}} packages installed at a version lower than &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt;&lt;br /&gt;
# The &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service is started&lt;br /&gt;
&lt;br /&gt;
We will then, post {{pkg|openssh-server}} upgrade, have a &amp;lt;code&amp;gt;post-upgrade&amp;lt;/code&amp;gt; script that will:&lt;br /&gt;
# Print a message on what is about to happen and why&lt;br /&gt;
# Restart the &amp;lt;code&amp;gt;sshd&amp;lt;/code&amp;gt; service&lt;br /&gt;
# If the command to restart the service would fail, for any reason, a warning message will be printed and an error code returned to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;, to be noticed by the end of the package upgrades (this will not interrupt the upgrade process).&lt;br /&gt;
&lt;br /&gt;
We have decided to do this in order to help keep you from getting locked out of your system(s) and be able to fix any issues with the upgrade.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* https://bugzilla.mindrot.org/show_bug.cgi?id=3706&lt;br /&gt;
* https://git.alpinelinux.org/aports/commit/?id=6adff08ae09961d4eea66b55a8cca14d3941fb53&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate partitions, volumes or disk devices should proceed with care, and it may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll publish soon a blog post about with further information, the timeline and the effects.&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 18&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|hplip}} ({{Issue|16685}})&lt;br /&gt;
* {{pkg|imageflow}} ({{Issue|16679}})&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{Issue|16580}})&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}} ({{Issue|16686}})&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27928</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27928"/>
		<updated>2024-11-30T04:45:28Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */  busybox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate partitions, volumes or disk devices should proceed with care, and it may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 18&lt;br /&gt;
* busybox 1.37&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27927</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27927"/>
		<updated>2024-11-30T03:27:49Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */ wlroots 18&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate partitions, volumes or disk devices should proceed with care, and it may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
* wlroots 18&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27926</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27926"/>
		<updated>2024-11-30T02:40:00Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Preparations for /usr-merge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate partitions, volumes or disk devices should proceed with care, and it may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27925</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27925"/>
		<updated>2024-11-30T02:39:09Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Preparations for /usr-merge */  there are many possible configurations where a user may have chosen to separate / and /usr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are on separate partitions, volumes or disk devices should proceed with care, and may be advisable to skip the 3.21 upgrade. &lt;br /&gt;
&lt;br /&gt;
If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27924</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27924"/>
		<updated>2024-11-30T02:32:08Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* uutils-coreutils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary. The &amp;lt;code&amp;gt;/usr/bin/uutils-*&amp;lt;/code&amp;gt; symlinks, previously provided by {{pkg|uutils-coreutils}}, no loger exist.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package, containing the &amp;lt;code&amp;gt;/usr/bin/uutils&amp;lt;/code&amp;gt; binary.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27923</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27923"/>
		<updated>2024-11-30T02:23:40Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* uutils-coreutils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package.&lt;br /&gt;
&lt;br /&gt;
If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27922</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27922"/>
		<updated>2024-11-30T02:22:57Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* uutils-coreutils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be &#039;&#039;&#039;purged&#039;&#039;&#039; and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package. If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading, and then add the {{pkg|uutils}} package.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} aport are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27921</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27921"/>
		<updated>2024-11-30T02:18:52Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* ISC DHCP */ not in the same mood&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be purged and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package. If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading and add {{pkg|uutils}} after.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;cool&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
ISC DHCP has been EoL since 2022. They have a guide for migrating to {{pkg|kea}} here: https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
The {{pkg|dhcp}} aport has the subpackage {{pkg|keama}} that is a tool for helping with migration from ISC DHCP configuration to ISC Kea configuration.&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27920</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27920"/>
		<updated>2024-11-29T01:59:50Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Xen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen 4.19 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-traditional&#039;&#039; and &#039;&#039;stubdom&#039;&#039; are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
There is still the {{pkg|xen-qemu}} package, but the regular {{pkg|qemu}} aport [https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13 is now built with Xen support], so a {{pkg|qemu-system-*}} package can be used instead.&lt;br /&gt;
&lt;br /&gt;
You would choose to use it in your &#039;&#039;xl.cfg(1)&#039;&#039; like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_model_override = &amp;quot;/usr/bin/qemu-system-x86_64&amp;quot;&lt;br /&gt;
device_model_version = &amp;quot;qemu-xen&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be purged and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package. If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading and add {{pkg|uutils}} after.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;&#039;cool&#039;&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
Like, you know, you should prolly migrate to some other thing disregardless, yeah? I mean, it has been EoL since friggin&#039; &#039;&#039;&#039;2022&#039;&#039;&#039;, jeez!&lt;br /&gt;
&lt;br /&gt;
Have an ISC guide for migrating to {{pkg|kea}}, why don&#039;t you? https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
something something {{pkg|keama}} https://pkgs.alpinelinux.org/package/edge/main/x86_64/keama&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27919</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27919"/>
		<updated>2024-11-29T00:14:32Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Linux 6.12 */ patch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be purged and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package. If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading and add {{pkg|uutils}} after.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.1 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;&#039;cool&#039;&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
Like, you know, you should prolly migrate to some other thing disregardless, yeah? I mean, it has been EoL since friggin&#039; &#039;&#039;&#039;2022&#039;&#039;&#039;, jeez!&lt;br /&gt;
&lt;br /&gt;
Have an ISC guide for migrating to {{pkg|kea}}, why don&#039;t you? https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
something something {{pkg|keama}} https://pkgs.alpinelinux.org/package/edge/main/x86_64/keama&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27918</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27918"/>
		<updated>2024-11-29T00:13:37Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */ drop patch numbers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be purged and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package. If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading and add {{pkg|uutils}} after.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47&lt;br /&gt;
* KDE Plasma 6.2&lt;br /&gt;
* LXQt 2.1&lt;br /&gt;
* Qt 6.8&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.0 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;&#039;cool&#039;&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
Like, you know, you should prolly migrate to some other thing disregardless, yeah? I mean, it has been EoL since friggin&#039; &#039;&#039;&#039;2022&#039;&#039;&#039;, jeez!&lt;br /&gt;
&lt;br /&gt;
Have an ISC guide for migrating to {{pkg|kea}}, why don&#039;t you? https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
something something {{pkg|keama}} https://pkgs.alpinelinux.org/package/edge/main/x86_64/keama&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27917</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27917"/>
		<updated>2024-11-29T00:11:01Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */ rust&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be purged and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package. If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading and add {{pkg|uutils}} after.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2.0&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23.3&lt;br /&gt;
* Rust 1.83&lt;br /&gt;
* GNOME 47.1&lt;br /&gt;
* KDE Plasma 6.2.3&lt;br /&gt;
* LXQt 2.1.0&lt;br /&gt;
* Qt 6.8.0&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.0 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;&#039;cool&#039;&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
Like, you know, you should prolly migrate to some other thing disregardless, yeah? I mean, it has been EoL since friggin&#039; &#039;&#039;&#039;2022&#039;&#039;&#039;, jeez!&lt;br /&gt;
&lt;br /&gt;
Have an ISC guide for migrating to {{pkg|kea}}, why don&#039;t you? https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
something something {{pkg|keama}} https://pkgs.alpinelinux.org/package/edge/main/x86_64/keama&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27916</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27916"/>
		<updated>2024-11-29T00:09:06Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* ISC DHCP */ still cool?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be purged and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package. If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading and add {{pkg|uutils}} after.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2.0&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23.3&lt;br /&gt;
* Rust 1.82&lt;br /&gt;
* GNOME 47.1&lt;br /&gt;
* KDE Plasma 6.2.3&lt;br /&gt;
* LXQt 2.1.0&lt;br /&gt;
* Qt 6.8.0&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.0 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;&#039;cool&#039;&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
Like, you know, you should prolly migrate to some other thing disregardless, yeah? I mean, it has been EoL since friggin&#039; &#039;&#039;&#039;2022&#039;&#039;&#039;, jeez!&lt;br /&gt;
&lt;br /&gt;
Have an ISC guide for migrating to {{pkg|kea}}, why don&#039;t you? https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
something something {{pkg|keama}} https://pkgs.alpinelinux.org/package/edge/main/x86_64/keama&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27915</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27915"/>
		<updated>2024-11-29T00:05:26Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* uutils-coreutils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|uutils-coreutils}} is repackaged as a sub-package to {{pkg|uutils}} in such a way as to be a drop-in replacement for GNU {{pkg|coreutils}}.&lt;br /&gt;
&lt;br /&gt;
If you have both {{pkg|uutils-coreutils}} and {{pkg|coreutils}} installed, the latter will be purged and its symlinks replaced with ones pointing to the &#039;&#039;/usr/bin/uutils&#039;&#039; binary, provided by the {{pkg|uutils}} package. If you prefer to use GNU {{pkg|coreutils}}, you may want to remove the {{pkg|uutils-coreutils}} package before upgrading and add {{pkg|uutils}} after.&lt;br /&gt;
&lt;br /&gt;
A few parts of the {{pkg|uutils}} are also split into {{pkg|uutils-*}} subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2.0&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23.3&lt;br /&gt;
* Rust 1.82&lt;br /&gt;
* GNOME 47.1&lt;br /&gt;
* KDE Plasma 6.2.3&lt;br /&gt;
* LXQt 2.1.0&lt;br /&gt;
* Qt 6.8.0&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.0 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;&#039;cool&#039;&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
Like, you know, you should prolly migrate to some other thing disregardless, yeah? I mean, it has been EoL since friggin&#039; &#039;&#039;&#039;2022&#039;&#039;&#039;, jeez!&lt;br /&gt;
&lt;br /&gt;
Have an ISC guide for migrating to Kea, why don&#039;t you? https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
something something keama https://pkgs.alpinelinux.org/package/edge/main/x86_64/keama&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27914</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27914"/>
		<updated>2024-11-28T23:28:47Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* ISC DHCP */  cool, huh?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preparations went into this release to ensure that the merge happens as smoothly as possible. That included moving the location of some binaries and many libraries from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/sbin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;/lib&amp;lt;/code&amp;gt; to their counter-parts in &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt;. Users with installations where &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; are in different partitions should proceed with care, and may be advisable to skip the 3.21 upgrade. If you still want to go ahead, you may open an [https://gitlab.alpinelinux.org/alpine/aports/-/issues/new issue] and ping &amp;lt;code&amp;gt;@pabloyoyoista&amp;lt;/code&amp;gt; to ask for support.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ({{MR|69924}})&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: {{Issue|16613}}&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;uutils-coreutils&amp;quot; is repackaged as a sub-package to &amp;quot;community/uutils&amp;quot; in such a way as to be a drop-in replacement for GNU coreutils.&lt;br /&gt;
&lt;br /&gt;
If you have both &amp;quot;uutils-coreutils&amp;quot; and &amp;quot;coreutils&amp;quot; installed, the latter will be purged and its symlinks replaced with ones pointing to the /usr/bin/uutils binary, provided by the &amp;quot;uutils&amp;quot; package. If you prefer to use GNU &amp;quot;coreutils&amp;quot;, or run into issues with &amp;quot;uutils&amp;quot; as replacement, you may want to remove the &amp;quot;uutils-coreutils&amp;quot; package before upgrading.&lt;br /&gt;
&lt;br /&gt;
A few parts of the uutils are also split into subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
=== linux-firmware ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-firmware}} is now compressed with ZSTD compression. If you run a custom built Linux kernel, you need to ensure that &amp;lt;code&amp;gt;CONFIG_FW_LOADER_COMPRESS_ZSTD=y&amp;lt;/code&amp;gt; is set in your configuration.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* Linux 6.12&lt;br /&gt;
* GCC 14.2.0&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23.3&lt;br /&gt;
* Rust 1.82&lt;br /&gt;
* GNOME 47.1&lt;br /&gt;
* KDE Plasma 6.2.3&lt;br /&gt;
* LXQt 2.1.0&lt;br /&gt;
* Qt 6.8.0&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== Linux 6.12 ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21.0 ships Linux 6.12.0 in the {{pkg|linux-lts}} package.&lt;br /&gt;
&lt;br /&gt;
Please note that {{pkg|linux-headers}} still is on 6.6, because the kernel was released after we kicked off our rebuilds and we coudn&#039;t ensure that the upgrade doesn&#039;t break other packages. (More about the linux-headers 6.12 upgrade: {{MR|75618}})&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== Disabled packages due to FTBS ===&lt;br /&gt;
&lt;br /&gt;
{{note|update to latest state (last update 2024-11-28)}}&lt;br /&gt;
&lt;br /&gt;
The following packages are temporarily disabled because they failed to build. We try to restore them as soon as possible.&lt;br /&gt;
&lt;br /&gt;
* {{pkg|guacamole-dotool}} ({{MR|75998}})&lt;br /&gt;
* {{pkg|hplip}}&lt;br /&gt;
* {{pkg|kdevelop}} ({{MR|75839}})&lt;br /&gt;
* {{pkg|postgresql-citus}} ({{MR|75381}}&lt;br /&gt;
* {{pkg|uvicorn}} ({{Issue|16646}})&lt;br /&gt;
* {{pkg|vulkan-validation-layers}}&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something &#039;&#039;&#039;cool&#039;&#039;&#039; if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
Like, you know, you should prolly migrate to some other thing disregardless, yeah? I mean, it has been EoL since friggin&#039; &#039;&#039;&#039;2022&#039;&#039;&#039;, jeez!&lt;br /&gt;
&lt;br /&gt;
Have an ISC guide for migrating to Kea, why don&#039;t you? https://www.isc.org/dhcp_migration/&lt;br /&gt;
&lt;br /&gt;
something something keama https://pkgs.alpinelinux.org/package/edge/main/x86_64/keama&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ({{MR|75304}})&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27840</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27840"/>
		<updated>2024-11-17T23:58:11Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Note-worthy updates */ Qt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preperations went into this release to ensure that the merge happens as smoothly as possible.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ([https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/69924 !69924])&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: https://gitlab.alpinelinux.org/alpine/aports/-/issues/16613&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;uutils-coreutils&amp;quot; is repackaged as a sub-package to &amp;quot;community/uutils&amp;quot; in such a way as to be a drop-in replacement for GNU coreutils.&lt;br /&gt;
&lt;br /&gt;
If you have both &amp;quot;uutils-coreutils&amp;quot; and &amp;quot;coreutils&amp;quot; installed, the latter will be purged and its symlinks replaced with ones pointing to the /usr/bin/uutils binary, provided by the &amp;quot;uutils&amp;quot; package. If you prefer to use GNU &amp;quot;coreutils&amp;quot;, or run into issues with &amp;quot;uutils&amp;quot; as replacement, you may want to remove the &amp;quot;uutils-coreutils&amp;quot; package before upgrading.&lt;br /&gt;
&lt;br /&gt;
A few parts of the uutils are also split into subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* GCC 14.2.0&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23.3&lt;br /&gt;
* Rust 1.82&lt;br /&gt;
* GNOME 47.1&lt;br /&gt;
* KDE Plasma 6.2.3&lt;br /&gt;
* LXQt 2.1.0&lt;br /&gt;
* Qt 6.8.0&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something cool if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ([https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/75304 !75304])&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27839</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27839"/>
		<updated>2024-11-17T23:55:40Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Significant changes */ uutils&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preperations went into this release to ensure that the merge happens as smoothly as possible.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ([https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/69924 !69924])&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: https://gitlab.alpinelinux.org/alpine/aports/-/issues/16613&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
=== uutils-coreutils ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;uutils-coreutils&amp;quot; is repackaged as a sub-package to &amp;quot;community/uutils&amp;quot; in such a way as to be a drop-in replacement for GNU coreutils.&lt;br /&gt;
&lt;br /&gt;
If you have both &amp;quot;uutils-coreutils&amp;quot; and &amp;quot;coreutils&amp;quot; installed, the latter will be purged and its symlinks replaced with ones pointing to the /usr/bin/uutils binary, provided by the &amp;quot;uutils&amp;quot; package. If you prefer to use GNU &amp;quot;coreutils&amp;quot;, or run into issues with &amp;quot;uutils&amp;quot; as replacement, you may want to remove the &amp;quot;uutils-coreutils&amp;quot; package before upgrading.&lt;br /&gt;
&lt;br /&gt;
A few parts of the uutils are also split into subpackages, to avoid conflicts or other issues.&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* GCC 14.2.0&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23.3&lt;br /&gt;
* Rust 1.82&lt;br /&gt;
* GNOME 47.1&lt;br /&gt;
* KDE Plasma 6.2.3&lt;br /&gt;
* LXQt 2.1.0&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something cool if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ([https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/75304 !75304])&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27838</id>
		<title>Release Notes for Alpine 3.21.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.21.0&amp;diff=27838"/>
		<updated>2024-11-17T23:36:20Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Significant changes */ xen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As always, make sure to read [[Upgrading Alpine to a new major release]] when upgrading to a new release.&lt;br /&gt;
&lt;br /&gt;
If you experience any issues with the upgrade, please let us know and file an issue in our repositories.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== OpenSSH requires restart ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Remove this section if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68589 gets merged before 3.21 is released }}&lt;br /&gt;
&lt;br /&gt;
You need to restart your sshd service!&lt;br /&gt;
&lt;br /&gt;
Since the &amp;lt;code&amp;gt;9.8_p1&amp;lt;/code&amp;gt; release, openssh-server is now split into two binaries, sshd and sshd-session. With this change sshd needs to be restarted to be able to accept new connections.&lt;br /&gt;
&lt;br /&gt;
Since managing services has always been out-of-scope for apk, we will NOT do the following for you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rc-service --ifstarted sshd restart&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== New loongarch64 architecture ===&lt;br /&gt;
&lt;br /&gt;
Alpine 3.21 is the first release which is available for &amp;lt;code&amp;gt;loongarch64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support of the team of Loongson dedicated to supporting Alpine Linux and many other contributors.&lt;br /&gt;
&lt;br /&gt;
=== Preparations for /usr-merge ===&lt;br /&gt;
&lt;br /&gt;
We plan for the next Alpine Linux, version 3.22, to contain the /usr-merge.&lt;br /&gt;
&lt;br /&gt;
A lot of preperations went into this release to ensure that the merge happens as smoothly as possible.&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: replace with actual blog post}}&lt;br /&gt;
&lt;br /&gt;
For more information, the timeline and the effects, read the blog post: https://gitlab.alpinelinux.org/alpine/infra/alpine-mksite/-/merge_requests/88/diffs&lt;br /&gt;
&lt;br /&gt;
== Significant changes ==&lt;br /&gt;
&lt;br /&gt;
=== Jellyfin ===&lt;br /&gt;
&lt;br /&gt;
Jellyfin now uses the recommended fork of ffmpeg called {{pkg|jellyfin-ffmpeg}} by default. If you want to change that, take a look at the &amp;lt;code&amp;gt;ffmpegpath&amp;lt;/code&amp;gt; variable in &amp;lt;code&amp;gt;/etc/conf.d/jellyfin&amp;lt;/code&amp;gt;. ([https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/69924 !69924])&lt;br /&gt;
&lt;br /&gt;
Jellyfin was disabled for ARM architectures (&amp;lt;code&amp;gt;aarch64&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;armv7&amp;lt;/code&amp;gt;) and is only available for &amp;lt;code&amp;gt;x86_64&amp;lt;/code&amp;gt;. The relevant issue is: https://gitlab.alpinelinux.org/alpine/aports/-/issues/16613&lt;br /&gt;
&lt;br /&gt;
=== Bats ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;main/bats&amp;quot; was renamed to &amp;quot;main/bats-core&amp;quot;. Now there is a meta package &amp;quot;community/bats&amp;quot; which contains:&lt;br /&gt;
&lt;br /&gt;
* bats-core&lt;br /&gt;
* bats-file&lt;br /&gt;
* bats-support&lt;br /&gt;
* bats-assert&lt;br /&gt;
&lt;br /&gt;
=== Xen ===&lt;br /&gt;
&lt;br /&gt;
qemu-traditional and stubdom are removed from the build in this release, see https://git.alpinelinux.org/aports/commit/?id=24217a24da3924039b000eb17c04bf3f01bf1f12&lt;br /&gt;
&lt;br /&gt;
The regular qemu aport, community/qemu, is now build with xen support, see https://git.alpinelinux.org/aports/commit/?id=a9249e2e0de827e88d84c01f9731aeebd248be13&lt;br /&gt;
&lt;br /&gt;
== Note-worthy updates ==&lt;br /&gt;
&lt;br /&gt;
As always, a lot of packages were upgraded. Make sure to read the indivdual release notes of the projects you use.&lt;br /&gt;
&lt;br /&gt;
* GCC 14.2.0&lt;br /&gt;
* LLVM 19&lt;br /&gt;
* Go 1.23.3&lt;br /&gt;
* Rust 1.82&lt;br /&gt;
* GNOME 47.1&lt;br /&gt;
* KDE Plasma 6.2.3&lt;br /&gt;
* LXQt 2.1.0&lt;br /&gt;
&lt;br /&gt;
=== GCC 14 ===&lt;br /&gt;
&lt;br /&gt;
GCC was upgraded to 14.2.0 and as a result all packages in Alpine 3.21 are compiled with GCC 14.2.0.&lt;br /&gt;
&lt;br /&gt;
Make sure to read all changes: https://gcc.gnu.org/gcc-14/changes.html&lt;br /&gt;
&lt;br /&gt;
=== LXQt 2.1 ===&lt;br /&gt;
&lt;br /&gt;
LXQt has been updated to release 2.1.0 &lt;br /&gt;
* It now uses Qt6&lt;br /&gt;
* Many parts of LXQt are now wayland ready¹, but wayland ports of the following are pending: {{pkg|screengrab}}, {{pkg|lxqt-globalkeys}}, and keyboard indicator, some input settings, and settings of monitor, power button, and screen locker.&lt;br /&gt;
* LXQt Panel has a new default application menu called Fancy Menu.&lt;br /&gt;
¹ [https://github.com/lxqt/lxqt-wayland-session lxqt-wayland-session] has not been packaged yet, but most folks wanting to test on wayland will want to use it.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 17 ===&lt;br /&gt;
&lt;br /&gt;
This release features {{pkg|postgresql17}}. We dropped support for {{pkg|postgresql14}}, and moved {{pkg|postgreSQL15}} from main to community.&lt;br /&gt;
&lt;br /&gt;
=== LLVM 19 ===&lt;br /&gt;
&lt;br /&gt;
We packaged LLVM 19 in our repositories. Coming to total of 5 supported LLVM versions: {{pkg|llvm19}}, {{pkg|llvm18}}, {{pkg|llvm17}}, {{pkg|llvm16}}, {{pkg|llvm15}}.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== ISC DHCP ===&lt;br /&gt;
&lt;br /&gt;
{{Note|TODO: Write something cool if https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/70974 (or alternative) is merged }}&lt;br /&gt;
&lt;br /&gt;
=== Gogs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gogs&amp;lt;/code&amp;gt; was removed due to multiple high-severity vulnerabilities which are open within a year. The developers of Gogs were contacted multiple times by the Forgejo team, but got no response. Therefore we removed Gogs from our repositories. ([https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/75304 !75304])&lt;br /&gt;
&lt;br /&gt;
Please consider migrating to {{pkg|forgejo|branch=edge|arch=}} or {{pkg|gitea|branch=edge|arch=}}. Both forks are available in our community repo, like gogs was.&lt;br /&gt;
&lt;br /&gt;
The Gitea fork of Gogs was created in 2016 by contributors who were annoyed by the single-maintainer management model of Gogs. Forgejo is a fork of Gitea, which was created because the for-profit company Gitea Ltd took over the maintainership, see also https://forgejo.org/compare-to-gitea/.&lt;br /&gt;
&lt;br /&gt;
=== neofetch ===&lt;br /&gt;
&lt;br /&gt;
The upstream repository was archived in April, therefore is unmaintained and we removed it from our repositories. {{pkg|fastfetch}} provides similar functionality.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.20.0&amp;diff=26749</id>
		<title>Release Notes for Alpine 3.20.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.20.0&amp;diff=26749"/>
		<updated>2024-05-20T22:42:32Z</updated>

		<summary type="html">&lt;p&gt;Omni: podman 5.x&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== grub 2.12 ===&lt;br /&gt;
&lt;br /&gt;
When upgrading existing installations using grub on UEFI systems, make sure to update the installed bootloader before rebooting otherwise your machine might not boot.&lt;br /&gt;
&lt;br /&gt;
The problem is that grub added a new configuration that executes &amp;lt;code&amp;gt;fwsetup --is-supported&amp;lt;/code&amp;gt;, but grub 2.06 does not support the &amp;lt;code&amp;gt;--is-supported&amp;lt;/code&amp;gt; argument yet, causing grub to try to reboot into firmware unconditionally.&lt;br /&gt;
&lt;br /&gt;
Here is an example assuming the default setup. Don&#039;t blindly copy this example, but verify what&#039;s applicable to your system.&lt;br /&gt;
 &lt;br /&gt;
==== EFI ====&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&lt;br /&gt;
 # grub-install --target{{=}}&amp;lt;var&amp;gt;$target&amp;lt;/var&amp;gt; --efi-directory{{=}}&amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt; \&lt;br /&gt;
    --bootloader-id{{=}}alpine --boot-directory{{=}}/boot --no-nvram&lt;br /&gt;
 # install -D &amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt;/EFI/alpine/grub&amp;lt;var&amp;gt;$fwa&amp;lt;/var&amp;gt;.efi &amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt;/EFI/boot/boot&amp;lt;var&amp;gt;$fwa&amp;lt;/var&amp;gt;.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
; target : The relevant [https://gitlab.alpinelinux.org/alpine/alpine-conf/-/blob/master/setup-disk.in#L320-324 target] for your system&lt;br /&gt;
; efi_directory : Either {{Path|/boot/efi}} or {{Path|/boot}}. Run &amp;lt;code&amp;gt;awk &#039;$2 ~ /boot/ &amp;amp;&amp;amp; $3 ~ /fat|msdos/ { print $2 }&#039; /proc/mounts&amp;lt;/code&amp;gt; to confirm.&lt;br /&gt;
; fwa : The respective [https://gitlab.alpinelinux.org/alpine/alpine-conf/-/blob/master/setup-disk.in#L320-324 firmware architecture] for your system&lt;br /&gt;
&lt;br /&gt;
==== Short-term workaround ====&lt;br /&gt;
&lt;br /&gt;
A short-term workaround to get the system bootable again is to restore the backup configuration:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /boot/grub/grub.cfg.backup /boot/grub.cfg }}&lt;br /&gt;
&lt;br /&gt;
This should allow you to boot the system again in order to fix it permanently. This will be reverted when either grub or the kernel is updated again.&lt;br /&gt;
&lt;br /&gt;
This will only work if &amp;lt;code&amp;gt;update-grub&amp;lt;/code&amp;gt; has not been executed any more since the upgrade to grub 2.12.&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
Due to [https://github.com/redis/redis/pull/13157 the relicensing of Redis] to [https://redis.io/legal/rsalv2-agreement/ RSALv2]+[https://redis.io/legal/server-side-public-license-sspl/ SSPLv1], a non-free license model, the [https://spdx.org/licenses/BSD-3-Clause.html BSD-3-Clause] licensed fork [https://valkey.io/ Valkey] has replaced Redis in the main package repository.&lt;br /&gt;
&lt;br /&gt;
A {{#ifexpr: {{AlpineLatest}} &amp;gt;= 3.20 |{{pkg|valkey-compat|branch=v3.20|arch=}}|{{pkg|valkey-compat|branch=edge|arch=}}}} package is provided with symlinks and group for easy Redis replacement.&lt;br /&gt;
&lt;br /&gt;
The {{#ifexpr: {{AlpineLatest}} &amp;gt;= 3.20 |{{pkg|redis|branch=v3.20|arch=}}|{{pkg|redis|branch=edge|arch=}}}} aport has been moved to the community repository, with a shorter support cycle, and will not be upgraded past 7.2.x due to the license change.&lt;br /&gt;
&lt;br /&gt;
Another replacement alternative, the [https://spdx.org/licenses/LGPL-3.0-only.html LGPL-3.0-only] licensed fork [https://redict.io/ Redict] is also available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== yq ===&lt;br /&gt;
yq was renamed to yq-go. [https://gitlab.alpinelinux.org/alpine/aports/-/issues/16052 #16052]&lt;br /&gt;
&lt;br /&gt;
=== aws-cli ===&lt;br /&gt;
Due to incompatibility issues with Python 3.12, aws-cli has been temporarily disabled until the issue is resolved by upstream. See the corresponding problem upstream: [https://github.com/aws/aws-cli/issues/8342 #8342]&lt;br /&gt;
&lt;br /&gt;
=== GNOME 46 ===&lt;br /&gt;
&lt;br /&gt;
New upstream release of GNOME.&lt;br /&gt;
&lt;br /&gt;
Depending on how you installed GNOME, you may have to manually add &amp;lt;code&amp;gt;gcr-ssh-agent&amp;lt;/code&amp;gt; after upgrading to retain GNOME Keyring ssh integration.&lt;br /&gt;
&lt;br /&gt;
=== podman [https://github.com/containers/podman/releases/tag/v5.0.0 5.x] ===&lt;br /&gt;
&lt;br /&gt;
The default tool for rootless networking has been swapped from &amp;lt;code&amp;gt;slirp4netns&amp;lt;/code&amp;gt; to&lt;br /&gt;
&amp;lt;code&amp;gt;pasta&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;passt&amp;lt;/code&amp;gt;) for improved performance. As a result, networks named pasta are&lt;br /&gt;
no longer supported.&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
&lt;br /&gt;
* Crystal 1.12&lt;br /&gt;
* LLVM 18&lt;br /&gt;
* nginx 1.26&lt;br /&gt;
* .NET 8&lt;br /&gt;
* Nim 2.0&lt;br /&gt;
* OpenJDK 22&lt;br /&gt;
* Python 3.12&lt;br /&gt;
* Racket 8.13&lt;br /&gt;
* Ruby 3.3&lt;br /&gt;
* Rust 1.78&lt;br /&gt;
* R 4.4&lt;br /&gt;
* Sway 1.9&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.20.0&amp;diff=26748</id>
		<title>Release Notes for Alpine 3.20.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.20.0&amp;diff=26748"/>
		<updated>2024-05-20T22:27:40Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Upgrades */ rust 1.78, not 1.7.8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== grub 2.12 ===&lt;br /&gt;
&lt;br /&gt;
When upgrading existing installations using grub on UEFI systems, make sure to update the installed bootloader before rebooting otherwise your machine might not boot.&lt;br /&gt;
&lt;br /&gt;
The problem is that grub added a new configuration that executes &amp;lt;code&amp;gt;fwsetup --is-supported&amp;lt;/code&amp;gt;, but grub 2.06 does not support the &amp;lt;code&amp;gt;--is-supported&amp;lt;/code&amp;gt; argument yet, causing grub to try to reboot into firmware unconditionally.&lt;br /&gt;
&lt;br /&gt;
Here is an example assuming the default setup. Don&#039;t blindly copy this example, but verify what&#039;s applicable to your system.&lt;br /&gt;
 &lt;br /&gt;
==== EFI ====&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&lt;br /&gt;
 # grub-install --target{{=}}&amp;lt;var&amp;gt;$target&amp;lt;/var&amp;gt; --efi-directory{{=}}&amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt; \&lt;br /&gt;
    --bootloader-id{{=}}alpine --boot-directory{{=}}/boot --no-nvram&lt;br /&gt;
 # install -D &amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt;/EFI/alpine/grub&amp;lt;var&amp;gt;$fwa&amp;lt;/var&amp;gt;.efi &amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt;/EFI/boot/boot&amp;lt;var&amp;gt;$fwa&amp;lt;/var&amp;gt;.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
; target : The relevant [https://gitlab.alpinelinux.org/alpine/alpine-conf/-/blob/master/setup-disk.in#L320-324 target] for your system&lt;br /&gt;
; efi_directory : Either {{Path|/boot/efi}} or {{Path|/boot}}. Run &amp;lt;code&amp;gt;awk &#039;$2 ~ /boot/ &amp;amp;&amp;amp; $3 ~ /fat|msdos/ { print $2 }&#039; /proc/mounts&amp;lt;/code&amp;gt; to confirm.&lt;br /&gt;
; fwa : The respective [https://gitlab.alpinelinux.org/alpine/alpine-conf/-/blob/master/setup-disk.in#L320-324 firmware architecture] for your system&lt;br /&gt;
&lt;br /&gt;
==== Short-term workaround ====&lt;br /&gt;
&lt;br /&gt;
A short-term workaround to get the system bootable again is to restore the backup configuration:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /boot/grub/grub.cfg.backup /boot/grub.cfg }}&lt;br /&gt;
&lt;br /&gt;
This should allow you to boot the system again in order to fix it permanently. This will be reverted when either grub or the kernel is updated again.&lt;br /&gt;
&lt;br /&gt;
This will only work if &amp;lt;code&amp;gt;update-grub&amp;lt;/code&amp;gt; has not been executed any more since the upgrade to grub 2.12.&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
Due to [https://github.com/redis/redis/pull/13157 the relicensing of Redis] to [https://redis.io/legal/rsalv2-agreement/ RSALv2]+[https://redis.io/legal/server-side-public-license-sspl/ SSPLv1], a non-free license model, the [https://spdx.org/licenses/BSD-3-Clause.html BSD-3-Clause] licensed fork [https://valkey.io/ Valkey] has replaced Redis in the main package repository.&lt;br /&gt;
&lt;br /&gt;
A {{#ifexpr: {{AlpineLatest}} &amp;gt;= 3.20 |{{pkg|valkey-compat|branch=v3.20|arch=}}|{{pkg|valkey-compat|branch=edge|arch=}}}} package is provided with symlinks and group for easy Redis replacement.&lt;br /&gt;
&lt;br /&gt;
The {{#ifexpr: {{AlpineLatest}} &amp;gt;= 3.20 |{{pkg|redis|branch=v3.20|arch=}}|{{pkg|redis|branch=edge|arch=}}}} aport has been moved to the community repository, with a shorter support cycle, and will not be upgraded past 7.2.x due to the license change.&lt;br /&gt;
&lt;br /&gt;
Another replacement alternative, the [https://spdx.org/licenses/LGPL-3.0-only.html LGPL-3.0-only] licensed fork [https://redict.io/ Redict] is also available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== yq ===&lt;br /&gt;
yq was renamed to yq-go. [https://gitlab.alpinelinux.org/alpine/aports/-/issues/16052 #16052]&lt;br /&gt;
&lt;br /&gt;
=== aws-cli ===&lt;br /&gt;
Due to incompatibility issues with Python 3.12, aws-cli has been temporarily disabled until the issue is resolved by upstream. See the corresponding problem upstream: [https://github.com/aws/aws-cli/issues/8342 #8342]&lt;br /&gt;
&lt;br /&gt;
=== GNOME 46 ===&lt;br /&gt;
&lt;br /&gt;
New upstream release of GNOME.&lt;br /&gt;
&lt;br /&gt;
Depending on how you installed GNOME, you may have to manually add &amp;lt;code&amp;gt;gcr-ssh-agent&amp;lt;/code&amp;gt; after upgrading to retain GNOME Keyring ssh integration.&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
&lt;br /&gt;
* Crystal 1.12&lt;br /&gt;
* LLVM 18&lt;br /&gt;
* nginx 1.26&lt;br /&gt;
* .NET 8&lt;br /&gt;
* Nim 2.0&lt;br /&gt;
* OpenJDK 22&lt;br /&gt;
* Python 3.12&lt;br /&gt;
* Racket 8.13&lt;br /&gt;
* Ruby 3.3&lt;br /&gt;
* Rust 1.78&lt;br /&gt;
* R 4.4&lt;br /&gt;
* Sway 1.9&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.20.0&amp;diff=26680</id>
		<title>Release Notes for Alpine 3.20.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.20.0&amp;diff=26680"/>
		<updated>2024-05-05T10:13:33Z</updated>

		<summary type="html">&lt;p&gt;Omni: Add information about Redis, Valkey and Redict&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== grub 2.12 ===&lt;br /&gt;
&lt;br /&gt;
When upgrading existing installations using grub on UEFI systems, make sure to update the installed bootloader before rebooting, otherwise your machine might not boot.&lt;br /&gt;
&lt;br /&gt;
The problem is that grub added new configuration that executes &amp;lt;code&amp;gt;fwsetup --is-supported&amp;lt;/code&amp;gt;. The problem is that grub 2.06 does not supported the &amp;lt;code&amp;gt;--is-supported&amp;lt;/code&amp;gt; argument yet, causing grub to unconditionally try to reboot into firmware.&lt;br /&gt;
&lt;br /&gt;
Here is an example assuming the default setup. Don&#039;t blindly copy this examples but verify what&#039;s applicable to your system.&lt;br /&gt;
 &lt;br /&gt;
==== EFI ====&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&lt;br /&gt;
 # grub-install --target{{=}}&amp;lt;var&amp;gt;$target&amp;lt;/var&amp;gt; --efi-directory{{=}}&amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt; \&lt;br /&gt;
    --bootloader-id{{=}}alpine --boot-directory{{=}}/boot --no-nvram&lt;br /&gt;
 # install -D &amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt;/EFI/alpine/grub&amp;lt;var&amp;gt;$fwa&amp;lt;/var&amp;gt;.efi &amp;lt;var&amp;gt;$efi_directory&amp;lt;/var&amp;gt;/EFI/boot/boot&amp;lt;var&amp;gt;$fwa&amp;lt;/var&amp;gt;.efi&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
; target : The relevant [https://gitlab.alpinelinux.org/alpine/alpine-conf/-/blob/master/setup-disk.in#L320-324 target] for your system&lt;br /&gt;
; efi_directory : Either {{Path|/boot/efi}} or {{Path|/boot}}. Run &amp;lt;code&amp;gt;awk &#039;$2 ~ /boot/ &amp;amp;&amp;amp; $3 ~ /fat|msdos/ { print $2 }&#039; /proc/mounts&amp;lt;/code&amp;gt; to confirm.&lt;br /&gt;
; fwa : The respective [https://gitlab.alpinelinux.org/alpine/alpine-conf/-/blob/master/setup-disk.in#L320-324 firmware architecture] for your system&lt;br /&gt;
&lt;br /&gt;
==== Short-term work-around ====&lt;br /&gt;
&lt;br /&gt;
A short-term work-around to get the system bootable again is to restore the backup configuration:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /boot/grub/grub.cfg.back /boot/grub.cfg }}&lt;br /&gt;
&lt;br /&gt;
This should allow you to boot the system again to fix it permanently. This will be reverted again when either grub or the kernel is updated again.&lt;br /&gt;
&lt;br /&gt;
This will only work if &amp;lt;code&amp;gt;update-grub&amp;lt;/code&amp;gt; has not been executed any more since the upgrade to grub 2.12.&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== Redis ===&lt;br /&gt;
Due to [https://github.com/redis/redis/pull/13157 the relicinsing of Redis] to [https://redis.io/legal/rsalv2-agreement/ RSALv2]+[https://redis.io/legal/server-side-public-license-sspl/ SSPLv1], a non-free license model, the [https://spdx.org/licenses/BSD-3-Clause.html BSD-3-Clause] licensed fork [https://valkey.io/ Valkey] has replaced Redis in the main package repository.&lt;br /&gt;
&lt;br /&gt;
A [https://pkgs.alpinelinux.org/packages?name=valkey-compat valkey-compat] package is provided with symlinks and group for easy Redis replcament.&lt;br /&gt;
&lt;br /&gt;
The [https://pkgs.alpinelinux.org/packages?name=redis redis aport] has been moved to the community repository, with a shorter support cycle, and will not be upgraded past 7.2.x due to the license change.&lt;br /&gt;
&lt;br /&gt;
Another replacement alternative, the [https://spdx.org/licenses/LGPL-3.0-only.html LGPL-3.0-only] licensed fork [https://redict.io/ Redict] is also avalable in the community repository.&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Creating_an_Alpine_package&amp;diff=26385</id>
		<title>Creating an Alpine package</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Creating_an_Alpine_package&amp;diff=26385"/>
		<updated>2024-02-12T10:27:45Z</updated>

		<summary type="html">&lt;p&gt;Omni: Undo revision 26384 by Omni (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
This is a brief list of the steps to add a new package. Details are below, but a NB can miss a few steps.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create an account on github.alpine&lt;br /&gt;
&amp;lt;li&amp;gt;Setup the build environment for aports.&lt;br /&gt;
&amp;lt;li&amp;gt;Fork the aports repository. &lt;br /&gt;
&amp;lt;li&amp;gt;Clone your new fork.&lt;br /&gt;
&amp;lt;li&amp;gt;Set git pull.rebase=true, set your username and email.&lt;br /&gt;
&amp;lt;li&amp;gt;Create and switch to a new branch (don&#039;t use master).&lt;br /&gt;
&amp;lt;li&amp;gt;Add a new directory under testing that is your new package name.&lt;br /&gt;
&amp;lt;li&amp;gt;Add your APKBUILD file.&lt;br /&gt;
&amp;lt;li&amp;gt;Run abuild checksum&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure you run the apkbuild-lint and aport -r and there are no warnings.&lt;br /&gt;
&amp;lt;li&amp;gt;Commit your APKBUILD with the commit message: &#039;testing/packagename: new aport&#039;&lt;br /&gt;
&amp;lt;li&amp;gt;Push your changes to your fork on github.alpine.&lt;br /&gt;
&amp;lt;li&amp;gt;Create a merge request.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please see the rest of this wiki for details on the steps above.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
To build a package for Alpine Linux you need an Alpine Linux installation. Check the [[Installation]] page to see all available installation options.&lt;br /&gt;
&lt;br /&gt;
== Setup your system and account  ==&lt;br /&gt;
{{:Setup_your_system_and_account_for_building_packages}}&lt;br /&gt;
&lt;br /&gt;
== Getting some help ==&lt;br /&gt;
&lt;br /&gt;
It might be wise to start by checking what the [[Abuild and Helpers|abuild]] program can/cannot do.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild -h}}&lt;br /&gt;
&lt;br /&gt;
For real help, you can also go on #alpine-devel on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
A reference for APKBUILD files is available as [[APKBUILD Reference]] wiki page or a man page in the &#039;abuild-doc&#039; package:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|man APKBUILD}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating an APKBUILD file  ==&lt;br /&gt;
&lt;br /&gt;
=== Use a template APKBUILD ===&lt;br /&gt;
&lt;br /&gt;
To create the actual APKBUILD file {{Pkg|newapkbuild}} can serve you a template to start with. It will create a directory with the given package name, place an example/template APKBUILD file to the given directory, and fill some variables if those are provided. Please check the [[Package_policies| package policies]] page about naming details.&lt;br /&gt;
&lt;br /&gt;
If you doubt to which repository your package belongs to you can safely use &#039;&#039;&#039;testing&#039;&#039;&#039;. Building package in your aports/testing directory is not mandatory but this way the package is already at the right place.&lt;br /&gt;
&lt;br /&gt;
{{:Abuild and Helpers}}&lt;br /&gt;
&lt;br /&gt;
{{Note|On older Alpine systems, abuild -c -n &#039;&#039;packagename&#039;&#039; was the way to create APKBUILD files. The &#039;packagename&#039; was a parameter to the -n option so order of -c and -n matters. }}&lt;br /&gt;
&lt;br /&gt;
[[Abuild_and_Helpers#apkbuild-cpan|apkbuild-cpan]] simplifies the creation of perl packages from CPAN and [[Abuild_and_Helpers#apkbuild-pypi|apkbuild-pypi]] ease the generation of APKBUILD files for python packages from PyPi.  &lt;br /&gt;
&lt;br /&gt;
If you are creating a daemon package which needs initd scripts you can add the -c making it: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|newapkbuild -c &#039;&#039;packagename&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
This will copy the sample initd and confd files to the build directory.&amp;lt;BR&amp;gt;&lt;br /&gt;
A third file sample.install file will be copied as well (we will discuss this later on).&lt;br /&gt;
&lt;br /&gt;
=== Modify your APKBUILD ===&lt;br /&gt;
Edit APKBUILD and fill in the needed info (especially pkgname, pkgver, pkgdesc, url, license, depends and source). &lt;br /&gt;
&lt;br /&gt;
If you are going to use any of the variables for directories like $pkgdir, always make sure they are double quoted like: &lt;br /&gt;
&lt;br /&gt;
 &amp;quot;$pkgdir&amp;quot;/somedir&lt;br /&gt;
&lt;br /&gt;
This will prevent issues with spaces/special characters in the future. &lt;br /&gt;
&lt;br /&gt;
{{Note|If you like syntax highlighting we suggest you to install vim. We have setup vim to recognize the APKBUILD file as a bash scripts so its easier to read them.}}&lt;br /&gt;
&lt;br /&gt;
=== APKBUILD variables/functions  ===&lt;br /&gt;
&lt;br /&gt;
==== source  ====&lt;br /&gt;
&lt;br /&gt;
The source variable is not only used to list the remote source files to fetch, it is also used to list the local files that abuild will need in order to build the apk. Examples of such local files include: init.d files, conf.d files, install files (see [[Creating an Alpine package#install|install variable]]), patches, and all other necessary files.&lt;br /&gt;
&lt;br /&gt;
Here are few things to note:&lt;br /&gt;
&lt;br /&gt;
* When you are finished adding local and/or remote files to &#039;&#039;source&#039;&#039;, you can execute the following command to add their checksums to the APKBUILD file:&lt;br /&gt;
: {{cmd|abuild checksum}}&lt;br /&gt;
: {{Note|When later updating the content of &#039;&#039;source&#039;&#039;, or updating a file that is listed in &#039;&#039;source&#039;&#039;, you must also update their checksums again with the same command.}}&lt;br /&gt;
&lt;br /&gt;
* When the remote file is hosted at SourceForge, it&#039;s best to specify the special mirrors link used by SourceForge:&lt;br /&gt;
: &amp;lt;pre&amp;gt;http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
: (or similar depending on the package).&lt;br /&gt;
&lt;br /&gt;
* When the remote filename is not specified in the URI (ie, does not end in &#039;/software-1.0.tar.gz&#039;), such as:&lt;br /&gt;
: &amp;lt;pre&amp;gt;http://oss.example.org/?get=software&amp;amp;ver=1.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
: You must prepend &#039;${pkgname}-${pkgver}.tar.gz::&#039; to the protocol, like so:&lt;br /&gt;
: &amp;lt;pre&amp;gt;source=&amp;quot;${pkgname}-${pkgver}.tar.gz::http://oss.example.org/?get=software&amp;amp;ver=1.0&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
: This causes the file to be saved as &#039;&#039;software-1.0.tar.gz&#039;&#039; where abuild can use it, instead of &#039;&#039;?get=software&amp;amp;ver=1.0&#039;&#039;, where abuild cannot use it.&lt;br /&gt;
&lt;br /&gt;
* Some projects didn&#039;t provide a release tarball. Beware that some git services (gitweg, cgit, …?) doesn’t provide &#039;&#039;stable&#039;&#039; tarballs, so when you point source to an tarball like &amp;lt;tt&amp;gt;https://repo.or.cz/w/gitstats.git/snapshot/ad7efbb9399e60cee6cb217c6b47e604174a8093.tar.gz&amp;lt;/tt&amp;gt;, then you will run into issues because the checksum changes when downloading on the build system. This is not a problem on GitHub, GitLab and other decent services provides, they provide &#039;&#039;stable&#039;&#039; tarballs.&lt;br /&gt;
&lt;br /&gt;
* abuild currently supports the following protocols for remote file retrieval:&lt;br /&gt;
** http&lt;br /&gt;
** https&lt;br /&gt;
** ftp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--: {{Note|If the you want to download from https, you need GNU wget installed on your system.}}--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* abuild currently supports the following archive types/archive file extensions:&lt;br /&gt;
** .tar&lt;br /&gt;
** .tar.gz / .tgz&lt;br /&gt;
** .tar.bz2&lt;br /&gt;
** .tar.lz (only in Alpine &amp;gt;=3.7)&lt;br /&gt;
** .tar.lzma&lt;br /&gt;
** .tar.xz&lt;br /&gt;
** .zip&lt;br /&gt;
&lt;br /&gt;
==== depends &amp;amp;amp; makedepends  ====&lt;br /&gt;
&lt;br /&gt;
Depends are the actual running dependencies that a package would need when it is running. Makedepends are only needed when you are building a package. If you set a package in depends, you do not need to add it to makedepends as well. The best way to find out what the depends and makedepends of a package are is to [https://en.wikipedia.org/wiki/Rtfm RTFM]. &lt;br /&gt;
&lt;br /&gt;
No kidding, lots of important information can be found in the package INSTALL and README files (or the likes). Another good way is the run &amp;lt;code&amp;gt;./configure --help&amp;lt;/code&amp;gt; from the source directory to see which options are needed for configure to finish without errors. If you do not yet have a source directory you can create one with the command: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild unpack}}&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; will also show you how you can disable a specific option for this package. For instance, a good example is &amp;quot;--disable-nls&amp;quot; which will disable native language support and thus does not depend on gettext (libiconv, glib, ...). &lt;br /&gt;
&lt;br /&gt;
Alpine likes to keep things small, so we try to disable as much as possible without losing too many features. The exact disable/enable options are decided by the package builder but please try to follow Alpine&#039;s design concept as much as possible.&lt;br /&gt;
&lt;br /&gt;
An easy way of quickly finding out the build info for a package is to check Arch Linux (Alpine package management and build scripts are similar) or Gentoo Linux ebuilds (previous versions of Alpine were based on Gentoo).&lt;br /&gt;
&lt;br /&gt;
* [https://gitweb.gentoo.org/repo/gentoo.git/tree/ Gentoo Ebuilds] &lt;br /&gt;
* [https://archlinux.org/packages/?q=search Arch Linux packages] [https://aur.archlinux.org/ Arch Linux User Repository]&lt;br /&gt;
&lt;br /&gt;
==== license  ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;license&#039;&#039;&#039; tag must reflect the license of the source code. Please check the source tarball for COPYING, LICENSE, or other files with names that indicates that it contains licensing information. Beside the license file most developer include headers in the source code files with licensing details.&lt;br /&gt;
&lt;br /&gt;
If the license is on the [https://spdx.org/licenses/ SPDX License List] or [https://spdx.org/licenses/exceptions-index.html SPDX License Exceptions], use the identifier specified by SPDX.&lt;br /&gt;
&lt;br /&gt;
Note that some licenses have additional requirements that should be adhered to. The &amp;lt;code&amp;gt;MIT&amp;lt;/code&amp;gt; license for example has the requirement:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that we need to include the license as shipped with the project.&lt;br /&gt;
&lt;br /&gt;
If a package has a special/custom license or is not listed as [https://opensource.org/licenses/alphabetical OSI approved], use the identifier &amp;quot;custom&amp;quot;. In that case we need to provide the license file with the package as well.&lt;br /&gt;
&lt;br /&gt;
Because we want to save space and don&#039;t like to have licenses all over our system we have decided to include the license in the doc subpackage. Please follow the following guidelines to add a proper license. Locate the license file inside the source package. Add the doc subpackage to the $subpackages variable as follows: &lt;br /&gt;
&lt;br /&gt;
 subpackages=&amp;quot;$pkgname-doc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add a similar line to the following to your package() function, depending on the license description file: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|install -Dm644 COPYING &amp;quot;$pkgdir&amp;quot;/usr/share/licenses/$pkgname/COPYING}}&lt;br /&gt;
&lt;br /&gt;
If you follow these steps then abuild will automatically add the license to the package-doc apk for you.&lt;br /&gt;
&lt;br /&gt;
{{Note|Some build tools, such as Python&#039;s &amp;lt;code&amp;gt;gpep517&amp;lt;/code&amp;gt;, automatically include the license during the build step. In such cases it is not necessary to package the license separately.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|It is not acceptable to package software with &amp;quot;unknown&amp;quot; license! If you can&#039;t find the license of the source code, please contact the author and ask them to specify the license. }}&lt;br /&gt;
&lt;br /&gt;
==== arch ====&lt;br /&gt;
&lt;br /&gt;
The package architecture(s) to build for.  This can be one of: &#039;&#039;x86, x86_64, all,&#039;&#039; or &#039;&#039;noarch&#039;&#039;, where &#039;&#039;all&#039;&#039; means all architectures, and &#039;&#039;noarch&#039;&#039; means it&#039;s architecture-independent (e.g., a pure-python package).&lt;br /&gt;
{{Tip|To determine if your APKBUILD can use &#039;&#039;noarch&#039;&#039;, build the package for your architecture and then run &amp;quot;scanelf -R pkg&amp;quot; from the directory that the APKBUILD resides in, in order to scan for ELF files in the &#039;&#039;./pkg&#039;&#039; directory.  If you do NOT get output from this, then &#039;&#039;noarch&#039;&#039; can be used.}}&lt;br /&gt;
&lt;br /&gt;
==== url  ====&lt;br /&gt;
&lt;br /&gt;
Website address for the program. This is useful later on when either finding documentation or other information about the package.&lt;br /&gt;
&lt;br /&gt;
==== pkgdesc  ====&lt;br /&gt;
&lt;br /&gt;
A brief, one line, description of what the package does. Useful for the package management system. It should start with a capital letter and does &#039;&#039;&#039;not&#039;&#039;&#039; end with a period.&lt;br /&gt;
&lt;br /&gt;
Here is an example from apk_info for the OpenSSH client package:&lt;br /&gt;
&lt;br /&gt;
 pkgdesc=&amp;quot;Port of OpenBSD&#039;s free SSH release - client&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== pkgver  ====&lt;br /&gt;
&lt;br /&gt;
Provide the release number of the package you are building.&lt;br /&gt;
&lt;br /&gt;
==== pkgrel  ====&lt;br /&gt;
&lt;br /&gt;
The $pkgrel versioning is made so that if you change something in your APKBUILD file without changing the actual $pkgver, you can increment pkgrel so apk tools will detect it as an update. For instance, if you forget to add a dependency, you can add it afterward and you can +1 pkgver so apk finds this update and adds the missing dependency. When there&#039;s an upstream version change, we reset the pkgrel to 0.&lt;br /&gt;
&lt;br /&gt;
==== pkgname  ====&lt;br /&gt;
&lt;br /&gt;
The base name of the package you are creating.  For Freeswitch 1.0.6, you would use &amp;quot;freeswitch&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== install  ====&lt;br /&gt;
&lt;br /&gt;
There are 6 different kinds of install scripts. Each script is called with the $pkgname.&#039;&#039;&amp;lt;action&amp;gt;&#039;&#039; where &#039;&#039;&amp;lt;action&amp;gt;&#039;&#039; is one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-install&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed before package is installed. Typical use is when package needs a group and a user to be created. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
addgroup -S clamav 2&amp;gt;/dev/null&lt;br /&gt;
adduser -S -D -H -s /bin/false -G clamav -g clamav clamav 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note the &#039;&#039;exit 0&#039;&#039; at the end. If the script exits with failure (if the user already exist), the package will not be installed and &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; will exit with failure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-install&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed after the package is installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-upgrade&lt;br /&gt;
&amp;lt;dd&amp;gt;Same as pre-install but is executed before upgrading/downgrading/reinstalling an already installed package. Note that exiting with failure will not cause apk to exit with failure, but will mark the package as broken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-upgrade&lt;br /&gt;
&amp;lt;dd&amp;gt;Same as post-install but is executed after upgrading/downgrading/reinstalling an already installed package. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-deinstall&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed before uninstalling a package. If script exits with failure apk will not uninstall the package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-deinstall&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed after a package have been uninstalled. For example, can be used to restore busybox links:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
busybox --install -s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the package has a pre-install and post-install script the APKBUILD should have the &#039;&#039;install&#039;&#039; variable defined:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
install=&amp;quot;$pkgname.pre-install $pkgname.post-install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== subpackages  ====&lt;br /&gt;
&lt;br /&gt;
$subpackages are made to split up the normal &amp;quot;make install&amp;quot; into separate packages. The most common subpackages we use are doc and dev. Because we like to keep our target system small we move documentation and development files (only needed when building packages) into separate packages. To use the specific program a user only need to install the base apk without package-doc or package-dev, but if he wants to read the manual he will need to install package-doc. &lt;br /&gt;
&lt;br /&gt;
The easiest way to find out if you need to use -dev and -doc is to first build the package without these options set and wait until the build finishes. When its finished you should have a pkg directory which is the fake root directory. Inside this directory you will see the structure as how it would be installed in / on the target system. &lt;br /&gt;
&lt;br /&gt;
To see if you need the -dev package you can run the following cmd: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|find pkg/usr/ -name &#039;*.[acho]&#039; -o -name &#039;*.la&#039;}}&lt;br /&gt;
&lt;br /&gt;
If this returns any files you need to include the -dev package. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; To see if you need the -doc package you can run the following cmd: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|find pkg/usr/share -name doc -o -name man -o -name info -o -name html -o -name sgml -o -name licenses}}&lt;br /&gt;
&lt;br /&gt;
If this returns any directories you need to include the -doc package. &lt;br /&gt;
&lt;br /&gt;
===== Custom subpackages  =====&lt;br /&gt;
&lt;br /&gt;
Some software additionally has non-essential files that do not qualify as either documentation or development content. These files should be placed in their own, specialized subpackage(s). Some packages include large test suites which are only needed in specific circumstances or binaries which have depends which we prefer not to install. To handle those we create our own package/function. In the APKBUILD below the build() function we create another function: &lt;br /&gt;
&lt;br /&gt;
 test() {&lt;br /&gt;
        mkdir -p &amp;quot;$subpkgdir&amp;quot;/usr&lt;br /&gt;
        mv &amp;quot;$pkgdir&amp;quot;/usr/package-test &amp;quot;$subpkgdir&amp;quot;/usr/&lt;br /&gt;
        # or amove usr/package-test&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
We also need to add the package info to $subpackages variable: &lt;br /&gt;
&lt;br /&gt;
 subpackages=&amp;quot;$pkgname-doc $pkgname-dev $pkgname-test&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After we finish building the package you should see another apk called packagename-test.apk which includes the files which we moved to the $subpkgdir dir. &lt;br /&gt;
&lt;br /&gt;
The above mentioned variables can also be used in our custom function. If we want for instance to build the test() function with perl support we would add: &lt;br /&gt;
&lt;br /&gt;
 depends=&amp;quot;perl&amp;quot;&lt;br /&gt;
 makedepends=&amp;quot;perl-dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If we would install the base package it would not install perl, but if we install the package-test package it would.&lt;br /&gt;
&lt;br /&gt;
==== Patches  ====&lt;br /&gt;
&lt;br /&gt;
Please make sure you always submit human readable patches. Ways to create them are: &lt;br /&gt;
&lt;br /&gt;
directory compare: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|diff -Nurp original_directory new_directory &amp;amp;gt; filename.patch}}&lt;br /&gt;
&lt;br /&gt;
file compare: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|diff -up original.file new.file &amp;amp;gt; filename.patch}}&lt;br /&gt;
&lt;br /&gt;
If a patch contains a completely new file but not *.rej or *.orig file, you need to add -N option to diff, but you may need to add exclusions with &amp;lt;code&amp;gt;--exclude PATTERN&amp;lt;/code&amp;gt; so that you do not inadvertently add files.  You may need to manually delete unwanted files inside the patch file.&lt;br /&gt;
&lt;br /&gt;
Because multiple patches can patch the same file, they can change the offsets required by subsequent patches. To make sure we always patch in a specific way, we should number the patches as follows: &lt;br /&gt;
&lt;br /&gt;
 10-patch1.patch 20-patch2.patch 30-patch3.patch&lt;br /&gt;
&lt;br /&gt;
This way we are always sure that patch 1 is applied first, and if we want to add additional patches between them we can use appropriate indexes (e.g. 11, 12, 21, 22).&lt;br /&gt;
&lt;br /&gt;
Add the names of the patch files to the &#039;&#039;source&#039;&#039; variable. If you haven&#039;t declared a custom &#039;&#039;prepare&#039;&#039; function, no further action is necessary. Otherwise, be sure to call &#039;&#039;default_prepare&#039;&#039; in your &#039;&#039;prepare&#039;&#039; function. For example:&lt;br /&gt;
&lt;br /&gt;
 prepare() {&lt;br /&gt;
 	default_prepare&lt;br /&gt;
 &lt;br /&gt;
 	# do your stuff&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: Some older packages contain a &#039;&#039;for&#039;&#039; loop in the &#039;&#039;prepare&#039;&#039; function to apply patches. This is not needed anymore, as patches are handled by &#039;&#039;default_prepare&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In Alpine &amp;gt;=3.4 you can define patch_args to supply the patch level.  This only works if all the patches have the same patch level.  If there are a lot of patches from different sources, there is a good chance that you may need to edit them, as discussed below.&lt;br /&gt;
&lt;br /&gt;
To automatically patch the package (available only in Alpine &amp;gt;=3.4) if it uses a patch level (-pX) other than the default (-p1), you need to carefully modify the patch.  First, you&#039;ll need a text editor that does not automatically convert  between Windows and Unix new lines (or, disable this feature) so that it preserves the old code.  The next thing you&#039;ll need to do is modify the paths on &amp;quot;+++&amp;quot; and &amp;quot;---&amp;quot; lines in the .patch file.  You can begin the path with a/ and b/ like shown below.  Next, you need to adjust the paths so that the relative base path is from inside $builddir.  Anything to the left of $builddir, including $builddir itself, needs to be removed from the path.  So, if $builddir is /home/USER/aports/community/chromium/src/chromium-65, you need to erase it on the &amp;quot;+++&amp;quot; and &amp;quot;---&amp;quot; lines.  Inside the chromium-65 folder you can see a src folder that has 3rdparty as a descendant.  If a patch originally has a deeper patch level, you may need to fill in the missing portion of the path.  For example, use the &amp;lt;code&amp;gt;find . -name &amp;quot;Assertions.cpp&amp;quot;&amp;lt;/code&amp;gt; command to find the full path to the file relative to the base.&lt;br /&gt;
&lt;br /&gt;
{{Cat|example.patch|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Author: John Doe &amp;lt;johndoe@mail.com&amp;gt;&lt;br /&gt;
URL: http://.....&lt;br /&gt;
Summary: Fixes musl compatibility&lt;br /&gt;
----&lt;br /&gt;
--- a/src/3rdparty/chromium/third_party/WebKit/Source/wtf/Assertions.cpp.orig&lt;br /&gt;
+++ b/src/3rdparty/chromium/third_party/WebKit/Source/wtf/Assertions.cpp&lt;br /&gt;
@@ -142,7 +142,7 @@&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 FrameToNameScope::FrameToNameScope(void* addr) : m_name(0), m_cxaDemangled(0) {&lt;br /&gt;
-#if OS(MACOSX) || (OS(LINUX) &amp;amp;&amp;amp; !defined(__UCLIBC__))&lt;br /&gt;
+#if OS(MACOSX) || (OS(LINUX) &amp;amp;&amp;amp; defined(__GLIBC__))&lt;br /&gt;
   Dl_info info;&lt;br /&gt;
   if (!dladdr(addr, &amp;amp;info) || !info.dli_sname)&lt;br /&gt;
return;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Portions of the patch may be outdated, removed completely as in the source code file completely removed, or moved or renamed files.  You need to delete that section of the patch or find where that section of code changed and re-diff it.&lt;br /&gt;
&lt;br /&gt;
It is good etiquette to give credit at the top and the location of where you originally found them with notes.&lt;br /&gt;
&lt;br /&gt;
Excluding patches with global variable resembling patch_opts is not available on Alpine.  To exclude patches you need to create your own custom prepare().&lt;br /&gt;
&lt;br /&gt;
If you have a monolithic patch where there are a bunch of patches in one big patch, you could use filterdiff which is available in the patchutils package.&lt;br /&gt;
&lt;br /&gt;
Just do something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
makedepends=&amp;quot;patchutils&amp;quot;&lt;br /&gt;
&lt;br /&gt;
prepare() {&lt;br /&gt;
  ...&lt;br /&gt;
  cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
  filterdiff -x &#039;*drivers/video/logo*&#039; &amp;quot;$srcdir&amp;quot;/original.patch &amp;gt; &amp;quot;$builddir&amp;quot;/modified.patch&lt;br /&gt;
  patch -p1 -i &amp;quot;$builddir&amp;quot;/modified.patch&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to put the wildcard pattern in single quotes for it to work.&lt;br /&gt;
&lt;br /&gt;
==== Configure options  ====&lt;br /&gt;
&lt;br /&gt;
Alpine has some default configure options we set by default. We use /usr for prefix to make sure everything is installed with /usr in front of it. If you notice that anything is installed in the wrong directory please run {{Cmd|./configure --help}} and see if you can set the correct location. &lt;br /&gt;
&lt;br /&gt;
We are not covering the depend switches here we have discussed this already in the depend section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Make options  ====&lt;br /&gt;
&lt;br /&gt;
If you notice weird problems when compiling or installing the package with make/make install you could try to disable [https://www.gnu.org/software/make/manual/make.html#Parallel parallel] building/installing. A normal make line would be: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make}}&lt;br /&gt;
&lt;br /&gt;
To disable parallel we use: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make -j1}}&lt;br /&gt;
&lt;br /&gt;
We can use the same for make install. &lt;br /&gt;
&lt;br /&gt;
Because we do not want to install the package in our build environment but we want to install it in a fake root directory we need to tell &#039;make install&#039; to use another destination directory instead of &#039;/&#039;. We do this by setting a variable when we execute make install as followed: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make DESTDIR{{=}}&amp;quot;$pkgdir&amp;quot; install}}&lt;br /&gt;
&lt;br /&gt;
Please note that some Makefiles do not support this variable and will always install software in &#039;/&#039;. To make sure you do not mess up your build system NEVER run your build system as root but always use a custom user and doas when needed. If by accident the Makefile does not support DESTDIR variable it will fail to install in our build system system directories.&lt;br /&gt;
&lt;br /&gt;
==== builddir ====&lt;br /&gt;
If you used &amp;lt;tt&amp;gt;newapkbuild&amp;lt;/tt&amp;gt; to create your APKBUILD file, you must specify the path to your unpacked sources. Inside the sections during the prepare/build/install process &#039;&#039;builddir&#039;&#039; is used. Most of the time a combination of &#039;&#039;$srcdir&#039;&#039; and &#039;&#039;$pkgname-$pkgver&#039;&#039; will work. When not, check the /src directory or the source tarball for the right string. Especially when you are working with automatically generated tarballs (like from github and gitorious), this needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
builddir=&amp;quot;$srcdir&amp;quot;/$pkgname-$pkgver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Additional files  ====&lt;br /&gt;
&lt;br /&gt;
If you want/need to install additional files not mentioned above you can use the following cmd (this is an example of a conf file): &lt;br /&gt;
&lt;br /&gt;
{{Cmd|install -Dm644 doc/$pkgname.conf &amp;quot;$pkgdir&amp;quot;/etc/$pkgname.conf}}&lt;br /&gt;
&lt;br /&gt;
== Build the package  ==&lt;br /&gt;
&lt;br /&gt;
If you did not already create the checksums as mentioned above you can do so now: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $pkgname&lt;br /&gt;
abuild checksum}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s about time we build our package. Because a build system should never have all the package installed to prevent linking to packages we don&#039;t want it to link we use a abuild recursively with the &#039;&#039;&#039;-r&#039;&#039;&#039; switch. It will install all dependencies from your repository and builds it, afterwards it will uninstall all those depending packages again.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild -r}}&lt;br /&gt;
&lt;br /&gt;
See also [[Abuild_and_Helpers|Abuild and Helpers]].&lt;br /&gt;
&lt;br /&gt;
== Testing the package locally ==&lt;br /&gt;
&lt;br /&gt;
When it completes, your package will be found in a subfolder of &amp;lt;code&amp;gt;~/packages&amp;lt;/code&amp;gt;.  You may want to test it on your machine but only if the package is not a critical system package like musl or apk-tools package.  To avoid borking your system (as in making it impossible to use &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; or to restore back the system and the compiler toolchain) for a critical system package, you should test on a chroot first before using it live.&lt;br /&gt;
&lt;br /&gt;
The best way to test a package locally is to modify your &amp;lt;code&amp;gt;/etc/apk/repositories&amp;lt;/code&amp;gt; so that it includes the indexes to your locally built packages - the directories that contain &amp;lt;code&amp;gt;ARCH/APKINDEX.tar.gz&amp;lt;/code&amp;gt;. For example the &amp;lt;code&amp;gt;/etc/apk/repositories&amp;lt;/code&amp;gt; below includes locally built packages in testing, community and main. To use this example change &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; to your login name.&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/apk/repositories|/home/USER/packages/testing/&lt;br /&gt;
/home/USER/packages/main/&lt;br /&gt;
/home/USER/packages/community/&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/main&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/community&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/testing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you prefer to test a package without changing any other configuration you can use the &amp;lt;code&amp;gt;-X, --repository&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|doas apk add --repository /home/USER/packages/testing $pkgname}}&lt;br /&gt;
&lt;br /&gt;
== Code review ==&lt;br /&gt;
&lt;br /&gt;
To successfully have your package pass through code reviewers (as of Feb 18, 2018 are nmeum and jirutka on GitHub) and possible increased acceptance, the following conventions need to be followed:&lt;br /&gt;
&lt;br /&gt;
# Custom global variables should be prefixed with underscore (_).&lt;br /&gt;
# Compact code as in merged commands, removed unused variables, removal of functions that do the same thing that are automatically handled by abuild.&lt;br /&gt;
# Versioning is done properly.  For details see [[APKBUILD_Reference#pkgver]].&lt;br /&gt;
# Licensing is done properly. Remove unnecessary copying of licensing that is already OSI approved.&lt;br /&gt;
# Naming conventions rules for unofficial variables as in _gitrev is preferred over commit.&lt;br /&gt;
# Indent with tabs not spaces.&lt;br /&gt;
# Removal of explicit return 1.  (They are still found the old APKBUILD files if you are learning but are now strongly discouraged.)&lt;br /&gt;
# Disabling check() requires either (1) a comment (#) stating next to options=&amp;quot;!check&amp;quot; that there is no test suite/unit tests or (2) functioning working check() function.&lt;br /&gt;
# Explicit call to subpackages=&amp;quot;$pkgname-doc&amp;quot; must be used instead of explicit gzip man page compression.&lt;br /&gt;
# Ideally, lines should be no more than 80 columns wide&lt;br /&gt;
&lt;br /&gt;
Additionally, make sure to run the linter on your package:&lt;br /&gt;
{{Cmd|doas apk add atools&lt;br /&gt;
apkbuild-lint APKBUILD}}&lt;br /&gt;
&lt;br /&gt;
For more information see [[Development using git:Quality assurance]] and [[Package_policies]].&lt;br /&gt;
Also check out [https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/COMMITSTYLE.md?ref_type=heads aports/COMMITSTYLE.md] and [https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/CODINGSTYLE.md?ref_type=heads aports/CODINGSTYLE.md]&lt;br /&gt;
&lt;br /&gt;
== Commit your work  ==&lt;br /&gt;
&lt;br /&gt;
After you successfully build your package and properly followed the conventions and requirements in the code review section, you can submit your APKBUILD to Alpine&#039;s git repository. &lt;br /&gt;
&lt;br /&gt;
Update your git repo, before adding new files: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $aportsdir&lt;br /&gt;
git pull}}&lt;br /&gt;
&lt;br /&gt;
This should pull all the changes made by others into your local git repo.&lt;br /&gt;
&lt;br /&gt;
When you think you are ready you can add your files to git: &lt;br /&gt;
&lt;br /&gt;
NOTE: when using our Gitlab instance, you can create MR&#039;s for each package. Please squash all commits related to the same package into a single one per MR.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $aportsdir&lt;br /&gt;
git add testing/$pkgdir (include any other files needed for the build; $pkgname.install...)&lt;br /&gt;
git commit}}&lt;br /&gt;
&lt;br /&gt;
Use the following commit message template for new aports (without the comments):&lt;br /&gt;
&lt;br /&gt;
{{Cat|template|testing/$pkgname: new aport   # this will be the subject line&lt;br /&gt;
                              # a blank line&lt;br /&gt;
$url                          # project homepage&lt;br /&gt;
$pkgdesc                      # one line description}}&lt;br /&gt;
&lt;br /&gt;
Or you could add the following and &amp;lt;code&amp;gt;chmod +x ports/.git/hooks/prepare-commit-msg&amp;lt;/code&amp;gt; to automatically generate commit message which the default aports/.githooks/ does not:&lt;br /&gt;
&lt;br /&gt;
{{Cat|aports/.git/hooks/prepare-commit-msg|&amp;lt;nowiki&amp;gt;#!/bin/sh&lt;br /&gt;
case &amp;quot;$2,$3&amp;quot; in&lt;br /&gt;
  ,|template,)&lt;br /&gt;
    if git diff-index --diff-filter=A --name-only --cached HEAD \&lt;br /&gt;
        | grep -q &#039;/APKBUILD$&#039;; then&lt;br /&gt;
      meta() { git diff --staged | grep &amp;quot;^+$1&amp;quot; | sed &#039;s/.*=&amp;quot;\?//;s/&amp;quot;$//&#039;;}&lt;br /&gt;
      printf &#039;testing/%s: new aport\n\n%s\n%s\n&#039; &amp;quot;$(meta pkgname)&amp;quot; \&lt;br /&gt;
        &amp;quot;$(meta url)&amp;quot; &amp;quot;$(meta pkgdesc)&amp;quot; &amp;quot;$(cat $1)&amp;quot; &amp;gt; &amp;quot;$1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      printf &#039;%s\n\n%s&#039; `git diff-index --name-only --cached HEAD \&lt;br /&gt;
        | sed -n &#039;s/\/APKBUILD$//p;q&#039;` &amp;quot;$(cat $1)&amp;quot; &amp;gt; &amp;quot;$1&amp;quot;&lt;br /&gt;
    fi;;&lt;br /&gt;
esac&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now your changes are only available locally in your repository.&lt;br /&gt;
&lt;br /&gt;
Because you do not have push rights to the Alpine aports repository you need to create a merge request to [https://gitlab.alpinelinux.org/alpine/aports Alpine&#039;s GitLab instance].&lt;br /&gt;
&lt;br /&gt;
Alternatively you can also create a diff (patch) of the changes you made and send this patch to the &lt;br /&gt;
[https://lists.alpinelinux.org/~alpine/aports  alpine-aports mailinglist].&lt;br /&gt;
&lt;br /&gt;
To create a diff patch:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git format-patch HEAD^}}&lt;br /&gt;
&lt;br /&gt;
or if you have sprunge, you can create a link to your patch for convenience&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git format-patch HEAD^ --stdout &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; sprunge}}&lt;br /&gt;
&lt;br /&gt;
== Automated flagging of outdated ports ==&lt;br /&gt;
Consider adding your port to [https://release-monitoring.org/ Anitya], so it will be flagged as outdated&lt;br /&gt;
as soon as a new stable version is released by upstream.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[APKBUILD Reference]]&lt;br /&gt;
* [[APKBUILD examples]]&lt;br /&gt;
* [[Development using git]]&lt;br /&gt;
* [[Development using git:Quality assurance]]&lt;br /&gt;
&lt;br /&gt;
[[category: Package Manager]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Creating_an_Alpine_package&amp;diff=26384</id>
		<title>Creating an Alpine package</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Creating_an_Alpine_package&amp;diff=26384"/>
		<updated>2024-02-12T10:22:58Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* license */ add note on gpep517 packaged python projects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
This is a brief list of the steps to add a new package. Details are below, but a NB can miss a few steps.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create an account on github.alpine&lt;br /&gt;
&amp;lt;li&amp;gt;Setup the build environment for aports.&lt;br /&gt;
&amp;lt;li&amp;gt;Fork the aports repository. &lt;br /&gt;
&amp;lt;li&amp;gt;Clone your new fork.&lt;br /&gt;
&amp;lt;li&amp;gt;Set git pull.rebase=true, set your username and email.&lt;br /&gt;
&amp;lt;li&amp;gt;Create and switch to a new branch (don&#039;t use master).&lt;br /&gt;
&amp;lt;li&amp;gt;Add a new directory under testing that is your new package name.&lt;br /&gt;
&amp;lt;li&amp;gt;Add your APKBUILD file.&lt;br /&gt;
&amp;lt;li&amp;gt;Run abuild checksum&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure you run the apkbuild-lint and aport -r and there are no warnings.&lt;br /&gt;
&amp;lt;li&amp;gt;Commit your APKBUILD with the commit message: &#039;testing/packagename: new aport&#039;&lt;br /&gt;
&amp;lt;li&amp;gt;Push your changes to your fork on github.alpine.&lt;br /&gt;
&amp;lt;li&amp;gt;Create a merge request.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please see the rest of this wiki for details on the steps above.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
To build a package for Alpine Linux you need an Alpine Linux installation. Check the [[Installation]] page to see all available installation options.&lt;br /&gt;
&lt;br /&gt;
== Setup your system and account  ==&lt;br /&gt;
{{:Setup_your_system_and_account_for_building_packages}}&lt;br /&gt;
&lt;br /&gt;
== Getting some help ==&lt;br /&gt;
&lt;br /&gt;
It might be wise to start by checking what the [[Abuild and Helpers|abuild]] program can/cannot do.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild -h}}&lt;br /&gt;
&lt;br /&gt;
For real help, you can also go on #alpine-devel on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
A reference for APKBUILD files is available as [[APKBUILD Reference]] wiki page or a man page in the &#039;abuild-doc&#039; package:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|man APKBUILD}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating an APKBUILD file  ==&lt;br /&gt;
&lt;br /&gt;
=== Use a template APKBUILD ===&lt;br /&gt;
&lt;br /&gt;
To create the actual APKBUILD file {{Pkg|newapkbuild}} can serve you a template to start with. It will create a directory with the given package name, place an example/template APKBUILD file to the given directory, and fill some variables if those are provided. Please check the [[Package_policies| package policies]] page about naming details.&lt;br /&gt;
&lt;br /&gt;
If you doubt to which repository your package belongs to you can safely use &#039;&#039;&#039;testing&#039;&#039;&#039;. Building package in your aports/testing directory is not mandatory but this way the package is already at the right place.&lt;br /&gt;
&lt;br /&gt;
{{:Abuild and Helpers}}&lt;br /&gt;
&lt;br /&gt;
{{Note|On older Alpine systems, abuild -c -n &#039;&#039;packagename&#039;&#039; was the way to create APKBUILD files. The &#039;packagename&#039; was a parameter to the -n option so order of -c and -n matters. }}&lt;br /&gt;
&lt;br /&gt;
[[Abuild_and_Helpers#apkbuild-cpan|apkbuild-cpan]] simplifies the creation of perl packages from CPAN and [[Abuild_and_Helpers#apkbuild-pypi|apkbuild-pypi]] ease the generation of APKBUILD files for python packages from PyPi.  &lt;br /&gt;
&lt;br /&gt;
If you are creating a daemon package which needs initd scripts you can add the -c making it: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|newapkbuild -c &#039;&#039;packagename&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
This will copy the sample initd and confd files to the build directory.&amp;lt;BR&amp;gt;&lt;br /&gt;
A third file sample.install file will be copied as well (we will discuss this later on).&lt;br /&gt;
&lt;br /&gt;
=== Modify your APKBUILD ===&lt;br /&gt;
Edit APKBUILD and fill in the needed info (especially pkgname, pkgver, pkgdesc, url, license, depends and source). &lt;br /&gt;
&lt;br /&gt;
If you are going to use any of the variables for directories like $pkgdir, always make sure they are double quoted like: &lt;br /&gt;
&lt;br /&gt;
 &amp;quot;$pkgdir&amp;quot;/somedir&lt;br /&gt;
&lt;br /&gt;
This will prevent issues with spaces/special characters in the future. &lt;br /&gt;
&lt;br /&gt;
{{Note|If you like syntax highlighting we suggest you to install vim. We have setup vim to recognize the APKBUILD file as a bash scripts so its easier to read them.}}&lt;br /&gt;
&lt;br /&gt;
=== APKBUILD variables/functions  ===&lt;br /&gt;
&lt;br /&gt;
==== source  ====&lt;br /&gt;
&lt;br /&gt;
The source variable is not only used to list the remote source files to fetch, it is also used to list the local files that abuild will need in order to build the apk. Examples of such local files include: init.d files, conf.d files, install files (see [[Creating an Alpine package#install|install variable]]), patches, and all other necessary files.&lt;br /&gt;
&lt;br /&gt;
Here are few things to note:&lt;br /&gt;
&lt;br /&gt;
* When you are finished adding local and/or remote files to &#039;&#039;source&#039;&#039;, you can execute the following command to add their checksums to the APKBUILD file:&lt;br /&gt;
: {{cmd|abuild checksum}}&lt;br /&gt;
: {{Note|When later updating the content of &#039;&#039;source&#039;&#039;, or updating a file that is listed in &#039;&#039;source&#039;&#039;, you must also update their checksums again with the same command.}}&lt;br /&gt;
&lt;br /&gt;
* When the remote file is hosted at SourceForge, it&#039;s best to specify the special mirrors link used by SourceForge:&lt;br /&gt;
: &amp;lt;pre&amp;gt;http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
: (or similar depending on the package).&lt;br /&gt;
&lt;br /&gt;
* When the remote filename is not specified in the URI (ie, does not end in &#039;/software-1.0.tar.gz&#039;), such as:&lt;br /&gt;
: &amp;lt;pre&amp;gt;http://oss.example.org/?get=software&amp;amp;ver=1.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
: You must prepend &#039;${pkgname}-${pkgver}.tar.gz::&#039; to the protocol, like so:&lt;br /&gt;
: &amp;lt;pre&amp;gt;source=&amp;quot;${pkgname}-${pkgver}.tar.gz::http://oss.example.org/?get=software&amp;amp;ver=1.0&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
: This causes the file to be saved as &#039;&#039;software-1.0.tar.gz&#039;&#039; where abuild can use it, instead of &#039;&#039;?get=software&amp;amp;ver=1.0&#039;&#039;, where abuild cannot use it.&lt;br /&gt;
&lt;br /&gt;
* Some projects didn&#039;t provide a release tarball. Beware that some git services (gitweg, cgit, …?) doesn’t provide &#039;&#039;stable&#039;&#039; tarballs, so when you point source to an tarball like &amp;lt;tt&amp;gt;https://repo.or.cz/w/gitstats.git/snapshot/ad7efbb9399e60cee6cb217c6b47e604174a8093.tar.gz&amp;lt;/tt&amp;gt;, then you will run into issues because the checksum changes when downloading on the build system. This is not a problem on GitHub, GitLab and other decent services provides, they provide &#039;&#039;stable&#039;&#039; tarballs.&lt;br /&gt;
&lt;br /&gt;
* abuild currently supports the following protocols for remote file retrieval:&lt;br /&gt;
** http&lt;br /&gt;
** https&lt;br /&gt;
** ftp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--: {{Note|If the you want to download from https, you need GNU wget installed on your system.}}--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* abuild currently supports the following archive types/archive file extensions:&lt;br /&gt;
** .tar&lt;br /&gt;
** .tar.gz / .tgz&lt;br /&gt;
** .tar.bz2&lt;br /&gt;
** .tar.lz (only in Alpine &amp;gt;=3.7)&lt;br /&gt;
** .tar.lzma&lt;br /&gt;
** .tar.xz&lt;br /&gt;
** .zip&lt;br /&gt;
&lt;br /&gt;
==== depends &amp;amp;amp; makedepends  ====&lt;br /&gt;
&lt;br /&gt;
Depends are the actual running dependencies that a package would need when it is running. Makedepends are only needed when you are building a package. If you set a package in depends, you do not need to add it to makedepends as well. The best way to find out what the depends and makedepends of a package are is to [https://en.wikipedia.org/wiki/Rtfm RTFM]. &lt;br /&gt;
&lt;br /&gt;
No kidding, lots of important information can be found in the package INSTALL and README files (or the likes). Another good way is the run &amp;lt;code&amp;gt;./configure --help&amp;lt;/code&amp;gt; from the source directory to see which options are needed for configure to finish without errors. If you do not yet have a source directory you can create one with the command: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild unpack}}&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; will also show you how you can disable a specific option for this package. For instance, a good example is &amp;quot;--disable-nls&amp;quot; which will disable native language support and thus does not depend on gettext (libiconv, glib, ...). &lt;br /&gt;
&lt;br /&gt;
Alpine likes to keep things small, so we try to disable as much as possible without losing too many features. The exact disable/enable options are decided by the package builder but please try to follow Alpine&#039;s design concept as much as possible.&lt;br /&gt;
&lt;br /&gt;
An easy way of quickly finding out the build info for a package is to check Arch Linux (Alpine package management and build scripts are similar) or Gentoo Linux ebuilds (previous versions of Alpine were based on Gentoo).&lt;br /&gt;
&lt;br /&gt;
* [https://gitweb.gentoo.org/repo/gentoo.git/tree/ Gentoo Ebuilds] &lt;br /&gt;
* [https://archlinux.org/packages/?q=search Arch Linux packages] [https://aur.archlinux.org/ Arch Linux User Repository]&lt;br /&gt;
&lt;br /&gt;
==== license  ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;license&#039;&#039;&#039; tag must reflect the license of the source code. Please check the source tarball for COPYING, LICENSE, or other files with names that indicates that it contains licensing information. Beside the license file most developer include headers in the source code files with licensing details.&lt;br /&gt;
&lt;br /&gt;
If the license is on the [https://spdx.org/licenses/ SPDX License List] or [https://spdx.org/licenses/exceptions-index.html SPDX License Exceptions], use the identifier specified by SPDX.&lt;br /&gt;
&lt;br /&gt;
Note that some licenses have additional requirements that should be adhered to. The &amp;lt;code&amp;gt;MIT&amp;lt;/code&amp;gt; license for example has the requirement:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that we need to include the license as shipped with the project.&lt;br /&gt;
&lt;br /&gt;
{{Note|For python projects packaged with &#039;&#039;gpep517&#039;&#039;, license files are per design already put under &amp;lt;code&amp;gt;/usr/lib/python3.11/site-packages/$pkgname-$pkgver.dist-info/&amp;lt;/code&amp;gt; for you.}}&lt;br /&gt;
&lt;br /&gt;
If a package has a special/custom license or is not listed as [https://opensource.org/licenses/alphabetical OSI approved], use the identifier &amp;quot;custom&amp;quot;. In that case we need to provide the license file with the package as well.&lt;br /&gt;
&lt;br /&gt;
Because we want to save space and don&#039;t like to have licenses all over our system we have decided to include the license in the doc subpackage. Please follow the following guidelines to add a proper license. Locate the license file inside the source package. Add the doc subpackage to the $subpackages variable as follows: &lt;br /&gt;
&lt;br /&gt;
 subpackages=&amp;quot;$pkgname-doc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add a similar line to the following to your package() function, depending on the license description file: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|install -Dm644 COPYING &amp;quot;$pkgdir&amp;quot;/usr/share/licenses/$pkgname/COPYING}}&lt;br /&gt;
&lt;br /&gt;
If you follow these steps then abuild will automatically add the license to the package-doc apk for you.&lt;br /&gt;
&lt;br /&gt;
{{Note|Some build tools, such as Python&#039;s &amp;lt;code&amp;gt;gpep517&amp;lt;/code&amp;gt;, automatically include the license during the build step. In such cases it is not necessary to package the license separately.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|It is not acceptable to package software with &amp;quot;unknown&amp;quot; license! If you can&#039;t find the license of the source code, please contact the author and ask them to specify the license. }}&lt;br /&gt;
&lt;br /&gt;
==== arch ====&lt;br /&gt;
&lt;br /&gt;
The package architecture(s) to build for.  This can be one of: &#039;&#039;x86, x86_64, all,&#039;&#039; or &#039;&#039;noarch&#039;&#039;, where &#039;&#039;all&#039;&#039; means all architectures, and &#039;&#039;noarch&#039;&#039; means it&#039;s architecture-independent (e.g., a pure-python package).&lt;br /&gt;
{{Tip|To determine if your APKBUILD can use &#039;&#039;noarch&#039;&#039;, build the package for your architecture and then run &amp;quot;scanelf -R pkg&amp;quot; from the directory that the APKBUILD resides in, in order to scan for ELF files in the &#039;&#039;./pkg&#039;&#039; directory.  If you do NOT get output from this, then &#039;&#039;noarch&#039;&#039; can be used.}}&lt;br /&gt;
&lt;br /&gt;
==== url  ====&lt;br /&gt;
&lt;br /&gt;
Website address for the program. This is useful later on when either finding documentation or other information about the package.&lt;br /&gt;
&lt;br /&gt;
==== pkgdesc  ====&lt;br /&gt;
&lt;br /&gt;
A brief, one line, description of what the package does. Useful for the package management system. It should start with a capital letter and does &#039;&#039;&#039;not&#039;&#039;&#039; end with a period.&lt;br /&gt;
&lt;br /&gt;
Here is an example from apk_info for the OpenSSH client package:&lt;br /&gt;
&lt;br /&gt;
 pkgdesc=&amp;quot;Port of OpenBSD&#039;s free SSH release - client&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== pkgver  ====&lt;br /&gt;
&lt;br /&gt;
Provide the release number of the package you are building.&lt;br /&gt;
&lt;br /&gt;
==== pkgrel  ====&lt;br /&gt;
&lt;br /&gt;
The $pkgrel versioning is made so that if you change something in your APKBUILD file without changing the actual $pkgver, you can increment pkgrel so apk tools will detect it as an update. For instance, if you forget to add a dependency, you can add it afterward and you can +1 pkgver so apk finds this update and adds the missing dependency. When there&#039;s an upstream version change, we reset the pkgrel to 0.&lt;br /&gt;
&lt;br /&gt;
==== pkgname  ====&lt;br /&gt;
&lt;br /&gt;
The base name of the package you are creating.  For Freeswitch 1.0.6, you would use &amp;quot;freeswitch&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== install  ====&lt;br /&gt;
&lt;br /&gt;
There are 6 different kinds of install scripts. Each script is called with the $pkgname.&#039;&#039;&amp;lt;action&amp;gt;&#039;&#039; where &#039;&#039;&amp;lt;action&amp;gt;&#039;&#039; is one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-install&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed before package is installed. Typical use is when package needs a group and a user to be created. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
addgroup -S clamav 2&amp;gt;/dev/null&lt;br /&gt;
adduser -S -D -H -s /bin/false -G clamav -g clamav clamav 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note the &#039;&#039;exit 0&#039;&#039; at the end. If the script exits with failure (if the user already exist), the package will not be installed and &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; will exit with failure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-install&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed after the package is installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-upgrade&lt;br /&gt;
&amp;lt;dd&amp;gt;Same as pre-install but is executed before upgrading/downgrading/reinstalling an already installed package. Note that exiting with failure will not cause apk to exit with failure, but will mark the package as broken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-upgrade&lt;br /&gt;
&amp;lt;dd&amp;gt;Same as post-install but is executed after upgrading/downgrading/reinstalling an already installed package. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-deinstall&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed before uninstalling a package. If script exits with failure apk will not uninstall the package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-deinstall&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed after a package have been uninstalled. For example, can be used to restore busybox links:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
busybox --install -s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the package has a pre-install and post-install script the APKBUILD should have the &#039;&#039;install&#039;&#039; variable defined:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
install=&amp;quot;$pkgname.pre-install $pkgname.post-install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== subpackages  ====&lt;br /&gt;
&lt;br /&gt;
$subpackages are made to split up the normal &amp;quot;make install&amp;quot; into separate packages. The most common subpackages we use are doc and dev. Because we like to keep our target system small we move documentation and development files (only needed when building packages) into separate packages. To use the specific program a user only need to install the base apk without package-doc or package-dev, but if he wants to read the manual he will need to install package-doc. &lt;br /&gt;
&lt;br /&gt;
The easiest way to find out if you need to use -dev and -doc is to first build the package without these options set and wait until the build finishes. When its finished you should have a pkg directory which is the fake root directory. Inside this directory you will see the structure as how it would be installed in / on the target system. &lt;br /&gt;
&lt;br /&gt;
To see if you need the -dev package you can run the following cmd: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|find pkg/usr/ -name &#039;*.[acho]&#039; -o -name &#039;*.la&#039;}}&lt;br /&gt;
&lt;br /&gt;
If this returns any files you need to include the -dev package. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; To see if you need the -doc package you can run the following cmd: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|find pkg/usr/share -name doc -o -name man -o -name info -o -name html -o -name sgml -o -name licenses}}&lt;br /&gt;
&lt;br /&gt;
If this returns any directories you need to include the -doc package. &lt;br /&gt;
&lt;br /&gt;
===== Custom subpackages  =====&lt;br /&gt;
&lt;br /&gt;
Some software additionally has non-essential files that do not qualify as either documentation or development content. These files should be placed in their own, specialized subpackage(s). Some packages include large test suites which are only needed in specific circumstances or binaries which have depends which we prefer not to install. To handle those we create our own package/function. In the APKBUILD below the build() function we create another function: &lt;br /&gt;
&lt;br /&gt;
 test() {&lt;br /&gt;
        mkdir -p &amp;quot;$subpkgdir&amp;quot;/usr&lt;br /&gt;
        mv &amp;quot;$pkgdir&amp;quot;/usr/package-test &amp;quot;$subpkgdir&amp;quot;/usr/&lt;br /&gt;
        # or amove usr/package-test&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
We also need to add the package info to $subpackages variable: &lt;br /&gt;
&lt;br /&gt;
 subpackages=&amp;quot;$pkgname-doc $pkgname-dev $pkgname-test&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After we finish building the package you should see another apk called packagename-test.apk which includes the files which we moved to the $subpkgdir dir. &lt;br /&gt;
&lt;br /&gt;
The above mentioned variables can also be used in our custom function. If we want for instance to build the test() function with perl support we would add: &lt;br /&gt;
&lt;br /&gt;
 depends=&amp;quot;perl&amp;quot;&lt;br /&gt;
 makedepends=&amp;quot;perl-dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If we would install the base package it would not install perl, but if we install the package-test package it would.&lt;br /&gt;
&lt;br /&gt;
==== Patches  ====&lt;br /&gt;
&lt;br /&gt;
Please make sure you always submit human readable patches. Ways to create them are: &lt;br /&gt;
&lt;br /&gt;
directory compare: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|diff -Nurp original_directory new_directory &amp;amp;gt; filename.patch}}&lt;br /&gt;
&lt;br /&gt;
file compare: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|diff -up original.file new.file &amp;amp;gt; filename.patch}}&lt;br /&gt;
&lt;br /&gt;
If a patch contains a completely new file but not *.rej or *.orig file, you need to add -N option to diff, but you may need to add exclusions with &amp;lt;code&amp;gt;--exclude PATTERN&amp;lt;/code&amp;gt; so that you do not inadvertently add files.  You may need to manually delete unwanted files inside the patch file.&lt;br /&gt;
&lt;br /&gt;
Because multiple patches can patch the same file, they can change the offsets required by subsequent patches. To make sure we always patch in a specific way, we should number the patches as follows: &lt;br /&gt;
&lt;br /&gt;
 10-patch1.patch 20-patch2.patch 30-patch3.patch&lt;br /&gt;
&lt;br /&gt;
This way we are always sure that patch 1 is applied first, and if we want to add additional patches between them we can use appropriate indexes (e.g. 11, 12, 21, 22).&lt;br /&gt;
&lt;br /&gt;
Add the names of the patch files to the &#039;&#039;source&#039;&#039; variable. If you haven&#039;t declared a custom &#039;&#039;prepare&#039;&#039; function, no further action is necessary. Otherwise, be sure to call &#039;&#039;default_prepare&#039;&#039; in your &#039;&#039;prepare&#039;&#039; function. For example:&lt;br /&gt;
&lt;br /&gt;
 prepare() {&lt;br /&gt;
 	default_prepare&lt;br /&gt;
 &lt;br /&gt;
 	# do your stuff&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: Some older packages contain a &#039;&#039;for&#039;&#039; loop in the &#039;&#039;prepare&#039;&#039; function to apply patches. This is not needed anymore, as patches are handled by &#039;&#039;default_prepare&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In Alpine &amp;gt;=3.4 you can define patch_args to supply the patch level.  This only works if all the patches have the same patch level.  If there are a lot of patches from different sources, there is a good chance that you may need to edit them, as discussed below.&lt;br /&gt;
&lt;br /&gt;
To automatically patch the package (available only in Alpine &amp;gt;=3.4) if it uses a patch level (-pX) other than the default (-p1), you need to carefully modify the patch.  First, you&#039;ll need a text editor that does not automatically convert  between Windows and Unix new lines (or, disable this feature) so that it preserves the old code.  The next thing you&#039;ll need to do is modify the paths on &amp;quot;+++&amp;quot; and &amp;quot;---&amp;quot; lines in the .patch file.  You can begin the path with a/ and b/ like shown below.  Next, you need to adjust the paths so that the relative base path is from inside $builddir.  Anything to the left of $builddir, including $builddir itself, needs to be removed from the path.  So, if $builddir is /home/USER/aports/community/chromium/src/chromium-65, you need to erase it on the &amp;quot;+++&amp;quot; and &amp;quot;---&amp;quot; lines.  Inside the chromium-65 folder you can see a src folder that has 3rdparty as a descendant.  If a patch originally has a deeper patch level, you may need to fill in the missing portion of the path.  For example, use the &amp;lt;code&amp;gt;find . -name &amp;quot;Assertions.cpp&amp;quot;&amp;lt;/code&amp;gt; command to find the full path to the file relative to the base.&lt;br /&gt;
&lt;br /&gt;
{{Cat|example.patch|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Author: John Doe &amp;lt;johndoe@mail.com&amp;gt;&lt;br /&gt;
URL: http://.....&lt;br /&gt;
Summary: Fixes musl compatibility&lt;br /&gt;
----&lt;br /&gt;
--- a/src/3rdparty/chromium/third_party/WebKit/Source/wtf/Assertions.cpp.orig&lt;br /&gt;
+++ b/src/3rdparty/chromium/third_party/WebKit/Source/wtf/Assertions.cpp&lt;br /&gt;
@@ -142,7 +142,7 @@&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 FrameToNameScope::FrameToNameScope(void* addr) : m_name(0), m_cxaDemangled(0) {&lt;br /&gt;
-#if OS(MACOSX) || (OS(LINUX) &amp;amp;&amp;amp; !defined(__UCLIBC__))&lt;br /&gt;
+#if OS(MACOSX) || (OS(LINUX) &amp;amp;&amp;amp; defined(__GLIBC__))&lt;br /&gt;
   Dl_info info;&lt;br /&gt;
   if (!dladdr(addr, &amp;amp;info) || !info.dli_sname)&lt;br /&gt;
return;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Portions of the patch may be outdated, removed completely as in the source code file completely removed, or moved or renamed files.  You need to delete that section of the patch or find where that section of code changed and re-diff it.&lt;br /&gt;
&lt;br /&gt;
It is good etiquette to give credit at the top and the location of where you originally found them with notes.&lt;br /&gt;
&lt;br /&gt;
Excluding patches with global variable resembling patch_opts is not available on Alpine.  To exclude patches you need to create your own custom prepare().&lt;br /&gt;
&lt;br /&gt;
If you have a monolithic patch where there are a bunch of patches in one big patch, you could use filterdiff which is available in the patchutils package.&lt;br /&gt;
&lt;br /&gt;
Just do something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
makedepends=&amp;quot;patchutils&amp;quot;&lt;br /&gt;
&lt;br /&gt;
prepare() {&lt;br /&gt;
  ...&lt;br /&gt;
  cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
  filterdiff -x &#039;*drivers/video/logo*&#039; &amp;quot;$srcdir&amp;quot;/original.patch &amp;gt; &amp;quot;$builddir&amp;quot;/modified.patch&lt;br /&gt;
  patch -p1 -i &amp;quot;$builddir&amp;quot;/modified.patch&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to put the wildcard pattern in single quotes for it to work.&lt;br /&gt;
&lt;br /&gt;
==== Configure options  ====&lt;br /&gt;
&lt;br /&gt;
Alpine has some default configure options we set by default. We use /usr for prefix to make sure everything is installed with /usr in front of it. If you notice that anything is installed in the wrong directory please run {{Cmd|./configure --help}} and see if you can set the correct location. &lt;br /&gt;
&lt;br /&gt;
We are not covering the depend switches here we have discussed this already in the depend section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Make options  ====&lt;br /&gt;
&lt;br /&gt;
If you notice weird problems when compiling or installing the package with make/make install you could try to disable [https://www.gnu.org/software/make/manual/make.html#Parallel parallel] building/installing. A normal make line would be: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make}}&lt;br /&gt;
&lt;br /&gt;
To disable parallel we use: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make -j1}}&lt;br /&gt;
&lt;br /&gt;
We can use the same for make install. &lt;br /&gt;
&lt;br /&gt;
Because we do not want to install the package in our build environment but we want to install it in a fake root directory we need to tell &#039;make install&#039; to use another destination directory instead of &#039;/&#039;. We do this by setting a variable when we execute make install as followed: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make DESTDIR{{=}}&amp;quot;$pkgdir&amp;quot; install}}&lt;br /&gt;
&lt;br /&gt;
Please note that some Makefiles do not support this variable and will always install software in &#039;/&#039;. To make sure you do not mess up your build system NEVER run your build system as root but always use a custom user and doas when needed. If by accident the Makefile does not support DESTDIR variable it will fail to install in our build system system directories.&lt;br /&gt;
&lt;br /&gt;
==== builddir ====&lt;br /&gt;
If you used &amp;lt;tt&amp;gt;newapkbuild&amp;lt;/tt&amp;gt; to create your APKBUILD file, you must specify the path to your unpacked sources. Inside the sections during the prepare/build/install process &#039;&#039;builddir&#039;&#039; is used. Most of the time a combination of &#039;&#039;$srcdir&#039;&#039; and &#039;&#039;$pkgname-$pkgver&#039;&#039; will work. When not, check the /src directory or the source tarball for the right string. Especially when you are working with automatically generated tarballs (like from github and gitorious), this needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
builddir=&amp;quot;$srcdir&amp;quot;/$pkgname-$pkgver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Additional files  ====&lt;br /&gt;
&lt;br /&gt;
If you want/need to install additional files not mentioned above you can use the following cmd (this is an example of a conf file): &lt;br /&gt;
&lt;br /&gt;
{{Cmd|install -Dm644 doc/$pkgname.conf &amp;quot;$pkgdir&amp;quot;/etc/$pkgname.conf}}&lt;br /&gt;
&lt;br /&gt;
== Build the package  ==&lt;br /&gt;
&lt;br /&gt;
If you did not already create the checksums as mentioned above you can do so now: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $pkgname&lt;br /&gt;
abuild checksum}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s about time we build our package. Because a build system should never have all the package installed to prevent linking to packages we don&#039;t want it to link we use a abuild recursively with the &#039;&#039;&#039;-r&#039;&#039;&#039; switch. It will install all dependencies from your repository and builds it, afterwards it will uninstall all those depending packages again.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild -r}}&lt;br /&gt;
&lt;br /&gt;
See also [[Abuild_and_Helpers|Abuild and Helpers]].&lt;br /&gt;
&lt;br /&gt;
== Testing the package locally ==&lt;br /&gt;
&lt;br /&gt;
When it completes, your package will be found in a subfolder of &amp;lt;code&amp;gt;~/packages&amp;lt;/code&amp;gt;.  You may want to test it on your machine but only if the package is not a critical system package like musl or apk-tools package.  To avoid borking your system (as in making it impossible to use &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; or to restore back the system and the compiler toolchain) for a critical system package, you should test on a chroot first before using it live.&lt;br /&gt;
&lt;br /&gt;
The best way to test a package locally is to modify your &amp;lt;code&amp;gt;/etc/apk/repositories&amp;lt;/code&amp;gt; so that it includes the indexes to your locally built packages - the directories that contain &amp;lt;code&amp;gt;ARCH/APKINDEX.tar.gz&amp;lt;/code&amp;gt;. For example the &amp;lt;code&amp;gt;/etc/apk/repositories&amp;lt;/code&amp;gt; below includes locally built packages in testing, community and main. To use this example change &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; to your login name.&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/apk/repositories|/home/USER/packages/testing/&lt;br /&gt;
/home/USER/packages/main/&lt;br /&gt;
/home/USER/packages/community/&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/main&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/community&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/testing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you prefer to test a package without changing any other configuration you can use the &amp;lt;code&amp;gt;-X, --repository&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|doas apk add --repository /home/USER/packages/testing $pkgname}}&lt;br /&gt;
&lt;br /&gt;
== Code review ==&lt;br /&gt;
&lt;br /&gt;
To successfully have your package pass through code reviewers (as of Feb 18, 2018 are nmeum and jirutka on GitHub) and possible increased acceptance, the following conventions need to be followed:&lt;br /&gt;
&lt;br /&gt;
# Custom global variables should be prefixed with underscore (_).&lt;br /&gt;
# Compact code as in merged commands, removed unused variables, removal of functions that do the same thing that are automatically handled by abuild.&lt;br /&gt;
# Versioning is done properly.  For details see [[APKBUILD_Reference#pkgver]].&lt;br /&gt;
# Licensing is done properly. Remove unnecessary copying of licensing that is already OSI approved.&lt;br /&gt;
# Naming conventions rules for unofficial variables as in _gitrev is preferred over commit.&lt;br /&gt;
# Indent with tabs not spaces.&lt;br /&gt;
# Removal of explicit return 1.  (They are still found the old APKBUILD files if you are learning but are now strongly discouraged.)&lt;br /&gt;
# Disabling check() requires either (1) a comment (#) stating next to options=&amp;quot;!check&amp;quot; that there is no test suite/unit tests or (2) functioning working check() function.&lt;br /&gt;
# Explicit call to subpackages=&amp;quot;$pkgname-doc&amp;quot; must be used instead of explicit gzip man page compression.&lt;br /&gt;
# Ideally, lines should be no more than 80 columns wide&lt;br /&gt;
&lt;br /&gt;
Additionally, make sure to run the linter on your package:&lt;br /&gt;
{{Cmd|doas apk add atools&lt;br /&gt;
apkbuild-lint APKBUILD}}&lt;br /&gt;
&lt;br /&gt;
For more information see [[Development using git:Quality assurance]] and [[Package_policies]].&lt;br /&gt;
Also check out [https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/COMMITSTYLE.md?ref_type=heads aports/COMMITSTYLE.md] and [https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/CODINGSTYLE.md?ref_type=heads aports/CODINGSTYLE.md]&lt;br /&gt;
&lt;br /&gt;
== Commit your work  ==&lt;br /&gt;
&lt;br /&gt;
After you successfully build your package and properly followed the conventions and requirements in the code review section, you can submit your APKBUILD to Alpine&#039;s git repository. &lt;br /&gt;
&lt;br /&gt;
Update your git repo, before adding new files: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $aportsdir&lt;br /&gt;
git pull}}&lt;br /&gt;
&lt;br /&gt;
This should pull all the changes made by others into your local git repo.&lt;br /&gt;
&lt;br /&gt;
When you think you are ready you can add your files to git: &lt;br /&gt;
&lt;br /&gt;
NOTE: when using our Gitlab instance, you can create MR&#039;s for each package. Please squash all commits related to the same package into a single one per MR.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $aportsdir&lt;br /&gt;
git add testing/$pkgdir (include any other files needed for the build; $pkgname.install...)&lt;br /&gt;
git commit}}&lt;br /&gt;
&lt;br /&gt;
Use the following commit message template for new aports (without the comments):&lt;br /&gt;
&lt;br /&gt;
{{Cat|template|testing/$pkgname: new aport   # this will be the subject line&lt;br /&gt;
                              # a blank line&lt;br /&gt;
$url                          # project homepage&lt;br /&gt;
$pkgdesc                      # one line description}}&lt;br /&gt;
&lt;br /&gt;
Or you could add the following and &amp;lt;code&amp;gt;chmod +x ports/.git/hooks/prepare-commit-msg&amp;lt;/code&amp;gt; to automatically generate commit message which the default aports/.githooks/ does not:&lt;br /&gt;
&lt;br /&gt;
{{Cat|aports/.git/hooks/prepare-commit-msg|&amp;lt;nowiki&amp;gt;#!/bin/sh&lt;br /&gt;
case &amp;quot;$2,$3&amp;quot; in&lt;br /&gt;
  ,|template,)&lt;br /&gt;
    if git diff-index --diff-filter=A --name-only --cached HEAD \&lt;br /&gt;
        | grep -q &#039;/APKBUILD$&#039;; then&lt;br /&gt;
      meta() { git diff --staged | grep &amp;quot;^+$1&amp;quot; | sed &#039;s/.*=&amp;quot;\?//;s/&amp;quot;$//&#039;;}&lt;br /&gt;
      printf &#039;testing/%s: new aport\n\n%s\n%s\n&#039; &amp;quot;$(meta pkgname)&amp;quot; \&lt;br /&gt;
        &amp;quot;$(meta url)&amp;quot; &amp;quot;$(meta pkgdesc)&amp;quot; &amp;quot;$(cat $1)&amp;quot; &amp;gt; &amp;quot;$1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      printf &#039;%s\n\n%s&#039; `git diff-index --name-only --cached HEAD \&lt;br /&gt;
        | sed -n &#039;s/\/APKBUILD$//p;q&#039;` &amp;quot;$(cat $1)&amp;quot; &amp;gt; &amp;quot;$1&amp;quot;&lt;br /&gt;
    fi;;&lt;br /&gt;
esac&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now your changes are only available locally in your repository.&lt;br /&gt;
&lt;br /&gt;
Because you do not have push rights to the Alpine aports repository you need to create a merge request to [https://gitlab.alpinelinux.org/alpine/aports Alpine&#039;s GitLab instance].&lt;br /&gt;
&lt;br /&gt;
Alternatively you can also create a diff (patch) of the changes you made and send this patch to the &lt;br /&gt;
[https://lists.alpinelinux.org/~alpine/aports  alpine-aports mailinglist].&lt;br /&gt;
&lt;br /&gt;
To create a diff patch:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git format-patch HEAD^}}&lt;br /&gt;
&lt;br /&gt;
or if you have sprunge, you can create a link to your patch for convenience&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git format-patch HEAD^ --stdout &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; sprunge}}&lt;br /&gt;
&lt;br /&gt;
== Automated flagging of outdated ports ==&lt;br /&gt;
Consider adding your port to [https://release-monitoring.org/ Anitya], so it will be flagged as outdated&lt;br /&gt;
as soon as a new stable version is released by upstream.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[APKBUILD Reference]]&lt;br /&gt;
* [[APKBUILD examples]]&lt;br /&gt;
* [[Development using git]]&lt;br /&gt;
* [[Development using git:Quality assurance]]&lt;br /&gt;
&lt;br /&gt;
[[category: Package Manager]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Custom_Kernel&amp;diff=25875</id>
		<title>Custom Kernel</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Custom_Kernel&amp;diff=25875"/>
		<updated>2023-12-15T14:29:04Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Vanilla targets and tuning */ x86-64 bitness 64&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
This process of building a &#039;&#039;&#039;custom configured kernel&#039;&#039;&#039; assumes you are running on Alpine Linux utilizing abuild &amp;amp; aports.&lt;br /&gt;
&lt;br /&gt;
== But why? ==&lt;br /&gt;
&lt;br /&gt;
You want to build a custom kernel to enable experimental hardware or features or outdated hardware, to reduce bloat further, to tune the kernel to the hardware.&lt;br /&gt;
&lt;br /&gt;
The lts kernel for most Alpine ARCHs uses defaults to balance throughput at the expense of some responsiveness, and support for many devices.  You can tweak the kernel for desktop use and low latency and responsiveness.&lt;br /&gt;
&lt;br /&gt;
You should disable modules to increase security.  By default, Alpine will install modules but not disable most of them.  Disabling modules will reduce an DMA attack but not eliminate it completely.  If you have a newer processor with VT-d, you can mitigate as long as you:&lt;br /&gt;
&lt;br /&gt;
Leave &amp;lt;code&amp;gt;CONFIG_INTEL_IOMMU_DEFAULT_ON=y&amp;lt;/code&amp;gt; or pass &amp;lt;code&amp;gt;intel_iommu=on&amp;lt;/code&amp;gt; as a kernel parameter and disable kernel logging so the attacker doesn&#039;t gain DMAR address information through dmesg.[https://blog.frizk.net/2016/11/disable-virtualization-based-security.html]  Also remove references to the kernel version to calculate the IOMMU addresses.[https://link.springer.com/content/pdf/10.1186/s13173-017-0066-7.pdf]&lt;br /&gt;
&lt;br /&gt;
To increase the security of the boot process, if you have a TPM, you could set &amp;lt;code&amp;gt;CONFIG_INTEL_TXT=y&amp;lt;/code&amp;gt; (Enable Intel(R) Trusted Execution Technology (Intel(R) TXT)) (which is not enabled in the hardened kernel by default), then you would need the SINIT module (provided only by Intel)[https://software.intel.com/en-us/articles/intel-trusted-execution-technology], a possibly compiled TrustedGrub2[https://github.com/Rohde-Schwarz-Cybersecurity/TrustedGRUB2], trousers[https://sourceforge.net/projects/trousers/?source=navbar], tboot[https://sourceforge.net/projects/tboot/].  These packages are not in aports and it is unknown if these tools work on musl.  It&#039;s not recommended for Edge.  Also, there would be trigger packages to generate hashes for the kernel and the mkinitfs updates.&lt;br /&gt;
&lt;br /&gt;
== Setting up the Alpine Build System ==&lt;br /&gt;
&lt;br /&gt;
First, you need to follow the steps in [[Creating_an_Alpine_package#Setup_your_system_and_account|Setup your system and account for building packages]].  You also need to configure your {{path|/etc/apk/repositories}} so that they search locally for your apks.  See [[Creating_an_Alpine_package#Testing_the_package_locally|Testing the package locally]] for details.&lt;br /&gt;
&lt;br /&gt;
After setting up accounts and repos, change your shell&#039;s current working directory to &#039;&#039;&#039;aports&#039;&#039;&#039; that you just cloned.&lt;br /&gt;
&lt;br /&gt;
{{cmd|$ cd aports}}&lt;br /&gt;
&lt;br /&gt;
== Working with aports ==&lt;br /&gt;
&lt;br /&gt;
We will try using an existing lts kernel just tweaking the {{path|lts.ARCH.config}} file.  &lt;br /&gt;
&lt;br /&gt;
=== Switching to the proper release version ===&lt;br /&gt;
&lt;br /&gt;
You need to switch to the proper branch that matches the release so that the kernel compiles against the dependencies properly.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Alpine version&lt;br /&gt;
! Remote branch&lt;br /&gt;
|-&lt;br /&gt;
| Edge&lt;br /&gt;
| master&lt;br /&gt;
|-&lt;br /&gt;
| 3.17.0&lt;br /&gt;
| 3.17-stable&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following is required to get access to the {{path|APKBUILD}} released for that version of Alpine and which you will create a commit for.&lt;br /&gt;
&lt;br /&gt;
If you are on 3.17 do:&lt;br /&gt;
&lt;br /&gt;
{{cmd|$ git checkout -b 3.17-stable origin/3.17-stable}}&lt;br /&gt;
&lt;br /&gt;
If you are on Edge do:&lt;br /&gt;
&lt;br /&gt;
{{cmd|$ git checkout master}}&lt;br /&gt;
&lt;br /&gt;
=== Creating your config ===&lt;br /&gt;
&lt;br /&gt;
You can use {{pkg|linux-lts}} but what you should do is create a local branch by doing:&lt;br /&gt;
&lt;br /&gt;
For Alpine Edge:&lt;br /&gt;
&lt;br /&gt;
{{cmd|$ git checkout -b my-custom-kernel}}&lt;br /&gt;
&lt;br /&gt;
For Alpine 3.17:&lt;br /&gt;
&lt;br /&gt;
{{cmd|$ git checkout -b my-custom-kernel origin/3.17-stable}}&lt;br /&gt;
&lt;br /&gt;
Doing it this way, you do less work in maintaining.  All you need to do is keep &#039;&#039;master&#039;&#039; or &#039;&#039;3.17-stable&#039;&#039; in sync[https://help.github.com/articles/syncing-a-fork/][https://help.github.com/articles/configuring-a-remote-for-a-fork/] and merge any conflicts.  &lt;br /&gt;
&lt;br /&gt;
First switch to the branch by doing &amp;lt;code&amp;gt;git checkout my-custom-kernel&amp;lt;/code&amp;gt;.  Then, you need to navigate to the {{path|main/linux-lts}} folder where you should see a APKBUILD and some config- files.  When you are done with your edits either by editing directly the APKBUILD and copying the {{path|lts.ARCH.config}} as {{path|.config}} in the {{path|linux-4.15}} folder.  You will then move the {{path|.config}} back overriding the {{path|lts.ARCH.config}} generated by &amp;lt;code&amp;gt;make menuconfig&amp;lt;/code&amp;gt; (discussed below in the &#039;&#039;Configuring kernel&#039;&#039; section).  After generating your config, you need to &amp;lt;code&amp;gt;abuild checksum&amp;lt;/code&amp;gt;.  Then, do &amp;lt;code&amp;gt;git add APKBUILD lts.ARCH.config&amp;lt;/code&amp;gt; where ARCH is whatever architecture (x86, x86_64, ...) you use.  Then, you need to do &amp;lt;code&amp;gt;git commit APKBUILD config-NAME.ARCH -m &amp;quot;Enabled these options ....&amp;quot;&amp;lt;/code&amp;gt; for your customization the ARCHitecture of your system.  You do this so that git can keep your code separate from Alpine&#039;s and so your changes float forward between kernel updates.&lt;br /&gt;
&lt;br /&gt;
== Adding custom patches ==&lt;br /&gt;
&lt;br /&gt;
Custom patches should be added to &#039;&#039;sources=&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After you added the URL, you need to produce a checksum by doing &amp;lt;code&amp;gt;abuild checksum&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The custom patches may not be autopatched, due to being distributed as an archive or different patch level, so you need to define what to do with it in the prepare().&lt;br /&gt;
&lt;br /&gt;
== Configuring kernel ==&lt;br /&gt;
&lt;br /&gt;
Attempt to build the kernel first.  To do that, you do &amp;lt;code&amp;gt;abuild -rK&amp;lt;/code&amp;gt; to install most of the dependencies.  If it complains about a dependency like {{pkg|elfutils-dev}} use &amp;lt;code&amp;gt;-rKd&amp;lt;/code&amp;gt;.  Then, when it prompts for values for new found config options just hold enter till it starts compiling the kernel.  There should be two sets one for -lts and the other for the -virt.  Just {{Key|Ctrl}}+{{Key|C}} out of the compilation process after the second set so you can further customize the config.  Then you go into the {{path|src/linux-VER}} and edit the config file.  Copy the {{path|.config}} file overriding the {{path|lts.ARCH.config}} in the srcdir.&lt;br /&gt;
&lt;br /&gt;
The alternative is to use the kernel configuration menu in the build-NAME folder, but before yo do that you need to &amp;lt;code&amp;gt;sudo apk add {{pkg|ncurses-dev}}&amp;lt;/code&amp;gt;&lt;br /&gt;
{{path|&lt;br /&gt;
After you are done using the menu in the build-NAME folder by doing &amp;lt;code&amp;gt;make menuconfig&amp;lt;/code&amp;gt;, you want to remove &amp;lt;code&amp;gt;ncurses-dev&amp;lt;/code&amp;gt;.  When you are done, it will be stored in &#039;&#039;.config&#039;&#039; which you need to again override the {{path|lts.ARCH.config}} file.  When you are done updating the {{path|config-NAME.ARCH}}, you need to do &amp;lt;code&amp;gt;abuild checksum&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The options in the kernel config are typically defaults.  If your device is old, it may be set to n by default.&lt;br /&gt;
&lt;br /&gt;
=== Vanilla targets and tuning ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ARCH&lt;br /&gt;
!Processor Type / CPU Selection / System Type&lt;br /&gt;
!Code Generation / Instruction Extensions&lt;br /&gt;
!Timer Frequency&lt;br /&gt;
!Preemption Model&lt;br /&gt;
!Bitness&lt;br /&gt;
|-&lt;br /&gt;
|s390x&lt;br /&gt;
|IBM zEnterprise 114 and 196&lt;br /&gt;
|IBM zBC12 and zEC12 (&amp;lt;code&amp;gt;-march=zEC12 -mtune=zEC12&amp;lt;/code&amp;gt;)&lt;br /&gt;
|100 Hz&lt;br /&gt;
|No Forced Preemption (Server)&lt;br /&gt;
|64&lt;br /&gt;
|-&lt;br /&gt;
|ppc64le&lt;br /&gt;
|Server processors&lt;br /&gt;
|POWER8 (&amp;lt;code&amp;gt;-mcpu=power8&amp;lt;/code&amp;gt;), AltiVec (&amp;lt;code&amp;gt;-Wa,-maltivec&amp;lt;/code&amp;gt; to assembler or &amp;lt;code&amp;gt;-maltivec -mabi=altivec&amp;lt;/code&amp;gt;), VSX&lt;br /&gt;
|100 HZ&lt;br /&gt;
|No Forced Preemption (Server)&lt;br /&gt;
|64&lt;br /&gt;
|-&lt;br /&gt;
|ppc&lt;br /&gt;
|&lt;br /&gt;
512x/52xx/6xx/7xx/74xx/82xx/83xx/86xx&lt;br /&gt;
* Apple PowerMac based machines&lt;br /&gt;
|AltiVec (&amp;lt;code&amp;gt;-Wa,-maltivec&amp;lt;/code&amp;gt; to assembler or &amp;lt;code&amp;gt;-maltivec -mabi=altivec&amp;lt;/code&amp;gt;) on &amp;gt;=74xx&lt;br /&gt;
|250 HZ&lt;br /&gt;
|No Forced Preemption (Server)&lt;br /&gt;
|32&lt;br /&gt;
|-&lt;br /&gt;
|x86_64&lt;br /&gt;
|Generic-x86-64&lt;br /&gt;
|(-mtune=generic ; SIMD assembly modules enabled based on simple compile test and/or presence of CPU flag)&lt;br /&gt;
|300 HZ&lt;br /&gt;
|Voluntary Kernel Preemption (Desktop)&lt;br /&gt;
|64&lt;br /&gt;
|-&lt;br /&gt;
|x86&lt;br /&gt;
|586/K5/5x86/6x86/6x86MX&lt;br /&gt;
|(-mtune=generic ; SIMD assembly modules enabled based on simple compile test and/or presence of CPU flag)&lt;br /&gt;
|300 HZ&lt;br /&gt;
|Voluntary Kernel Preemption (Desktop)&lt;br /&gt;
|32&lt;br /&gt;
|-&lt;br /&gt;
|armhf&lt;br /&gt;
|&lt;br /&gt;
* ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)&lt;br /&gt;
* Freescale i.MX family -- Cortex A (i.MX51, i.MX53, i.MX6 Quad/DualLite, i.MX6 SoloLite, i.MX6 SoloX, i.MX6 UltraLite, i.MX7 Dual)&lt;br /&gt;
* Qualcomm -- (MSM8X60, MSM8960, MSM8974)&lt;br /&gt;
* Allwinner SoCs -- (A10 (sun4i), A10s / A13 (sun5i), A31 (sun6i), A20 (sun7i), sun8i Family, (sun9i))&lt;br /&gt;
* ARM Ldt Versatile Express family -- &lt;br /&gt;
|Either &amp;lt;code&amp;gt;-march=armv7-a&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-march=armv5t -Wa,-march=armv7-a&amp;lt;/code&amp;gt; based on a compile test. &amp;lt;code&amp;gt;-mfpu=vfp&amp;lt;/code&amp;gt;&lt;br /&gt;
|100 Hz&lt;br /&gt;
|Voluntary Kernel Preemption (Desktop)&lt;br /&gt;
|32&lt;br /&gt;
|-&lt;br /&gt;
|aarch64&lt;br /&gt;
|&lt;br /&gt;
* Allwinner sunxi 64-bit SoC Family&lt;br /&gt;
* Broadcom BCM2835 family&lt;br /&gt;
* Marvell Berlin SoC Family&lt;br /&gt;
* ARMv8 based Samsung Exynos SoC family&lt;br /&gt;
* ARMv8 based Freescale Layerscape SoC family&lt;br /&gt;
* Hisilicon SoC Family&lt;br /&gt;
* Mediatek MT65xx &amp;amp; MT81xx ARMv8 SoC&lt;br /&gt;
* Marvell EBU SoC Family&lt;br /&gt;
* Qualcomm Platforms&lt;br /&gt;
* Rockchip Platforms&lt;br /&gt;
* AMD Seattle SoC Family&lt;br /&gt;
* Altera&#039;s Stratix 10 SoCFPGA Family&lt;br /&gt;
* NVIDIA Tegra SoC Family&lt;br /&gt;
* Spreadtrum SoC platform&lt;br /&gt;
* Cavium Inc. Thunder SoC Family&lt;br /&gt;
* ARMv8 software model (Versatile Express)&lt;br /&gt;
* AppliedMicro X-Gene SOC Family&lt;br /&gt;
* Xilinx ZynqMP Family&lt;br /&gt;
|&lt;br /&gt;
|300 HZ&lt;br /&gt;
|Voluntary Kernel Preemption (Desktop)&lt;br /&gt;
|64&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
If you do desktop multitasking, you may want to switch to Voluntary Kernel Preemption (Desktop) or Preemptible Kernel (Low-Latency Desktop) and up the Timer Frequency.  If you run a dedicated render farm node or a dedicated bitcoin miner use No Forced Preemption (Server) and decrease the Timer Frequency.&lt;br /&gt;
&lt;br /&gt;
Optimized modules (most are already compiled as modules):&lt;br /&gt;
* raid6 -- altivec, avx512, ssse3, avx2, mmx, sse, sse2, neon&lt;br /&gt;
* some operations of raid5 -- mmx (32 bit), sse (64 bit), avx&lt;br /&gt;
For Kernel API:&lt;br /&gt;
* 32-bit memcpy -- 3dnow&lt;br /&gt;
* 32-bit memory page clearing and copying -- sse (Athlon/K7 only), mmx&lt;br /&gt;
From x86/crypto, arm/crypto, powerpc/crypto:&lt;br /&gt;
* CAMELLIA -- avx2, avx, aes-ni&lt;br /&gt;
* CHACHA20 -- avx2, neon&lt;br /&gt;
* CAST5 -- avx&lt;br /&gt;
* CAST6 -- avx&lt;br /&gt;
* TWOFISH -- avx&lt;br /&gt;
* SERPENT -- avx2, avx, sse2&lt;br /&gt;
* SHA1 -- avx2, ssse3, neon, spe&lt;br /&gt;
* SHA2 -- avx2&lt;br /&gt;
* SHA256 -- ssse3, neon, spe&lt;br /&gt;
* SHA512 -- avx2, ssse3, neon&lt;br /&gt;
* POLY1305 -- avx2&lt;br /&gt;
* GHASH -- pclmulqdq (part of aes-ni), vmx (power8)&lt;br /&gt;
* AES -- aes-ni, neon, vmx (power8), spe&lt;br /&gt;
* CRC32 -- pclmulqdq, sse, neon, vmx (power8)&lt;br /&gt;
* CRCT10DIF -- pclmulqdq, sse, neon, vmx (power8)&lt;br /&gt;
&lt;br /&gt;
=== Fast reboots with kexec ===&lt;br /&gt;
&lt;br /&gt;
If you want to reboot the kernel fast avoiding the POST test, you need &amp;lt;code&amp;gt;sudo apk add {{pkg|kexec-tools}}&amp;lt;/code&amp;gt; and enable kexec in the kernel:&lt;br /&gt;
&lt;br /&gt;
  Processor type and features&lt;br /&gt;
    [*] kexec system call&lt;br /&gt;
&lt;br /&gt;
=== Hibernation to prevent data loss ===&lt;br /&gt;
&lt;br /&gt;
  Power management and ACPI options&lt;br /&gt;
    [*] Hibernation (aka &#039;suspend to disk&#039;)&lt;br /&gt;
&lt;br /&gt;
Hibernation should be used if you have a laptop.  You don&#039;t want the laptop to suddenly shut off resulting in data loss, you want it to save your work based on a percentage of battery life (this requires special script).  When you do hibernation and when it restores back, it should lock down the computer and ask for prompt.  Depending on your needs, the hibernated image can be encrypted/decrypted which again requires additional customization to scripts.&lt;br /&gt;
&lt;br /&gt;
Hibernation with an unsanitized swap file is generally insecure because data and unlocked memory pages is swapped out in plaintext.  To increase the security either disable swap (Alpine default) or use an encrypted swap.  The swap file/partition is typically used as a dump of the hibernated image.&lt;br /&gt;
&lt;br /&gt;
== Building ==&lt;br /&gt;
&lt;br /&gt;
Before building, you may want to remove as many modules as possible.  This will reduce the time to compile greatly.  Also, you may want to use [https://github.com/ccache/ccache/ ccache] for faster recompiles especially if you are searching for the minimal set of options or modules to use or include.&lt;br /&gt;
&lt;br /&gt;
You should then do an &amp;lt;code&amp;gt;abuild -r&amp;lt;/code&amp;gt; to attempt to build it.&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
&lt;br /&gt;
To install it you do a &amp;lt;code&amp;gt;sudo apk add linux-NAME&amp;lt;/code&amp;gt; where NAME is your custom kernel name.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
Before you test, you should install the lts kernel too, using &amp;lt;code&amp;gt;apk add {{pkg|linux-lts}}&amp;lt;/code&amp;gt;.  You may be missing a module and can&#039;t boot, so you use the other kernel as the fallback boot kernel.  Don&#039;t forget to update your bootloader configuration.&lt;br /&gt;
&lt;br /&gt;
To test, first you should make a bootable Alpine USB image.  Then, when you have your rescue USB done, you &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt; the computer.&lt;br /&gt;
&lt;br /&gt;
To test it, you basically do trial and error.  Sometimes your config is missing something if you want to have a bare minimum setting.&lt;br /&gt;
&lt;br /&gt;
If you are curious about correctness testing, some kernel modules or components do preform self tests at the beginning of the boot process.  The tools may have test suites that you run with the make command.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [https://wiki.archlinux.org/title/Kernel Archwiki Kernels]&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/Kernel Gentoo Wiki Kernel]&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/Kernel/Configuration Gentoo Wiki Kernel Configuration]&lt;br /&gt;
&lt;br /&gt;
[[Category:Kernel]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25873</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25873"/>
		<updated>2023-12-12T11:41:49Z</updated>

		<summary type="html">&lt;p&gt;Omni: Mention openrc now defaults to cgroups v2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
=== cgroups v2 ===&lt;br /&gt;
&lt;br /&gt;
Cgroups version 2, or &amp;quot;unified&amp;quot;, is now the default cgroup mode in [[OpenRC]]. The previous default was &amp;quot;hybrid&amp;quot;, both version 1 and version 2.&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to [https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license the relicensing of HashiCorp software] to [https://spdx.org/licenses/BUSL-1.1.html BUSL-1.1], a non-Open-Source license, the following software has been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
&lt;br /&gt;
GNOME packages have been updated to 45. As part of that release, Cheese has been replaced by Snapshot, and Eye of GNOME by Loupe as the default apps for taking and seeing pictures, respectively. In additions, GNOME Photos was dropped as being mostly unmaintained.&lt;br /&gt;
&lt;br /&gt;
=== Yggdrasil v0.5 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|yggdrasil}} was upgraded to 0.5.x and the new routing scheme is incompatible with previous versions. &amp;quot;Nodes running this new version &#039;&#039;&#039;will not&#039;&#039;&#039; be able to peer with earlier versions of Yggdrasil&amp;quot; ([https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.5.0 v0.5.0 release notes], [https://yggdrasil-network.github.io/2023/10/22/upcoming-v05-release.html v0.5 blog post]).&lt;br /&gt;
&lt;br /&gt;
=== GNU C Library Compatibility Layer ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;libc6-compat&amp;lt;/code&amp;gt; [https://git.alpinelinux.org/aports/commit/?h=3.19-stable&amp;amp;id=1a122638315d6fe7908de9c34d3ac06eae76917a was removed] in favor of {{pkg|gcompat}} from Adélie Linux.&lt;br /&gt;
&lt;br /&gt;
=== ifupdown ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;ifupdown&amp;lt;/code&amp;gt; aport (&#039;&#039;&#039;not&#039;&#039;&#039; {{pkg|busybox-ifupdown}}) was unmaintained and removed in favor of the preferred {{pkg|ifupdown-ng}}.&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
&lt;br /&gt;
* Linux 6.6&lt;br /&gt;
* GCC 13&lt;br /&gt;
* LLVM 17&lt;br /&gt;
* Kea 2.4&lt;br /&gt;
* Xen 4.18&lt;br /&gt;
* Git 2.43&lt;br /&gt;
* Perl 5.38&lt;br /&gt;
* PHP 8.3&lt;br /&gt;
* PostgreSQL 16&lt;br /&gt;
* SQLite 3.44&lt;br /&gt;
* Redis 7.2&lt;br /&gt;
* Node.js (lts) 20.10&lt;br /&gt;
* Node.js (current) 21.4&lt;br /&gt;
* QEMU 8.1&lt;br /&gt;
* Ceph 18.2&lt;br /&gt;
* GNOME 45&lt;br /&gt;
* LXQt 1.4&lt;br /&gt;
* wlroots 0.17&lt;br /&gt;
* Go 1.21&lt;br /&gt;
* Rust 1.72&lt;br /&gt;
* Crystal 1.10&lt;br /&gt;
* Racket 8.11&lt;br /&gt;
* ECL 23.9.9&lt;br /&gt;
* Erlang 26&lt;br /&gt;
* zlib 1.3&lt;br /&gt;
* libsodium 1.0.19&lt;br /&gt;
* ICU 74.1&lt;br /&gt;
* Protobuf 24.4&lt;br /&gt;
* fmt 10&lt;br /&gt;
* PipeWire 1.0.0&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
[https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi] package has been simplified: there is now a single kernel flavor for each architecture. Previous [https://pkgs.alpinelinux.org/packages?name=linux-rpi2&amp;amp;branch=v3.18 linux-rpi2] and [https://pkgs.alpinelinux.org/packages?name=linux-rpi4&amp;amp;branch=v3.18 linux-rpi4] kernel packages are therefore replaced by [https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi].&amp;lt;br&amp;gt;&lt;br /&gt;
{{Path|config.txt}} file is now generated by [https://pkgs.alpinelinux.org/packages?name=raspberrypi-bootloader-common&amp;amp;branch=edge raspberrypi-bootloader-common].&lt;br /&gt;
&lt;br /&gt;
This also means that the prebuilt images and files to download and use for the various models have changed, see the [[Raspberry_Pi#Compability_list|Compability list]] for guidance.&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=OpenRC&amp;diff=25872</id>
		<title>OpenRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=OpenRC&amp;diff=25872"/>
		<updated>2023-12-12T11:26:48Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* cgroups v2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick-Start Information ==&lt;br /&gt;
Alpine Linux uses [https://github.com/OpenRC/openrc OpenRC] for its init system.&lt;br /&gt;
&lt;br /&gt;
The following commands are available to manage the init system:&lt;br /&gt;
* Basics:&lt;br /&gt;
 {{Cmd|rc-update add &amp;lt;service&amp;gt; &amp;lt;runlevel&amp;gt;}}&lt;br /&gt;
 {{Cmd|rc-update del &amp;lt;service&amp;gt; &amp;lt;runlevel&amp;gt;}}&lt;br /&gt;
 {{Cmd|rc-service &amp;lt;service&amp;gt; &amp;lt;start stop restart&amp;gt; # ⇔ /etc/init.d/service &amp;lt;start stop restart&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* To check services and their set runlevels:&lt;br /&gt;
 {{Cmd|rc-status}}&lt;br /&gt;
&lt;br /&gt;
* To change to a different runlevel:&lt;br /&gt;
 {{Cmd|openrc &amp;lt;runlevel&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* Reboot/Halt/Poweroff: (And their equivalent from traditional GNU/Linux systems)&lt;br /&gt;
 {{Cmd|reboot   # ⇔ shutdown now -r}}&lt;br /&gt;
 {{Cmd|halt     # ⇔ shutdown now -H}}&lt;br /&gt;
 {{Cmd|poweroff # ⇔ shutdown now -P}}&lt;br /&gt;
&lt;br /&gt;
== Available Runlevels ==&lt;br /&gt;
The available runlevels are:&lt;br /&gt;
* &#039;&#039;&#039;default&#039;&#039;&#039; - Used if no runlevel is specified. (This is generally the runlevel you want to add services to.)&lt;br /&gt;
* &#039;&#039;&#039;hotplugged&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;manual&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The special runlevels are:&lt;br /&gt;
* &#039;&#039;&#039;sysinit&#039;&#039;&#039; - Brings up system specific stuff such as &amp;lt;code&amp;gt;/dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; and optionally &amp;lt;code&amp;gt;/sys&amp;lt;/code&amp;gt; for Linux based systems. It also mounts &amp;lt;code&amp;gt;/lib/rc/init.d&amp;lt;/code&amp;gt; as a ramdisk using tmpfs where available unless &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; is mounted rw at boot. &amp;lt;code&amp;gt;&#039;&#039;&#039;rc&#039;&#039;&#039;&amp;lt;/code&amp;gt; uses &amp;lt;code&amp;gt;/lib/rc/init.d&amp;lt;/code&amp;gt; to hold state information about the services it runs. sysinit always runs when the host first starts and should not be run again.&lt;br /&gt;
* &#039;&#039;&#039;boot&#039;&#039;&#039; - Generally the only services you should add to the boot runlevel are those which deal with the mounting of filesystems, set the initial state of attached peripherals and logging. Hotplugged services are added to the boot runlevel by the system. All services in the boot and sysinit runlevels are automatically included in all other runlevels except for those listed here.&lt;br /&gt;
* &#039;&#039;&#039;single&#039;&#039;&#039; - Stops all services except for those in the sysinit runlevel.&lt;br /&gt;
* &#039;&#039;&#039;reboot&#039;&#039;&#039; - Changes to the shutdown runlevel and then reboots the host.&lt;br /&gt;
* &#039;&#039;&#039;shutdown&#039;&#039;&#039; - Changes to the shutdown runlevel and then halts the host.&lt;br /&gt;
&lt;br /&gt;
== rc-update usage ==&lt;br /&gt;
 Usage: rc-update [options] add service &amp;lt;runlevel&amp;gt;&lt;br /&gt;
        rc-update [options] del service &amp;lt;runlevel&amp;gt;&lt;br /&gt;
        rc-update [options] show&lt;br /&gt;
 &lt;br /&gt;
 Options: [suChqv]&lt;br /&gt;
   -s, --stack                       Stack a runlevel instead of a service&lt;br /&gt;
   -u, --update                      Force an update of the dependency tree&lt;br /&gt;
   -h, --help                        Display this help output&lt;br /&gt;
   -C, --nocolor                     Disable color output&lt;br /&gt;
   -v, --verbose                     Run verbosely&lt;br /&gt;
   -q, --quiet                       Run quietly&lt;br /&gt;
&lt;br /&gt;
== rc-status usage ==&lt;br /&gt;
 Usage: rc-status [options] [runlevel1] [runlevel2] ...&lt;br /&gt;
 &lt;br /&gt;
 Options: [aclrsuChqv]&lt;br /&gt;
   -a, --all                         Show services from all run levels&lt;br /&gt;
   -c, --crashed                     Show crashed services&lt;br /&gt;
   -l, --list                        Show list of run levels&lt;br /&gt;
   -r, --runlevel                    Show the name of the current runlevel&lt;br /&gt;
   -s, --servicelist                 Show service list&lt;br /&gt;
   -u, --unused                      Show services not assigned to any runlevel&lt;br /&gt;
   -h, --help                        Display this help output&lt;br /&gt;
   -C, --nocolor                     Disable color output&lt;br /&gt;
   -v, --verbose                     Run verbosely&lt;br /&gt;
   -q, --quiet                       Run quietly&lt;br /&gt;
&lt;br /&gt;
== rc-service usage ==&lt;br /&gt;
 Usage: rc-service [options]&lt;br /&gt;
 &lt;br /&gt;
 Options: [e:ilr:ChqVv]&lt;br /&gt;
   -e, --exists &amp;lt;arg&amp;gt;                tests if the service exists or not&lt;br /&gt;
   -i, --ifexists                    if the service exists then run the command&lt;br /&gt;
   -l, --list                        list all available services&lt;br /&gt;
   -r, --resolve &amp;lt;arg&amp;gt;               resolve the service name to an init script&lt;br /&gt;
   -h, --help                        Display this help output&lt;br /&gt;
   -C, --nocolor                     Disable color output&lt;br /&gt;
   -V, --version                     Display software version&lt;br /&gt;
   -v, --verbose                     Run verbosely&lt;br /&gt;
   -q, --quiet                       Run quietly&lt;br /&gt;
&lt;br /&gt;
== rc usage ==&lt;br /&gt;
 Usage: rc [options]&lt;br /&gt;
 &lt;br /&gt;
 Options: [a:o:s:SChqVv]&lt;br /&gt;
   -a, --applet &amp;lt;arg&amp;gt;                runs the applet specified by the next argument&lt;br /&gt;
   -o, --override &amp;lt;arg&amp;gt;              override the next runlevel to change into&lt;br /&gt;
                                     when leaving single user or boot runlevels&lt;br /&gt;
   -s, --service &amp;lt;arg&amp;gt;               runs the service specified with the rest&lt;br /&gt;
                                     of the arguments&lt;br /&gt;
   -S, --sys                         output the RC system type, if any&lt;br /&gt;
   -h, --help                        Display this help output&lt;br /&gt;
   -C, --nocolor                     Disable color output&lt;br /&gt;
   -V, --version                     Display software version&lt;br /&gt;
   -v, --verbose                     Run verbosely&lt;br /&gt;
   -q, --quiet                       Run quietly&lt;br /&gt;
&lt;br /&gt;
== Preventing slow services from delaying boot ==&lt;br /&gt;
&lt;br /&gt;
Services that take a while to start will block the boot process until they complete. E.g.: &amp;lt;code&amp;gt;iwd&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;networking&amp;lt;/code&amp;gt; might delay startup of an interactive system rather than start in the background.&lt;br /&gt;
&lt;br /&gt;
This can be remedied using [https://ptrcnull.me/posts/openrc-async-services/ async services]. See [https://wiki.gentoo.org/wiki/OpenRC/Stacked%20runlevel stacked runlevels] for more details on this.&lt;br /&gt;
&lt;br /&gt;
== cgroups v2 ==&lt;br /&gt;
&lt;br /&gt;
Since {{pkg|openrc}} 0.51 cgroups v2, or &amp;quot;unified&amp;quot;, is the default.&lt;br /&gt;
You can enable hybrid cgroups v1 &amp;amp; v2 by editing &amp;lt;code&amp;gt;/etc/rc.conf&amp;lt;/code&amp;gt; and setting &amp;lt;code&amp;gt;rc_cgroup_mode=&amp;quot;hybrid&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then you should run&lt;br /&gt;
 {{Cmd|rc-service cgroups start}}&lt;br /&gt;
to take effect&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
 {{Cmd|rc-update add cgroups}}&lt;br /&gt;
to auto mount the cgroup filesystem on boot&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/OpenRC Gentoo Wiki]&lt;br /&gt;
* [https://wiki.archlinux.org/title/OpenRC ArchWiki]&lt;br /&gt;
* [https://wiki.postmarketos.org/wiki/OpenRC PostmarketOS Wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Booting]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25870</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25870"/>
		<updated>2023-12-09T12:53:52Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Raspberry pi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to [https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license the relicensing of HashiCorp software] to [https://spdx.org/licenses/BUSL-1.1.html BUSL-1.1], a non-Open-Source license, the following software has been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
&lt;br /&gt;
GNOME packages have been updated to 45. As part of that release, Cheese has been replaced by Snapshot, and Eye of GNOME by Loupe as the default apps for taking and seeing pictures, respectively. In additions, GNOME Photos was dropped as being mostly unmaintained.&lt;br /&gt;
&lt;br /&gt;
=== Yggdrasil v0.5 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|yggdrasil}} was upgraded to 0.5.x and the new routing scheme is incompatible with previous versions. &amp;quot;Nodes running this new version &#039;&#039;&#039;will not&#039;&#039;&#039; be able to peer with earlier versions of Yggdrasil&amp;quot; ([https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.5.0 v0.5.0 release notes], [https://yggdrasil-network.github.io/2023/10/22/upcoming-v05-release.html v0.5 blog post]).&lt;br /&gt;
&lt;br /&gt;
=== GNU C Library Compatibility Layer ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;libc6-compat&amp;lt;/code&amp;gt; [https://git.alpinelinux.org/aports/commit/?h=3.19-stable&amp;amp;id=1a122638315d6fe7908de9c34d3ac06eae76917a was removed] in favor of {{pkg|gcompat}} from Adélie Linux.&lt;br /&gt;
&lt;br /&gt;
=== ifupdown ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;ifupdown&amp;lt;/code&amp;gt; aport (&#039;&#039;&#039;not&#039;&#039;&#039; {{pkg|busybox-ifupdown}}) was unmaintained and removed in favor of the preferred {{pkg|ifupdown-ng}}.&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
&lt;br /&gt;
* Linux 6.6&lt;br /&gt;
* GCC 13&lt;br /&gt;
* LLVM 17&lt;br /&gt;
* Kea 2.4&lt;br /&gt;
* Xen 4.18&lt;br /&gt;
* Git 2.43&lt;br /&gt;
* Perl 5.38&lt;br /&gt;
* PHP 8.3&lt;br /&gt;
* PostgreSQL 16&lt;br /&gt;
* SQLite 3.44&lt;br /&gt;
* Redis 7.2&lt;br /&gt;
* Node.js (lts) 20.10&lt;br /&gt;
* Node.js (current) 21.4&lt;br /&gt;
* QEMU 8.1&lt;br /&gt;
* Ceph 18.2&lt;br /&gt;
* GNOME 45&lt;br /&gt;
* LXQt 1.4&lt;br /&gt;
* wlroots 0.17&lt;br /&gt;
* Go 1.21&lt;br /&gt;
* Rust 1.72&lt;br /&gt;
* Crystal 1.10&lt;br /&gt;
* Racket 8.11&lt;br /&gt;
* ECL 23.9.9&lt;br /&gt;
* Erlang 26&lt;br /&gt;
* zlib 1.3&lt;br /&gt;
* libsodium 1.0.19&lt;br /&gt;
* ICU 74.1&lt;br /&gt;
* Protobuf 24.4&lt;br /&gt;
* fmt 10&lt;br /&gt;
* PipeWire 1.0.0&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
[https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi] package has been simplified: there is now a single kernel flavor for each architecture. Previous [https://pkgs.alpinelinux.org/packages?name=linux-rpi2&amp;amp;branch=v3.18 linux-rpi2] and [https://pkgs.alpinelinux.org/packages?name=linux-rpi4&amp;amp;branch=v3.18 linux-rpi4] kernel packages are therefore replaced by [https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi].&amp;lt;br&amp;gt;&lt;br /&gt;
{{Path|config.txt}} file is now generated by [https://pkgs.alpinelinux.org/packages?name=raspberrypi-bootloader-common&amp;amp;branch=edge raspberrypi-bootloader-common].&lt;br /&gt;
&lt;br /&gt;
This also means that the prebuilt images and files to download and use for the various models have changed, see the [[Raspberry_Pi#Compability_list|Compability list]] for guidance.&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25869</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25869"/>
		<updated>2023-12-09T12:53:17Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Raspberry pi */ Add information on changes to what image/file to download&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to [https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license the relicensing of HashiCorp software] to [https://spdx.org/licenses/BUSL-1.1.html BUSL-1.1], a non-Open-Source license, the following software has been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
&lt;br /&gt;
GNOME packages have been updated to 45. As part of that release, Cheese has been replaced by Snapshot, and Eye of GNOME by Loupe as the default apps for taking and seeing pictures, respectively. In additions, GNOME Photos was dropped as being mostly unmaintained.&lt;br /&gt;
&lt;br /&gt;
=== Yggdrasil v0.5 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|yggdrasil}} was upgraded to 0.5.x and the new routing scheme is incompatible with previous versions. &amp;quot;Nodes running this new version &#039;&#039;&#039;will not&#039;&#039;&#039; be able to peer with earlier versions of Yggdrasil&amp;quot; ([https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.5.0 v0.5.0 release notes], [https://yggdrasil-network.github.io/2023/10/22/upcoming-v05-release.html v0.5 blog post]).&lt;br /&gt;
&lt;br /&gt;
=== GNU C Library Compatibility Layer ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;libc6-compat&amp;lt;/code&amp;gt; [https://git.alpinelinux.org/aports/commit/?h=3.19-stable&amp;amp;id=1a122638315d6fe7908de9c34d3ac06eae76917a was removed] in favor of {{pkg|gcompat}} from Adélie Linux.&lt;br /&gt;
&lt;br /&gt;
=== ifupdown ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;ifupdown&amp;lt;/code&amp;gt; aport (&#039;&#039;&#039;not&#039;&#039;&#039; {{pkg|busybox-ifupdown}}) was unmaintained and removed in favor of the preferred {{pkg|ifupdown-ng}}.&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
&lt;br /&gt;
* Linux 6.6&lt;br /&gt;
* GCC 13&lt;br /&gt;
* LLVM 17&lt;br /&gt;
* Kea 2.4&lt;br /&gt;
* Xen 4.18&lt;br /&gt;
* Git 2.43&lt;br /&gt;
* Perl 5.38&lt;br /&gt;
* PHP 8.3&lt;br /&gt;
* PostgreSQL 16&lt;br /&gt;
* SQLite 3.44&lt;br /&gt;
* Redis 7.2&lt;br /&gt;
* Node.js (lts) 20.10&lt;br /&gt;
* Node.js (current) 21.4&lt;br /&gt;
* QEMU 8.1&lt;br /&gt;
* Ceph 18.2&lt;br /&gt;
* GNOME 45&lt;br /&gt;
* LXQt 1.4&lt;br /&gt;
* wlroots 0.17&lt;br /&gt;
* Go 1.21&lt;br /&gt;
* Rust 1.72&lt;br /&gt;
* Crystal 1.10&lt;br /&gt;
* Racket 8.11&lt;br /&gt;
* ECL 23.9.9&lt;br /&gt;
* Erlang 26&lt;br /&gt;
* zlib 1.3&lt;br /&gt;
* libsodium 1.0.19&lt;br /&gt;
* ICU 74.1&lt;br /&gt;
* Protobuf 24.4&lt;br /&gt;
* fmt 10&lt;br /&gt;
* PipeWire 1.0.0&lt;br /&gt;
&lt;br /&gt;
== Raspberry pi ==&lt;br /&gt;
&lt;br /&gt;
[https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi] package has been simplified: there is now a single kernel flavor for each architecture. Previous [https://pkgs.alpinelinux.org/packages?name=linux-rpi2&amp;amp;branch=v3.18 linux-rpi2] and [https://pkgs.alpinelinux.org/packages?name=linux-rpi4&amp;amp;branch=v3.18 linux-rpi4] kernel packages are therefore replaced by [https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi].&amp;lt;br&amp;gt;&lt;br /&gt;
{{Path|config.txt}} file is now generated by [https://pkgs.alpinelinux.org/packages?name=raspberrypi-bootloader-common&amp;amp;branch=edge raspberrypi-bootloader-common].&lt;br /&gt;
&lt;br /&gt;
This also means that the prebuilt images and files to download and use for the various models have changed, see the [[Raspberry_Pi#Compability_list|Compability list]] for guidance.&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Raspberry_Pi&amp;diff=25868</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Raspberry_Pi&amp;diff=25868"/>
		<updated>2023-12-09T12:44:38Z</updated>

		<summary type="html">&lt;p&gt;Omni: Add compability list and remove invalid suggestions from the first preparation step&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{warning | 11 Feb 2021 - There is currently a known bug upstream &amp;lt;br /&amp;gt;[https://github.com/raspberrypi/firmware/issues/1529 kernel/initramfs cannot be loaded from subdirectory with same name as volume label]. Since the kernel is installed to &amp;lt;code&amp;gt;boot/&amp;lt;/code&amp;gt;, you must not use a label named &amp;lt;code&amp;gt;boot&amp;lt;/code&amp;gt; for the fat32 partition. }}&lt;br /&gt;
&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
This tutorial explains how to install Alpine Linux on a Raspberry Pi. Alpine Linux will be installed in [[Installation#Diskless_Mode|diskless mode]], hence, [[Alpine local backup|Alpine Local Backup (lbu)]] is required to save modifications between reboots.&lt;br /&gt;
&lt;br /&gt;
For scenarios where there is not expected to be significant changes to disk after setup (like running a static HTTP server), this is likely preferable, as running the entire system from memory will improve performance (by avoiding the slow SD card) and improve the SD card life (by reducing the writes to the card, as all logging will happen in RAM). Diskless installations still allow you to install packages, save local files, and tune the system to your needs.&lt;br /&gt;
&lt;br /&gt;
If any of the following apply, then installation in [[Classic install or sys mode on Raspberry Pi|sys-mode installation]] is likely more appropriate.&lt;br /&gt;
&lt;br /&gt;
* There will be constant changes to the disk after initial setup (for example, if you expect people to login and save files to their home directories)&lt;br /&gt;
* Logs should persists across reboots&lt;br /&gt;
* Plan to install packages which consume more space than can be loaded into RAM&lt;br /&gt;
* Plan to install kernel modules (such as ZFS)&lt;br /&gt;
&lt;br /&gt;
== Compability list ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;armhf&#039;&#039;&#039; (defconfig bcmrpi) - Raspberry Pi 1, Zero, ZeroW, cm1&lt;br /&gt;
* &#039;&#039;&#039;armv7&#039;&#039;&#039; (defconfig bcm2709) - Raspberry Pi 2, 3, 3+, Zero2W, cm3, cm3+&lt;br /&gt;
* &#039;&#039;&#039;aarch64&#039;&#039;&#039; (defconfig bcm2711) - Raspberry Pi 3, 3+, 4, 400, Zero2W, cm3, cm3+, cm4, 5&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
# [https://alpinelinux.org/downloads/ Download] the Alpine for Raspberry Pi tarball. Use the compability list above when choosing image/file to download. &lt;br /&gt;
# [[Create_a_Bootable_Device#Manually_copying_Alpine_files|Create a bootable FAT32 partition on your SD card.]] The partitioning and formatting part of the instructions on the linked page could be done using a graphical partitioning tool such as [https://en.wikipedia.org/wiki/GNOME_Disks gnome-disks], just make sure the partition type is &amp;lt;code&amp;gt;W95 FAT32 (LBA)&amp;lt;/code&amp;gt;. (The current type can be found in the &amp;quot;Type&amp;quot; column in the output of &amp;lt;code&amp;gt;fdisk -l&amp;lt;/code&amp;gt;.)&lt;br /&gt;
# Extract the tarball to the root of the bootable FAT32 partition.&lt;br /&gt;
&lt;br /&gt;
To setup a headless system, a bootstrapping configuration overlay file [https://github.com/macmpi/alpine-linux-headless-bootstrap  headless.apkovl.tar.gz] may be added to enable basic networking, so that following configuration steps can be performed under &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt;. Pi Zero may be configured with simple USB ethernet-gadget networking with another computer sharing its internet connection.&lt;br /&gt;
&lt;br /&gt;
Optionally create a &#039;&#039;&#039;usercfg.txt&#039;&#039;&#039; file on the partition to configure low-level system settings. Specifications can be found [https://www.raspberrypi.org/documentation/configuration/config-txt here]. However, note some settings can only be set directly in &#039;&#039;&#039;config.txt&#039;&#039;&#039;, which may be overwritten after updates. In particular, &amp;lt;code&amp;gt;gpu_mem&amp;lt;/code&amp;gt; will have no effect when specified in &#039;&#039;&#039;usercfg.txt&#039;&#039;&#039; ([https://github.com/raspberrypi/firmware/issues/1332 source]). Some interesting values include:&lt;br /&gt;
* To enable the UART console: &amp;lt;code&amp;gt;enable_uart=1&amp;lt;/code&amp;gt;&lt;br /&gt;
* To enable audio: &amp;lt;code&amp;gt;dtparam=audio=on&amp;lt;/code&amp;gt;&lt;br /&gt;
* If you see black edges around your screen after booting the Pi, you can add &amp;lt;code&amp;gt;disable_overscan=1&amp;lt;/code&amp;gt;&lt;br /&gt;
* If you plan to install on a Pi Compute Module 4 with I/O board, you may need to add: &amp;lt;code&amp;gt;otg_mode=1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recent versions include Broadcom firmware files. If you&#039;re using an older Alpine version, see [[#Wireless_support_with_older_Alpine_images|section below]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Follow these steps to install Alpine Linux in Diskless Mode:&lt;br /&gt;
&lt;br /&gt;
# Insert the SD card into the Raspberry Pi and power it on&lt;br /&gt;
# Login into the Alpine system as root.  Leave the password empty.&lt;br /&gt;
# Type &amp;lt;code&amp;gt;setup-alpine&amp;lt;/code&amp;gt;&lt;br /&gt;
# Once the installation is complete, commit the changes by typing &amp;lt;code&amp;gt;lbu commit -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt; to verify that the installation was indeed successful.&lt;br /&gt;
&lt;br /&gt;
== Post Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Update the System ===&lt;br /&gt;
&lt;br /&gt;
After installation, make sure your system is up-to-date:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk update&lt;br /&gt;
apk upgrade}}&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to save the changes:&lt;br /&gt;
&lt;br /&gt;
{{cmd|lbu commit -d}}&lt;br /&gt;
&lt;br /&gt;
Note: this does not upgrade the kernel. In order to upgrade the kernel, a full upgrade of the Alpine Linux version must be performed as described in [[Upgrading Alpine#Upgrading Alpine Linux on other removable media (such as CF/USB)|upgrading Alpine Linux for removable media]].&lt;br /&gt;
&lt;br /&gt;
=== Clock-related error messages ===&lt;br /&gt;
&lt;br /&gt;
During the booting time, you might notice errors related to the hardware clock.  The Raspberry Pi does not have&lt;br /&gt;
a hardware clock, thus you need to disable the hwclock daemon and enable swclock:&lt;br /&gt;
&lt;br /&gt;
{{cmd|rc-update add swclock boot    # enable the software clock&lt;br /&gt;
rc-update del hwclock boot    # disable the hardware clock}}&lt;br /&gt;
&lt;br /&gt;
Since the Raspberry Pi does not have a clock, Alpine Linux needs to know what the time is by using a&lt;br /&gt;
[https://en.wikipedia.org/wiki/Network_Time_Protocol Network Time Protocol (NTP)] daemon.  Make sure you have a&lt;br /&gt;
NTP daemon installed and running.  If you are not sure, you can install an NTP client by running the following&lt;br /&gt;
command:&lt;br /&gt;
&lt;br /&gt;
{{cmd|setup-ntp}}&lt;br /&gt;
&lt;br /&gt;
The Busybox NTP client might be the most lightweight solution.  Save the changes and reboot, once the NTP software is&lt;br /&gt;
installed and running:&lt;br /&gt;
&lt;br /&gt;
{{cmd|lbu commit -d&lt;br /&gt;
reboot}}&lt;br /&gt;
&lt;br /&gt;
After reboot, make sure the &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; command outputs the correct date and time.&lt;br /&gt;
&lt;br /&gt;
=== WiFi on boot ===&lt;br /&gt;
If you have already [[Connecting_to_a_wireless_access_point|configured WiFi]] during the setup, the connection will not return on reboot.&lt;br /&gt;
You will need to start up a service to automatically connect to the wireless access point.&lt;br /&gt;
# Run &amp;lt;code&amp;gt;rc-update add wpa_supplicant boot&amp;lt;/code&amp;gt; to connect to the wireless access point during bootup.&lt;br /&gt;
# Run it manually with &amp;lt;code&amp;gt;rc-service wpa_supplicant start&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Enable Graphics ===&lt;br /&gt;
Remount the boot partition writeable (i.e. &amp;lt;code&amp;gt;/media/mmcblk0p1&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
{{cmd|mount /media/mmcblk0p1 -o rw,remount}}&lt;br /&gt;
&lt;br /&gt;
Add the following lines to &amp;lt;code&amp;gt;/media/mmcblk0p1/config.txt&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 dtoverlay=vc4-kms-v3d&lt;br /&gt;
&lt;br /&gt;
If you are experiencing graphical issues, you can also try:&lt;br /&gt;
&lt;br /&gt;
 dtoverlay=vc4-fkms-v3d&lt;br /&gt;
&lt;br /&gt;
And perhaps also raising the default &amp;lt;code&amp;gt;gpu_mem&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 gpu_mem=128&lt;br /&gt;
&lt;br /&gt;
Note that raising the gpu memory is not likely to [https://www.raspberrypi.com/documentation/computers/config_txt.html#gpu_mem actually improve performance on the Pi4]&lt;br /&gt;
&lt;br /&gt;
Install the Mesa drivers:&lt;br /&gt;
&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;apk add mesa-dri-gallium&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Then reboot:&lt;br /&gt;
&lt;br /&gt;
{{cmd|lbu_commit -d; reboot}}&lt;br /&gt;
&lt;br /&gt;
=== WiFi drivers ===&lt;br /&gt;
As of Alpine 3.14, the WiFi drivers for the Raspberry Pi were moved from &amp;lt;code&amp;gt;linux-firmware-brcm&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;linux-firmware-cypress&amp;lt;/code&amp;gt; package (source?). Since the images seem to be an outdated version of the former, Wi-Fi will work during installation, but after the first update it will break.&lt;br /&gt;
Use the ethernet interface to download the required packages:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add linux-firmware-cypress}}&lt;br /&gt;
&lt;br /&gt;
And reboot.&lt;br /&gt;
&lt;br /&gt;
== Persistent storage ==&lt;br /&gt;
=== Loopback image with overlayfs ===&lt;br /&gt;
&lt;br /&gt;
When you install Alpine in diskless mode, the entire system is loaded into memory at boot. If you want additional storage (for example, if you need more space than offered by your RAM) we need to create loop-back storage onto the SD card mounted with overlayfs.&lt;br /&gt;
&lt;br /&gt;
First, make the SD card writable again and change fstab to always do so:&lt;br /&gt;
{{cmd|mount /media/mmcblk0p1 -o rw,remount&lt;br /&gt;
sed -i &#039;s/vfat\ ro,/vfat\ rw,/&#039; /etc/fstab}}&lt;br /&gt;
&lt;br /&gt;
Create the loop-back file, this example is 1 GB:&lt;br /&gt;
&lt;br /&gt;
{{cmd|dd if&amp;amp;#61;/dev/zero of&amp;amp;#61;/media/mmcblk0p1/persist.img bs&amp;amp;#61;1024 count&amp;amp;#61;0 seek&amp;amp;#61;1048576}}&lt;br /&gt;
&lt;br /&gt;
Install the ext utilities:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add e2fsprogs}}&lt;br /&gt;
&lt;br /&gt;
Format the loop-back file:&lt;br /&gt;
&lt;br /&gt;
{{cmd|mkfs.ext4 /media/mmcblk0p1/persist.img}}&lt;br /&gt;
&lt;br /&gt;
Mount the storage: &lt;br /&gt;
&lt;br /&gt;
{{cmd|echo &amp;quot;/media/mmcblk0p1/persist.img /media/persist ext4 rw,relatime,errors&amp;amp;#61;remount-ro 0 0&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
mkdir /media/persist &lt;br /&gt;
mount -a}}&lt;br /&gt;
&lt;br /&gt;
Make the overlay folders, we are using the /usr directory here, but you can use /home or anything else. &lt;br /&gt;
{{Warning|Overlay workdir needs to be an empty directory on the same filesystem mount as the upper directory. So each overlay must use its own workdir.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cmd|mkdir /media/persist/usr &lt;br /&gt;
mkdir /media/persist/.work_usr &lt;br /&gt;
echo &amp;quot;overlay /usr overlay lowerdir&amp;amp;#61;/usr,upperdir&amp;amp;#61;/media/persist/usr,workdir&amp;amp;#61;/media/persist/.work_usr 0 0&amp;quot; &amp;gt;&amp;gt; /etc/fstab &lt;br /&gt;
mount -a}}&lt;br /&gt;
&lt;br /&gt;
Your /etc/fstab should look something like this:&lt;br /&gt;
{{Cmd|/dev/cdrom      /media/cdrom    iso9660 noauto,ro 0 0&lt;br /&gt;
/dev/usbdisk    /media/usb      vfat    noauto,ro 0 0&lt;br /&gt;
/dev/mmcblk0p1 /media/mmcblk0p1 vfat rw,relatime,fmask&amp;amp;#61;0022,dmask&amp;amp;#61;0022,errors&amp;amp;#61;remount-ro 0 0&lt;br /&gt;
/media/mmcblk0p1/persist.img /media/persist ext4 rw,relatime,errors&amp;amp;#61;remount-ro 0 0&lt;br /&gt;
overlay /usr overlay lowerdir&amp;amp;#61;/usr,upperdir&amp;amp;#61;/media/persist/usr,workdir&amp;amp;#61;/media/persist/.work_usr 0 0}}&lt;br /&gt;
&lt;br /&gt;
Now commit the changes: (optionally remove the e2fsprogs, but it does contain repair tools)&lt;br /&gt;
{{cmd|lbu_commit -d}}&lt;br /&gt;
&lt;br /&gt;
Remember, with this setup if you install things and you have done this overlay for /usr, you must not commit the &#039;apk add&#039;, otherwise, while it boots it will try and install it to memory, not to the persistent storage.&lt;br /&gt;
&lt;br /&gt;
If you do want to install something small at boot, you can use &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lbu commit -d&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If it is something a bit bigger, then you can use &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; but then not commit it. It will be persistent (in &amp;lt;code&amp;gt;/user&amp;lt;/code&amp;gt;), but be sure to check everything you need is in that directory and not in folders you have not made persistent.&lt;br /&gt;
&lt;br /&gt;
=== Traditional disk-based (sys) installation ===&lt;br /&gt;
{{Merge|Classic install or sys mode on Raspberry Pi|There&#039;s an existing page for sys-installations on RasPi.}}&lt;br /&gt;
&lt;br /&gt;
It is also possible to switch to a fully disk-based installation. This is not yet formally supported, but can be done somewhat manually. This frees all the memory otherwise needed for the root filesystem, allowing more installed packages.&lt;br /&gt;
&lt;br /&gt;
Split your SD card into two partitions: the FAT32 boot partition described above (in this example it&#039;ll be &amp;lt;code&amp;gt;mmcblk0p1&amp;lt;/code&amp;gt;) , and a second partition to hold the root filesystem (here it&#039;ll be &amp;lt;code&amp;gt;mmcblk0p2&amp;lt;/code&amp;gt;). Boot and configure your diskless system as above, then create a root filesystem:&lt;br /&gt;
&lt;br /&gt;
{{cmd|apk add e2fsprogs&lt;br /&gt;
mkfs.ext4 /dev/mmcblk0p2}}&lt;br /&gt;
&lt;br /&gt;
Now do a disk install via a mountpoint. The &amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; script will give some errors about syslinux/extlinux, but you can ignore them.&lt;br /&gt;
The Raspberry Pi doesn&#039;t need them to boot.&lt;br /&gt;
&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;mkdir /stage&lt;br /&gt;
mount /dev/mmcblk0p2 /stage&lt;br /&gt;
setup-disk -o /media/mmcblk0p1/MYHOSTNAME.apkovl.tar.gz /stage&lt;br /&gt;
# (ignore errors about syslinux/extlinux)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Add a line to &amp;lt;code&amp;gt;/stage/etc/fstab&amp;lt;/code&amp;gt; to mount the Pi&#039;s boot partition again:&lt;br /&gt;
&lt;br /&gt;
{{cmd|/dev/mmcblk0p1 /media/mmcblk0p1 vfat defaults 0 0}}&lt;br /&gt;
&lt;br /&gt;
Now add a &amp;lt;code&amp;gt;root=/dev/mmcblk0p2&amp;lt;/code&amp;gt; parameter to the Pi&#039;s boot command line, either &amp;lt;code&amp;gt;cmdline-rpi2.txt&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cmdline-rpi.txt&amp;lt;/code&amp;gt; depending on model:&lt;br /&gt;
&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;mount -o remount,rw /media/mmcblk0p1&lt;br /&gt;
sed -i &#039;$ s/$/ root=\/dev\/mmcblk0p2/&#039; /media/mmcblk0p1/cmdline-rpi2.txt&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
You might also consider &amp;lt;code&amp;gt;overlaytmpfs=yes&amp;lt;/code&amp;gt; here, which will cause the underlying SD card root filesystem to be mounted read-only, with an overlayed tmpfs for modifications which will be discarded at shutdown.&lt;br /&gt;
&lt;br /&gt;
N.B. &amp;lt;b&amp;gt;the contents of /boot will be ignored when the Pi boots&amp;lt;/b&amp;gt;. It will use the kernel, initramfs, and modloop images from the FAT32 boot partition. To update the kernel, initfs or modules, you will need to manually (generate and) copy these to the boot partition or you could use bind mount, in which case,&lt;br /&gt;
copying the files to boot partition manually, is not needed.&lt;br /&gt;
&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;echo /media/mmcblk0p1/boot /boot none defaults,bind 0 0 &amp;gt;&amp;gt; /etc/fstab&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Persistent Installation on Raspberry Pi 3 ===&lt;br /&gt;
See [[Classic install or sys mode on Raspberry Pi]] and https://web.archive.org/web/20171125115835/https://forum.alpinelinux.org/comment/1084#comment-1084&lt;br /&gt;
&lt;br /&gt;
=== Persistent Installation on Raspberry Pi 4 ===&lt;br /&gt;
As of 3.14, setup-alpine should ask you if you want to create a sys mode partition on your Raspberry Pi 4.&lt;br /&gt;
&lt;br /&gt;
== Netboot ==&lt;br /&gt;
&lt;br /&gt;
=== Netbooting Raspberry Pi 4 ===&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi 4 bootloader can be configured to boot from the network [https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-bootloader-configuration]. Configure the bootloader with at least&lt;br /&gt;
&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;BOOT_ORDER=0xf142&lt;br /&gt;
TFTP_PREFIX=1&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
and optionally also {{cmd|&amp;lt;nowiki&amp;gt;TFTP_IP=x.x.x.x&amp;lt;/nowiki&amp;gt;}} where &amp;lt;code&amp;gt;x.x.x.x&amp;lt;/code&amp;gt; is the IP address of your TFTP server.&lt;br /&gt;
&lt;br /&gt;
If not configuring &amp;lt;code&amp;gt;TFTP_IP&amp;lt;/code&amp;gt; in the bootloader, you&#039;ll need to configure your DHCP server to advertise the TFTP server IP address. This varies depending on your DHCP server; use the following details if applicable:&lt;br /&gt;
&lt;br /&gt;
# Vendor class: &amp;lt;code&amp;gt;PXEClient:Arch:00000:UNDI:002001&amp;lt;/code&amp;gt;&lt;br /&gt;
# Filename: &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The minimal set of files that your TFTP server needs to host are:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;bcm2711-rpi-4-b.dtb&amp;lt;/code&amp;gt; (from [https://raw.githubusercontent.com/raspberrypi/firmware/master/boot/bcm2711-rpi-4-b.dtb raspberrypi/firmware/master/boot/bcm2711-rpi-4-b.dtb])&lt;br /&gt;
# &amp;lt;code&amp;gt;cmdline.txt&amp;lt;/code&amp;gt; (see below)&lt;br /&gt;
# &amp;lt;code&amp;gt;config.txt&amp;lt;/code&amp;gt; (see below)&lt;br /&gt;
# &amp;lt;code&amp;gt;fixup4.dat&amp;lt;/code&amp;gt; (from [https://raw.githubusercontent.com/raspberrypi/firmware/master/boot/fixup4.dat raspberrypi/firmware/master/boot/fixup4.dat], alternatively &amp;lt;code&amp;gt;fixup4cd.dat&amp;lt;/code&amp;gt; for the cut down version)&lt;br /&gt;
# &amp;lt;code&amp;gt;initramfs-rpi4&amp;lt;/code&amp;gt; (from [https://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot/initramfs-rpi4 alpine/edge/releases/aarch64/netboot/initramfs-rpi4])&lt;br /&gt;
# &amp;lt;code&amp;gt;start4.elf&amp;lt;/code&amp;gt; (from [https://raw.githubusercontent.com/raspberrypi/firmware/master/boot/start4.elf raspberrypi/firmware/master/boot/start4.elf], alternatively &amp;lt;code&amp;gt;start4cd.elf&amp;lt;/code&amp;gt; for the cut down version)&lt;br /&gt;
# &amp;lt;code&amp;gt;vmlinuz-rpi4&amp;lt;/code&amp;gt; (from [https://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot/vmlinuz-rpi4 alpine/edge/releases/aarch64/netboot/vmlinuz-rpi4])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;config.txt&amp;lt;/code&amp;gt;:&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;[pi4]&lt;br /&gt;
kernel=vmlinuz-rpi4&lt;br /&gt;
initramfs initramfs-rpi4&lt;br /&gt;
arm_64bit=1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cmdline.txt&amp;lt;/code&amp;gt;:&lt;br /&gt;
{{cmd|&amp;lt;nowiki&amp;gt;modules=loop,squashfs console=ttyAMA0,115200 ip=dhcp alpine_repo=http://dl-cdn.alpinelinux.org/alpine/edge/main modloop=http://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot/modloop-rpi4&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Instead of using the &amp;lt;nowiki&amp;gt;http://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot/&amp;lt;/nowiki&amp;gt; base URL above, pinning to a specific point in time is preferred. Raspberry Pi 4 netboot files are available from https://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot-20230329/ onward.&lt;br /&gt;
&lt;br /&gt;
With the above configured the Raspberry Pi 4 should be able to boot from the network without an SD card.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Long boot time when running headless ===&lt;br /&gt;
&lt;br /&gt;
If no peripherals are connected, the system might hang for an exceptionally long period of time while it attempts to accumulate entropy.&lt;br /&gt;
&lt;br /&gt;
If this is the case, simply plugging in any USB device should work around this issue, since it increases the amount of entropy available to the kernel via interrupts.&lt;br /&gt;
&lt;br /&gt;
=== apk indicating &#039;No space left on device&#039; ===&lt;br /&gt;
&lt;br /&gt;
Note some models of the Raspberry Pi such as the 3A+ only have 512M of RAM, which on fresh Alpine deployment will only leave around 200M for tmpfs root. It&#039;s important to keep this limitation in mind when using these boards.&lt;br /&gt;
&lt;br /&gt;
=== Wireless support with older Alpine images ===&lt;br /&gt;
&lt;br /&gt;
If you need Wi-Fi, you&#039;ll need to [https://github.com/RPi-Distro/firmware-nonfree/tree/master/brcm download] the latest Broadcom drivers to your SD card.&lt;br /&gt;
(Replace /mnt/sdcard with the correct mount point.)&lt;br /&gt;
&lt;br /&gt;
  git clone --depth 1 https://github.com/RPi-Distro/firmware-nonfree.git&lt;br /&gt;
  cp firmware-nonfree/brcm/* /mnt/sdcard/firmware/brcm&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Classic install or sys mode on Raspberry Pi]] - a variant.&lt;br /&gt;
* [[Raspberry Pi 3 - Setting Up Bluetooth]]&lt;br /&gt;
* [[Raspberry Pi 3 - Configuring it as wireless access point -AP Mode]]&lt;br /&gt;
* [[Raspberry Pi 3 - Browser Client]]&lt;br /&gt;
* [[Linux Router with VPN on a Raspberry Pi]]&lt;br /&gt;
* [[Create a bootable SDHC from a Mac]]&lt;br /&gt;
* Build custom Raspberry Pi images based on Alpine via [https://github.com/tolstoyevsky/pieman Pieman]&lt;br /&gt;
* [[Tutorials and Howtos#Raspberry Pi]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category: Raspberry]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25865</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25865"/>
		<updated>2023-12-07T11:50:46Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Others */  use code tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to [https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license the relicensing of HashiCorp software] to [https://spdx.org/licenses/BUSL-1.1.html BUSL-1.1], a non-Open-Source license, the following software have been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
&lt;br /&gt;
GNOME packages have been updated to 45. As part of that release, Cheese has been replaced by Snapshot, and Eye of GNOME by Loupe as the default apps for taking and seeing pictures, respectively. In additions, GNOME Photos was dropped as being mostly unmaintained.&lt;br /&gt;
&lt;br /&gt;
=== Yggdrasil v0.5 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|yggdrasil}} was upgraded to 0.5.x and the new routing scheme is incompatible with previous versions. &amp;quot;Nodes running this new version &#039;&#039;&#039;will not&#039;&#039;&#039; be able to peer with earlier versions of Yggdrasil&amp;quot; ([https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.5.0 v0.5.0 release notes], [https://yggdrasil-network.github.io/2023/10/22/upcoming-v05-release.html v0.5 blog post]).&lt;br /&gt;
&lt;br /&gt;
=== GNU C Library Compatibility Layer ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;libc6-compat&amp;lt;/code&amp;gt; [https://git.alpinelinux.org/aports/commit/?h=3.19-stable&amp;amp;id=1a122638315d6fe7908de9c34d3ac06eae76917a was removed] in favor of {{pkg|gcompat}} from Adélie Linux.&lt;br /&gt;
&lt;br /&gt;
=== ifupdown ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;ifupdown&amp;lt;/code&amp;gt; aport (&#039;&#039;&#039;not&#039;&#039;&#039; {{pkg|busybox-ifupdown}}) was unmaintained and removed in favor of the preferred {{pkg|ifupdown-ng}}.&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
&lt;br /&gt;
* Linux 6.6&lt;br /&gt;
* GCC 13&lt;br /&gt;
* LLVM 17&lt;br /&gt;
* Kea 2.4&lt;br /&gt;
* Xen 4.18&lt;br /&gt;
* Git 2.43&lt;br /&gt;
* Perl 5.38&lt;br /&gt;
* PHP 8.3&lt;br /&gt;
* PostgreSQL 16&lt;br /&gt;
* SQLite 3.44&lt;br /&gt;
* Redis 7.2&lt;br /&gt;
* Node.js (lts) 20.10&lt;br /&gt;
* Node.js (current) 21.4&lt;br /&gt;
* QEMU 8.1&lt;br /&gt;
* Ceph 18.2&lt;br /&gt;
* GNOME 45&lt;br /&gt;
* LXQt 1.4&lt;br /&gt;
* wlroots 0.17&lt;br /&gt;
* Go 1.21&lt;br /&gt;
* Rust 1.72&lt;br /&gt;
* Crystal 1.10&lt;br /&gt;
* Racket 8.11&lt;br /&gt;
* ECL 23.9.9&lt;br /&gt;
* Erlang 26&lt;br /&gt;
* zlib 1.3&lt;br /&gt;
* libsodium 1.0.19&lt;br /&gt;
* ICU 74.1&lt;br /&gt;
* Protobuf 24.4&lt;br /&gt;
* fmt 10&lt;br /&gt;
* PipeWire 1.0.0&lt;br /&gt;
&lt;br /&gt;
== Raspberry pi ==&lt;br /&gt;
&lt;br /&gt;
[https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi] package has been simplified: there is now a single kernel flavor for each architecture. Previous [https://pkgs.alpinelinux.org/packages?name=linux-rpi2&amp;amp;branch=v3.18 linux-rpi2] and [https://pkgs.alpinelinux.org/packages?name=linux-rpi4&amp;amp;branch=v3.18 linux-rpi4] kernel packages are therefore replaced by [https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi].&amp;lt;br&amp;gt;&lt;br /&gt;
{{Path|config.txt}} file is now generated by [https://pkgs.alpinelinux.org/packages?name=raspberrypi-bootloader-common&amp;amp;branch=edge raspberrypi-bootloader-common].&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25863</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25863"/>
		<updated>2023-12-07T11:04:42Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Others */ ifupdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to [https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license the relicensing of HashiCorp software] to [https://spdx.org/licenses/BUSL-1.1.html BUSL-1.1], a non-Open-Source license, the following software have been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
&lt;br /&gt;
GNOME packages have been updated to 45. As part of that release, Cheese has been replaced by Snapshot, and Eye of GNOME by Loupe as the default apps for taking and seeing pictures, respectively. In additions, GNOME Photos was dropped as being mostly unmaintained.&lt;br /&gt;
&lt;br /&gt;
=== Yggdrasil v0.5 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|yggdrasil}} was upgraded to 0.5.x and the new routing scheme is incompatible with previous versions. &amp;quot;Nodes running this new version &#039;&#039;&#039;will not&#039;&#039;&#039; be able to peer with earlier versions of Yggdrasil&amp;quot; ([https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.5.0 v0.5.0 release notes], [https://yggdrasil-network.github.io/2023/10/22/upcoming-v05-release.html v0.5 blog post]).&lt;br /&gt;
&lt;br /&gt;
=== GNU C Library Compatibility Layer ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;libc6-compat&#039;&#039; [https://git.alpinelinux.org/aports/commit/?h=3.19-stable&amp;amp;id=1a122638315d6fe7908de9c34d3ac06eae76917a was removed] in favor of {{pkg|gcompat}} from Adélie Linux.&lt;br /&gt;
&lt;br /&gt;
=== ifupdown ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ifupdown&#039;&#039; aport (&#039;&#039;&#039;not&#039;&#039;&#039; {{pkg|busybox-ifupdown}}) was unmaintained and removed in favor of the preferred {{pkg|ifupdown-ng}}.&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
&lt;br /&gt;
* Linux 6.6&lt;br /&gt;
* GCC 13&lt;br /&gt;
* LLVM 17&lt;br /&gt;
* Kea 2.4&lt;br /&gt;
* Xen 4.18&lt;br /&gt;
* Git 2.43&lt;br /&gt;
* Perl 5.38&lt;br /&gt;
* PHP 8.3&lt;br /&gt;
* PostgreSQL 16&lt;br /&gt;
* SQLite 3.44&lt;br /&gt;
* Redis 7.2&lt;br /&gt;
* Node.js (lts) 20.10&lt;br /&gt;
* Node.js (current) 21.4&lt;br /&gt;
* QEMU 8.1&lt;br /&gt;
* Ceph 18.2&lt;br /&gt;
* GNOME 45&lt;br /&gt;
* LXQt 1.4&lt;br /&gt;
* wlroots 0.17&lt;br /&gt;
* Go 1.21&lt;br /&gt;
* Rust 1.72&lt;br /&gt;
* Crystal 1.10&lt;br /&gt;
* Racket 8.11&lt;br /&gt;
* ECL 23.9.9&lt;br /&gt;
* Erlang 26&lt;br /&gt;
* zlib 1.3&lt;br /&gt;
* libsodium 1.0.19&lt;br /&gt;
* ICU 74.1&lt;br /&gt;
* Protobuf 24.4&lt;br /&gt;
* fmt 10&lt;br /&gt;
* PipeWire 1.0.0&lt;br /&gt;
&lt;br /&gt;
== Raspberry pi ==&lt;br /&gt;
&lt;br /&gt;
The [https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi] has been simplified. There is now a single kernel flavor for each architecture. This means that the kernels [https://pkgs.alpinelinux.org/packages?name=linux-rpi2&amp;amp;branch=v3.18 linux-rpi2] and [https://pkgs.alpinelinux.org/packages?name=linux-rpi4&amp;amp;branch=v3.18 linux-rpi4] are replaced with [https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi]. The {{Path|config.txt}} is now generated by [https://pkgs.alpinelinux.org/packages?name=raspberrypi-bootloader-common&amp;amp;branch=edge raspberrypi-bootloader-common].&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25862</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25862"/>
		<updated>2023-12-07T10:52:14Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Others */ gcompat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to [https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license the relicensing of HashiCorp software] to [https://spdx.org/licenses/BUSL-1.1.html BUSL-1.1], a non-Open-Source license, the following software have been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
&lt;br /&gt;
GNOME packages have been updated to 45. As part of that release, Cheese has been replaced by Snapshot, and Eye of GNOME by Loupe as the default apps for taking and seeing pictures, respectively. In additions, GNOME Photos was dropped as being mostly unmaintained.&lt;br /&gt;
&lt;br /&gt;
=== Yggdrasil v0.5 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|yggdrasil}} was upgraded to 0.5.x and the new routing scheme is incompatible with previous versions. &amp;quot;Nodes running this new version &#039;&#039;&#039;will not&#039;&#039;&#039; be able to peer with earlier versions of Yggdrasil&amp;quot; ([https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.5.0 v0.5.0 release notes], [https://yggdrasil-network.github.io/2023/10/22/upcoming-v05-release.html v0.5 blog post]).&lt;br /&gt;
&lt;br /&gt;
=== GNU C Library Compatibility Layer ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;libc6-compat&#039;&#039; [https://git.alpinelinux.org/aports/commit/?h=3.19-stable&amp;amp;id=1a122638315d6fe7908de9c34d3ac06eae76917a was removed] in favor of {{pkg|gcompat}} from Adélie Linux.&lt;br /&gt;
&lt;br /&gt;
== Upgrades ==&lt;br /&gt;
&lt;br /&gt;
* Linux 6.6&lt;br /&gt;
* GCC 13&lt;br /&gt;
* LLVM 17&lt;br /&gt;
* Kea 2.4&lt;br /&gt;
* Xen 4.18&lt;br /&gt;
* Git 2.43&lt;br /&gt;
* Perl 5.38&lt;br /&gt;
* PHP 8.3&lt;br /&gt;
* PostgreSQL 16&lt;br /&gt;
* SQLite 3.44&lt;br /&gt;
* Redis 7.2&lt;br /&gt;
* Node.js (lts) 20.10&lt;br /&gt;
* Node.js (current) 21.4&lt;br /&gt;
* QEMU 8.1&lt;br /&gt;
* Ceph 18.2&lt;br /&gt;
* GNOME 45&lt;br /&gt;
* LXQt 1.4&lt;br /&gt;
* wlroots 0.17&lt;br /&gt;
* Go 1.21&lt;br /&gt;
* Rust 1.72&lt;br /&gt;
* Crystal 1.10&lt;br /&gt;
* Racket 8.11&lt;br /&gt;
* ECL 23.9.9&lt;br /&gt;
* Erlang 26&lt;br /&gt;
* zlib 1.3&lt;br /&gt;
* libsodium 1.0.19&lt;br /&gt;
* ICU 74.1&lt;br /&gt;
* Protobuf 24.4&lt;br /&gt;
* fmt 10&lt;br /&gt;
* PipeWire 1.0.0&lt;br /&gt;
&lt;br /&gt;
== Raspberry pi ==&lt;br /&gt;
&lt;br /&gt;
The [https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi] has been simplified. There is now a single kernel flavor for each architecture. This means that the kernels [https://pkgs.alpinelinux.org/packages?name=linux-rpi2&amp;amp;branch=v3.18 linux-rpi2] and [https://pkgs.alpinelinux.org/packages?name=linux-rpi4&amp;amp;branch=v3.18 linux-rpi4] are replaced with [https://pkgs.alpinelinux.org/packages?name=linux-rpi&amp;amp;branch=edge linux-rpi]. The {{Path|config.txt}} is now generated by [https://pkgs.alpinelinux.org/packages?name=raspberrypi-bootloader-common&amp;amp;branch=edge raspberrypi-bootloader-common].&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25843</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25843"/>
		<updated>2023-11-30T13:53:51Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Others */ Yggdrasil breaking changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to [https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license the relicensing of HashiCorp software] to [https://spdx.org/licenses/BUSL-1.1.html BUSL-1.1], a non-Open-Source license, the following software have been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
=== Yggdrasil v0.5 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|yggdrasil}} was upgraded to 0.5.x and the new routing scheme is incompatible with previous versions. &amp;quot;Nodes running this new version &#039;&#039;&#039;will not&#039;&#039;&#039; be able to peer with earlier versions of Yggdrasil&amp;quot; ([https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.5.0 v0.5.0 release notes], [https://yggdrasil-network.github.io/2023/10/22/upcoming-v05-release.html v0.5 blog post]).&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25826</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25826"/>
		<updated>2023-11-27T11:39:25Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* HashiCorp packages */ Restructure and add SPDX link.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to [https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license the relicensing of HashiCorp software] to [https://spdx.org/licenses/BUSL-1.1.html BUSL-1.1], a non-Open-Source license, the following software have been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25825</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25825"/>
		<updated>2023-11-27T11:29:48Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* HashiCorp packages */ Present removed software as a list. I don&amp;#039;t think we need to provide links to the respective project web sites but am not going to remove the links again if someone wants to re-add them.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to the relicensing of HashiCorp software to BUSL-1.1 (a non-Open-Source license) ([https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license link]), the following software have been removed from Alpine:&lt;br /&gt;
&lt;br /&gt;
* Consul&lt;br /&gt;
* Nomad&lt;br /&gt;
* Packer&lt;br /&gt;
* Terraform&lt;br /&gt;
* Vault&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25824</id>
		<title>Release Notes for Alpine 3.19.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.19.0&amp;diff=25824"/>
		<updated>2023-11-27T11:18:40Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* HashiCorp packages */ Add link to our discussion. OpenTofu may not be moved to community before a stable release.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Base System ==&lt;br /&gt;
&lt;br /&gt;
=== iptables-nft ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/sbin/iptables{,-save,-restore}&amp;lt;/code&amp;gt; symlinks now point to xtables-nft-multi instead of xtables-legacy-multi. This means they use the nftables kernel backend instead of the legacy iptables one.&lt;br /&gt;
&lt;br /&gt;
Since the new iptables- binaries also don&#039;t use the iptables backend, to work with any existing rules and save them, you need to install {{pkg|iptables-legacy}} and use &amp;lt;code&amp;gt;iptables-legacy-save&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because mixing backends is not supported, you should reboot your system if you have to use the iptables commands after upgrading.&lt;br /&gt;
&lt;br /&gt;
=== netns ===&lt;br /&gt;
&lt;br /&gt;
The OpenRC package contains a patch to make it possible to start most services in netns namespaces. See also [[Netns|netns]].&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
=== HashiCorp packages ===&lt;br /&gt;
&lt;br /&gt;
Due to the relicensing of HashiCorp software to BUSL-1.1 (a non-Open-Source license) ([https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license link]), [https://www.consul.io/ Consul], [https://www.nomadproject.io/ Nomad], [https://www.packer.io/ Packer], [https://www.vaultproject.io/ Vault], [https://www.terraform.io/ Terraform] were removed from Alpine.&lt;br /&gt;
&lt;br /&gt;
Our discussion on the topic can be found [https://gitlab.alpinelinux.org/alpine/aports/-/issues/15193 here].&lt;br /&gt;
&lt;br /&gt;
{{pkg|opentofu}}, a fork of Terraform, is available in our testing repository for users of our rolling release, edge.&lt;br /&gt;
&lt;br /&gt;
=== Java 21 ===&lt;br /&gt;
&lt;br /&gt;
The latest LTS java release, openjdk21,  is now available in the community repository.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Applications have been upgraded from 23.04.x to 23.08.x. KDE Frameworks have been upgraded from 5.105.0 to 5.112.0.&lt;br /&gt;
Note that the KDE Frameworks packages have been renamed to add a 5 suffix in preparation for the upcoming KDE 6 release in the next Alpine release. Everything should automatically be upgraded properly but if problems occur make sure to check if the right renamed packages are installed.&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Creating_an_Alpine_package&amp;diff=25647</id>
		<title>Creating an Alpine package</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Creating_an_Alpine_package&amp;diff=25647"/>
		<updated>2023-11-13T21:36:42Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* license */ Add comment about MIT license&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
To build a package for Alpine Linux you need an Alpine Linux installation. Check the [[Installation]] page to see all available installation options.&lt;br /&gt;
&lt;br /&gt;
== Setup your system and account  ==&lt;br /&gt;
{{:Include:Setup_your_system_and_account_for_building_packages}}&lt;br /&gt;
&lt;br /&gt;
== Getting some help ==&lt;br /&gt;
&lt;br /&gt;
It might be wise to start by checking what the [[Abuild|abuild]] program can/cannot do.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild -h}}&lt;br /&gt;
&lt;br /&gt;
For real help, you can also go on #alpine-devel on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
A reference for APKBUILD files is available as [[APKBUILD Reference]] wiki page or a man page in the &#039;abuild-doc&#039; package:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|man APKBUILD}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating an APKBUILD file  ==&lt;br /&gt;
&lt;br /&gt;
=== Use a template APKBUILD ===&lt;br /&gt;
&lt;br /&gt;
To create the actual APKBUILD file {{Pkg|newapkbuild}} can serve you a template to start with. It will create a directory with the given package name, place an example/template APKBUILD file to the given directory, and fill some variables if those are provided. Please check the [[Package_policies| package policies]] page about naming details.&lt;br /&gt;
&lt;br /&gt;
If you doubt to which repository your package belongs to you can safely use &#039;&#039;&#039;testing&#039;&#039;&#039;. Building package in your aports/testing directory is not mandatory but this way the package is already at the right place.&lt;br /&gt;
&lt;br /&gt;
{{:Include:Newapkbuild}}&lt;br /&gt;
&lt;br /&gt;
{{Note|On older Alpine systems, abuild -c -n &#039;&#039;packagename&#039;&#039; was the way to create APKBUILD files. The &#039;packagename&#039; was a parameter to the -n option so order of -c and -n matters. }}&lt;br /&gt;
&lt;br /&gt;
[[Abuild_and_Helpers#apkbuild-cpan|apkbuild-cpan]] simplifies the creation of perl packages from CPAN and [[Abuild_and_Helpers#apkbuild-pypi|apkbuild-pypi]] ease the generation of APKBUILD files for python packages from PyPi.  &lt;br /&gt;
&lt;br /&gt;
If you are creating a daemon package which needs initd scripts you can add the -c making it: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|newapkbuild -c &#039;&#039;packagename&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
This will copy the sample initd and confd files to the build directory.&amp;lt;BR&amp;gt;&lt;br /&gt;
A third file sample.install file will be copied as well (we will discuss this later on).&lt;br /&gt;
&lt;br /&gt;
=== Modify your APKBUILD ===&lt;br /&gt;
Edit APKBUILD and fill in the needed info (especially pkgname, pkgver, pkgdesc, url, license, depends and source). &lt;br /&gt;
&lt;br /&gt;
If you are going to use any of the variables for directories like $pkgdir, always make sure they are double quoted like: &lt;br /&gt;
&lt;br /&gt;
 &amp;quot;$pkgdir&amp;quot;/somedir&lt;br /&gt;
&lt;br /&gt;
This will prevent issues with spaces/special characters in the future. &lt;br /&gt;
&lt;br /&gt;
{{Note|If you like syntax highlighting we suggest you to install vim. We have setup vim to recognize the APKBUILD file as a bash scripts so its easier to read them.}}&lt;br /&gt;
&lt;br /&gt;
=== APKBUILD variables/functions  ===&lt;br /&gt;
&lt;br /&gt;
==== source  ====&lt;br /&gt;
&lt;br /&gt;
The source variable is not only used to list the remote source files to fetch, it is also used to list the local files that abuild will need in order to build the apk. Examples of such local files include: init.d files, conf.d files, install files (see [[Creating an Alpine package#install|install variable]]), patches, and all other necessary files.&lt;br /&gt;
&lt;br /&gt;
Here are few things to note:&lt;br /&gt;
&lt;br /&gt;
* When you are finished adding local and/or remote files to &#039;&#039;source&#039;&#039;, you can execute the following command to add their checksums to the APKBUILD file:&lt;br /&gt;
: {{cmd|abuild checksum}}&lt;br /&gt;
: {{Note|When later updating the content of &#039;&#039;source&#039;&#039;, or updating a file that is listed in &#039;&#039;source&#039;&#039;, you must also update their checksums again with the same command.}}&lt;br /&gt;
&lt;br /&gt;
* When the remote file is hosted at SourceForge, it&#039;s best to specify the special mirrors link used by SourceForge:&lt;br /&gt;
: &amp;lt;pre&amp;gt;http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
: (or similar depending on the package).&lt;br /&gt;
&lt;br /&gt;
* When the remote filename is not specified in the URI (ie, does not end in &#039;/software-1.0.tar.gz&#039;), such as:&lt;br /&gt;
: &amp;lt;pre&amp;gt;http://oss.example.org/?get=software&amp;amp;ver=1.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
: You must prepend &#039;${pkgname}-${pkgver}.tar.gz::&#039; to the protocol, like so:&lt;br /&gt;
: &amp;lt;pre&amp;gt;source=&amp;quot;${pkgname}-${pkgver}.tar.gz::http://oss.example.org/?get=software&amp;amp;ver=1.0&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
: This causes the file to be saved as &#039;&#039;software-1.0.tar.gz&#039;&#039; where abuild can use it, instead of &#039;&#039;?get=software&amp;amp;ver=1.0&#039;&#039;, where abuild cannot use it.&lt;br /&gt;
&lt;br /&gt;
* Some projects didn&#039;t provide a release tarball. Beware that some git services (gitweg, cgit, …?) doesn’t provide &#039;&#039;stable&#039;&#039; tarballs, so when you point source to an tarball like &amp;lt;tt&amp;gt;https://repo.or.cz/w/gitstats.git/snapshot/ad7efbb9399e60cee6cb217c6b47e604174a8093.tar.gz&amp;lt;/tt&amp;gt;, then you will run into issues because the checksum changes when downloading on the build system. This is not a problem on GitHub, GitLab and other decent services provides, they provide &#039;&#039;stable&#039;&#039; tarballs.&lt;br /&gt;
&lt;br /&gt;
* abuild currently supports the following protocols for remote file retrieval:&lt;br /&gt;
** http&lt;br /&gt;
** https&lt;br /&gt;
** ftp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--: {{Note|If the you want to download from https, you need GNU wget installed on your system.}}--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* abuild currently supports the following archive types/archive file extensions:&lt;br /&gt;
** .tar&lt;br /&gt;
** .tar.gz / .tgz&lt;br /&gt;
** .tar.bz2&lt;br /&gt;
** .tar.lz (only in Alpine &amp;gt;=3.7)&lt;br /&gt;
** .tar.lzma&lt;br /&gt;
** .tar.xz&lt;br /&gt;
** .zip&lt;br /&gt;
&lt;br /&gt;
==== depends &amp;amp;amp; makedepends  ====&lt;br /&gt;
&lt;br /&gt;
Depends are the actual running dependencies that a package would need when it is running. Makedepends are only needed when you are building a package. If you set a package in depends, you do not need to add it to makedepends as well. The best way to find out what the depends and makedepends of a package are is to [https://en.wikipedia.org/wiki/Rtfm RTFM]. &lt;br /&gt;
&lt;br /&gt;
No kidding, lots of important information can be found in the package INSTALL and README files (or the likes). Another good way is the run &amp;lt;code&amp;gt;./configure --help&amp;lt;/code&amp;gt; from the source directory to see which options are needed for configure to finish without errors. If you do not yet have a source directory you can create one with the command: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild unpack}}&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; will also show you how you can disable a specific option for this package. For instance, a good example is &amp;quot;--disable-nls&amp;quot; which will disable native language support and thus does not depend on gettext (libiconv, glib, ...). &lt;br /&gt;
&lt;br /&gt;
Alpine likes to keep things small, so we try to disable as much as possible without losing too many features. The exact disable/enable options are decided by the package builder but please try to follow Alpine&#039;s design concept as much as possible.&lt;br /&gt;
&lt;br /&gt;
An easy way of quickly finding out the build info for a package is to check Arch Linux (Alpine package management and build scripts are similar) or Gentoo Linux ebuilds (previous versions of Alpine were based on Gentoo).&lt;br /&gt;
&lt;br /&gt;
* [https://gitweb.gentoo.org/repo/gentoo.git/tree/ Gentoo Ebuilds] &lt;br /&gt;
* [https://archlinux.org/packages/?q=search Arch Linux packages] [https://aur.archlinux.org/ Arch Linux User Repository]&lt;br /&gt;
&lt;br /&gt;
==== license  ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;license&#039;&#039;&#039; tag must reflect the license of the source code. Please check the source tarball for COPYING, LICENSE, or other files with names that indicates that it contains licensing information. Beside the license file most developer include headers in the source code files with licensing details.&lt;br /&gt;
&lt;br /&gt;
If the license is on the [https://spdx.org/licenses/ SPDX License List] or [https://spdx.org/licenses/exceptions-index.html SPDX License Exceptions], use the identifier specified by SPDX.&lt;br /&gt;
&lt;br /&gt;
If a package has a special/custom license or is not listed as [https://opensource.org/licenses/alphabetical OSI approved], use the identifier &amp;quot;custom&amp;quot;. If a package has an MIT license, that license has a copyright notice we need to reproduce. In these cases we additionally need to provide the license file with the release. Because we want to save space and don&#039;t like to have licenses all over our system we have decided to include the license in the doc subpackage. Please follow the following guidelines to add a proper license. Locate the license file inside the source package. Add the doc subpackage to the $subpackages variable as follows: &lt;br /&gt;
&lt;br /&gt;
 subpackages=&amp;quot;$pkgname-doc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add a similar line to the following to your package() function, depending on the license description file: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|install -Dm644 COPYING &amp;quot;$pkgdir&amp;quot;/usr/share/licenses/$pkgname/COPYING}}&lt;br /&gt;
&lt;br /&gt;
If you follow these steps then abuild will automatically add the license to the package-doc apk for you.&lt;br /&gt;
&lt;br /&gt;
{{Warning|It is not acceptable to package software with &amp;quot;unknown&amp;quot; license! If you can&#039;t find the license of the source code, please contact the author and ask them to specify the license. }}&lt;br /&gt;
&lt;br /&gt;
==== arch ====&lt;br /&gt;
&lt;br /&gt;
The package architecture(s) to build for.  This can be one of: &#039;&#039;x86, x86_64, all,&#039;&#039; or &#039;&#039;noarch&#039;&#039;, where &#039;&#039;all&#039;&#039; means all architectures, and &#039;&#039;noarch&#039;&#039; means it&#039;s architecture-independent (e.g., a pure-python package).&lt;br /&gt;
{{Tip|To determine if your APKBUILD can use &#039;&#039;noarch&#039;&#039;, build the package for your architecture and then run &amp;quot;scanelf -R pkg&amp;quot; from the directory that the APKBUILD resides in, in order to scan for ELF files in the &#039;&#039;./pkg&#039;&#039; directory.  If you do NOT get output from this, then &#039;&#039;noarch&#039;&#039; can be used.}}&lt;br /&gt;
&lt;br /&gt;
==== url  ====&lt;br /&gt;
&lt;br /&gt;
Website address for the program. This is useful later on when either finding documentation or other information about the package.&lt;br /&gt;
&lt;br /&gt;
==== pkgdesc  ====&lt;br /&gt;
&lt;br /&gt;
A brief, one line, description of what the package does. Useful for the package management system. It should start with a capital letter and does &#039;&#039;&#039;not&#039;&#039;&#039; end with a period.&lt;br /&gt;
&lt;br /&gt;
Here is an example from apk_info for the OpenSSH client package:&lt;br /&gt;
&lt;br /&gt;
 pkgdesc=&amp;quot;Port of OpenBSD&#039;s free SSH release - client&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== pkgver  ====&lt;br /&gt;
&lt;br /&gt;
Provide the release number of the package you are building.&lt;br /&gt;
&lt;br /&gt;
==== pkgrel  ====&lt;br /&gt;
&lt;br /&gt;
The $pkgrel versioning is made so that if you change something in your APKBUILD file without changing the actual $pkgver, you can increment pkgrel so apk tools will detect it as an update. For instance, if you forget to add a dependency, you can add it afterward and you can +1 pkgver so apk finds this update and adds the missing dependency. When there&#039;s an upstream version change, we reset the pkgrel to 0.&lt;br /&gt;
&lt;br /&gt;
==== pkgname  ====&lt;br /&gt;
&lt;br /&gt;
The base name of the package you are creating.  For Freeswitch 1.0.6, you would use &amp;quot;freeswitch&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== install  ====&lt;br /&gt;
&lt;br /&gt;
There are 6 different kinds of install scripts. Each script is called with the $pkgname.&#039;&#039;&amp;lt;action&amp;gt;&#039;&#039; where &#039;&#039;&amp;lt;action&amp;gt;&#039;&#039; is one of the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-install&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed before package is installed. Typical use is when package needs a group and a user to be created. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
addgroup -S clamav 2&amp;gt;/dev/null&lt;br /&gt;
adduser -S -D -H -s /bin/false -G clamav -g clamav clamav 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note the &#039;&#039;exit 0&#039;&#039; at the end. If the script exits with failure (if the user already exist), the package will not be installed and &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; will exit with failure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-install&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed after the package is installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-upgrade&lt;br /&gt;
&amp;lt;dd&amp;gt;Same as pre-install but is executed before upgrading/downgrading/reinstalling an already installed package. Note that exiting with failure will not cause apk to exit with failure, but will mark the package as broken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-upgrade&lt;br /&gt;
&amp;lt;dd&amp;gt;Same as post-install but is executed after upgrading/downgrading/reinstalling an already installed package. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.pre-deinstall&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed before uninstalling a package. If script exits with failure apk will not uninstall the package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;$pkgname.post-deinstall&lt;br /&gt;
&amp;lt;dd&amp;gt;This script is executed after a package have been uninstalled. For example, can be used to restore busybox links:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
busybox --install -s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the package has a pre-install and post-install script the APKBUILD should have the &#039;&#039;install&#039;&#039; variable defined:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
install=&amp;quot;$pkgname.pre-install $pkgname.post-install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== subpackages  ====&lt;br /&gt;
&lt;br /&gt;
$subpackages are made to split up the normal &amp;quot;make install&amp;quot; into separate packages. The most common subpackages we use are doc and dev. Because we like to keep our target system small we move documentation and development files (only needed when building packages) into separate packages. To use the specific program a user only need to install the base apk without package-doc or package-dev, but if he wants to read the manual he will need to install package-doc. &lt;br /&gt;
&lt;br /&gt;
The easiest way to find out if you need to use -dev and -doc is to first build the package without these options set and wait until the build finishes. When its finished you should have a pkg directory which is the fake root directory. Inside this directory you will see the structure as how it would be installed in / on the target system. &lt;br /&gt;
&lt;br /&gt;
To see if you need the -dev package you can run the following cmd: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|find pkg/usr/ -name &#039;*.[acho]&#039; -o -name &#039;*.la&#039;}}&lt;br /&gt;
&lt;br /&gt;
If this returns any files you need to include the -dev package. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; To see if you need the -doc package you can run the following cmd: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|find pkg/usr/share -name doc -o -name man -o -name info -o -name html -o -name sgml -o -name licenses}}&lt;br /&gt;
&lt;br /&gt;
If this returns any directories you need to include the -doc package. &lt;br /&gt;
&lt;br /&gt;
===== Custom subpackages  =====&lt;br /&gt;
&lt;br /&gt;
Some software additionally has non-essential files that do not qualify as either documentation or development content. These files should be placed in their own, specialized subpackage(s). Some packages include large test suites which are only needed in specific circumstances or binaries which have depends which we prefer not to install. To handle those we create our own package/function. In the APKBUILD below the build() function we create another function: &lt;br /&gt;
&lt;br /&gt;
 test() {&lt;br /&gt;
        mkdir -p &amp;quot;$subpkgdir&amp;quot;/usr&lt;br /&gt;
        mv &amp;quot;$pkgdir&amp;quot;/usr/package-test &amp;quot;$subpkgdir&amp;quot;/usr/&lt;br /&gt;
        # or amove usr/package-test&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
We also need to add the package info to $subpackages variable: &lt;br /&gt;
&lt;br /&gt;
 subpackages=&amp;quot;$pkgname-doc $pkgname-dev $pkgname-test&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After we finish building the package you should see another apk called packagename-test.apk which includes the files which we moved to the $subpkgdir dir. &lt;br /&gt;
&lt;br /&gt;
The above mentioned variables can also be used in our custom function. If we want for instance to build the test() function with perl support we would add: &lt;br /&gt;
&lt;br /&gt;
 depends=&amp;quot;perl&amp;quot;&lt;br /&gt;
 makedepends=&amp;quot;perl-dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If we would install the base package it would not install perl, but if we install the package-test package it would.&lt;br /&gt;
&lt;br /&gt;
==== Patches  ====&lt;br /&gt;
&lt;br /&gt;
Please make sure you always submit human readable patches. Ways to create them are: &lt;br /&gt;
&lt;br /&gt;
directory compare: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|diff -Nurp original_directory new_directory &amp;amp;gt; filename.patch}}&lt;br /&gt;
&lt;br /&gt;
file compare: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|diff -up original.file new.file &amp;amp;gt; filename.patch}}&lt;br /&gt;
&lt;br /&gt;
If a patch contains a completely new file but not *.rej or *.orig file, you need to add -N option to diff, but you may need to add exclusions with &amp;lt;code&amp;gt;--exclude PATTERN&amp;lt;/code&amp;gt; so that you do not inadvertently add files.  You may need to manually delete unwanted files inside the patch file.&lt;br /&gt;
&lt;br /&gt;
Because multiple patches can patch the same file, they can change the offsets required by subsequent patches. To make sure we always patch in a specific way, we should number the patches as follows: &lt;br /&gt;
&lt;br /&gt;
 10-patch1.patch 20-patch2.patch 30-patch3.patch&lt;br /&gt;
&lt;br /&gt;
This way we are always sure that patch 1 is applied first, and if we want to add additional patches between them we can use appropriate indexes (e.g. 11, 12, 21, 22).&lt;br /&gt;
&lt;br /&gt;
Add the names of the patch files to the &#039;&#039;source&#039;&#039; variable. If you haven&#039;t declared a custom &#039;&#039;prepare&#039;&#039; function, no further action is necessary. Otherwise, be sure to call &#039;&#039;default_prepare&#039;&#039; in your &#039;&#039;prepare&#039;&#039; function. For example:&lt;br /&gt;
&lt;br /&gt;
 prepare() {&lt;br /&gt;
 	default_prepare&lt;br /&gt;
 &lt;br /&gt;
 	# do your stuff&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note: Some older packages contain a &#039;&#039;for&#039;&#039; loop in the &#039;&#039;prepare&#039;&#039; function to apply patches. This is not needed anymore, as patches are handled by &#039;&#039;default_prepare&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In Alpine &amp;gt;=3.4 you can define patch_args to supply the patch level.  This only works if all the patches have the same patch level.  If there are a lot of patches from different sources, there is a good chance that you may need to edit them, as discussed below.&lt;br /&gt;
&lt;br /&gt;
To automatically patch the package (available only in Alpine &amp;gt;=3.4) if it uses a patch level (-pX) other than the default (-p1), you need to carefully modify the patch.  First, you&#039;ll need a text editor that does not automatically convert  between Windows and Unix new lines (or, disable this feature) so that it preserves the old code.  The next thing you&#039;ll need to do is modify the paths on &amp;quot;+++&amp;quot; and &amp;quot;---&amp;quot; lines in the .patch file.  You can begin the path with a/ and b/ like shown below.  Next, you need to adjust the paths so that the relative base path is from inside $builddir.  Anything to the left of $builddir, including $builddir itself, needs to be removed from the path.  So, if $builddir is /home/USER/aports/community/chromium/src/chromium-65, you need to erase it on the &amp;quot;+++&amp;quot; and &amp;quot;---&amp;quot; lines.  Inside the chromium-65 folder you can see a src folder that has 3rdparty as a descendant.  If a patch originally has a deeper patch level, you may need to fill in the missing portion of the path.  For example, use the &amp;lt;code&amp;gt;find . -name &amp;quot;Assertions.cpp&amp;quot;&amp;lt;/code&amp;gt; command to find the full path to the file relative to the base.&lt;br /&gt;
&lt;br /&gt;
{{Cat|example.patch|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Author: John Doe &amp;lt;johndoe@mail.com&amp;gt;&lt;br /&gt;
URL: http://.....&lt;br /&gt;
Summary: Fixes musl compatibility&lt;br /&gt;
----&lt;br /&gt;
--- a/src/3rdparty/chromium/third_party/WebKit/Source/wtf/Assertions.cpp.orig&lt;br /&gt;
+++ b/src/3rdparty/chromium/third_party/WebKit/Source/wtf/Assertions.cpp&lt;br /&gt;
@@ -142,7 +142,7 @@&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 FrameToNameScope::FrameToNameScope(void* addr) : m_name(0), m_cxaDemangled(0) {&lt;br /&gt;
-#if OS(MACOSX) || (OS(LINUX) &amp;amp;&amp;amp; !defined(__UCLIBC__))&lt;br /&gt;
+#if OS(MACOSX) || (OS(LINUX) &amp;amp;&amp;amp; defined(__GLIBC__))&lt;br /&gt;
   Dl_info info;&lt;br /&gt;
   if (!dladdr(addr, &amp;amp;info) || !info.dli_sname)&lt;br /&gt;
return;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Portions of the patch may be outdated, removed completely as in the source code file completely removed, or moved or renamed files.  You need to delete that section of the patch or find where that section of code changed and re-diff it.&lt;br /&gt;
&lt;br /&gt;
It is good etiquette to give credit at the top and the location of where you originally found them with notes.&lt;br /&gt;
&lt;br /&gt;
Excluding patches with global variable resembling patch_opts is not available on Alpine.  To exclude patches you need to create your own custom prepare().&lt;br /&gt;
&lt;br /&gt;
If you have a monolithic patch where there are a bunch of patches in one big patch, you could use filterdiff which is available in the patchutils package.&lt;br /&gt;
&lt;br /&gt;
Just do something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
makedepends=&amp;quot;patchutils&amp;quot;&lt;br /&gt;
&lt;br /&gt;
prepare() {&lt;br /&gt;
  ...&lt;br /&gt;
  cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
  filterdiff -x &#039;*drivers/video/logo*&#039; &amp;quot;$srcdir&amp;quot;/original.patch &amp;gt; &amp;quot;$builddir&amp;quot;/modified.patch&lt;br /&gt;
  patch -p1 -i &amp;quot;$builddir&amp;quot;/modified.patch&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to put the wildcard pattern in single quotes for it to work.&lt;br /&gt;
&lt;br /&gt;
==== Configure options  ====&lt;br /&gt;
&lt;br /&gt;
Alpine has some default configure options we set by default. We use /usr for prefix to make sure everything is installed with /usr in front of it. If you notice that anything is installed in the wrong directory please run {{Cmd|./configure --help}} and see if you can set the correct location. &lt;br /&gt;
&lt;br /&gt;
We are not covering the depend switches here we have discussed this already in the depend section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Make options  ====&lt;br /&gt;
&lt;br /&gt;
If you notice weird problems when compiling or installing the package with make/make install you could try to disable [https://www.gnu.org/software/make/manual/make.html#Parallel parallel] building/installing. A normal make line would be: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make}}&lt;br /&gt;
&lt;br /&gt;
To disable parallel we use: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make -j1}}&lt;br /&gt;
&lt;br /&gt;
We can use the same for make install. &lt;br /&gt;
&lt;br /&gt;
Because we do not want to install the package in our build environment but we want to install it in a fake root directory we need to tell &#039;make install&#039; to use another destination directory instead of &#039;/&#039;. We do this by setting a variable when we execute make install as followed: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|make DESTDIR{{=}}&amp;quot;$pkgdir&amp;quot; install}}&lt;br /&gt;
&lt;br /&gt;
Please note that some Makefiles do not support this variable and will always install software in &#039;/&#039;. To make sure you do not mess up your build system NEVER run your build system as root but always use a custom user and doas when needed. If by accident the Makefile does not support DESTDIR variable it will fail to install in our build system system directories.&lt;br /&gt;
&lt;br /&gt;
==== builddir ====&lt;br /&gt;
If you used &amp;lt;tt&amp;gt;newapkbuild&amp;lt;/tt&amp;gt; to create your APKBUILD file, you must specify the path to your unpacked sources. Inside the sections during the prepare/build/install process &#039;&#039;builddir&#039;&#039; is used. Most of the time a combination of &#039;&#039;$srcdir&#039;&#039; and &#039;&#039;$pkgname-$pkgver&#039;&#039; will work. When not, check the /src directory or the source tarball for the right string. Especially when you are working with automatically generated tarballs (like from github and gitorious), this needs to be adjusted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
builddir=&amp;quot;$srcdir&amp;quot;/$pkgname-$pkgver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Additional files  ====&lt;br /&gt;
&lt;br /&gt;
If you want/need to install additional files not mentioned above you can use the following cmd (this is an example of a conf file): &lt;br /&gt;
&lt;br /&gt;
{{Cmd|install -Dm644 doc/$pkgname.conf &amp;quot;$pkgdir&amp;quot;/etc/$pkgname.conf}}&lt;br /&gt;
&lt;br /&gt;
== Build the package  ==&lt;br /&gt;
&lt;br /&gt;
If you did not already create the checksums as mentioned above you can do so now: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $pkgname&lt;br /&gt;
abuild checksum}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s about time we build our package. Because a build system should never have all the package installed to prevent linking to packages we don&#039;t want it to link we use a abuild recursively with the &#039;&#039;&#039;-r&#039;&#039;&#039; switch. It will install all dependencies from your repository and builds it, afterwards it will uninstall all those depending packages again.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild -r}}&lt;br /&gt;
&lt;br /&gt;
See also [[Abuild_and_Helpers|Abuild and Helpers]].&lt;br /&gt;
&lt;br /&gt;
== Testing the package locally ==&lt;br /&gt;
&lt;br /&gt;
When it completes, your package will be found in a subfolder of &amp;lt;code&amp;gt;~/packages&amp;lt;/code&amp;gt;.  You may want to test it on your machine but only if the package is not a critical system package like musl or apk-tools package.  To avoid borking your system (as in making it impossible to use &amp;lt;code&amp;gt;apk add&amp;lt;/code&amp;gt; or to restore back the system and the compiler toolchain) for a critical system package, you should test on a chroot first before using it live.&lt;br /&gt;
&lt;br /&gt;
The best way to test a package locally is to modify your &amp;lt;code&amp;gt;/etc/apk/repositories&amp;lt;/code&amp;gt; so that it includes the indexes to your locally built packages - the directories that contain &amp;lt;code&amp;gt;ARCH/APKINDEX.tar.gz&amp;lt;/code&amp;gt;. For example the &amp;lt;code&amp;gt;/etc/apk/repositories&amp;lt;/code&amp;gt; below includes locally built packages in testing, community and main. To use this example change &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; to your login name.&lt;br /&gt;
&lt;br /&gt;
{{Cat|/etc/apk/repositories|/home/USER/packages/testing/&lt;br /&gt;
/home/USER/packages/main/&lt;br /&gt;
/home/USER/packages/community/&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/main&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/community&lt;br /&gt;
https://dl-cdn.alpinelinux.org/alpine/edge/testing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you prefer to test a package without changing any other configuration you can use the &amp;lt;code&amp;gt;-X, --repository&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|doas apk add --repository /home/USER/packages/testing $pkgname}}&lt;br /&gt;
&lt;br /&gt;
== Code review ==&lt;br /&gt;
&lt;br /&gt;
To successfully have your package pass through code reviewers (as of Feb 18, 2018 are nmeum and jirutka on GitHub) and possible increased acceptance, the following conventions need to be followed:&lt;br /&gt;
&lt;br /&gt;
# Custom global variables should be prefixed with underscore (_).&lt;br /&gt;
# Compact code as in merged commands, removed unused variables, removal of functions that do the same thing that are automatically handled by abuild.&lt;br /&gt;
# Versioning is done properly.  For details see [[APKBUILD_Reference#pkgver]].&lt;br /&gt;
# Licensing is done properly. Remove unnecessary copying of licensing that is already OSI approved.&lt;br /&gt;
# Naming conventions rules for unofficial variables as in _gitrev is preferred over commit.&lt;br /&gt;
# Indent with tabs not spaces.&lt;br /&gt;
# Removal of explicit return 1.  (They are still found the old APKBUILD files if you are learning but are now strongly discouraged.)&lt;br /&gt;
# Disabling check() requires either (1) a comment (#) stating next to options=&amp;quot;!check&amp;quot; that there is no test suite/unit tests or (2) functioning working check() function.&lt;br /&gt;
# Explicit call to subpackages=&amp;quot;$pkgname-doc&amp;quot; must be used instead of explicit gzip man page compression.&lt;br /&gt;
# Ideally, lines should be no more than 80 columns wide&lt;br /&gt;
&lt;br /&gt;
Additionally, make sure to run the linter on your package:&lt;br /&gt;
{{Cmd|doas apk add atools&lt;br /&gt;
apkbuild-lint APKBUILD}}&lt;br /&gt;
&lt;br /&gt;
For more information see [[Development using git:Quality assurance]] and [[Package_policies]].&lt;br /&gt;
Also check out [https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/COMMITSTYLE.md?ref_type=heads aports/COMMITSTYLE.md] and [https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/CODINGSTYLE.md?ref_type=heads aports/CODINGSTYLE.md]&lt;br /&gt;
&lt;br /&gt;
== Commit your work  ==&lt;br /&gt;
&lt;br /&gt;
After you successfully build your package and properly followed the conventions and requirements in the code review section, you can submit your APKBUILD to Alpine&#039;s git repository. &lt;br /&gt;
&lt;br /&gt;
Update your git repo, before adding new files: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $aportsdir&lt;br /&gt;
git pull}}&lt;br /&gt;
&lt;br /&gt;
This should pull all the changes made by others into your local git repo.&lt;br /&gt;
&lt;br /&gt;
When you think you are ready you can add your files to git: &lt;br /&gt;
&lt;br /&gt;
NOTE: when using our Gitlab instance, you can create MR&#039;s for each package. Please squash all commits related to the same package into a single one per MR.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd $aportsdir&lt;br /&gt;
git add testing/$pkgdir (include any other files needed for the build; $pkgname.install...)&lt;br /&gt;
git commit}}&lt;br /&gt;
&lt;br /&gt;
Use the following commit message template for new aports (without the comments):&lt;br /&gt;
&lt;br /&gt;
{{Cat|template|testing/$pkgname: new aport   # this will be the subject line&lt;br /&gt;
                              # a blank line&lt;br /&gt;
$url                          # project homepage&lt;br /&gt;
$pkgdesc                      # one line description}}&lt;br /&gt;
&lt;br /&gt;
Or you could add the following and &amp;lt;code&amp;gt;chmod +x ports/.git/hooks/prepare-commit-msg&amp;lt;/code&amp;gt; to automatically generate commit message which the default aports/.githooks/ does not:&lt;br /&gt;
&lt;br /&gt;
{{Cat|aports/.git/hooks/prepare-commit-msg|&amp;lt;nowiki&amp;gt;#!/bin/sh&lt;br /&gt;
case &amp;quot;$2,$3&amp;quot; in&lt;br /&gt;
  ,|template,)&lt;br /&gt;
    if git diff-index --diff-filter=A --name-only --cached HEAD \&lt;br /&gt;
        | grep -q &#039;/APKBUILD$&#039;; then&lt;br /&gt;
      meta() { git diff --staged | grep &amp;quot;^+$1&amp;quot; | sed &#039;s/.*=&amp;quot;\?//;s/&amp;quot;$//&#039;;}&lt;br /&gt;
      printf &#039;testing/%s: new aport\n\n%s\n%s\n&#039; &amp;quot;$(meta pkgname)&amp;quot; \&lt;br /&gt;
        &amp;quot;$(meta url)&amp;quot; &amp;quot;$(meta pkgdesc)&amp;quot; &amp;quot;$(cat $1)&amp;quot; &amp;gt; &amp;quot;$1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      printf &#039;%s\n\n%s&#039; `git diff-index --name-only --cached HEAD \&lt;br /&gt;
        | sed -n &#039;s/\/APKBUILD$//p;q&#039;` &amp;quot;$(cat $1)&amp;quot; &amp;gt; &amp;quot;$1&amp;quot;&lt;br /&gt;
    fi;;&lt;br /&gt;
esac&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now your changes are only available locally in your repository.&lt;br /&gt;
&lt;br /&gt;
Because you do not have push rights to the Alpine aports repository you need to create a merge request to [https://gitlab.alpinelinux.org/alpine/aports Alpine&#039;s GitLab instance].&lt;br /&gt;
&lt;br /&gt;
Alternatively you can also create a diff (patch) of the changes you made and send this patch to the &lt;br /&gt;
[https://lists.alpinelinux.org/~alpine/aports  alpine-aports mailinglist].&lt;br /&gt;
&lt;br /&gt;
To create a diff patch:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git format-patch HEAD^}}&lt;br /&gt;
&lt;br /&gt;
or if you have sprunge, you can create a link to your patch for convenience&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git format-patch HEAD^ --stdout &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; sprunge}}&lt;br /&gt;
&lt;br /&gt;
== Automated flagging of outdated ports ==&lt;br /&gt;
Consider adding your port to [https://release-monitoring.org/ Anitya], so it will be flagged as outdated&lt;br /&gt;
as soon as a new stable version is released by upstream.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[APKBUILD Reference]]&lt;br /&gt;
* [[APKBUILD examples]]&lt;br /&gt;
* [[Development using git]]&lt;br /&gt;
* [[Development using git:Quality assurance]]&lt;br /&gt;
&lt;br /&gt;
[[category: Package Manager]]&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.15.0&amp;diff=20368</id>
		<title>Release Notes for Alpine 3.15.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Release_Notes_for_Alpine_3.15.0&amp;diff=20368"/>
		<updated>2021-11-22T22:00:46Z</updated>

		<summary type="html">&lt;p&gt;Omni: /* Support overlaytimpfs mount options */ frx tyop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Important changes ==&lt;br /&gt;
&lt;br /&gt;
=== New package signing keys ===&lt;br /&gt;
&lt;br /&gt;
New signing keys have been generated for v3.15 ongoing. The key size has been increased from 2048 bits to 4096 bits. Make sure you have &amp;lt;code&amp;gt;alpine-keys-2.4-r0&amp;lt;/code&amp;gt; or later before upgrading to 3.15 (or downgrading from edge).&lt;br /&gt;
&lt;br /&gt;
=== MIPS64 discontinued ===&lt;br /&gt;
&lt;br /&gt;
The build hardware we use for building the packages is broken and the architecture is EOL, so there is no new hardware available anymore. As a consequence, there will be no v3.15 release for mips64, and existing releases can no longer receive security updates, so continued use of this architecture is not recommended.&lt;br /&gt;
&lt;br /&gt;
=== radvd no longer enables ipv6 forwarding ===&lt;br /&gt;
&lt;br /&gt;
The radvd init script no longer enables ipv6 forwarding. To enable ipv6 forwarding (necessary for most networks), add &amp;lt;code&amp;gt;net.ipv6.conf.all.forwarding=1&amp;lt;/code&amp;gt; to {{path|/etc/sysctl.conf}} or to a file in {{path|/etc/sysctl.d}}.&lt;br /&gt;
&lt;br /&gt;
=== Move from sudo to doas ===&lt;br /&gt;
&lt;br /&gt;
doas is the default temporary privilege escalation tool.  You are advised to migrate from sudo to doas as 3.15 will be the last release to support sudo throughout its full lifecycle, in 3.16 sudo will be moved from main to community.&lt;br /&gt;
&lt;br /&gt;
== New features and noteworthy new packages ==&lt;br /&gt;
&lt;br /&gt;
=== Compressed kernel modules ===&lt;br /&gt;
&lt;br /&gt;
Kernel modules are now compressed using gzip.&lt;br /&gt;
&lt;br /&gt;
=== UEFI Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
Complete support for [[UEFI Secure Boot]] realized by package {{pkg|secureboot-hook}} and {{pkg|efi-mkkeys}}.&lt;br /&gt;
&lt;br /&gt;
=== Support overlaytmpfs mount options ===&lt;br /&gt;
&lt;br /&gt;
It is now possible to use tmpfs(5) mount options with &amp;lt;code&amp;gt; overlaytmpfsflags&amp;lt;/code&amp;gt;, when using &amp;lt;code&amp;gt;overlaytmpfs&amp;lt;/code&amp;gt;, see mkinitfs-bootparams(7).  Also, &amp;lt;code&amp;gt;rootflags&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rootfstype&amp;lt;/code&amp;gt; options are now picked up for the underlying rootfs mount.&lt;br /&gt;
&lt;br /&gt;
=== Support for out-of-tree kernel modules built from source ===&lt;br /&gt;
&lt;br /&gt;
Alpine Kernel Module Support ({{pkg|akms}}) – support for building out-of-tree Linux kernel modules from source in an automated and organized fashion. It’s like DKMS, but designed specifically for Alpine Linux.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL multiple major versions ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL packaging has been reworked to allow multiple major versions of PostgreSQL server to be installed side by side. This makes it possible to allow to upgrade PostgreSQL cluster from one major version to the next using &amp;lt;code&amp;gt;pg_upgrade&amp;lt;/code&amp;gt; tool, and also to run an older major version of PostgreSQL on the latest version of Alpine Linux. The latest PostgreSQL version can be installed simply with &amp;lt;code&amp;gt;apk add postgresql&amp;lt;/code&amp;gt; as before. If you need an older major version, install the specific package, e.g. {{pkg|postgresql13}}. You can switch between installed major versions using command &amp;lt;code&amp;gt;pg_versions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
See [https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/27275|MR #27275] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Rofi for Wayland ===&lt;br /&gt;
&lt;br /&gt;
Rofi can now be used on Wayland desktops thanks to the fork {{pkg|rofi-wayland}}.&lt;br /&gt;
&lt;br /&gt;
=== Encrypted Data Disk and System Disk modes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setup-disk&amp;lt;/code&amp;gt; ({{pkg|alpine-conf}}) now supports encrypted Data Disk and System Disk modes.&lt;br /&gt;
&lt;br /&gt;
== Significant updates ==&lt;br /&gt;
&lt;br /&gt;
=== 5.15 LTS kernels === &lt;br /&gt;
&lt;br /&gt;
linux-lts and linux-virt upgraded to 5.15&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using &#039;&#039;ZFS&#039;&#039; and depend on symlinks under /dev/zvol/ some are sporadically not created during boot, this is known upstream by &#039;&#039;OpenZFS&#039;&#039; and we track the issue [https://gitlab.alpinelinux.org/alpine/aports/-/issues/13198 here].&lt;br /&gt;
&lt;br /&gt;
=== Ruby 3.0.2 ===&lt;br /&gt;
&lt;br /&gt;
Ruby has been upgraded to version 3.0.2.&lt;br /&gt;
&lt;br /&gt;
Packages {{pkg|ruby-minitest}}, {{pkg|ruby-net-telnet}}, {{pkg|ruby-power_assert}}, {{pkg|ruby-sdbm}}, {{pkg|ruby-test-unit}}, {{pkg|ruby-xmlrpc}}, {{pkg|ruby-webrick}} has been moved from ruby aport to separate aports. Please note that since they don’t inherit the version from the ruby aport anymore, their new (real) version is &#039;&#039;lower&#039;&#039; than before!&lt;br /&gt;
&lt;br /&gt;
Subpackages ruby-bigdecimal, ruby-etc, ruby-fiddle, ruby-gdbm, ruby-io-console, ruby-irb, and ruby-json have been merged into ruby-libs.&lt;br /&gt;
&lt;br /&gt;
=== LLVM12 added ===&lt;br /&gt;
&lt;br /&gt;
LLVM12 is now available.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
&lt;br /&gt;
KDE Plasma has been upgraded to version 5.23, and KDE Applications have been upgraded to 21.08.&lt;br /&gt;
Plasma Mobile Gear has been upgraded to 21.10.&lt;br /&gt;
&lt;br /&gt;
=== Node.js ===&lt;br /&gt;
&lt;br /&gt;
Node.js (LTS) has been upgraded to version 16.13.0. nodejs-current has been upgraded to 17.0.1.&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&lt;br /&gt;
PHP 7.4 started to phase out (1 year of security support left).&lt;br /&gt;
Transition to 8.0 is not finished yet as some app still require old version.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL 14 ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL has been upgraded to version 14.0. Since this release, multiple major versions are provided, currently: 12, 13, and 14.&lt;br /&gt;
&lt;br /&gt;
Support for Just-in-time compilation (JIT) has been moved into subpackage {{pkg|postgresql-jit}}.&lt;br /&gt;
&lt;br /&gt;
{{pkg|libpq}} is now built without LDAP support which reduces number of installed dependencies. Note that this does &#039;&#039;not&#039;&#039; affect the LDAP support in PostgreSQL server, it’s preserved.&lt;br /&gt;
&lt;br /&gt;
=== Mercurial ===&lt;br /&gt;
&lt;br /&gt;
mercurial has been upgraded to 5.9.3 &lt;br /&gt;
&lt;br /&gt;
=== Dlang build tools (DMD, DUB, LDC) have been updated ===&lt;br /&gt;
&lt;br /&gt;
Both compilers have been updated to frontend version v2.098.0 (LDC equivalent: v1.28.0).&lt;br /&gt;
Dub has been updated to v1.27.0.&lt;br /&gt;
LDC now always uses `--export-dynamic` so that code compiled without debug infos (`-g`) will still have the function name in its stack trace.&lt;br /&gt;
&lt;br /&gt;
=== OpenJDK 17 added ===&lt;br /&gt;
&lt;br /&gt;
The latest OpenJDK LTS version (17) has been added to this release and is available via the community repository.&lt;br /&gt;
&lt;br /&gt;
=== GNOME 41 ===&lt;br /&gt;
&lt;br /&gt;
Most GNOME packages have been upgraded to version 41.&lt;br /&gt;
&lt;br /&gt;
=== Crystal ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|crystal}} has been upgraded to version 1.2.2.&lt;br /&gt;
&lt;br /&gt;
=== Kea ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|kea}} has been upgraded to version 2.0.0.&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|openldap}} has been upgraded to version 2.6.0.&lt;br /&gt;
&lt;br /&gt;
=== Rust ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|rust}} has been upgraded to version 1.56.1.&lt;br /&gt;
&lt;br /&gt;
== Significant removals ==&lt;br /&gt;
&lt;br /&gt;
=== QtWebKit was removed due to lack of upstream support ===&lt;br /&gt;
&lt;br /&gt;
qt5-qtwebkit, kdewebkit, wkhtmltopdf, and py3-pdfkit have been removed due to known vulnerabilities and lack of upstream support for qtwebkit. Other programs have been adjusted to use qt5-qtwebengine where appropriate. The most direct replacement for wkhtmltopdf is weasyprint, which is available in the Alpine Linux community repository. puppeteer and pandoc are also options, depending on your needs. See [https://gitlab.alpinelinux.org/alpine/aports/-/issues/12888 #12888] for more information.&lt;br /&gt;
&lt;br /&gt;
== Development-related changes ==&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|postgresql-dev}} has been split into {{pkg|libpq-dev}}, {{pkg|libecpg-dev}}, and &amp;lt;code&amp;gt;postgresql-dev&amp;lt;/code&amp;gt; (this is &#039;&#039;provided&#039;&#039; by {{pkg|postgresql14-dev}}, {{pkg|postgresql13-dev}} etc.). Basically, only PostgreSQL extensions should use {{pkg|postgresql-dev}} in &amp;lt;code&amp;gt;makedepends&amp;lt;/code&amp;gt;; all other aports should use {{pkg|libpq-dev}} and/or {{pkg|libecpg-dev}} (there are some exceptions though).&lt;br /&gt;
&lt;br /&gt;
PostgreSQL extensions (typically packages with &amp;lt;code&amp;gt;postgresql-&amp;lt;/code&amp;gt; prefix) should use {{pkg|postgresql-dev}} in &amp;lt;code&amp;gt;makedepends&amp;lt;/code&amp;gt; – this will install the latest &amp;lt;code&amp;gt;postgresql&amp;lt;majorver&amp;gt;-dev&amp;lt;/code&amp;gt; package, unless there’s a dependency on a specific postgresql version in the dependency graph (which shouldn’t be).&lt;br /&gt;
&lt;br /&gt;
Each aport providing a PostgreSQL extension must explicitly depend on specific &amp;lt;code&amp;gt;postgresql&amp;lt;majorver&amp;gt;&amp;lt;/code&amp;gt; package, not &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt; provider. This should be solved by adding the following into the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; function (!) in each aport that provides PostgreSQL extension:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
depends=&amp;quot;postgresql$(pg_config --major-version)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Omni</name></author>
	</entry>
</feed>