理解树莓派软件源与 apt,一篇文章就够了

引子

在 DIY 树莓派各种项目的时候,总要安装各种各样的软件包,一般执行 sudo apt-get install <package> 指令就可以完成安装。如果下载速度太慢,还可以 更换软件源 加速下载。

树莓派初学者通常到这里就结束了,但如果你想基于树莓派进一步学习 Linux 知识,成为树莓派高阶玩家,就非常有必要了解 apt-get 这条指令背后的原理,以及 Debian 系的包管理知识。

树莓派官方的 Raspbian 操作系统是 Debian 的衍生版,共用 Debian 的软件包管理机制,两者是相通的。

起初 GNU/Linux 的世界中只有 .tar.gz。如果用户要使用一个软件,那就必须自己编译。当 Debian 诞生以后,一种能管理操作系统中已安装的软件包的系统显得很有必要,这个系统被命名为 dpkg。软件包一词在此第一次出现在 GNU/Linux。不久之后,红帽公司创建了他们自己的包管理系统 rpm。

GNU/Linux 的创造者们很快又陷入了新的窘境。他们希望通过一种快捷、实用而且高效的方式来安装软件包,并能自动处理相互之间的依赖关系,还要在软件包升级过程中维护好配置文件。Debian 又一次充当了开路先锋的角色,首创了 APT(Advanced Packaging Tool,高级软件包管理工具)。这一工具后来被 Conectiva 移植到红帽公司的 rpm 包管理系统。在其他一些发行版中,我们也能看到 APT 的身影。

dpkg (Debian Package)

在 Linux 发展之初,安装软件的时候是需要下载以 tar.gz 结尾的软件源码包,然后对源码包进行编译安装。这是极其麻烦的使用。后来 Debian 开发了 dpkg(Debian Package) 管理工具来管理软件,软件都是以 deb 结尾的编译好的二进制包,通过 dpkg 命令可以安装软件和卸载软件。

  • dpkg -i - 安装软件包
  • dpkg -r - 移除软件包
  • dpkg -l - 查看某个软件包是否已经安装
  • dpkg -L - 查看某个软件包中都包含哪些文件
  • dpkg --list - 查看系统上安装的所有软件包和相关状态

dpkg 是底层的包管理工具,不太常用,最常用的是 apt。

APT (Advanced Packaging Tool)

​dpkg 不够人性化的一点就是不能自动解决依赖问题,比如 A 软件包依赖于 B 软件包,那么你先得安装 B 才能安装 A。而且使用 dpkg 需要将软件下载到本地才能安装。使用 apt 安装软件时会自动从软件仓库下载软件进行安装,并且 apt 能自动解决依赖问题,当有依赖的时候它也会自动从软件仓库下载依赖的包进行安装。当然 apt 底层还是调用 dpkg 来进行软件安装的。

apt 相关文件

  • /etc/apt/source.list 配置软件包来源,也就是上面说的软件仓库
  • /ect/apt/apt.conf.d 存在 apt 的零碎配置文件
  • /ect/apt/preferences 制定软件包的版本参数
  • /var/cache/apt/archives 存放已下载的软件包
  • /var/cache/apt/archives/partial 存放正在下载的软件包
  • /var/lib/apt/lists 存放已下载的软件包详细信息

树莓派的 APT 相关配置文件:

-w430

-w441

-w767

软件源

软件源(软件仓库)中存放这大量的软件包,apt 会从软件源中下载软件。在 /ect/apt/soure.list 中可以为 apt 配置软件源。在这个文件中 deb 关键字定义已编译的软件包来源,deb-src 定义源码包的来源。每一行的格式如下:

deb(或deb-src) <软件源地址> <主版本代号> [软件仓库1] [软件仓库2] [软件仓库3] ...

树莓派的软件仓库一般有四种限定词:

  • main:官方支持的符合 DFSG 规范的软件
  • contrib:带有非自由依赖关系的 DFSG 兼容软件
  • non-free:非 DFSG 兼容软件
  • firmware:官方固件,非开源

DFSG 即 Debian Free Software Guidelines、自由软件指导方针,比如规定软件必须开源等。详细说明见: Debian 社群契约

树莓派的默认软件源配置:

deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

软件源里面有什么?如果你在浏览器上打开软件源 url http://raspbian.raspberrypi.org/raspbian/,会发现它其实是一个静态资源目录:

-w679

  • dists 目录包含 Raspbian 的各个发行版,既包括像 buster 一样的具体发行版本,也包括像 stabletesting 和 unstable 的代号
  • pool 目录为软件包的下载地址。为了方便管理,pool 目录下会继续划分 main、contrib 和 non-free 等子目录。比如 python3 就位于 pool/main/p/python3-defaults 这个目录下。

apt-get 命令

apt-get 命令一般用于软件包的安装,更新和移除

  • apt-get update - 更新本地的软件源索引。在你更改了 Raspbian 的 /etc/apt/sources.list 或 /etc/apt/preferences 后,需要运行这个命令让改动生效。最好能定期运行该命令,以确保软件源索引是最新的。
  • apt-get upgrade - 更新所有已安装的软件包
  • apt-get install - 安装软件包
  • apt-get reinstall - 重装软件包
  • apt-get remove - 删除已安装的软件包(保留配置文件)
  • apt-get purge- 删除已安装包,同时删除配置文件
  • apt-get autoremove - 删除未使用的安装包
  • apt-get dist-upgrade - 更新整个系统到最新的发行版,相当于升级 Raspbian 系统
  • apt-get clean - 删除本地所有的 deb 包(不会删除软件)
  • apt-get autoclean - 删除本地已经安装过的 deb 包
  • apt-get check - 检查是否存在未安装的软件包依赖
  • apt-get source - 下载 deb 源码包到本地
  • apt-get download - 下载 deb 包到本地
  • apt-get changelog- 打印软件包的版本变更日志

apt-cache 命令

apt-cache 一般用于软件包查找和显示软件包信息。

  • apt-cache search - 搜索软件包。当你不知道软件包全名的时候,可以用这个指令搜索关键词
  • apt-cache depends - 打印软件包的依赖包信息
  • apt-cache rdepends - 打印依赖这个包的软件包信息(反向依赖)

常用命令组合

查看系统上安装的软件包

查看系统上安装的所有软件包和相关状态,执行

dpkg --list

输出每个软件包的一行简单介绍,2 字符的状态标志,包名,所安装版本和简要描述。

-w1026

如果要过滤包名,比如只显示 python 开头的包,执行

dpkg --list python*

要获取软件包的更详细信息,比如 python3,执行:

dpkg --status python3

输出状态、版本号、依赖包等信息。

-w1026

列出软件包包含的文件

要找出一个软件包包含的所有文件,比如找出 rclone 安装过程中生成了哪些文件,执行:

dpkg --listfiles rclone

-w1026

rclone 一是款文件同步工具,支持本地文件和 Microsoft OneDrive,Amazon Cloud Drive,Dropbox,FTP,SSH/SFTP 等多种云存储同步 —— 如何在树莓派上免费获取 GB 级存储空间 - 硬核树莓派

也可以直接查看 deb 包内的文件,执行:

dpkg-deb --contents rclone_1.45-3_armhf.deb

-w1026

还可以把 deb 包内的文件解压到当前的 temp 目录(这不是安装,而是在本地目录测试包内容的简单方法),执行:

dpkg-deb --extract rclone_1.45-3_armhf.deb temp

但如果你只想知道某个文件是哪个软件包生成的,执行:

dpkg --search rclone

-w1026

其他常用命令

Raspbian 不一定默认带有下面这些命令。如果没有的话,apt-get install 安装即可。

  • apt-show-versions - 打印系统中所有已安装的包的当前版本和可升级版本
  • apt-config - apt 的配置工具
  • tasksel - 用于安装软件集,例如一键安装 gnome 桌面、xfce 桌面等等。--list-tasks 参数可以列出所有支持的软件集。
  • dselect - 包管理系统的图形菜单界面,对第一次安装和大范围升级特别有用
  • dpkg-deb - 用于操作 deb 文件,比如探查包内文件等
  • dpkg-split - 大软件包分割工具,例如把一个大 deb 分割成 N 部分,每部分 460KB

参考资料

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值