Alpine Linux:概览
Alpine 使用 musl 作为其 libc,以及 BusyBox 作为核心实用程序。这些选择往往使 Alpine 特别精简和安全。
通用概述
Alpine Linux 拥有任何操作系统中最快的启动时间之一。
它以其小尺寸而闻名,并且在容器中被大量使用。
它还以在嵌入式设备中的广泛使用以及作为许多企业路由器的基础系统而闻名。
postmarketOS 项目旨在在移动设备上运行,它基于 Alpine Linux。
独特之处
Alpine Linux 遵循 SSS 发行版的原则:简单+小巧+安全:由于使用了 muslc 作为精简的 libc,BusyBox 简单的 coreutils(也可以选择使用每个 coreutils 工具的膨胀原始包),以及用户区二进制文件编译为位置无关可执行文件 (PIE) 并带有堆栈粉碎保护。
高效
一些主要原因
- 使用 musl 作为精简的 libc
- 其自身的软件包管理器,称为 apk,
- openrc init 系统,脚本驱动的设置,仅此而已!
- busybox:简单的 coreutils(也可以选择使用每个 coreutils 工具的膨胀原始包)
这为您提供了一个简单、清晰的 Linux 环境,没有所有噪音,没有任何其他东西会妨碍您。
安全
所有用户区二进制文件都编译为位置无关可执行文件 (PIE) 并带有堆栈粉碎保护。
技术概述
- 架构
Alpine 使用 Linux 作为 OS 内核,并专注于 SSS 发行版,简单、小巧且安全。下表表示 Alpine Linux 支持的架构
Alpine Linux 硬件支持矩阵 架构 端口 描述 起始版本 x86 x86 32 位 i686 兼容(或更高版本)CPU,至少具有 CMOV 和 SSE2 全部 x86_64 AMD64 兼容的 64 位 x86 指令集 全部 ARM armhf 32 位 ARM,带有硬浮点 ABI - 适用于 ARMv6 设备 - Raspberry Pi 1、Zero、ZeroW、cm1 (defconfig bcmrpi) v3.0 armv7 32 位 ARM - 适用于 ARMv7 设备 - Raspberry Pi 2、3、3+、Zero2W、cm3、cm3+ (defconfig bcm2709) v3.9 aarch64 64 位 ARM - 适用于 ARMv8+ 设备 - Raspberry Pi 3、3+、4、400、Zero2W、cm3、cm3+、cm4、5 (defconfig bcm2711) v3.5 PowerPC ppc64le 64 位 PowerPC (小端序),主要用于 POWER8 和 POWER9 v3.6 IBM System Z s390x IBM Z 大型机,尤其是 IBM Z 和 IBM LinuxONE (z196 最低配置) v3.6 RISC V riscv64 64 位 RISC V v3.20 LoongArch loongarch64 64 位 LoongArch v3.21 - 安装
Alpine 可以像任何其他发行版一样安装到硬盘/SSD/其他存储介质(这称为 sys 模式)。所讨论的存储介质可以是任何块设备(USB、闪存、SDD、HDD)。它可以是可移动的,只要您可以配置您的机器从它启动。但是,如果您正在使用可移动介质,您可能更喜欢其他安装模式之一。
在这些模式中的每一种模式下,您都从静态映像启动您的机器。您还需要一个可写介质来保存对系统的更新。在 diskless 模式下,该介质通常是一个小的 USB 密钥(或其上的一个分区),用于保存您想要持久化的更改。基本 Alpine 系统和您的所有更改都将解压缩到基于内存的文件系统中。
另一种 data 模式适用于您处理大量持久数据时,您希望将这些数据保存在硬盘/SSD/其他存储介质上,而不是解压缩到内存中。此处的默认设置是将您的 /var 分区直接存储在硬盘存储介质上。但是,与 diskless 模式一样,您的根系统仍然来自静态 ISO 映像。
这些第二种和第三种安装模式有时统称为“从 RAM 运行”安装。
这些安装模式的关键是 Alpine 的 lbu 实用程序。它跟踪您从静态 ISO 版本修改了哪些文件,并希望这些更改持久化。lbu 实用程序将这些更改保存在 .apkovl “覆盖”文件中。(这些本质上是 tar-gzip 存档,尽管它们也可以加密。如果您愿意,也可以将 lbu 实用程序与 sys 模式一起使用:作为一种备份形式,或为其他系统配置覆盖文件。但是,对于强大的增量备份系统,您可能需要更专业的工具,例如 rsnapshot。)
lbu 实用程序是 alpine-conf 软件包的一部分,alpine-base 软件包需要它。
Alpine 的安装程序由 /sbin/setup-* 脚本组成,这些脚本也是 alpine-conf 软件包的一部分。
基本的 Alpine 安装将仅包含所需的软件包,例如 alpine-base、syslinux、linux-lts(或其他内核软件包),以及根据您的用途,像 openssh 和/或 chrony 这样的软件包。
在这种情况下,Alpine 的引导加载程序是 syslinux,或其同伴
isolinux
或extlinux
。最新的版本也具有 Grub 和 UEFI 支持。 - init 系统
“init 系统”包括几个不同的组件。首先是 initramfs,它由引导加载程序加载。Alpine 用于生成 initramfs 的工具是 /sbin/mkinitfs,它是 mkinitfs 软件包的一部分,Alpine 的内核软件包和 syslinux 软件包都需要它。此工具的设置从 /etc/mkinitfs/* 读取,并将 init 脚本 /usr/share/mkinitfs/initramfs-init 安装到 initramfs 中。
其次,Alpine 使用 OpenRC 来处理其余的 init 脚本。此基本框架位于 openrc 软件包中,alpine-conf 软件包需要它。
- 打包和开发系统
Linux 发行版的最后一个重要的区别特征是其打包和开发系统。
在 Alpine 的情况下,这些在 ArchLinux 的一方面,与 Gentoo 和 FreeBSD 的另一方面之间是混合体。我们的软件包管理和构建实用程序的工作方式很像 Arch 的
- mkinitfs,如上所述,重建 Alpine 的 initramfs,就像 Arch 的 “mkinitcpio”
- 来自 apk-tools 的 apk 是 Alpine 的软件包管理器,就像 Arch 的 “pacman”;请参阅 Alpine Linux 软件包管理
- 来自 abuild 是 Alpine 的构建实用程序,就像 Arch 的 “makepkg”;请参阅 Abuild 和 Helpers
- Alpine 的软件包构建脚本名为 APKBUILD,就像 Arch 的 “PKGBUILD”
Alpine 从 Gentoo 和 FreeBSD 借鉴的是所有软件包构建脚本的树。它被称为 Aports 树,并作为一个单独的 git 存储库保存。(比较 Gentoo 的 “Portage” 和 FreeBSD 的 “ports”。可以使用 Arch 的 “abs” 设置类似的东西,但它与他们的软件包管理器和构建实用程序的集成度不高。)
如果您只计划在给定的系统上安装软件包,而不打算在那里进行任何开发,那么您唯一需要的部分是 mkinitfs 和 apk-tools,这两者都包含在基本的 Alpine 安装中。如果您确实计划进行开发,请安装 alpine-sdk,其中包括 gcc、git、abuild 等,并参阅 开发者文档。