帮助了解 Debian 软件包管理,如何使用 APT 管理软件包,如何配置 apt 源,获得更好的体验
对于部分问题 apt 源配置问题,比如 GPG error
apt, apt-get 的关系 ...
Debian 档案库
软件包管理工具
可以让用户从档案库安装 统一设置 的二进制软件包到系统中
目前 Debian 的软件包管理系统是 高级软件包工具 APT
APT 前端用户程序和后端的不同访问方式
APT 辅助工具
apt-get 和 apt-cache 是最基础的基于 APT 的软件包管理工具,意味快但功能不丰富
apt-get 和 apt-cache 可以使用 /etc/apt/preferences
来管理软件包的多个版本,但这非常繁琐
在成功安装下载的软件包后,apt 将默认删除缓存的 .deb
软件包
对于典型的 HTTP 访问,档案库在 /etc/apt/sources.list
文件
# 源的信息组成 deb/deb-src URL stable/testing/unstable [area ...]
deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free
一行一条
第一个参数
第二个参数 Debian 档案库 的根 URL
第三个参数是发行版名称,这个一般需要查看一下
后面全部参数是 Debian 档案库的有效档案库范围名称
自由软件
下面是一个小脚本可以帮助你添加 第三方档案库,前提是你的默认 /etc/apt/sources.list 没有被破坏并且会 Linux 的 CLI 界面的基本操作,此脚本是根据默认的 sources.list 创建,当然你可以不用脚本用手动编辑 φ(゜▽゜*)♪
第一步,在命令行执行以下内容
# 创建一个文件夹 test 名称随意
mkdir test
# 创建脚本,可以使用 vi, vim, ... 编辑,建议不会对应编辑器可以查询一下用法
vi apt-sources.sh
第二步,编辑 apt-sources.sh
脚本,注意:在进入 vi 编辑模式后 小心 每个操作,如果 不确定 或 有问题,可以按 ESC
进入命令模式再按 u
撤销
按照 i
输入下面内容,只要按 i
就可以进入编辑模式
#!/bin/bash
if [ -r $1 ]; then
while read -r url; do
filename=${url#*.}
grep "^deb.*" /etc/apt/sources.list | sed -E "s~http.*\.[[:lower:]]{2,5}~$url~" > /etc/apt/sources.list.d/${filename%%.*}.list
done < "$1"
apt update
else
echo "文件不存在或无法权限读取"
fi
输入完上面内容,按 Esc
进入命令模式,按 :wq
保存退出 vi 编辑器,如果有问题按照上面警告可以撤销操作按 :q!
退出 vi
注:读不懂脚本,可以在 此处 了解 shell 脚本的基本知识
第三步,编辑第三方档案库信息,vi sources.txt
像第二步一样输入下面内容,当然你可以添加其他你知道的 第三方档案库信息,注意一条地址一行
http://mirrors.ustc.edu.cn
https://mirrors.aliyun.com
第四步,执行脚本
# 赋予脚本执行权
chmod +x apt-sources.sh
# 执行脚本
sudo ./apt-sources.sh sources.txt
# 查看添加是否成功
cd /etc/apt/sources.list.d/ && ls -lh
sudo
进行临时提权,关于 sudo 信息
说明:
/etc/apt/sources.list.d/
目录中找到不同第三方档案库进行调整/etc/apt/sources.list.d/
目录中最好一个档案库一个文件/etc/apt/sources.list.d/
是官方为我们准备的不是脚本创建的.list
文件存放在 /etc/apt/sources.list.d/
目录中网上直接复制的源一般存在以下问题
协议问题,一般是 HTTP 协议,部分对 HTTPS 协议不友好需要安装 apt-transport-https
或 ca-certificates
的支持
发行版号不匹配,这个建议查看自己当前系统 uname -a
然后在官网查看,或看看 /etc/apt/sources.list 默认的内容,所以一般别改 /etc/apt/sources.list
deb-src
一般含义此行需要下载大量源码信息,一些不必的可以注释掉,不一定每个仓库需要拉取
GPG error
问题,这个一般是版本问题或安装时是离线安装,导致发行版的元数据文件 Release 不同步出现 GPG 验证错误,或者离线安装没有网络在安装时 apt 自动配置根据 CD/DVD 的数据配置等可能,建议了解 GPG
解决方法是添加上对应的签名即可,两种方法,都需要 wget 这个一般有自带,解决时的两种关于签名的文件 .asc
或 .gpg
直接使用 gpg 程序
确认 gpg 是否安装,没有就安装一下
sudo apt-get install gpg
得到 .gpg
文件,具体名字随便,建议有辨识度,比如阿里云记为 aliyun.gpg
# 根据对应档案库的 Release.gpg 文件下载
wget -qO- https://mirrors.aliyun.com/debian/dists/buster/Release.gpg?spm=a2c6h.25603864.0.0.25864a07v5Lsgz > aliyun.gpg
# 如果是 .asc 文件,使用 gpg --dearmor 转化
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
添加 .gpg
文件,两种方法
# 方法一:安装 /etc/apt/keyrings/ 目录
sudo install -D -o root -g root -m 644 aliyun.gpg /etc/apt/keyrings/aliyun.gpg
# 方法二:安装 /etc/apt/trusted.gpg.d/ 目录
sudo install -D -o root -g root -m 644 aliyun.gpg /etc/apt/trusted.gpg.d/aliyun.gpg
方法一需要改变 list 文件,在 deb/deb-src
和 url
之间添加一条信息 [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/aliyun.gpg]
# 这是 /etc/apt/sources.list.d/aliyun.list 文件,其中 ... 是简化的需要根据情况填写,参考默认的 /etc/apt/sources.list
deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/aliyun.gpg] https://mirrors.aliyun.com/debian ...
使用 apt 默认的 apt-key
使用非常方便,首先下载 .asc 或 .gpg 文件,然后使用 apt-key 安装
# 下载
wget https://archive.kali.org/archive-key.asc
wget -qO- https://mirrors.aliyun.com/debian/dists/buster/Release.gpg?spm=a2c6h.25603864.0.0.25864a07v5Lsgz > aliyun.gpg
# 安装
sudo apt-key archive-key.asc
sudo apt-key aliyun.gpg
Release.gpg 文件在每个档案库都有的,比如阿里的访问 https://mirrors.aliyun.com/debian/dists/buster 就可以看到,.asc
文件也差不多在档案库中但位置不定,不同档案库可能不同需要自己查
/etc/apt/sources.list 不要包含 testing 或 unstable
/etc/apt/sources.list 不要在标准的 Debian 中混合使用其它非 Debian 的档案库
第三方档案库放在 /etc/apt/sources.list.d 分类以 .list
后缀结尾的文件中
不要建立 /etc/apt/preferences
不了解会造成的全部影响,就不要通过配置文件改变软件包管理工具的默认行为
不要使用 dpkg -i random_package
或 dpkg --force-all -i random_package
安装任何软件包
不要删除或修改 /var/lib/dpkg/ 中的文件
不要让从源码直接安装的程序覆盖系统文件
没有在安全的条件下使用你特定的配置进行彻底地测试,就不要从 Debian 安装任何软件包
使用 non-free 和 contrib 中的软件包所需要冒的风险
Debian 系统通过其控制文件字段中的版本化二进制依赖声明机制
Conflicts, Replaces, Provides 定义到一个虚拟的软件包,确保了在任何一个时间只能安装一个提供该虚拟包的真正软件包
更新元数据: apt update, apt-get update, aptitude update
安装软件: apt install ..., apt-get install ..., aptitude install ...
升级软件: apt upgrade/full-upgrade, pt-get upgrade/dist-upgrade, aptitude safe-upgrade/full-upgrade
移除软件: apt remove ..., apt-get remove ..., aptitude remove ...
清除软件: apt purge ..., apt-get purge ..., aptitude purge ...
apt | aptitude | apt-get/apt-cache | 描述 |
---|---|---|---|
apt update | aptitude update | apt-get update | 更新软件包档案库元数据 |
apt install foo | aptitude install foo | apt-get install foo | 安装 foo 软件包的候选版本以及它的依赖 |
apt upgrade | aptitude safe-upgrade | apt-get upgrade | 安装已安装的软件包的候选版本并且不移除任何其它的软件包 |
apt full-upgrade | aptitude full-upgrade | apt-get dist-upgrade | 安装已安装的软件包的候选版本,并且需要的话会移除其它的软件包 |
apt remove foo | aptitude remove foo | apt-get remove foo | 移除 foo 软件包,但留下配置文件 |
apt autoremove | N/A | apt-get autoremove | 移除不再需要的自动安装的软件包 |
apt purge foo | aptitude purge foo | apt-get purge foo | 清除 foo 软件包的配置文件 |
apt clean | aptitude clean | apt-get clean | 完全清除本地仓库的软件包检索文件 |
apt autoclean | aptitude autoclean | apt-get autoclean | 清除本地仓库中过时软件包的软件包检索文件 |
apt show foo | aptitude show foo | apt-cache show foo | 显示 foo 软件包的详细信息 |
apt search regex | aptitude search regex | apt-cache search regex | 搜索匹配 regex 的软件包 |
N/A | aptitude why regex | N/A | 解释匹配 regex 的软件包必须被安装的原因 |
N/A | aptitude why-not regex | N/A | 解释匹配 regex 的软件包不必安装的原因 |
N/A | aptitude search '~i!~M' | apt-mark showmanual | 列出手动安装的软件包 |
注意:
本文链接:http://task.lmcjl.com/news/13750.html