Upgrading Alpine Linux to a new release branch
This page covers upgrading to newer releases.
Doing regular security updates with the package manager is shown at Upgrading a running system.
Upgrading an Alpine Linux Hard-disk installation
Upgrading Alpine v2.x to v3.x
Installing statically linked tools
Statically linked version of apk-tools is needed, because the old musl version would stop working after a libc change (possibly in the middle of upgrade). Static version of busybox can be handy in case of the recovery from a failure.
apk add busybox-static apk-tools-static
Changing repositories to v3.x
To begin, you need to update your /etc/apk/repositories file. Here are some shortcuts for doing so:
- Launch
setup-apkrepos
Enter e to edit /etc/apk/repositories. Change the version number by hand. - Or, edit the file in place. This is how you'd change v2.7 to v3.0:
sed -i -e 's/v2\.7/v3.0/g' /etc/apk/repositories
- Launch
Upgrading system
Use statically linked version of apk to update content of repository:
apk.static update
Simulating upgrade is recommended in order to detect issues beforehand:
apk.static upgrade --no-self-upgrade --available --simulate
With no problems encountered or after resolving them, start proper upgrade:
apk.static upgrade --no-self-upgrade --available
Upgrading to latest release
Repository Settings
First thing is to to edit or check the /etc/apk/repositories file.
Besides doing it manually (see below) this may be done using one of the following shortcuts.
- Launching the corresponding Alpine setup script,
setup-apkrepos
and pressing e to edit /etc/apk/repositories. Then editing the repository lines to reflect the new version number. - Or, use a one-line command to edit all version numbers in the file "in place". Here's how you'd change v2.5 to v2.6:
sed -i -e 's/v2\.5/v2\.6/g' /etc/apk/repositories
- Launching the corresponding Alpine setup script,
latest-stable
Note, subsequent manual changes of the version numbers in /etc/apk/repositories may be avoided for future release upgrades by having the repository lines refer to "latest-stable" instead of an absolute value:
Contents of /etc/apk/repositories
latest-stable
may initiate unexpected release upgrades. So beware of the consequences of unexpected release upgrades, when using latest-stable
Manual editing of /etc/apk/repositories:
Edit the /etc/apk/repositories file using any editor of your choice (nano for instance) and if necessary, add references to the Alpine Linux package repositories. In the example below, the file references the Alpine Linux CD, so that if a requested package is available on the local media, it will be obtained from there instead of being downloaded from the remote repository:
Contents of /etc/apk/repositories
In this example, To upgrade Alpine Linux from version 3.19 to 3.20, simply replace the version number 3.19 by 3.20 in all the places, so that the file will look like this:
Contents of /etc/apk/repositories
Upgrading packages
At times it is required to first upgrade just the Alpine Linux Package Manager itself to the latest available version, before upgrading any other package. This was the case, for example, when upgrading from a version of Alpine before 2.3.0_rc1. But simply always doing so shouldn't hurt, either:
apk add --upgrade apk-tools
Next, to upgrade all installed packages:
apk upgrade --available
The --available
switch is used to force all packages to be upgraded, even if they have the same version numbers. Sometimes changes in musl require doing this.
sync reboot
Upgrading to Edge
An upgrade of Alpine Linux from a stable version to the rolling development version edge basically requires the same steps as Upgrading to latest release.
The crucial difference is, that when editing the /etc/apk/repositories file, all referenced repository versions (such as v3.2
or latest-stable
) therein need to be pointing to edge
.
When using edge branch, testing repository can be added if the packages that one needs are available only in testing repository.
Contents of /etc/apk/repositories
After upgrading to edge, the currently installed edge version may be checked with
$ cat /etc/alpine-release
and referring to the build date that is attached to the release.
Upgrading from older versions
See Upgrading from older versions.
Upgrading Alpine Linux on CD
You may have an installation where the boot media being used (such as a CD, for example) is separate from the media used to store the configuration information. In this case, simply download the latest ISO, and replace the boot media contents with the contents of the latest ISO. If you are booting from a CD, this would simply mean replacing the CD with a CD made from the new image and rebooting the Alpine Linux box.
Update remaining packages from Web repository
If you are using APK caching you should also perform the following steps.
Edit the /etc/apk/repositories file using any editor of your choice (nano for instance) and if necessary, add references to the Alpine Linux package repositories. In the example below, the file references the Alpine Linux CD, so that if a requested package is available on the local media, it will be obtained from there instead of being downloaded from the remote repository:
Contents of /etc/apk/repositories
In this example, To upgrade Alpine Linux from version 3.19 to 3.20, simply replace the version number 3.19 by 3.20 in all the places, so that the file will look like this:
Contents of /etc/apk/repositories
If you're upgrading from a version of Alpine before 2.3.0_rc1, ensure you have the latest available version of the Alpine Linux Package Manager first before upgrading anything else:
apk add --upgrade apk-tools
Next, upgrade all your packages:
apk upgrade --available sync
The --available
switch is used to force all packages to be upgraded, even if they have the same version numbers. Sometimes changes in uClibc require doing this.
After upgrading packages, save any configuration changes (you should have backed up your earlier configuration prior to upgrading).
lbu ci
Upgrading Alpine Linux on other removable media (such as CF/USB)
The following instructions are for run-from-RAM Alpine installations running on Compact Flash or USB media. Updating your repositories using the procedures detailed above, then running:
apk upgrade --update-cache --available
will suffice for some purposes. (If you want the new packages to be used after a reboot, you should enable APK caching.)
However, this is not an adequate general solution because it won't honor any kernel upgrades and the like. For the general solution, you'll need to upgrade your boot medium (Compact Flash or USB). That is what the following steps describe how to do.
Setup environment variables
To make the documentation a bit more "generic" we start by setting some environment variables.
vi /etc/lbu/lbu.conf
Make sure that the variable LBU_MEDIA
is not commented (by removing the leading '#').
You also need to set a appropriate value for your LBU_MEDIA
. The media you choose will be the media where you store your settings/configuration.
Examples:
LBU_MEDIA=usb
or:
LBU_MEDIA=sda1
Now that you have your /etc/lbu/lbu.conf configured for your needs, we will set the environment variables (note the leading .
).
. /etc/lbu/lbu.conf
You can test if your environment variable was set:
echo $LBU_MEDIA
It should output something like usb
, sda1
, or whatever you just configured.
Back up your config
Before starting to upgrade, it's wise to save your configuration.
lbu ci
Upgrade Operating System
Start by checking that you have enough space on your media. For a standard Alpine image, you need at least 400MB available space.
df -h | grep "Filesystem\|$LBU_MEDIA"
Download and verify new release
Make sure the media that holds your Alpine system is mounted readwrite.
mount -oremount,rw /media/$LBU_MEDIA
If using Alpine Linux 2.2.3 or newer: Download the latest release,
wget https://dl-cdn.alpinelinux.org/alpine/v3.13/releases/<arch>/<image>.iso
and then use the following command to mount and copy files as needed for you:
setup-bootable -u alpine-extended-<version>-<arch>.iso /media/$LBU_MEDIA
Once the command completes, proceed to the Save changes section.
For older versions of Alpine
Start downloading a new '.iso' and a '.sha1' file
cd /media/$LBU_MEDIA wget -c {{#latestalp:alpine|url}} wget {{#latestalp:alpine|url}}.sha1
Check integrity of the downloaded files (it might take some time):
sha1sum -c {{#latestalp:alpine|file}}.sha1
The output of the above command should say 'OK'.
If says 'FAILED', delete the iso file and download it again.
If using Alpine Linux 1.10.4 or newer: there is a tool setup-bootable that will mount and copy the image you just downloaded to your boot medium. With this tool simply do:
setup-bootable -u {{#latestalp:alpine|file}} /media/$LBU_MEDIA
Instructions for older versions of Alpine are located elsewhere.
Save changes
Now that all upgrades are done, we should save our settings to our media (which you hopefully have backed up prior to doing this upgrade).
lbu ci
Load new kernel
In most cases you will need to reboot Alpine Linux (especially if there are changes in the kernel):
sync reboot
Update to latest kernel on armhf (eg. Raspberry Pi 0 or 1)
On Alpine 3.X and newer, kernel is not upgraded when using apk upgrade
and setup-bootable
does not work properly.
If you want to upgrade your kernel, you will need to get it from the latest release, but first you must have and run :
apk update; apk version -l '<'; apk upgrade; lbu ci;
So now all your packages are upgraded, you can upgrade your kernel.
1. We need to get some variables :
. /etc/os-release; . /etc/lbu/lbu.conf;
2. You must verify if they are correctly set, using this :
echo "alpine version : $VERSION_ID"; echo "lbu media : $LBU_MEDIA";
3. And it will output something like this (if not, do not continue this process) :
alpine version : 3.13.5 lbu media : mmcblk0p1
4. Then you can run this script :
cd /media/$LBU_MEDIA; mount -oremount,rw /media/$LBU_MEDIA; wget https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/armhf/alpine-rpi-$VERSION_ID-armhf.tar.gz; wget https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/armhf/alpine-rpi-$VERSION_ID-armhf.tar.gz.sha256; sha256sum -c *.sha256; tar xzf alpine-rpi-$VERSION_ID-armhf.tar.gz; rm alpine-rpi-$VERSION_ID-armhf.tar.gz alpine-rpi-$VERSION_ID-armhf.tar.gz.sha256; sync; reboot;
5. Test-it !
uname -a
Update remaining packages from Web repository
If you are using APK caching you should follow the instructions to Update remaining packages from Web repository, above.
Updating a USB/CF diskless install without setup-bootable
It is possible to update a diskless install of Alpine from another system, or without using the setup-bootable script. This was tested for the 3.13 to the 3.14 upgrade on a Raspberry Pi.
Before starting, update /etc/apk/repositories file to retrieve packages for the new release. Then update all packages with:
apk update && apk upgrade -i -a --update-cache
We can then use update-conf to check for changes to configurations from the new packages.
# check apk-new config changes update-conf -a -l update-conf -a
We now need to prepare to update the kernel and boot materials. To do this, we stop the modloop (which is the loopback mount providing kernel modules) and remount the SD media as read/write.
We can also shutdown the system, eject the media, and perform the next steps on another machine (if so, skip this command block)
/etc/init.d/modloop stop mount /media/mmcblk0p1 -o remount,rw cd /media/mmcblk0p1
At this point, remove all files from the SD media except for /cache, *.apkvol.tar.gz, usercfg.txt, and config.txt Rename config.txt to config.txt.bak temporarily, as extracting the new tar file will overwrite the file.
We can now download the new release and extract it. This example is for an Alpine Raspberry Pi release, so feel free to adjust the URLs for your system.
wget https://dl-cdn.alpinelinux.org/alpine/v3.13/releases/aarch64/alpine-rpi-3.13.0-aarch64.tar.gz.sha256 sha256sum -c *.sha256 tar zxf *-aarch64.tar.gz && sync rm alpine-rpi-*
Restore the original usercfg.txt:
mv config.txt.bak config.txt
Update the persistent storage using lbu:
lbu ci -d
We can now reboot, and this should boot into the new kernel. Once this is done, we can clean up and re-download apk caches:
mount /media/mmcblk0p1 -o remount,rw rm /media/mmcblk0p1/cache/* sync && apk update && apk cache -v download mount /media/mmcblk0p1 -o remount,ro