大家好,我是无用挂件。这篇文章里,我们来谈谈包管理器。
先来看下上次留下来的问题:那个“大佬”,荒谬在哪里?
回顾一下基本事实。Jay Freeman(Saurik)当年顺手编译了Debian Packager当作Cydia的包管理器,因而Cydia具有某些令我们熟悉而不愉快的特性(比如缓慢的APT,比如dpkg/lock)。当然,好处也是显然的:稳定。凭借着强大、稳定而不失开放的体系,Cydia极大地发掘了iOS的潜能,这点必须得到公认。所以我们可以顺理成章地得出结论,即Cydia使用了Debian Packager,仅仅表明了Debian Packager在类UNIX系统中具有可移植性而已,并不能得出iOS和Debian的关系。
回归正题,我们来看一下Linux下主要的包管理器。先从Debian讲起。
Debian的包管理器为Debian Packager,上层是APT(Advanced Packaging Tool)
注意点:
请以root身份运行(或者直接sudo执行)
apt和apt-get均可,Debian官方建议使用apt
[PackageName]为软件包名,支持插入通配符
基本命令:
更新当前软件源:apt update
更新所有软件包(跳过依赖冲突):apt upgrade
更新所有软件包(依优先级处理依赖冲突):apt dist-upgrade / apt full-upgrade
列举符合条件的软件包:apt list [PackageName]
安装指定软件包:apt install [PackageName]
重新安装指定软件包:apt reinstall [PackageName]
修复所有包错误:apt install -f
移除指定包(保留配置文件):apt remove [PackageName]
彻底删除指定包(不保留配置文件):apt purge [PackageName]
清理无用包及缓存:apt clean && apt autoremove
下载指定包的源代码:apt source
以上是APT的常用命令,基本覆盖日常使用的所有操作(我大概只能想起这么多)。这里,我们有必要理清APT的基本工作流程。
APT是一个典型的C/S(客户/服务器)系统。APT使用genbasedir分析每个软件包的Header并记录在置于base目录下的一个索引清单中。Client获取该索引清单,并将其解压至/apt/lists,亦即“更新本地数据库”的操作。APT在接收到相关指令时,会先在本地数据库中进行检索以获知其依赖关系,并从Server(源)获取这些软件包。
应当讲,这种设计是相当优秀的,甚而包含了现在日趋流行的去中心化的思想。只需一条命令(rsync -av –delete-after {SourceURL} {YourPublicdir}),任何人都可以建立具有完整功能的镜像源。用户可以自由选择遍布全球的镜像源,镜像源之间也可以互相重定向以解决突发问题、保证服务正常进行。
源列表存放于/etc/apt/sources.list文件内。国内著名的教育网镜像源有USTC(中科大)、Tuna(清华大学)、SJTUG(上海交大,不推荐),多线BGP镜像源有阿里云、网易、腾讯云、华为云(不推荐)等提供的服务。以tuna镜像源为例,我们可以这样配置Debian 9 Stretch的源列表:
执行sudo vim /etc/apt/sources.list,按Ctrl+I切换模式,删除其中所有内容,添加内容如下。
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch-updates main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch-backports main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security/ stretch/updates main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security/ stretch/updates main contrib non-free
随后按Esc切换模式,再按两次Shift+Z保存并退出。执行sudo apt update,新的源列表生效。
最后给出思考题:请自行Google了解一下其它著名发行版的包管理器,并考察其与Debian Packager的异同及优劣差别。预告一下,我们下期将对赫赫有名的AUR进行介绍。
本文首发于淀粉月刊:https://dfkan.com
本文作者:无用挂件
网友评论