升级 Alpine Linux 到新的发布分支

来自 Alpine Linux
(重定向自 Upgrading Alpine

本页介绍如何将 Alpine Linux 升级到较新的发布分支。要应用常规安全更新和错误修复,请参阅升级正在运行的系统

升级到最新版本

当 Alpine Linux 以 sys 模式安装时,例如在硬盘上,升级到下一个稳定版本包括 3 个步骤

  1. 更新仓库文件
  2. 更新软件包列表
  3. 升级软件包

即,更新 /etc/apk/repositories 文件,然后执行简单的软件包管理器操作。但是,对于较旧的发布分支,请参阅从旧版本升级以获取特定的升级步骤。

警告: 在实际升级系统之前,请确保您已备份重要数据并阅读发行说明


更新仓库文件

可以使用以下方法之一更新仓库文件 /etc/apk/repositories

使用 setup-apkrepos 脚本

启动 setup-apkrepos 脚本

# setup-apkrepos

按下 e 将使用 vi 编辑器 打开文件进行编辑。编辑仓库行以反映新的版本号。

使用 sed 命令

使用单行命令“就地”编辑文件中的所有版本号。以下是如何将 v3.20 更改为 v3.21

# sed -i -e 's/v3\.20/v3\.21/g' /etc/apk/repositories

手动编辑 /etc/apk/repositories

使用您选择的任何编辑器(例如 nano)编辑 /etc/apk/repositories 文件。

/etc/apk/repositories 的内容

http://dl-3.alpinelinux.org/alpine/v3.20/main http://dl-3.alpinelinux.org/alpine/v3.20/community

在上面的文件中,要将 Alpine Linux 从 3.20 版本升级到 3.21 版本,只需将所有位置的数字 3.20 替换为 3.21

/etc/apk/repositories 的内容

http://dl-3.alpinelinux.org/alpine/v3.21/main http://dl-3.alpinelinux.org/alpine/v3.21/community

使用 latest-stable 而不是版本号

警告: 将仓库更改为 latest-stable 可能会启动意外的版本升级。请注意后果。


为了避免将来版本升级时手动更改版本号,可以将仓库行指向 /etc/apk/repositories 文件中的 "latest-stable" 而不是绝对值,如下所示

/etc/apk/repositories 的内容

http://dl-3.alpinelinux.org/alpine/latest-stable/main http://dl-3.alpinelinux.org/alpine/latest-stable/community

更新软件包列表

在仓库文件正确就位的情况下,可以使用以下命令获取可用软件包的最新索引列表

# apk update

提示: 在另一个 apk 命令中添加 --update-cache-U,例如 apk add -U ...apk upgrade -U,与始终在其他 apk 命令之前运行 apk update 具有相同的效果。而不是自动更新,仅当索引最近未更新时才更新。

升级软件包

有时需要先将 Alpine Linux 软件包管理器本身升级到最新可用版本,然后再升级任何其他软件包。例如,从 2.3.0_rc1 之前的 Alpine 版本升级时就是这种情况。但简单地一直这样做也不会有坏处

# apk add --upgrade apk-tools

接下来,升级所有已安装的软件包

# apk upgrade --available

--available 开关用于强制升级所有软件包,即使它们的版本号相同。有时 musl 中的更改需要这样做。

注意: 所有已升级的服务都需要重新启动,才能开始使用升级后的版本。如果内核已升级,则需要重新启动才能开始使用升级后的版本:

sync reboot

升级到 Edge

将 Alpine Linux 从稳定版本升级到滚动开发版本 edge 基本上需要与升级到最新版本相同的步骤。

关键的区别在于,在编辑 /etc/apk/repositories 文件时,其中引用的所有仓库版本(例如 v3.21latest-stable)都需要指向 edge

使用 edge 分支时,如果需要的软件包仅在 testing 仓库中可用,则可以添加 testing 仓库。

注意: 请记住,testing 仓库中的软件包没有支持。


/etc/apk/repositories 的内容

#/media/cdrom/apks http://dl-cdn.alpinelinux.org/alpine/edge/main http://dl-cdn.alpinelinux.org/alpine/edge/community http://dl-cdn.alpinelinux.org/alpine/edge/testing

升级到 edge 后,可以使用以下命令检查当前安装的 edge 版本

$ cat /etc/alpine-release

并参考附加到版本的构建日期。

警告: 不要同时启用 stable 和 edge 仓库。这可能会破坏您的系统。要么使用 edge stable。如果您混合使用 stable 和 edge 仓库,您需要自行承担风险。


从 edge 降级

警告: 降级未正式支持。提供这些步骤仅供参考,请记住您需要自行承担风险。


要从 Edge 降级,请按照升级到最新版本中的说明修改仓库文件 /etc/apk/repositories,然后运行以下命令

# apk fix # apk update # apk upgrade # apk upgrade -a # apk upgrade -al

这通常会自动降级所有软件包,但如果您需要手动删除并重新安装软件包才能完成这些命令,请不要感到惊讶。

在 CD 上升级 Alpine Linux

启动介质

如果使用的启动介质(例如 CD)与用于存储配置信息的介质分开,只需下载最新的 ISO,并将启动介质的内容替换为最新 ISO 的内容。

如果从 CD 启动,这仅表示用使用新镜像制作的 CD 替换 CD 并重新启动 Alpine Linux 机器。

更新本地软件包安装

如果您已使用APK 缓存本地安装和配置了其他软件包,则还应执行以下步骤。

在升级之前备份本地配置。

lbu ci

使用上面详细介绍的步骤更新您的仓库。升级软件包后,在重新启动系统之前,保存升级后的配置更改。

lbu ci

在其他可移动介质(如 CF/USB)上升级 Alpine Linux

以下说明适用于在 Compact Flash 或 USB 介质上运行的 RAM 运行 Alpine 安装。使用上面详细介绍的步骤更新您的仓库,然后运行

apk upgrade --update-cache --available

对于某些目的就足够了。(如果您希望在重新启动后使用新软件包,则应启用 APK 缓存。)

但是,这不是一个通用的解决方案,因为它不会处理任何内核升级等。对于通用解决方案,您需要升级启动介质(Compact Flash 或 USB)。以下步骤描述了如何执行此操作。

设置环境变量

为了使文档更“通用”,我们首先设置一些环境变量。

vi /etc/lbu/lbu.conf

确保变量 LBU_MEDIA 未注释(通过删除前导 '#')。

您还需要为您的 LBU_MEDIA 设置适当的值。您选择的介质将是您存储设置/配置的介质。

注意: 即使您的 alpine 安装在 CF、HD 或 USB 上,您仍然可以选择将配置保存在适合您需要的其他介质上。但请记住,当启动时,您的 Alpine 系统所在的介质和您的配置所在的介质都需要在您的机器中。

示例

LBU_MEDIA=usb

LBU_MEDIA=sda1

现在您已经为您的需求配置了 /etc/lbu/lbu.conf,我们将设置环境变量(注意前导 .)。

. /etc/lbu/lbu.conf

您可以测试您的环境变量是否已设置

echo $LBU_MEDIA

它应该输出类似 usbsda1 或您刚刚配置的内容。

备份您的配置

在开始升级之前,明智的做法是保存您的配置。

lbu ci

升级操作系统

首先检查您的介质是否有足够的空间。对于标准 Alpine 镜像,您至少需要 400MB 可用空间。

df -h | grep "Filesystem\|$LBU_MEDIA"

下载并验证新版本

确保保存 Alpine 系统的介质以读写方式挂载。

mount -oremount,rw /media/$LBU_MEDIA

如果使用 Alpine Linux 2.2.3 或更新版本:下载最新版本,

wget https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/<arch>/<image>.iso

然后使用以下命令挂载和复制您需要的文件

setup-bootable -u alpine-extended-<version>-<arch>.iso /media/$LBU_MEDIA

保存更改

现在所有升级都已完成,我们应该将设置保存到我们的介质(希望您在执行此升级之前已备份)。

lbu ci

加载新内核

在大多数情况下,您将需要重新启动 Alpine Linux(尤其是在内核发生更改时)

sync reboot

注意: 如果您知道自己在做什么,则可能不需要重新启动。但请确保重新启动受升级影响的所有服务。

更新到 armhf 上的最新内核(例如 Raspberry Pi 0 或 1)

在 Alpine 3.X 和更新版本中,使用 apk upgrade 时不会升级内核,并且 setup-bootable 无法正常工作。

如果您要升级内核,则需要从最新版本获取内核,但首先您必须拥有并运行 

apk update; apk version -l '<'; apk upgrade; lbu ci;

所以现在您的所有软件包都已升级,您可以升级您的内核。

1. 我们需要获取一些变量 

. /etc/os-release; . /etc/lbu/lbu.conf; ARCH=$(cat /etc/apk/arch);

2. 您必须验证它们是否已正确设置,使用此命令 

echo "alpine version : $VERSION_ID"; echo "lbu media : $LBU_MEDIA"; echo "arch : $ARCH"

3. 它将输出类似这样的内容(如果不是,请不要继续此过程) 

alpine version : 3.16.2 lbu media : mmcblk0p1 arch : armhf

4. 然后您可以运行此脚本(警告 : config.txt 将被覆盖!) 

cd /media/$LBU_MEDIA; mount -oremount,rw /media/$LBU_MEDIA; wget https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/$ARCH/alpine-rpi-$VERSION_ID-$ARCH.tar.gz; wget https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/$ARCH/alpine-rpi-$VERSION_ID-$ARCH.tar.gz.sha256; sha256sum -c *.sha256; rm /media/$LBU_MEDIA/apks/$ARCH/*; rm /media/$LBU_MEDIA/cache/*; apk update && apk cache -v download; tar xzf alpine-rpi-$VERSION_ID-$ARCH.tar.gz; rm alpine-rpi-$VERSION_ID-$ARCH.tar.gz alpine-rpi-$VERSION_ID-$ARCH.tar.gz.sha256; sync; reboot;

5. 测试一下 !

uname -a

或者,您可以从仓库升级内核

更新本地软件包安装

这与上面的#更新本地软件包安装中的操作相同。

在没有 setup-bootable 的情况下更新 USB/CF 无盘安装

可以从另一个系统更新 Alpine 的无盘安装,或者不使用 setup-bootable 脚本。这已在 Raspberry Pi 上从 3.13 升级到 3.14 的过程中进行了测试。

在开始之前,更新 /etc/apk/repositories 文件以检索新版本的软件包。然后使用以下命令更新所有软件包

apk update && apk upgrade -i -a --update-cache

然后我们可以使用 update-conf 检查来自新软件包的配置更改。

# check apk-new config changes update-conf -a -l update-conf -a

我们现在需要准备更新内核和启动材料。为此,我们停止 modloop(它是提供内核模块的环回挂载)并将 SD 介质重新挂载为读/写。

我们也可以关闭系统,弹出介质,并在另一台机器上执行下一步(如果是这样,请跳过此命令块)

rc-service modloop stop mount /media/mmcblk0p1 -o remount,rw cd /media/mmcblk0p1

此时,从 SD 介质中删除所有文件,除了 /cache, *.apkvol.tar.gz, usercfg.txt 和 config.txt。暂时将 config.txt 重命名为 config.txt.bak,因为提取新的 tar 文件将覆盖该文件。

我们现在可以下载新版本并提取它。此示例适用于 Alpine Raspberry Pi 版本,因此请随意调整 URL 以适应您的系统。

wget https://dl-cdn.alpinelinux.org/alpine/v3.13/releases/aarch64/alpine-rpi-3.13.0-aarch64.tar.gz.sha256 wget https://dl-cdn.alpinelinux.org/alpine/v3.13/releases/aarch64/alpine-rpi-3.13.0-aarch64.tar.gz sha256sum -c *.sha256 tar zxf *-aarch64.tar.gz && sync rm alpine-rpi-*

恢复原始 config.txt

mv config.txt.bak config.txt

使用 lbu 更新持久存储

lbu ci -d

我们现在可以重新启动,这应该启动到新内核。完成此操作后,我们可以清理并重新下载 apk 缓存

mount /media/mmcblk0p1 -o remount,rw rm /media/mmcblk0p1/cache/* sync && apk update && apk cache -v download mount /media/mmcblk0p1 -o remount,ro