与其他发行版的比较

来自 Alpine Linux

Alpine Linux 与其他发行版有一些相似之处和不同之处。本页面旨在帮助来自其他发行版的新 Alpine Linux 用户快速上手。

软件包管理

Alpine 的软件包管理器是 Alpine Package Keeper。本节比较 apk 的使用方式,并与其他来自 Debian、Fedora、Arch 和 Void 的工具进行比较。

本节使用以下来自流行的 Linux 发行版的软件包管理器进行比较

对比图/Rosetta Stone

此图表显示了 Alpine 中完成一些标准操作的方式与其他发行版的比较。

操作 Alpine Arch Gentoo Debian/Ubuntu Fedora VoidLinux
更新软件包数据库

apk update

pacman -Sy

emerge --sync

apt update

dnf update

xbps-install -S

显示可用更新

apk version -l '<'

pacman -Qu

emerge --deep --update --pretend @world

apt upgrade --simulate

dnf list updates

xbps-install -n -u

安装软件包

apk add [软件包名称]

pacman -S [软件包名称]

emerge [软件包名称]

apt install [软件包名称]

dnf install [软件包名称]

xbps-install [软件包名称]

更新所有已安装软件包

apk upgrade -U -a

pacman -Su

emerge --update --deep @world

apt upgrade

dnf update

xbps-install -u

搜索软件包数据库

apk search -v '[字符串]*'

pacman -Ss [字符串]

emerge --search [字符串]

apt search [字符串]

dnf search [字符串]

xbps-query -Rs [字符串]

移除软件包

apk del [软件包名称]

pacman -R [软件包名称]

emerge --depclean [软件包名称]

apt remove [软件包名称]

dnf remove [软件包名称]

xbps-remove [软件包名称]


更新软件包数据库

Gentoo 将更新源代码构建脚本,数据库更新比 Debian 或 Alpine 的数据库更新花费更多时间。

Alpine

apk update

Arch

pacman -Sy

Debian

apt update

Gentoo

emerge --sync

显示可用更新

显示哪些软件包有可用更新

Alpine

apk version -v

apk version -v -l '<'

Gentoo

emerge --deep --update --pretend @world

Debian

apt list --upgradable

更新特定软件包

Alpine

apk add -u package1 package2

apk upgrade package1 package2

Debian

apt install package1 package2

Gentoo

emerge --update package1 package2

安装软件包

Alpine

apk add package1 package2

关于源码编译,请参阅 Aports treeabuild 工具。

Gentoo

emerge package1 package2

Debian

apt-get install package1 package2

Debian 源码编译

apt-get build-dep package1

apt-get source package1

(可选:通过修改 debian/rules makefile 自定义构建)(或设置环境变量,如 DEB_BUILD_OPTIONS)(请注意,这将使您的 bug 报告对维护者无效)

dpkg-buildpackage -rfakeroot -uc -b

dpkg -i generatedpackagename

简化源码编译

apt-get build-dep package1

apt-get -b source package1

(软件包使用上面的 -b 开关自动生成)

注意: 此过程可用于从 testing 和 unstable 向后移植软件包,只需将它们各自的源仓库添加到 sources.list,这类似于在 Gentoo 中将 ~x86 添加到 package.keywords。这将在下面的“架构与仓库”部分进一步探讨。

重新安装特定软件包

Alpine

apk del package1 package2 && apk add package1 package2

apk fix package1 package2

Gentoo

emerge --oneshot package1 package2

Debian

apt-get install --reinstall package1 package2

注意:您 很少 需要在 Debian 上重新安装软件包

搜索软件包数据库

Alpine

Alpine 只会搜索软件包名称。

apk search searchword

Gentoo

要搜索软件包名称和描述

emerge --searchdesc searchword

注意: 在 Gentoo 上,实际上最好安装并使用 eix 软件包进行搜索。您可以这样使用它们

eix searchword

Debian

apt-cache search searchword

emerge 和 apt-cache search 都支持正则表达式。

要在 Debian 上获取详细的软件包信息(仅在软件包名称中搜索)

apt-cache search --full --names-only searchword

移除软件包

Alpine

apk del package1 package2

apk del 当使用 --purge 标志时将删除配置文件。请确保您已备份配置文件。

您很可能希望在递归删除软件包之前快速查看依赖项。

要查看软件包的依赖项,请使用

apk info -R package1 package2

要查看软件包是否被其他软件包需要(是否是其他软件包的依赖项),请使用

apk info -r package1 package2


Gentoo

在 gentoo 上移除软件包的正确方法。

emerge --depclean package1 package2

如果您知道自己在做什么,您可以跳过依赖项检查,并可能使您的系统处于损坏状态。

emerge --unmerge package1 package2

Debian

apt-get remove package1 package2

或连同所有配置文件一起删除

apt-get remove --purge package1 package2

仅下载软件包

这可能很有用,例如,如果您使用的是拨号连接,并且想要先下载所有内容,然后再安装。

Alpine

apk fetch package1 package2

Gentoo

emerge --fetchonly package1 package2

Debian

apt-get install --download-only package1 package2

清理已下载软件包

为安装而下载的压缩包很容易占用千兆字节的存储空间。

Alpine

Alpine 将自动清理软件包。

Gentoo

以下命令将保持 /var/cache/distfiles/ 文件夹完整,同时删除所有子项。

find /var/cache/distfiles/ -mindepth 1 -delete

要仅删除过时的软件包,您需要安装 gentoolkit 软件包并使用 eclean

eclean distfiles

清理来自 emerging 软件包的临时文件

rm -rf /var/tmp/portage/*

Debian

apt-get clean

仅删除过时的软件包

apt-get autoclean

反向依赖

Alpine

apk-tools 将处理反向依赖。

Gentoo

Portage 的最新版本包含使用 preserved-libs 功能的库跟踪和保留。Portage 将通知您运行

emerge @preserved-rebuild

以帮助重建可能已损坏的二进制文件。

Debian

反向依赖由 dpkg 处理。

运行级别与 Initscripts

目录与文件

Gentoo 中,运行级别具有相同的名称,但这些名称被映射到更易于理解的名称(在 /etc/inittab 中):“boot”、“default”、“nonetwork”,并可以选择添加更多。代表它们的目录在 /etc/runlevels/ 中

  • /etc/runlevels/boot
  • /etc/runlevels/default
  • /etc/runlevels/nonetwork

Gentoo 中,如果服务未在运行级别中显式启动,则在切换到该运行级别时会停止!

Gentoo 中,在哪些运行级别中启动(和停止)哪些内容由运行级别目录中指向 /etc/init.d/ 中脚本的链接控制,例如:Gentoo

$ ls -l /etc/runlevels/boot/hostname
lrwxrwxrwx  1 root root 20 Mar 25  2004 /etc/runlevels/boot/hostname -> /etc/init.d/hostname

Alpine

在 Alpine 中,运行级别的工作方式与 Gentoo 相同

  • /etc/runlevels/boot
  • /etc/runlevels/default
  • /etc/runlevels/sysinit
  • /etc/runlevels/nonetwork
  • /etc/runlevels/shutdown

运行级别管理

要管理在哪些运行级别中启动哪些内容,请使用以下命令

Alpine

要查看运行级别中服务的当前状态,请执行

rc-status

要将 sshd 添加到默认运行级别,请执行

rc-update add sshd default

要从所有运行级别中删除 sshd,请执行

rc-update del sshd

Gentoo

rc-update

要将 cupsd 添加到默认运行级别,请执行

rc-update add cupsd default

要从 boot 运行级别中删除 alsasound,请执行

rc-update del alsasound boot

另请参阅关于使用 rc-update 进行 gentoo 运行级别管理的 wiki 页面

配置文件

/etc/portage/make.conf 和 use 标志

虽然在 Gentoo 中有大量配置文件控制软件包管理系统的行为,但在 Debian 中相对较少,因为不需要指示如何编译下载的软件并对其进行调整/更改。在 Gentoo 中,/etc/portage/make.conf 文件用于许多配置;这包括 USE 标志,它影响编译软件包的哪些元素,以及要构建支持哪些库 - 常见的 USE 标志(USE 或 -USE 用于专门否定支持)包括 Gnome 用户的 'gtk gnome'(以及相应的 -qt -kde -arts)和 KDE 用户的 'qt kde arts'。Gentoo 用户的完整 use 标志集可能如下所示

USE="-kde -arts -qt xv truetype bluetooth crypt slang readline gpm berkdb mmx gdbm tcpd pam libwww ssl nls ethereal perl python esd gif imlib sdl oggvorbis mpeg gnome gtk X motif opengl avi png tiff nptl pcmcia nptl ldap eds"

架构与仓库

Gentoo

同样在 /etc/portage/make.conf 中是 ACCEPT_KEYWORDS 设置,对于基于 X86 的处理器,有两个设置,x86 用于更稳定的软件包,~x86 用于前沿软件包。但是,不建议在 /etc/portage/make.conf 中进行此更改。而是在 /etc/portage/package.accept_keywords 中为每个软件包配置此设置。在该文件中放入一行命名软件包(例如 'app-foo/bar')就足够了。该文件可能如下所示

app-crypt/gpg-agent
app-text/docbook-xsl-stylesheets
=app-text/docbook-xml-dtd-4.3-r1

最后一行表示,_只有_ 版本 4.3-r1 应该被取消屏蔽。较旧和较新的版本仍将被忽略。

非 x86 用户请注意: 关键字 x86 和 ~x86 当然可以用 sparc 和 ~sparc 等替换。

Debian

在 Debian 中设置此项稍微复杂一些,通过在 /etc/apt/sources.list 中设置不同的“仓库”来完成 - 以及要用于软件包的“树”;在 Debian 中,这些是 stable、testing 和 unstable。Debian testing 用户的 /etc/apt/sources.list 文件可能如下所示

deb https://mirrors.kernel.org/debian testing main non-free contrib
deb ftp://ftp.nerim.net/debian-marillat testing main
deb https://security.debian.org testing/updates main contrib non-free

或者,/etc/apt/sources.list 可以包含任何树的任意数量的仓库,以及 /etc/apt/apt.conf 中的默认树(可以使用命令行上的 -t 开关覆盖)。

  APT::Default-Release "testing";

每个软件包的设置都放在 /etc/apt/preferences 中,有点像 Gentoo 的 /etc/portage/package.keywords。

网络

Alpine

Alpine 使用 /etc/network/interfaces,类似于 Debian。Alpine 默认使用 busybox 的实现。

/etc/network/interfaces:

auto eth0
iface eth0 inet static
 address 192.168.0.1
 netmask 255.255.255.0
 broadcast 192.168.0.255
 
auto eth0:0
iface eth0:0 inet static
 address 192.168.1.1
 netmask 255.255.255.0
 broadcast 192.168.1.255
# etc.

Gentoo

Gentoo 使用 netifrc。此软件包也可在 edge 社区仓库中找到。(在 Alpine 上使用风险自负。)

/etc/conf.d/net:

config_eth0="192.168.1.100 netmask 255.255.255.0
             192.168.2.100 netmask 255.255.255.0"
routes_eth0="default via 192.168.1.1"

请注意,这最近已更改。有关更多信息,请参阅 https://wiki.gentoo.org/wiki/Handbook:X86?part=4

Debian

/etc/network/interfaces:

auto eth0
iface eth0 inet static
 address 192.168.0.1
 netmask 255.255.255.0
 broadcast 192.168.0.255
 
auto eth0:0
iface eth0:0 inet static
 address 192.168.1.1
 netmask 255.255.255.0
 broadcast 192.168.1.255
# etc.


外部参考

Pacman Rosetta.