包管理介绍

Linux发行版本操作系统

内核、库文件、命令行shell、图形接口、其他应用软件包共同组成操作系统

包管理

  • 安装、删除、更新、配置修改
  • 不同发行版的主要不同之处
  • 库软件包提供其他软件依赖
    • 减少内存硬盘用量(所有软件依赖内核包)
    • 丢失或版本差异问题主要原因,一环出错全部出错
    • Linux的库文件.so,windows下的库文件.dll

Linux的依赖关系很突出,值得重视,比windows上的要严重。

  • Linux的发行版本太多,都打造自己的软件仓库,维护独立的包依赖关系是发行版包管理器的最大任务。

软件包格式

  • RPM、DEB(Ubuntu集成自Debian Linux)
  • tar、gzip等打包压缩发布
  • 内含meta-data、预编译的二进制程序文件(不是源码)、配置脚本等

包管理系统

  • meta-data提供追踪包中全部文件的内容
  • 维护已安装文件的数据库(包名称、归属以及辅助信息)
  • 解决包依赖关系
  • 建议使用唯一的包管理系统

官方软件仓库(Repositories)

  • 打造封闭但有质量保证的软件包来源
  • 慎用第三方软件仓库

dpkg 本地包管理器

  • 安装、删除、创建deb包
  • 不依赖软件仓库、不能自动检索和下载软件包
  • 不判断和解决以来关系

dpkg本地包管理器的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dpkg -l                      # 列出本地所有安装的软件
dpkg -L ufw # 列出包在本地安装的所有文件
dpkg -S /etc/ufw # 查找文件归属的软件包

dpkg -i name_version_architecture.deb # 安装包
/var/cache/apt/archives/

dpkg --print-architecture # 查看系统架构,amd64、i386

sudo dpkg --print-foreign-architectures # 显示系统支持的其他架构包
cat /var/lib/dpkg/arch

dpkg --remove-architecture i386 # 删除i386的软件架构

dpkg -r name:amd64 # 卸载包,可以指定软件架构。这样删除不会删除配置文件

dpkg -P name # 卸载包的同时,将配置文件也删除

APT包管理器

APT 包管理器介绍

  • ubuntu首选的包管理器
  • 依赖软件仓库
  • 安装、卸载、更新包括整个操作系统的所有软件包
  • 更新索引、更新包、自动解决依赖关系

APT 常用使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
sudo apt update        # 更新索引

# 索引位置
cat /etc/apt/sources.list # 放置ubuntu官方软件仓库的源
cd /etc/apt/sources.list.d/ # 放置第三方软件的源


sudo apt list --upgradable # 查看有哪些软件可以更新

sudo apt upgrade # 更新已安装的包,不增加和删除新包

sudo apt dist-upgrade # 更新新包,删除旧包(包含内核)

sudo apt install nmap # 安装包

sudo apt remove nmap --purge # 删除包和配置文件
sudo apt purge nmap # 删除包和配置文件
cat /var/log/dpkg.log # 日志文件


sudo apt search 'network mapper' # 通过关键字搜索包

sudo apt show nmap # 显示包信息

sudo apt autoremove # 删除不再需要的包,需要谨慎使用,某些文件可能是旧版内核的依赖包

/var/cache/apt/archives # 下载deb包的存放路径
/var/lib/apt # 更新源的索引文件

apt download nmap # 只下载包

apt source nmap # 下载源码
apt showsrc nmap # 查看源码信息

APT更新配置

1
2
3
4
5
sudo vim /etc/apt/source.list

# 如:
deb http://archive.ubuntu.com/ubuntu bionic main restricted
# deb-src http://archive.ubuntu.com/ubuntu bionic main restricted

以空格分成四列:

  • 第一列:二进制安装包或源码包(deb)
  • 第二列:库的url地址
  • 第三列:操作系统codename lsb_release -a
  • 第四列:库的内容构成、以及是否官方支持
    • main 官方支持,包含源码,官方维护bug
    • restricted 官方支持,非开源许可
    • universe 社区支持
    • multiverse 既不开源也不支持,自己承担风险,通常不是安全更新

第三方库:

  • 存在安全风险,可能造成系统稳定性问题
  • 作为最后一种选择
  • 建议为每个第三方库建立独立的源 .list文件 在/etc/apt/sources.list.d
  • 验证GnuPG Key 公开的加密框架
1
2
3
4
5
6
7
# 举例
wget -nv https://download.owncloud.org/download/repositories/production/Ubuntu_18.04/Release.key -O Release.key # 将key保存到Release.key 文件下

apt-key add Release.key # 导入到ubuntu中

apt update # 更新索引
apt install package_name

Personal Package Archive (PPA)

ubuntu官方提供服务器、使用方法等,个人开发软件发布

简介

PPA本质上是另外一种形式的apt软件库

  • 适用于没有自建软件库的发布者
  • PPA中的软件没有经过官方审核

使用

PPA的主页:https://launchpad.net/ubuntu/

1
apt-add-repository ppa:ondrej/mariadb-10.0      # 相当于创建源文件.list

删除PPA

  • 删除索引文件
  • 运行apt-key命令删除 GnuPG Key

无人值守更新

1
2
3
4
sudo apt install unattended-upgrades      # 安装无人值守升级包

# 编辑主配置文件
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades # 更新哪一类的补丁

1
2
3
4
5
6
7
sudo vim /etc/apt/apt.conf.d/10periodic      # 决定多长时间更新索引

# 各配置的含义
APT::Periodic::Update-Package-Lists "1"; # 多长时间更新索引
APT::Periodic::Download-Upgradeable-Packages "0"; # 多长时间下载软件包
APT::Periodic::AutocleanInterval "0"; # 多长时间删除旧的软件包
APT::Periodic::Unattended-Upgrade "7"; # 多长时间来安装

重启服务

1
sudo systemctl restart unattended-upgrades.service

日志目录

1
/var/log/unattended-upgrades/

无人值守更新通知:

1
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades

软件更新snap

snap包管理

APT包管理的缺点

  • 系统版本升级后应用软件库基本冻结
  • 安全补丁除外
  • 这是为了维护一致的包和库的依赖关系无法安装最新版软件

snap包管理

snap包管理操作独立于软件仓库

  • 可分发不属于官方库的软件版本
  • 软件安装使用不受操作系统包和库依赖关系的影响
  • snap包内建与Linux发行版本不兼容的库

使用方法

先安装snap

1
sudo apt install snap 

snap使用:

1
2
3
4
5
sudo snap find nmap      # 查找软件包
sudo snap install nmap # 安装软件包
sudo snap remove nmap # 删除软件包
sudo snap refresh nmap # 更新软件包