Arch Linux 系统的一般维护
在此页
- 更新镜像列表
- 保持时间准确
- 验证 Arch Linux 安装上的时区
- 安装和配置 NTP
- 方法 1:清除整个缓存(注意!)
- 方法 2:维护一些版本
维护 Arch Linux 安装实际上非常简单明了,只要您牢记一些事项即可。该发行版的滚动发布特性意味着我们永远不必像其他发行版(Ubuntu 和 Debian 等)那样担心主要版本升级。只要你明智地使用 Pacman 并定期更新你的包,你就永远不会遇到东西损坏和包不能与 Arch 一起工作的问题。下面将概述我的建议,让 Arch 保持最新状态并像安装当天一样运行,甚至更好!我还将在您首次安装 Arch 后提供一个简短的部分来优化它,从长远来看,这将使它的维护更快、更容易。一如既往,这些只是我的想法,在使用 Arch 时应参考任何官方文档。我假设您是以下所有命令的 sudoer。但是,只要您是 sudoer 或可以更改为 root 用户,就应该没问题。 ArchWiki 是一个很好的资源,即使您不使用 Arch,那里的许多指南和信息也很有用。他们的 IRC 频道 #archlinux 可以在 irc.freenode.net 上找到。这是另一个提出问题并从更有经验的用户那里收集有用见解的好地方。只是不要淹没频道并不断地一遍又一遍地问同样的问题!
首先,我们将优化 Arch,这将使维护和持续使用变得更快、更容易。这些小事有时会产生很大的不同。很多人忽视了它们,或者懒得正确配置 Pacman(包管理器)之类的东西,所以它永远不会在他们的系统上完成。从强大开始并使系统在某种程度上自我维持可以走很长的路,并且以后可以避免很多麻烦!
更新镜像列表
首先,我将引导您更新镜像列表以使用对您来说最快的镜像。镜像列表位于 /etc/pacman.d/mirrorlist。一种选择是简单地查看列表并选择您认为在地理位置上离您较近的镜像。这在某些情况下很有用,但仅仅因为镜子更近并不意味着它是最快的。如果我们想根据更具体的事情做出决定,我们可以使用 arch 在 /usr/bin/rankmirrors 为我们提供的内置工具。默认情况下,/etc/pacman.d/mirrorlist 中的大部分镜像都被注释掉了,但是要使用 rankmirrors,你必须将它们全部取消注释。一个简单的方法是将文件复制到一个新名称,并使用 sed 删除所有表示注释的“#s”,命令如下:
sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.toBeTested
sudo sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist.toBeTested现在,您可以使用 rankmirrors 的帮助输出来了解其所有功能,但为此假设我们只需要三个最快的镜像。我们将简单地使用我们新生成的包含所有(未注释的)镜像的文件,并使用 rankmirrors 打印最快的 3 个:
sudo rankmirrors /etc/pacman.d/mirrorlist.toBeTested -n 3
获取该命令的输出,这应该是你最快的三个镜像,并使用你最喜欢的文本编辑器在真正的镜像列表中取消注释它们,如下所示:
sudo vim /etc/pacman.d/mirrorlist
我喜欢每隔几个月在我的系统上执行一次此操作,因为有时镜像变得不可用,或者以不再那么快的方式进行更改。有些人可能认为这是微不足道的,但由于 Arch 是一个滚动发布的发行版,因此往往会有很多更新。即使您为下载的每个包节省 3 秒,在一年或更长时间的过程中也可能会增加数十分钟!另外,如果您要管理多个运行 Arch 的系统,时间因素会更加复杂。对它持保留态度,但在处理大量系统或随着时间的推移,小事情会产生很大的不同。
保持时间准确
我怎么强调系统时间保持准确的重要性都不为过。如果谈论没有自己的硬件时钟(例如 VM)的系统,则尤其如此。许多正在运行的服务要求客户端和服务器之间的时间相同才能正常工作。此外,如果证书不只是因为系统时间错误,您也不希望系统认为证书仍然有效!更重要的是,您希望日志文件中的时间准确无误,这样如果您尝试诊断问题,您就会知道实际发生的时间,而不是系统时钟说它发生的时间。使用 Arch 执行此操作的最简单方法是使用 NTP,即网络时间协议。在这种情况下,NTP,或更具体地说是 ntpd,将定期将您系统上的时钟与 Internet 上的一个或多个服务器同步,以确保系统时间匹配。它还会跟踪诸如时间漂移之类的事情,因此如果您关心的话,您可以确定在任何给定时间您的时钟关闭了多少。
验证 Arch Linux 安装上的时区
在每个 Arch 安装中都有一个可用的命令,timedatectl,它会向我们显示很多关于系统时间和日期的有用信息。
[]$ sudo timedatectl Local time: Sun 2015-07-05 18:30:18 MDT Universal time: Mon 2015-07-06 00:30:18 UTC RTC time: n/a Time zone: America/Denver (MDT, -0600) Network time on: no NTP synchronized: no RTC in local TZ: no
如果该输出看起来一切正常,您应该可以继续配置 NTP(继续阅读)。如果您必须更改时区或其他任何内容,请参阅此页面了解更多信息。
安装和配置 NTP
在 Arch Linux 中安装和配置 NTP 很容易,因为它带有适合大多数人的配置。首先,我们必须安装包:
sudo pacman -S ntp
等待安装一切正常,检查 /etc/ntp.conf。截至撰写本文时的默认值如下所示:
# Please consider joining the pool: # # http://www.pool.ntp.org/join.html # # For additional information see: # - https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon # - http://support.ntp.org/bin/view/Support/GettingStarted # - the ntp.conf man page # Associate to Arch's NTP pool server 0.arch.pool.ntp.org server 1.arch.pool.ntp.org server 2.arch.pool.ntp.org server 3.arch.pool.ntp.org # By default, the server allows: # - all queries from the local host # - only time queries from remote hosts, protected by rate limiting and kod restrict default kod limited nomodify nopeer noquery notrap restrict 127.0.0.1 restrict ::1 # Location of drift file driftfile /var/lib/ntp/ntp.drift
如果您对更改默认值完全感兴趣,我建议您在此处查看 ArchWiki 文章。否则,我们将继续假设 ntp.conf 文件看起来像您想要的那样。对于大多数人来说,默认设置就可以了。现在,ntpd 是我们想要在 Arch Linux 安装的后台运行的守护进程。以下命令将分别启动 ntpd 并在引导时启用它。
sudo systemctl start ntpd
sudo systemctl enable ntpd
维护 Arch 与维护任何其他发行版或操作系统没有太大区别。搞砸 Arch 安装的最常见方法是不定期更新您的软件包。 Arch Linux 是一个滚动发行版。没有主要的版本发布,并且包会在持续和“可用”的基础上更新。考虑到这一点,如果您从不更新您的系统,那么当您最终决定更新时,事情的变化速度可能会导致问题。经常更新以避免冲突和问题。这还可以确保您的系统运行时已修补最新的安全漏洞。
升级你的整个 Arch Linux 系统
Pacman 是一个非常强大的包管理器,但是一旦您熟悉了使用标志和命令的语法,它就很容易使用。您可以(并且应该)对 Arch Linux 系统做的最重要的事情就是尽可能定期更新它。我每天亲自更新我的系统,这样做从来没有遇到过问题。不过,每隔几天到一周应该没问题!以下命令将告诉 Pacman 将所有已安装的包与存储库同步:
sudo pacman -Syu
这将提供所有可用更新的列表,然后继续询问您是否要继续:
[ ~]# pacman -Syu :: Synchronizing package databases... core 121.6 KiB 599K/s 00:00 [----------------------------------------------------------------------------------------] 100% extra 1738.1 KiB 3.12M/s 00:01 [----------------------------------------------------------------------------------------] 100% community 2.7 MiB 8.81M/s 00:00 [----------------------------------------------------------------------------------------] 100% :: Starting full system upgrade... resolving dependencies... looking for conflicting packages... Packages (8) gnupg-2.1.6-1 less-478-1 libldap-2.4.41-1 lz4-131-1 mercurial-3.4.2-1 openssh-6.9p1-1 vim-7.4.764-1 vim-runtime-7.4.764-1 Total Download Size: 11.29 MiB Total Installed Size: 56.65 MiB Net Upgrade Size: 0.11 MiB :: Proceed with installation? [Y/n]
仔细阅读!有时 Pacman 会做一些事情,比如更新镜像列表或其他文件,它会在这样做之前告诉你,以及旧的备份到哪里。随着时间的推移,您会根据正在升级的软件包了解这种情况何时发生,但在您熟悉之前,请小心!
删除包及其依赖项
当我删除一个包时,我通常总是告诉 Pacman 也删除它未使用的依赖项,即任何其他包不需要的包。这有助于使我的系统总体上保持清洁和整洁。我从来没有遇到过使用 Pacman 执行此操作的问题,因此依赖关系树保存得很好。要删除包及其不需要的依赖项:
pacman -Rs packageName
删除未使用的包
随着时间的推移,通过一系列的安装和卸载,很容易积累很多您可能不再需要的软件包。要显示所有显式安装的包(因此,它们没有作为任何其他包的依赖项安装),您可以使用以下命令:
pacman -Qen
仔细阅读输出并确定您不再需要的任何内容。只要您看不到它们有任何用处,卸载它们应该是安全的。要摆脱可能已作为依赖项引入但任何包不再需要的包,您可以改用它:
pacman -Rns $(pacman -Qtdq)
如果您收到错误消息:未指定目标,则仅表示没有要删除的包符合条件。
清理 Pacman 缓存
Pacman 必须下载最终安装在您系统上的所有软件包。它将这些包存储在位于 /var/cache/pacman/pkg/ 的缓存中。随着时间的推移,这可能会占用相当多的磁盘空间,如果您在嵌入式系统上运行或者只是担心您正在使用多少磁盘空间,有几种方法可以根据您的情况清理缓存目标。请注意:完全清除缓存意味着您无法轻易降级到已安装软件的旧版本,因为从缓存中清除它会将其从系统中删除。我将在下面提供一种方法来更仔细地清理缓存,这样您就不会删除所有旧版本。
方法 1:清除整个缓存(注意!)
如果空间确实有限并且您对系统的稳定性相对满意,或者您是更高级的用户,知道如何使用 Pacman 查找旧软件包并安装它而无需从存储库中获取它,这种清除 Pacman 的方法缓存可以使用。我只在有限的场合使用它并且非常小心,因为如果我想快速降级一个包,我喜欢这种灵活性,尤其是在我完成工作所依赖的生产机器或计算机上。以下命令将删除缓存中的所有内容:
pacman -Sc
我最后一次提醒你,没有回头路了,缓存已经消失了。
方法 2:维护一些版本
现在,如果您不想生活在边缘并希望以更安全的方式清理缓存而不删除所有内容,您应该改用此方法。 pacman 包中有一个内置工具 paccache。默认情况下,paccache 将删除除包的最新三个版本之外的所有内容,因此以这种方式做事通常是个好主意。此外,输出非常有用,它会告诉您释放了多少空间:
[ ~]$ paccache -r ==> Privilege escalation required [sudo] password for jonathan: ==> finished: 233 packages removed (disk space saved: 511.94 MiB)
如果您还想删除已卸载软件包的所有缓存版本,您可以像这样运行 paccache:
paccache -ruk0
回滚到旧版本的包
在每个优秀的 Linux 用户的生活中,偶尔都会遇到软件包升级破坏某些重要内容的时候。错误可能会从裂缝中溜走,偶尔会进入您的操作系统,或者您可能正在做一些特别的事情,需要非常特定版本的软件包,糟糕,您不小心更新到了最新版本!下面假设你在上面提到的包缓存中有你需要的版本,但如果没有,下载正确的版本并将 pacman 指向它应该会产生你想要的结果。当然,请记住将 \name\ 和 \package\ 替换为您正在训练操作的实际包: