将 Alpine Linux 升级到新的发布分支

来自 Alpine Linux

本页面介绍如何将 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<\/var>/v3\.21<\/var>/g' /etc/apk/repositories

手动编辑 /etc/apk/repositories

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

/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

提示: --update-cache-U 添加到另一个 apk 命令,例如 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 无盘安装

可以从另一个系统或不使用 setup-bootable 脚本来更新 Alpine 的无盘安装。这已在 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