使用apt和dpkg安装软件

Published: by Creative Commons Licence

Ubuntu安装远程仓库中的软件

另可参考 Debian 手册中关于deb包制作章节

软件包的本质: 就是归档文件。

软件包的类型:

  1. 二进制软件包;后缀.deb
  2. 源码包; .tar.gz等,还可进一步打包成 .dsc 文件。

APT (Advanced Packaging Tool)

软件源配置文件 ` /etc/apt/sources.list`

软件源配置格式:

DebType  AddressTyPe://Hostaddress/ubuntu/  Distribution Commponent1 Commponent2 ...    
  • DebTyPe: 软件包类型,deb表示二进制软件包;deb-src表示源码包
  • AddressTyPe:
  • Distribution: 表示Ubuntu的各个发行版本
  • Commponent: 表示软件包组别,可选:main retricted universe multiverse multiverse

还可直接使用命令:

sudo add-apt-repository ppa              

查询软件包信息 apt-cache

是一个底层工具,需与子命令配合,比如:

apt-cache	stats		    # 软件包统计信息		
apt-cache search 关键字	  # 按关键字搜索软件包      
apt-cache show pkg			# 查询软件包描述信息       
apt-cache policy pkg		# 安装状态       
apt-cache depends pkg		# 依赖关系      
apt-cache redepends pkg		# 反向依赖关系       

管理软件包

apt-get

apt-get update				#刷新软件源     
apt-get install				#安装软件     
apt-get --reinstall install  #重新安装软件包     
apt-get purge				#卸载并清除软件所有配置,且会以`softname*`这种形式卸载软件     
apt-get autoremove			#自动卸载自行安装且不再需要的软件,无需添加softname      
apt-get -f install			#当依赖出现问题时apt-get会尝试fix修复问题(解决依赖关系),可以不添加softname      
apt-get upgrade				#更新所有软件包      

下载的软件包放在缓存目录 /var/cache/apt/archives 中, 在此可找到所有apt-get install 下载的软件包

安装建议的软件包:

  --install-suggests
  Consider suggested packages as a dependency for installing. Configuration
  Item: APT::Install-Suggests.
--no-install-recommends
  Do not consider recommended packages as a dependency for installing.
  Configuration Item: APT::Install-Recommends.

使用apt-get只下载二进制包,而不安装的命令是:

sudo apt-get install -d 软件名称    

不过要注意,像bcmwl-kernel-source这种软件是自动根据你的内核版本来下载的。

PPA源

PPA : Personal Package Archives 个人软件包集合

Launchpad 是Ubuntu母公司Canonical所架设 网址:<lanuchpad.net/ubuntu/+ppas>

使用命令 add-apt-repository 安装

add-apt-repositor不是内建指令,若无则sudo apt-get install python-software-properties安装        

PPA格式:     		 ppa:user/ppa-name      
添加PPA源:			sudo add-apt-repository ppa:user/name      
删除PPA源:			sudo add-add-repository -r ppa:user/name     然后进入/etc/apt/sources.list.d/ 目录,将相应ppa源的保存文件删除。     

dpkg 包管理

dpkg软件包管理命令选项:

选项 作用
-l 查看该已安装软件包信息
-L 查看该软件所安装的相关文件及位置
-s 查询已安装的指定软件包详细信息
-S 查询系统中某个文件所属软件包
-i 安装软件包
-I 查询未安装软件包的信息
-c 列出deb软件包中所包含的文件
-r 卸载软件包不删除配置文件
-P 完全卸载

各选项后加上: 相关软件的 deb 包

dpkg问题:

  1. 不能下载软件包
  2. 不能自动解决依赖问题
  3. 不能卸载相关的其它软件

目录: /var/lib/dpkg/info 下保存各个软件包的信息及管理文件;
其中 .list文件中包含的信息即为 dpkg -L 的到的信息。

  # 一次经验,由于先直接使用 dpkg -i 安装 youdao-dict.*.deb 出现了依赖问题,再次使用                   
  #apt-get 安装上面的依赖项时,会提示:••
  # 有未能满足的依赖关系。请尝试不指明软件包的名字运行apt-get -f install(也可指定一个具体解决办法)
  #
  #此时只要直接运行所提示的命令即可解决一系列的依赖问题,因为apt-get 命令可以自动解决依赖关系。
  #
  #
  # 可以直接使用 apt-get install    下载的 .deb 包吗?

配置国内软件源

参考:中科大的 Ubuntu 源使用帮助 — USTC Mirror Help 文档

小技巧:使用 HTTPS 可以有效避免国内运营商的缓存劫持。

另外,也可以使用 snullp 大叔开发的 配置生成器 (不错)。

注意:操作前请做好相应备份 ; 更改完 /etc/apt/sources.list 文件后请运行 sudo apt-get update 更新索引以生效。

apt-file

安装 apt-file:

sudo apt-get install apt-file

apt-file介绍:

Package: apt-file
Description-en: search for files within Debian packages (command-line interface)
 apt-file is a command line tool for searching files contained in packages
 for the APT packaging system. You can search in which package a file is
 included or list the contents of a package without installing or fetching it.
 If you would prefer not to download the large files used by apt-file you can
 run rapt-file, which calls a remote server to do the searches.

用法示例:

  1. updage file cache (可选)
    apt-file update
  2. Search which package provides the library libgstapp-0.10.so.0:
    apt-file search libgstapp-0.10.so.0
    还可用rapt-file搜索远程仓库中的内容
  3. 根据2的结果(libgstremer-plugins-base0.10-0)
    sudo apt-get install libgstremer-plugins-base0.10-0

一些错误

运行sudo apt-get update之后的一些错误

部分输出如下:

W: 无法下载 http://ppa.launchpad.net/t-tujikawa/ppa/ubuntu/dists/trusty/main/binary-amd64/Packages  404  Not Found

W: 无法下载 http://ppa.launchpad.net/t-tujikawa/ppa/ubuntu/dists/trusty/main/binary-i386/Packages  404  Not Found

这些问题可以忽略

有时由于这个PPA的维护者,维护的仓库地址不存在,没法下载,导致出现"404 Not Found"错误,
可以选择在软件源中删除该PPA:
在软件源 –> 取消勾选 ppa.launchpad.net/t-tujikawa/ 相关选项。
这样每次更新就不用花费太多时间。

其中Launchpad是:

Launchpad is a software collaboration platform that provides

问题二

W: GPG 错误:http://archive.ubuntukylin.com:10006 xenial InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 8D5A09DC9B929006

解决思路:下载该GPG 公钥

  1. 解决办法一
sudo apt-get adv --keyserver keyserver.ubuntu.com --recv-keys 8D5A09DC9B929006
[sudo] password for fan: 
E: 无法识别命令行选项 --keyserver

在ubuntu 14.4出现错误,改换方法二。

  1. 解决办法二

先把这个源的公钥从服务器导入到当前用户的公钥库:

[fan 09:14:26]~$ gpg --keyserver keyserver.ubuntu.com --recv-keys 8D5A09DC9B929006
gpg: 下载密钥‘9B929006’,从 hkp 服务器 keyserver.ubuntu.com
gpg: 密钥 9B929006:公钥“Zhang Xin (Ubuntu Kylin Team) <zhangxin@kylinos.cn>”已导入
gpg: 合计被处理的数量:1
gpg:               已导入:1  (RSA: 1)

无需使用sudo,sudo可能出错。

再让apt-get来使用这个公钥:

gpg --armor --export 9B929006 | sudo apt-key add -

导入成功后 sudo apt-get update 即可