0.前言

在国内,使用 Linux 系统的时候,常常因为机器所在区域与官方源的地址之间的通信状态不好,导致下载安装包的时候会出现问题。

为了解决或缓解这种情况,更换 Linux 系统的安装源是一种快捷的方法。

1.Ubuntu(apt/apt-get | dpkg)

Ubuntu 系统是 Debian 系统的一种衍生系统,但用户广泛,常被在各种领域的个人电脑中选择安装和使用。Ubuntu 系统是一种 deb 包管理式的操作系统,使用 apt (Advanced Packaging Tool)工具从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。(这里这个仓库就是指的国外/外地的官方源)

列出几个和 apt 相关的目录:

apt工作原理

由于 Ubuntu 采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效的组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的 Ubuntu 用户随时都能获得最新版本的安装软件包。因此,对于用户,镜像服务器就是他们的软件源(repository)

然而,由于网络环境的原因,不可能随意的访问到各镜像站点。为了能够有选择的访问“有效的站点”,在 Ubuntu 系统中,使用软件源配置文件 /etc/apt/sources.list 列出最合适访问的镜像站点地址。

apt/apt-get 的更新流程:

  1. 执行 apt-get update
  2. 程序分析 /etc/apt/sources.list
  3. 自动联网寻找 list 中对应的 Package/Sources/Release 列表文件,如果有更新则下载之,存入 /var/lib/apt/lists/ 目录
  4. 然后 apt-get install 相应的包,在 3 的目录里的列表文件中寻找到相应的包对应的下载地址,下载并安装

apt-get install 下载的软件存放到 /var/cache/apt/archives/ 目录下,同时,APT 能够检查 Ubuntu Linux 系统中的软件包依赖关系,大大简化了 Ubuntu 用户安装和卸载软件包的过程。

★更换源

在下载/更新安装包的时候,访问的 /etc/apt/sources.list 中列出的地址会出现访问超时等问题,这是因为网络环境的原因,大部分的根本原因是因为软件源地址位于国外,访问不到或者访问超时导致的。这时,只需要将软件源换成国内的就可以了。

☆一些注意事项与经验

有时候, APT 安装/更新一些软件包时出现的问题。

情况一:未联网状态下,使用 APT 安装软件包,竟然安装成功(理论上没联网是获取不到软件包,也就无法安装成功的)

原因:

  • 可能联网了,你不知道
  • 的确没连通外网,但出于内网中,并且内网某地址充当了软件源
  • 的确没连通外网,那可能因为某原因,在本地/var/cache/apt/archives里留有安装包(如以前装过,删了,但保留了安装包)

情况二:在https://pkgs.org/中搜到某版本软件包是有发行的,但在实际机器上安装表示没有/当前版本已经是最新版本

原因:

  • 因为机器很久没有更新列表了,需要重新执行一下apt-get update更新一下列表
  • 如果更新了列表,还是如此,就表示APT源没有包含这个软件包,需要更换/添加有这个软件包的APT源

情况三:关于apt与dpkg的关系,有时候为什么dpkg -l显示的包在apt里没有?

解答:apt是基于dpkg的基础上,衍生了自动管理包之间的依赖关系的工具,本质还是调用了dpkg。所以,使用apt安装软件包,调用了dpkg,软件之间的依赖关系一清二楚,而且用dpkg能看到一切信息;但反过来,用dpkg安装软件包,不会调用apt,所以在dpkg -l能列出软件包,但在apt中不会显示出来。

2.CentOS(yum | rpm)

CentOS 系统是 RedHat 系统的另一种衍生系统,在个体用户中使用的较少,由于是基于 RedHat 开发的系统,继承了红帽系统出色的稳定性,而且免费,所以广泛应用在服务器上。CentOS 系统的安装包与 RedHat 系统(CentOS、Fedora、SUSE)一样是 RPM(RedHat Package Manager),使用 yum (Yellowdog Update Modified)工具进行管理。

什么是yum?

yum 的作用是:自动化的升级、安装/移除 rpm 安装包,收集 rpm 的相关信息,检查依赖性,并提示用户解决。其关键之处是需要可靠的 repository(仓库),它可以是一个 http 或者 ftp 站点,也可以是一个本地的软件池,但是必须包含 rpm 的 header,rpm 的 header 包括了 rpm 的各种信息,包括描述、功能、提供的文件、依赖性等,正是因为有这些信息,才能自动化的完成余下的任务(顺便下载安装依赖包)。yum 本身就是运行在 Linux 系统上的自动管理安装包系统。yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个 distribution 的引用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等操作,减少 Linux 用户一直头痛的 dependencies(依赖)的问题。

YUM 的特点:

  1. 可以同时配置多个资源库(repository)
  2. 简介的配置文件(一般配置文件是的路径是 /etc/yum.conf)
  3. 自动解决增加或者删除 rpm 包时遇到的依赖问题
  4. 保持与 rpm 的数据库一致

yum工作原理

yum 的工作模式是 C/S 架构:

        Server 端(yum 仓库):依赖关系库、源文件、校验码文件

        Client 端:yum 客户端程序、配置文件(连接 Server 路径信息)

执行 yum 命令时,会首先从 “/etc/yum.repos.d/” 目录下的众多 repo 文件中取得软件仓库的地址并下载 “元数据”,“元数据” 包含注册于该软件仓库内所有软件包的包名及其所需要的依赖环境等信息,yum 得到这些信息后会和本地已有环境作对比,进而列出确认需要安装哪些包,并在用户确认后开始安装。“元数据” 由位于 yum 源服务器相关路径的 repodate 目录下的 repomd.xml 做索引。

yum 的工作流程:

服务器端:在服务器上面存放了所有的 RPM 软件包,然后以相关的功能去分析每个 RPM 文件的依赖性关系,将这些数据记录成文件,存放在服务器的某特定目录内

客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过 http 或 ftp 方式),通过对服务器端下载的记录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。

.repo文件

repo文件是 Fedore 中 yum 源的配置仓库,通常一个 repo 文件定义了一个或者多个软件仓库的细节内容,例如:将从哪里瞎子啊需要安装或者升级的软件包,repo 文件中的设置内容将被 yum 读取和应用

一般这些文件放在 /etc/yum.repos.d/ 目录下,

★更换源

由上面的配置文件地址可知,这是一个官方源!!很多时候会因为网络超时,导致体验极差,这时可更换 yum 源:

补充:关于 RPM

RPM 包则是软件编译完成后安装 RPM 机制打包起来的一个文件,可以用 rpm 命令安装的一个软件安装包,它省去了Linux 软件安装中编译的步骤,安装成功后软件就可以使用了。

RPM 的特点是:

  1. 已编译
  2. 易安装
  3. 安装环境一致
  4. 反安装要从最上层开始

RPM 包的名称规则实例:ttpd-manual-2.0.40-21.i386.rpm

  • ttpd-manual 是软件包到名称
  • 2 是主版本号
  • 0 是次版本号
  • 40 是次版本号
  • 21 是编译次数
  • i386 是代表 inter 的 x86 架构 CPU 平台
  • .rpm 说明这是一个 RPM 包