Release Notes for Alpine 3.12.0: Difference between revisions

From Alpine Linux
m (Add to category)
 
(44 intermediate revisions by 3 users not shown)
Line 1: Line 1:
=== Notable changes ===
== aports ==


==== OpenRC now has a sane ordering of directories when loading kernel modules ====
===== python2 no longer provides python and python-devel =====


Loading kernel modules during boot is done with the modules OpenRC service, which reads configuration files in certain locations and loads kernel modules with the modprobe utility from either busybox or util-linux.
python2 no longer provides python and python-devel, nothing does, it is now required that you explicitly depend on either python2 or python3, any new contributions that depend on python2 will be rejected summarily, and python2 is in the process of being **completely** removed.


Before the changes the files were loading in the following order, files in modules-load.d directories were decided by how the shell picked it by globbing.
You must <code>apk del python</code> and add `python3` or `python2` for the upgrade to work correctly, as a stale `python` in /etc/apk/world will prevent things from upgrading correctly.


# /etc/modules
===== llvm 10.0.0 =====
# /etc/modules-load.d/*.conf
 
# /run/modules-load.d/*.conf
llvm 10 is now the default in Alpine Linux.
# /usr/lib/modules-load.d/*.conf
 
# /lib/modules-load.d/*.conf
[https://gitlab.alpinelinux.org/alpine/aports/commit/7a1323c27479fb967749c163f34483bc1196055d commit]
 
===== Initial support for DLang =====
 
We've added initial support for the D language with this release. We now have GDC, the D compiler frontend using GCC, available on all arches but ppc64le and LDC, a D compiler using the LLVM backend, on x86, x86_64 and aarch64. Most things are built against LDC, since it offers superior optimization and a vastly newer versions of the D runtime and standard library. These contain many important bug fixes (especially on aarch64) and contain features required by many D applications.
 
===== py3-setuptools now uses system python3 modules instead of vendored dependencies =====
 
py3-setuptools now installs py3-packaging, py3-parsing, py3-appdirs, py3-six and py3-ordered-set from the system.
 
The following commits are the ones responsible for this change:
 
* [https://git.alpinelinux.org/aports/commit/?id=efca8852f37cb4028f234f92e2d035617f524820 py3-six] (use distutils)
* [https://git.alpinelinux.org/aports/commit/?id=55e3496387ad3f2df387b2cf6bc84e85ef729833 py3-ordered-set] (new aport)
* [https://git.alpinelinux.org/aports/commit/?id=cc1636b08fba58b629501d525d658aed4bcbeab2 py3-ordered-set] (move from testing to main)
* [https://git.alpinelinux.org/aports/commit/?id=da743693eda54b9faf5086746b91506495fc689f py3-appdirs] (move from community to main)
* [https://git.alpinelinux.org/aports/commit/?id=60efe787954008af546a5bde839db09f11682102 py3-appdirs] (use distutils)
* [https://git.alpinelinux.org/aports/commit/?id=a50097b40bcf80a9aec201fef73a722206f43a0d py3-packaging] (use distutils)
* [https://git.alpinelinux.org/aports/commit/?id=52ee5092c510657e9b1e8b4ae0104d405c9eac99 py3-parsing] (install manually)
* [https://git.alpinelinux.org/aports/commit/?id=33ea734e2d28d88a3d545500c96b4c72b3e78432 py3-setuptools] (use system component)
 
===== ncurses fixes =====
 
A few fixes trickled in relating exclusively to Alpine Linux that affect ncurses:
 
With this [https://git.alpinelinux.org/aports/commit/?id=762b9fd601983d8a6e6a60692158f3f22b1b60fe commit] the ncurses-lib package no longer depends on the ncurses-terminfo, which was too big at 7.5 MB, instead ncurses-lib now depends solely on the ncurses-terminfo-base package which weights at around 120 kB.
 
With this [https://git.alpinelinux.org/aports/commit/?id=56aa7795fecc48561deb095995abd335e16ba515 commit] the ncurses-terminfo-base now includes the most common terminfo databases like tmux, screen, xterm-256color and also databases for packaged terminals like gnome-terminal, vte, konsole, alacritty, kitty, putty. All other terminfo databases are now in ncurses-terminfo.
 
With this [https://git.alpinelinux.org/aports/commit/?id=1470a6c8e76491a8d059ebd4b7521c4bf20b837c commit] all terminals that have their terminfo databases provided by the ncurses-terminfo-base now depend on it.
 
===== python3 no longer provides pip3, use py3-pip from community =====
 
Python3 is now built with --without-ensurepip which removes pip3 and its libraries from it. Instead use the py3-pip pacakge which uses system components.
 
===== BPF JIT support =====
 
> TODO: Small preamble about BPF
 
So it (BPF JIT) has been enabled by default in [https://git.alpinelinux.org/aports/commit/?id=3bf2313adc57fe6b36bf459ddca6d65a392609db 3bf2313adc57fe6b36bf459ddca6d65a392609db], and unprivileged BPF JIT has been disabled in [https://git.alpinelinux.org/aports/commit/?id=4e286992d5ed751f6ca60eb18d77313bb0868513 4e286992d5ed751f6ca60eb18d77313bb0868513].
 
===== OpenRC now has a sane ordering of directories when configuring kernel parameters =====
 
Configuring kernel parameters is done by having configuration files in specific locations like <code>/etc/sysctl.conf</code> and files ending with <code>.conf</code> in certain directories like <code>/etc/sysctl.d</code>. Before 3.12.0 the ordering had no logical explanation and
surprised users that expected a hierarchy.
 
Starting with 3.12.0 the ordering is as follows:
 
# /lib/sysctl.d/*.conf
# /usr/lib/sysctl.d/*.conf
# /run/sysctl.d/*.conf
# /etc/sysctl.conf
# /etc/sysctl.d/*.conf
 
 
<code>/lib/sysctl.d</code> and <code>/usr/lib/sysctl.d</code> are to be used by the distribution and packages. Alpine Linux installs its default configuration file in <code>/lib/sysctl.d/00-alpine.conf</code>. Software installed via our package manager will install to either of those places.
 
<code>/run/sysctl.d</code> holds configuration that is created at run-time by daemons/services or at very early-boot. Neither the distribution nor the packaged software will install configuration to it, primarily because /run is in temporary memory. Configuration in this location that matches names the locations used by the distribution and packages will cause the latter not to be read and applied by the <code>sysctl</code> service.
 
<code>/etc/sysctl.d</code> holds configuration that is created and maintained by the local administrator, neither Alpine nor its packaged software will touch it, and configuration in that has the same name as in the location reserved for the distribution and packages, or the location for run-time configuration from daemons/services, will cause the latter to not be read and applied by the <code>sysctl</code> service.
 
<code>/etc/sysctl.conf</code> is a historical location for this kind of configuration and is kept for the same reasons.
 
===== OpenRC now has a sane ordering of directories when loading kernel modules =====


That means the changes that were done in /etc/modules or /etc/modules-load.d by the local administrator ended up being overridden by modules installed by packages in /usr/lib/modules-load.d and /lib/modules-load.d.
Loading kernel modules during boot is done with the <code>modules</code> OpenRC service, which reads configuration files in certain locations and loads kernel modules with the modprobe utility from either busybox or util-linux.


With the changes to the '''modules''' service the new ordering of directories is:
Starting with 3.12.0 a more logical ordering is adopted for which configuration files to read and ignore:


# /lib/modules-load.d/*.conf
# /lib/modules-load.d/*.conf
# /usr/lib/modules-load.d/*.conf
# /usr/lib/modules-load.d/*.conf
# /run/modules-load.d/*.conf
# /etc/modules
# /etc/modules
# /etc/modules-load.d/*.conf
# /etc/modules-load.d/*.conf
# /run/modules-load.d/*.conf


Now admins can override files installed by packages (/lib/modules-load.d and /usr/lib/modules-load.d) by having files with the same name in /etc/modules-load.d, and both can be overridden by files in /run/modules-load.d.
<code>/lib/modules-load.d</code> and <code>/usr/lib/modules-load.d</code> are to be used by the distribution and packages. Software installed via our package manager will install to either of those places.
 
<code>/run/modules-load.d</code> holds configuration that is created at run-time by daemons/services or at very early-boot. Neither the distribution nor the packaged software will install configuration to it, primarily because /run is in temporary memory. Configuration in this location that matches names in the locations used by the distribution and packages will cause the latter not to be read and applied by the <code>modules</code> service.
 
<code>/etc/modules-load.d</code> holds configuration that is created and maintained by the local administrator, neither Alpine nor its packaged software will touch it, and configuration in that has the same name as in the location reserved for the distribution and packages, or locations reserved for the run-time configuration of daemons/services, will cause the latter to not be read and applied by the <code>modules</code> service.
 
<code>/etc/modules</code> is a historical location for this kind of configuration and is kept for the same reasons.
 
===== Telegram Desktop is now available in the community repo =====
 
See [https://git.alpinelinux.org/aports/commit/?id=184355fdc44bc2e12976d65518fe029d8a6e459d commit] that moved the package to the community repo for explanation.
 
===== efitools and sbsigntool are now in main/ =====
 
Those packages have lived in testing/ for a long time and have been successfully used by one of our developers to implement secure-boot in his system. They have been moved to main/ and will be available for others.
 
===== Packages which need libsecret's DBus API now depend a provider of its API via dbus:org.freedesktop.Secret =====
 
Previously it was possible to install a program which required the DBus API of libsecret (e.g. Fractal), but not install a secrets provider (e.g. gnome-keyring), so logins wouldn't be saved. This has been corrected and packages which require this API depend on the provider-package dbus:org.freedesktop:Secret now. It's provided by gnome-keyring, kwallet and keepassxc (in that order of importance, i.e. if none of these is pulled in gnome-keyring will be chosen by default). Right now we manually declared the provider for dbus:org.freedesktop.Secret, but eventually we should have an automatic detection for the DBus API packages provide to make this easier for other packages.
 
===== Preferring enchant2 over enchant =====
 
All packages which support enchant2 have been moved over to it instead of using enchant(1). enchant2 now also supports nuspell, which is a faster drop-in replacement for hunspell, which utilizes hunspell's dictionaries.
 
===== Firefox is now in community =====
 
Firefox finally left testing and will be in community, supported for 6 months.
 
===== moonjit is now luajit =====
 
Our luajit package switched to the alive moonjit fork which has, among other things, s390x support and actual development.
 
This [https://git.alpinelinux.org/aports/commit/?id=af7f776d08cf7c12c3dd62347829fe33e66dceaa commit] switched luajit over to moonjit, the following [https://git.alpinelinux.org/aports/commit/?id=a7d057d98859940cc3347dba011957f99291b1fa commit] removes our **HUGE** 46k s390x support patch which is now handled by upstream.
 
===== Support for YubiKeys =====
 
yubikey-manager and yubikey-manager-qt have been added to the community repos for using and managing your yubikeys. Installing yubikey-manager and enabling the pcscd service should make yubikeys functional.
 
===== Support for apk in GNOME Software =====
 
GNOME Software now offers integration with apk, the Alpine Package Keeper, so desktop applications can be installed via a GUI.
 
===== busybox no longer provider 'patch' builtin =====
 
The builtin is a prototype which fails the moment any fuzzing needs to be done and as such is not usable too many cases to justify its inclusion, build-base (which provider compilers and other development tools) now depends on patch and others need to install patch by themselves if they plan on using it.
 
the abuild package already depended on it and it is widely used in Alpine Linux's aports.
 
== abuild ==
 
===== Add default functions for subpackages that hold Bash, Zsh and Fish completion =====
 
abuild now provides default functions for $pkgname-bash-completion, $pkgname-zsh-completion and $pkgname-fish-completion subpackages.
 
Expected location of the completion files per shell:
 
* Bash -> <code>/usr/share/bash-completion/completions</code>
* Zsh -> <code>/usr/share/zsh/site-functions</code>
* Fish -> <code>/usr/share/fish/completions</code>
 
Files must be installed in the expected location in relation to '''$pkgdir''' in '''pacakge()'''.
 
Introduced in [https://gitlab.alpinelinux.org/alpine/abuild/commit/d5826968b713123a4f51d3dec1adb1225d0e194f d5826968b713123a4f51d3dec1adb1225d0e194f].
 
===== newapkbuild when called with CMake (-C) does out-of-source builds by default =====
 
When packaging with newapkbuild and using the -C switch to pre-fill the apkbuild with skeleton functions for CMake now:
 
* Adds <code>-B build</code> to the <code>cmake</code> call in '''build()'''.
* Adds <code>-C build</code> the <code>make</code> calls.
 
Doing out-of-source builds are recommended upstream to the point where warnings are printed when calling CMake on a project.
 
Introduced in [https://gitlab.alpinelinux.org/alpine/abuild/commit/e125a764896d884c69cc409e614b65cb336c15e8 e125a764896d884c69cc409e614b65cb336c15e8].
 
===== set CARGO_HOME to cache dependencies of rust packages =====
 
CARGO_HOME is now set to '''$SRCDEST/cargo''' and will cache all dependencies downloaded.
 
Introduced in [https://gitlab.alpinelinux.org/alpine/abuild/commit/af0c88e6abbb1e49224759f5c51b3068e6eab28b af0c88e6abbb1e49224759f5c51b3068e6eab28b].
 
===== The "plain" buildtype for Meson and "None" buildtype for CMake are used now =====
 
We previously used the "release" or "debugoptimized" buildmode for Meson or "Release" or "RelWithDebInfo" for CMake. This caused Meson and CMake to ignore parts of our C{,XX}FLAGS, e.g. by setting -O2 or even -O3 instead of our default of -Os. We've changed to the "plain" buildtype and the "None" buildtype for CMake. This should result in smaller binaries since -Os is respected now. See [https://lists.alpinelinux.org/~alpine/devel/%3C2896c13070c508a49cbaa72c8fb7f34ea947358b.camel%40cogitri.dev%3E the respective mailing list post]
 
==== abuild-meson introduced ====
 
abuild-meson is a small wrapper shellscript that wraps meson (directly inspired by Arch Linux's arch-meson and Void Linux's build_style=meson), calling it with the correct options for packaging in Alpine Linux. APKBUILDs should switch to using it to guarantee all APKBUILDs that use meson have the same set of options.


Note that /etc/modules cannot be overridden and only exists because of historical precedent.
[[Category:News]]

Latest revision as of 14:11, 19 February 2023

aports

python2 no longer provides python and python-devel

python2 no longer provides python and python-devel, nothing does, it is now required that you explicitly depend on either python2 or python3, any new contributions that depend on python2 will be rejected summarily, and python2 is in the process of being **completely** removed.

You must apk del python and add `python3` or `python2` for the upgrade to work correctly, as a stale `python` in /etc/apk/world will prevent things from upgrading correctly.

llvm 10.0.0

llvm 10 is now the default in Alpine Linux.

commit

Initial support for DLang

We've added initial support for the D language with this release. We now have GDC, the D compiler frontend using GCC, available on all arches but ppc64le and LDC, a D compiler using the LLVM backend, on x86, x86_64 and aarch64. Most things are built against LDC, since it offers superior optimization and a vastly newer versions of the D runtime and standard library. These contain many important bug fixes (especially on aarch64) and contain features required by many D applications.

py3-setuptools now uses system python3 modules instead of vendored dependencies

py3-setuptools now installs py3-packaging, py3-parsing, py3-appdirs, py3-six and py3-ordered-set from the system.

The following commits are the ones responsible for this change:

ncurses fixes

A few fixes trickled in relating exclusively to Alpine Linux that affect ncurses:

With this commit the ncurses-lib package no longer depends on the ncurses-terminfo, which was too big at 7.5 MB, instead ncurses-lib now depends solely on the ncurses-terminfo-base package which weights at around 120 kB.

With this commit the ncurses-terminfo-base now includes the most common terminfo databases like tmux, screen, xterm-256color and also databases for packaged terminals like gnome-terminal, vte, konsole, alacritty, kitty, putty. All other terminfo databases are now in ncurses-terminfo.

With this commit all terminals that have their terminfo databases provided by the ncurses-terminfo-base now depend on it.

python3 no longer provides pip3, use py3-pip from community

Python3 is now built with --without-ensurepip which removes pip3 and its libraries from it. Instead use the py3-pip pacakge which uses system components.

BPF JIT support

> TODO: Small preamble about BPF

So it (BPF JIT) has been enabled by default in 3bf2313adc57fe6b36bf459ddca6d65a392609db, and unprivileged BPF JIT has been disabled in 4e286992d5ed751f6ca60eb18d77313bb0868513.

OpenRC now has a sane ordering of directories when configuring kernel parameters

Configuring kernel parameters is done by having configuration files in specific locations like /etc/sysctl.conf and files ending with .conf in certain directories like /etc/sysctl.d. Before 3.12.0 the ordering had no logical explanation and surprised users that expected a hierarchy.

Starting with 3.12.0 the ordering is as follows:

  1. /lib/sysctl.d/*.conf
  2. /usr/lib/sysctl.d/*.conf
  3. /run/sysctl.d/*.conf
  4. /etc/sysctl.conf
  5. /etc/sysctl.d/*.conf


/lib/sysctl.d and /usr/lib/sysctl.d are to be used by the distribution and packages. Alpine Linux installs its default configuration file in /lib/sysctl.d/00-alpine.conf. Software installed via our package manager will install to either of those places.

/run/sysctl.d holds configuration that is created at run-time by daemons/services or at very early-boot. Neither the distribution nor the packaged software will install configuration to it, primarily because /run is in temporary memory. Configuration in this location that matches names the locations used by the distribution and packages will cause the latter not to be read and applied by the sysctl service.

/etc/sysctl.d holds configuration that is created and maintained by the local administrator, neither Alpine nor its packaged software will touch it, and configuration in that has the same name as in the location reserved for the distribution and packages, or the location for run-time configuration from daemons/services, will cause the latter to not be read and applied by the sysctl service.

/etc/sysctl.conf is a historical location for this kind of configuration and is kept for the same reasons.

OpenRC now has a sane ordering of directories when loading kernel modules

Loading kernel modules during boot is done with the modules OpenRC service, which reads configuration files in certain locations and loads kernel modules with the modprobe utility from either busybox or util-linux.

Starting with 3.12.0 a more logical ordering is adopted for which configuration files to read and ignore:

  1. /lib/modules-load.d/*.conf
  2. /usr/lib/modules-load.d/*.conf
  3. /run/modules-load.d/*.conf
  4. /etc/modules
  5. /etc/modules-load.d/*.conf

/lib/modules-load.d and /usr/lib/modules-load.d are to be used by the distribution and packages. Software installed via our package manager will install to either of those places.

/run/modules-load.d holds configuration that is created at run-time by daemons/services or at very early-boot. Neither the distribution nor the packaged software will install configuration to it, primarily because /run is in temporary memory. Configuration in this location that matches names in the locations used by the distribution and packages will cause the latter not to be read and applied by the modules service.

/etc/modules-load.d holds configuration that is created and maintained by the local administrator, neither Alpine nor its packaged software will touch it, and configuration in that has the same name as in the location reserved for the distribution and packages, or locations reserved for the run-time configuration of daemons/services, will cause the latter to not be read and applied by the modules service.

/etc/modules is a historical location for this kind of configuration and is kept for the same reasons.

Telegram Desktop is now available in the community repo

See commit that moved the package to the community repo for explanation.

efitools and sbsigntool are now in main/

Those packages have lived in testing/ for a long time and have been successfully used by one of our developers to implement secure-boot in his system. They have been moved to main/ and will be available for others.

Packages which need libsecret's DBus API now depend a provider of its API via dbus:org.freedesktop.Secret

Previously it was possible to install a program which required the DBus API of libsecret (e.g. Fractal), but not install a secrets provider (e.g. gnome-keyring), so logins wouldn't be saved. This has been corrected and packages which require this API depend on the provider-package dbus:org.freedesktop:Secret now. It's provided by gnome-keyring, kwallet and keepassxc (in that order of importance, i.e. if none of these is pulled in gnome-keyring will be chosen by default). Right now we manually declared the provider for dbus:org.freedesktop.Secret, but eventually we should have an automatic detection for the DBus API packages provide to make this easier for other packages.

Preferring enchant2 over enchant

All packages which support enchant2 have been moved over to it instead of using enchant(1). enchant2 now also supports nuspell, which is a faster drop-in replacement for hunspell, which utilizes hunspell's dictionaries.

Firefox is now in community

Firefox finally left testing and will be in community, supported for 6 months.

moonjit is now luajit

Our luajit package switched to the alive moonjit fork which has, among other things, s390x support and actual development.

This commit switched luajit over to moonjit, the following commit removes our **HUGE** 46k s390x support patch which is now handled by upstream.

Support for YubiKeys

yubikey-manager and yubikey-manager-qt have been added to the community repos for using and managing your yubikeys. Installing yubikey-manager and enabling the pcscd service should make yubikeys functional.

Support for apk in GNOME Software

GNOME Software now offers integration with apk, the Alpine Package Keeper, so desktop applications can be installed via a GUI.

busybox no longer provider 'patch' builtin

The builtin is a prototype which fails the moment any fuzzing needs to be done and as such is not usable too many cases to justify its inclusion, build-base (which provider compilers and other development tools) now depends on patch and others need to install patch by themselves if they plan on using it.

the abuild package already depended on it and it is widely used in Alpine Linux's aports.

abuild

Add default functions for subpackages that hold Bash, Zsh and Fish completion

abuild now provides default functions for $pkgname-bash-completion, $pkgname-zsh-completion and $pkgname-fish-completion subpackages.

Expected location of the completion files per shell:

  • Bash -> /usr/share/bash-completion/completions
  • Zsh -> /usr/share/zsh/site-functions
  • Fish -> /usr/share/fish/completions

Files must be installed in the expected location in relation to $pkgdir in pacakge().

Introduced in d5826968b713123a4f51d3dec1adb1225d0e194f.

newapkbuild when called with CMake (-C) does out-of-source builds by default

When packaging with newapkbuild and using the -C switch to pre-fill the apkbuild with skeleton functions for CMake now:

  • Adds -B build to the cmake call in build().
  • Adds -C build the make calls.

Doing out-of-source builds are recommended upstream to the point where warnings are printed when calling CMake on a project.

Introduced in e125a764896d884c69cc409e614b65cb336c15e8.

set CARGO_HOME to cache dependencies of rust packages

CARGO_HOME is now set to $SRCDEST/cargo and will cache all dependencies downloaded.

Introduced in af0c88e6abbb1e49224759f5c51b3068e6eab28b.

The "plain" buildtype for Meson and "None" buildtype for CMake are used now

We previously used the "release" or "debugoptimized" buildmode for Meson or "Release" or "RelWithDebInfo" for CMake. This caused Meson and CMake to ignore parts of our C{,XX}FLAGS, e.g. by setting -O2 or even -O3 instead of our default of -Os. We've changed to the "plain" buildtype and the "None" buildtype for CMake. This should result in smaller binaries since -Os is respected now. See the respective mailing list post

abuild-meson introduced

abuild-meson is a small wrapper shellscript that wraps meson (directly inspired by Arch Linux's arch-meson and Void Linux's build_style=meson), calling it with the correct options for packaging in Alpine Linux. APKBUILDs should switch to using it to guarantee all APKBUILDs that use meson have the same set of options.