升级 Alpine Linux 到新的发布分支
本页介绍如何将 Alpine Linux 升级到较新的发布分支。要应用常规安全更新和错误修复,请参阅升级正在运行的系统。
升级到最新版本
当 Alpine Linux 以 sys 模式安装时,例如在硬盘上,升级到下一个稳定版本包括 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 的内容
在上面的文件中,要将 Alpine Linux 从 3.20 版本升级到 3.21 版本,只需将所有位置的数字 3.20 替换为 3.21
/etc/apk/repositories 的内容
使用 latest-stable 而不是版本号

latest-stable
可能会启动意外的版本升级。请注意后果。
为了避免将来版本升级时手动更改版本号,可以将仓库行指向 /etc/apk/repositories 文件中的 "latest-stable" 而不是绝对值,如下所示
/etc/apk/repositories 的内容
更新软件包列表
在仓库文件正确就位的情况下,可以使用以下命令获取可用软件包的最新索引列表
# apk update
--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.21
或 latest-stable
)都需要指向 edge
。
使用 edge 分支时,如果需要的软件包仅在 testing 仓库中可用,则可以添加 testing 仓库。
/etc/apk/repositories 的内容
升级到 edge 后,可以使用以下命令检查当前安装的 edge 版本
$ cat /etc/alpine-release
并参考附加到版本的构建日期。

从 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
设置适当的值。您选择的介质将是您存储设置/配置的介质。
示例
LBU_MEDIA=usb
或
LBU_MEDIA=sda1
现在您已经为您的需求配置了 /etc/lbu/lbu.conf,我们将设置环境变量(注意前导 .
)。
. /etc/lbu/lbu.conf
您可以测试您的环境变量是否已设置
echo $LBU_MEDIA
它应该输出类似 usb
、sda1
或您刚刚配置的内容。
备份您的配置
在开始升级之前,明智的做法是保存您的配置。
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