0.前言
在国内,使用 Linux 系统的时候,常常因为机器所在区域与官方源的地址之间的通信状态不好,导致下载安装包的时候会出现问题。
为了解决或缓解这种情况,更换 Linux 系统的安装源是一种快捷的方法。
1.Ubuntu(apt/apt-get | dpkg)
Ubuntu 系统是 Debian 系统的一种衍生系统,但用户广泛,常被在各种领域的个人电脑中选择安装和使用。Ubuntu 系统是一种 deb 包管理式的操作系统,使用 apt (Advanced Packaging Tool)工具从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。(这里这个仓库就是指的国外/外地的官方源)
列出几个和 apt 相关的目录:
1 2 3 4 5 6 7 8 9 10 11 |
/var/lib/dpkg/available 文件的内容是软件包的描述信息,该软件包括当前系统所使用的Debian安装源中的所有软件包,其中包括当前系统中已安装的和未安装的软件包 /var/cache/apt/archives 目录是在用apt-get install安装软件时,软件包的临时存放路径 /etc/apt/sources.list 存放的是软件源站点,当执行sudo apt-get install xxx时,Ubuntu就去这里的站点下载软件包到本地并执行安装 /var/lib/apt/lists 使用apt-get update命令会从/etc/apt/sources.list中下载软件列表,并保存到该目录 |
apt工作原理
由于 Ubuntu 采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效的组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的 Ubuntu 用户随时都能获得最新版本的安装软件包。因此,对于用户,镜像服务器就是他们的软件源(repository)
然而,由于网络环境的原因,不可能随意的访问到各镜像站点。为了能够有选择的访问“有效的站点”,在 Ubuntu 系统中,使用软件源配置文件 /etc/apt/sources.list 列出最合适访问的镜像站点地址。
apt/apt-get 的更新流程:
- 执行 apt-get update
- 程序分析 /etc/apt/sources.list
- 自动联网寻找 list 中对应的 Package/Sources/Release 列表文件,如果有更新则下载之,存入 /var/lib/apt/lists/ 目录
- 然后 apt-get install 相应的包,在 3 的目录里的列表文件中寻找到相应的包对应的下载地址,下载并安装
apt-get install 下载的软件存放到 /var/cache/apt/archives/ 目录下,同时,APT 能够检查 Ubuntu Linux 系统中的软件包依赖关系,大大简化了 Ubuntu 用户安装和卸载软件包的过程。
★更换源
在下载/更新安装包的时候,访问的 /etc/apt/sources.list 中列出的地址会出现访问超时等问题,这是因为网络环境的原因,大部分的根本原因是因为软件源地址位于国外,访问不到或者访问超时导致的。这时,只需要将软件源换成国内的就可以了。
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
1、备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2、查看新版本信息 其实Ubuntu18.04版之前的任一版本更改apt源为国内源方法早就有了,内容大同小异,其中的规律,其实就是每一版本的版本号(系统代号)不同,所以先查看当前版本的系统代号: lsb_release -a Codename : bionic 可以得知当前Ubuntu18.04的版本系统代号为bionic 同样到也可以一些常用的版本的系统代号: Ubuntu 12.04 - precise - Precise Pangolin(精准的穿山甲) Ubuntu 14.04 - trusty - Trusty Tahr(可靠的塔尔羊) Ubuntu 15.04 - vivid - Vivid Vervet(活泼的小猴) Ubuntu 15.10 - wily - Wily Werewolf(狡猾的狼人) Ubuntu 16.04 - xenial - Xenial Xerus(好客的非洲地松鼠) Ubuntu 18.04 - bionic - Bionic Beaver(仿生海狸) 3、修改/etc/apt/sources.list,将原有的内容注释掉,添加一下内容 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse 条目是有格式的: deb http://site.example.com/debian distribution component1 component2 component3 deb-src http://site.example.com/debian distribution component1 component2 component3 后面几个参数是对软件包的分类(Ubuntu下是main,restricted,universe,multiverse这四个) 4、更新软件列表 # 访问/etc/apt/sources.list的地址,读取软件列表,并保存到/var/lib/apt/lists/目录 sudo apt-get update 5、更新软件包 # 会将本地已安装的软件,与刚下载的软件列表进行对比,如果发现已安装的软件版本太低,会提示更新。 # 如:升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。 # 所以不要执行这个命令!!!不小心更新了一些重要的包会导致依赖崩坏!!! sudo apt-get upgrade 6、安装软件 sudo apt-get install xxx ps.一些有用的命令 # 查看已安装的软件 sudo apt list --installed | grep xxx 或 sudo dpkg -l | grep -E "xxx|xxx|xxx" |
☆一些注意事项与经验
有时候, 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 的特点:
- 可以同时配置多个资源库(repository)
- 简介的配置文件(一般配置文件是的路径是 /etc/yum.conf)
- 自动解决增加或者删除 rpm 包时遇到的依赖问题
- 保持与 rpm 的数据库一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
cachedir :此项为 yum 下载的 RPM 包的缓存目录,yum 再次存储下载的 rpm 包和数据库 keepcache :缓存是否保存,1 表示安装后保留软件包,0 表示安装后删除软件包 debuglevel : 出错日志级别,级别为 0-10 ,默认为 2 (只保留安装和删除记录) logfile :存放系统更新软件的记录,用户可以在该配置想配置的文件中检查自己在过去的日子都做了哪些更新 pkgpolicy :包的策略。一共有两种选项,newest 和 last,这个作用是如果设置了多个 repository,而统一软件在不同 repository 中同时存在,yum应该安装哪一个的策略选择。 ※newest 表示 yum 会安装最新的那个版本 ※last 表示 yum 会将服务器 id 以字母表排序,并选择最后那个服务器上的软件安装 distroverpkg :指定一个软件包,yum 会根据这个包判断发行版本,默认是 RedHat-release,也可以是安装的任何针对自己的发行版的 RPM 包 tolerent :也有 1 和 0 选项,表示 yum 是否容忍命令行发生与软件包有关到错误,比如你要安装 1,2,3 三个包,而其中 3 此前已经安装了,如果你设为 1 ,则 yum 不会出现错误信息。默认为 0 exactarch :也有 1 和 0 选项,代是否只升级和你安装软件包 CPU 体系一致的包,如果设为 1 ,则如你安装了一个 i386 的 RPM,则 yum 不会用 i686 的包来升级 ※i386对应的是32位系统、而i686是i386的一个子集,i686仅对应P6及以上级别的CPU,i386则广泛适用于80386以上的各种CPU;x86_64主要是64位系统 retries :网络连接发生错误后的重试次数,如果设为 0,则会无限重试 obsoletes :这是一个 update 的参数,简单的说就是相当与 upgrade,允许更新陈旧的 RPM 包 gpgcheck :是否检查 GPG(GNU Private Guard),一种密钥方式签名 plugins : 是否允许使用插件,默认是 0 - 不允许,但是一般会用 yum-fastestmirror 这个插件 installonly_limit:允许保留多少个内核包 exclude :屏蔽不想更新的 RPM 包,可用通配符,多个 RPM 之间使用空格分离 reposdir :该选项用户指定 .repo 文件的绝对路径,.repo 文件包含软件仓库的信息 ※reposdir=[包含 .repo 文件的目录的绝对路径] bugtracker_url :追踪 bug 路径 |
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/ 目录下,
1 2 3 4 5 6 7 8 |
其中: CentOS-Base.repo 是yum网络源的配置文件,一般默认是使用这个 CentOS-Debuginfo.repo 是debug包尤其和内核相关的更新和软件安装 CentOS-Media.repo 这个是使用光盘挂载后调用的文件 CentOS-Vault.repo 这个是最近新版本的加入的老版本的yum源配置(一般没有) epel.repo EPEL(Extra Packages for Enterprise Linux)是由Fedora社区打造,为RHEL以及衍生发行版如CentOS等提供高质量软件包的项目。 装上了EPEL,就像在Fedora上一样,可以通过yum install 软件包名,即可安装很多以前需要编译安装的软件、常用的软件或一些比较流行的软件。 如:nginx、htop、ncdu、vnstat等等。前可以通过执行命令 yum install eqel-release 进行安装 |
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 34 |
仓库(.repo)配置文件: [repositoryID] #仓库ID,唯一标识别,不能重复 name=Some name for this repository # 完整的仓库名称 baseurl=url://path/to/repository/ # yum仓库指明的访问路径 enabled={1|0} #是否启用此yum仓库,默认启用 gpgcheck={1|0} #是否检查完整性和来源合法性 gpgkey=URL #秘钥文件位置,可能是对方仓库提供 enablegroups={1|0} #是否基于组来批量管理程序包 failovermethod={roundrobin|priority} #故障转移方法:轮询、根据优先级选择; 默认roundrobin随机 cost=# #设置开销,默认为1000 … ... 说明: 1)*.repo可以将多个[repositoryID]的配置信息放在一个而文件内,也可以切成多个方便管理 2)baseurl可以使用:ftp:// 、http:// 、nfs:// 、file:/// 指明URL路径 3)baseurl等号两边不能有空格,其后可以填写多个镜像访问路径,每行一个,不能顶行写 多个访问路径间联系是镜像相同,目的是为了做备用访问 4)更多选项使用man 5 yum.conf查看,基本配置只需前三行就可以 5)发行版光盘镜像安装可能会自动配置网络镜像URL地址 |
★更换源
由上面的配置文件地址可知,这是一个官方源!!很多时候会因为网络超时,导致体验极差,这时可更换 yum 源:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
1、备份 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下载新的CentOS-Base.repo到/etc/yum.repos.d/ #CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo #CentOS 6 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo #CentOS 7 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3、之后运行指令生成缓存 sudo yum makecache |
补充:关于 RPM
RPM 包则是软件编译完成后安装 RPM 机制打包起来的一个文件,可以用 rpm 命令安装的一个软件安装包,它省去了Linux 软件安装中编译的步骤,安装成功后软件就可以使用了。
RPM 的特点是:
- 已编译
- 易安装
- 安装环境一致
- 反安装要从最上层开始
RPM 包的名称规则实例:ttpd-manual-2.0.40-21.i386.rpm
- ttpd-manual 是软件包到名称
- 2 是主版本号
- 0 是次版本号
- 40 是次版本号
- 21 是编译次数
- i386 是代表 inter 的 x86 架构 CPU 平台
- .rpm 说明这是一个 RPM 包