将 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<\/var>/v3\.21<\/var>/g' /etc/apk/repositories
手动编辑 /etc/apk/repositories
使用您选择的任何编辑器编辑 /etc/apk/repositories 文件(例如 nano)。
/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 命令,例如 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 无盘安装
可以从另一个系统或不使用 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