RPM与YUM使用以及配置本地/网络yum源

阅读: 1311 | 文章分类: Linux | Tag: YUM   RPM  

平时使用的大部分电脑大部分都是装有Windows的系统,我们一般下载软件都是直接百度搜索软件名称然后就下载一个.exe结尾(后缀名)的文件,双击打开就可以进行安装了,要不就是直接使用一个什么软件管家在里面找到点击安装,然后就完事了~~~ 那Windows可以这么轻易地安装软件了,Linux系统该怎么安装呢? 在这里我就要跟大家详细讲解下,Linux系统(CentOS、Redhat)下如何安装软件,后面有时间还会带大家了解Ubuntu的软件安装方式 # 光盘镜像 在学习YUM和RPM之前我们先来了解下下载回来的光盘镜像,我这里使用的是CentOS的光盘镜像,Redhat其实是一样的,我这里是先把一个光盘镜像挂载到系统中打开,得到下面的目录,下面会一个一个跟大家了解里面包含的内容,当然不重要的东西我会略过讲,我这里只讲重点 [怎么挂载镜像?](https://www.cloudhy.cn/article/29 "怎么挂载镜像?") ``` CentOS_BuildTag :制作标签 EFI :EFI启动方式文件 EULA :最终用户许可协议 GPL :GPL授权协议 images :网络PXE启动文件 isolinux :挽救模式文件 LiveOS :微型系统镜像 Packages :自带RPM包 # 重点 repodata :YUM源数据库 # 重点 RPM-GPG-KEY-CentOS-7 :公钥信息文件 RPM-GPG-KEY-CentOS-Testing-7 :公钥信息文件 TRANS.TBL :光盘目录 ``` 目录内的Packages目录下存放3896个rpm包(当前镜像版本是CentO S_7-1708),各个版本的Packages目录软件包数量都会有差异 在光盘镜像中还存放着一个repodata目录,这个目录下存放的yum源的数据库文件,只要把光盘镜像挂载到服务器上,然后配好yum源为挂载的镜像,当使用yum安装软件的时候yum就会到这个目录下面去查询数据库,然后再到Packages目录下去拿rpm包进行安装,所以简单理解可以说repodata是记录Packages目录下所有rom包的数据库 --- # 加密签名原理 说完这两个目录,我们再来了解下rpm包的签名校验的工作原理 废话不说太多,我先通过一个小小的实验来让大家了解下文件的密文大概是怎样的 ``` # 首先我们先使用echo来生成一个文件,然后复制成两份 [root@localhost ~]# echo "lalalalala" >file1 [root@localhost ~]# cp file1 file2 # 我们得到的结果是两个文件的内容都是一样的 [root@localhost ~]# cat file1 file2 lalalalala lalalalala # 我们来对比一下两个文件的md5,结果两个文件的md5都是一样的 [root@localhost ~]# md5sum file1 69c3c5358fe06a1580aa1b1315e86c7f file1 [root@localhost ~]# md5sum file2 69c3c5358fe06a1580aa1b1315e86c7f file2 # 我们将其中一个文件做个小小的改变(追加一个字符) [root@localhost ~]# cat file1 lalalalala [root@localhost ~]# cat file2 lalalalala a # 然后再来对比一下md5,我们可以看到file1的md5不变,但file2的md5变得完全不一样了 [root@localhost ~]# md5sum file1 69c3c5358fe06a1580aa1b1315e86c7f file1 [root@localhost ~]# md5sum file2 47c4e2f1fa2e5f1ed0f105d13f7bf176 file2 ``` 说了这么多,我们再回过头来了解rpm包的校验方式,它是使用sha256码再进行加密,sha256跟上面类似,是一个定长输出的加密编码,每个文件都有一个唯一的sha256码,只要文件发生一点点改变,这个sha256码将被改变,而且是跟原来的sha256码不同 ``` # 查看文件sha256码 [root@localhost ~]# sha256sum file1 896769fb2f15d59f398863a11f3e0aaafac022bb99dfd6db34d7c78e1da307e3 file1 [root@localhost ~]# sha256sum file2 193288ac3f65c04c99a3201ae442d20b2406e9150fc24670bd3255a0f9936872 file2 ``` 原理图 [下载原图片]( https://www.cloudhy.cn/uploads/blog/2018.4.20-01.png "下载原图片") ![]( https://www.cloudhy.cn/uploads/blog/2018.4.20-01.png) 在rpm包安装或yum安装的时候就有这样的验证机制,以报证rpm包不被篡改 # rpm命名规则 rpm包的包名一般都会很长,但很多人可能不知道那些编号究竟是什么东西,我举个栗子分析以下~~ ``` httpd-2.4.6-67.el7.centos.x86_64.rpm # | | | | | | | # | | | | | | |___.rpm-------软件包后缀名,一般为 *.rpm 或 *.src.rpm # | | | | | |________.x86_64----适用硬件平台,一般为 x86_64、i386 等 # | | | | |_______________.centos----适用操作系统,noarch为通用版本 # | | | |_____________________.el7-------发行商版本号,el5为CentOS5与HREL5以下使用 # | | |________________________.67--------编译版本号,表示第几次编译 # | |_____________________________.2.4.6-----软件版本号,分别为:主版本号.次版本号.修正号 # |___________________________________.httpd-----软件包名称 ``` 包名大概就是上面这些,还有一个是devel要记住的,devel上面没有,表示软件开发包,其他没有什么特别了的 --- # rpm命令 ### 参数及用法 rpm命令的参数特别多,我也不想写太多参数出来,就列举几个常用的参数就好,记太多没用而且还记不住 ``` -ql :查询软件包有安装后有哪些文件 用法: [root@localhost ~]# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d ... ... -qf :查询已安装的软件的包名 用法: [root@localhost ~]# rpm -qf /etc/httpd httpd-2.4.6-67.el7.centos.6.x86_64 -ivh :安装rpm包并显示安装过程详细信息 [root@localhost ~]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm ... ... -Uvh :使用rpm包进行升级 [root@localhost ~]# rpm -Uvh httpd-2.4.6-67.el7.centos.x86_64.rpm ... ... -e :卸载软件包(包括依赖,如不想卸载依赖包则在-e后面加上--nodeps) [root@localhost ~]# rpm -e httpd # 卸载包括依赖 [root@localhost ~]# rpm -e --nodeps httpd # 卸载不包括依赖 ``` --- # yum命令 ### 参数及用法 此处使用apache的httpd服务做为实例 ``` # 安装软件 [root@localhost ~]# yum -y install httpd # -y表示后面的交互式询问默认选为yes # 更新所有软件(包括内核) [root@localhost ~]# yum update # 升级指定软件 [root@localhost ~]# yum update httpd # 列出所有可更新的软件 [root@localhost ~]# yum check-update # 列出所有可安装的软件清单 [root@localhost ~]# yum list # 查找软件包 [root@localhost ~]# yum search httpd # 删除软件包 [root@localhost ~]# yum remove httpd # 清理yum的缓存 [root@localhost ~]# yum clean all # 生成yum的缓存 [root@localhost ~]# yum makecache ``` --- # 使用本地光盘镜像配置yum源 ### 一、先在/目录下创建一个iso的空目录(不要在空目录内存放东西!目录名称可自定义) ``` [root@localhost ~]# mkdir /iso ``` ### 二、将光盘镜像挂载到刚刚创建的/iso目录 ``` [root@localhost ~]# mount /dev/cdrom /iso/ mount: /dev/sr0 写保护,将以只读方式挂载 ``` ### 三、将原有的yum源文件移走备份(此处我将它移动到/tmp目录下备份。也可直接删除,最好备份好以免出问题) ``` [root@localhost ~]# mv /etc/yum.repos.d/CentOS-* /tmp/ ``` ### 四、配置yum源 ``` [root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo [cdrpm] name=cdrpm baseurl=file:///iso enabled=1 gpgcheck=0 ``` name为库的名称,自定义但不需要太长 baseurl为传输协议,可以为file:// 、ftp:// 、http:// 、https:// 等等,下文有教配置http源~~ enabled为是否启用库 1代表启用;0代表关闭 gpgcheck为检查软件包的签名,1为检查;0为不检查 (签名机制在本文开始有介绍) ### 五、清理缓存并缓存新的数据 ``` [root@localhost ~]# yum clean all && yum makecache ``` --- # 本地磁盘配置yum源 ### 一、先安装createrepo工具 ``` [root@localhost ~]# yum -y install createrepo ``` ### 二、先把光盘镜像里的Packages目录拷贝到本地磁盘(目录名称自取,后面保持一致就好) ``` [root@localhost ~]# mkdir /localrpm [root@localhost ~]# cp /iso/Packages/* /localrpm/ ``` ### 三、生成元数据 ``` [root@localhost ~]# createrepo /localrpm Spawning worker 0 with 3894 pkgs Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete # 查看生成的repodata目录 [root@localhost ~]# ll /localrpm/repodata/ 总用量 13000 -rw-r--r--. 1 root root 3196821 4月 18 17:48 1247dab9c7b61051bc9cb5f8f296fe060069e1adc62a9382dbad1a8f7227ed12-primary.sqlite.bz2 -rw-r--r--. 1 root root 1307740 4月 18 17:48 281832be789b989fe8c543f9de47992c0b1de080a4c7f7971a587cfa64d58f86-other.sqlite.bz2 -rw-r--r--. 1 root root 3116145 4月 18 17:48 283c19e8d3c6ff8541ddc19ea36d974e6afdc2770257a04622fc0aa5280b4322-filelists.xml.gz -rw-r--r--. 1 root root 962895 4月 18 17:48 6addbbcab39d561cf037917505807e1547d0d06937b539a01ae1d55a62d2a552-other.xml.gz -rw-r--r--. 1 root root 1512878 4月 18 17:48 b7f650edba4259208545e63369d3dac5eed6d199c0f13b69e478de3ea5e3c5e8-primary.xml.gz -rw-r--r--. 1 root root 3198369 4月 18 17:48 ce678501a07f940dbe16d3e4fcb495050fd48ec429c5e8ea955e681594f90934-filelists.sqlite.bz2 -rw-r--r--. 1 root root 3008 4月 18 17:48 repomd.xml ``` ### 四、配置yum源 ``` [root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo [localrpm] name=localrpm baseurl=file:///localrpm enabled=1 gpgcheck=0 ``` ### 五、清理缓存并缓存新的数据 ``` [root@localhost ~]# yum clean all && yum makecache ``` --- # 使用nginx配置网络yum源 我们只将上面的本地源配置为网络源,不懂nginx搭建的同学看 [Linux安装Nginx](https://www.cloudhy.cn/article/12 "Linux安装Nginx") 在主目录配置文件里server花括号里多加几行代码开放访问即可 ``` location ~/ { autoindex on; autoindex_exact_size off; autoindex_localtime on; charset utf-8,gbk; } ``` # 使用apache-httpd配置yum源 其实httpd的配置更加简单,直接把住目录指向到本地刚刚创建的/localrpm就可以了,不要设置index主页就可以了,注意关闭测试页,不然无法使用,怎么配置目录自己想办法去~~~ 关闭测试页方法 ``` /etc/httpd/conf.d [root@localhost ~]# vim /etc/httpd/conf.d/welcome.conf #注释掉下面这几行就可以了 #<LocationMatch "^/+$"> # Options -Indexes # ErrorDocument 403 /.noindex.html #</LocationMatch> ``` # 使用网络yum源(OPSX-YUM源、163-YUM源) ### OPSX镜像站 相信很多人都不认识OPSX,但相信很多人都认识阿里YUM源,没错,其实它俩就是一个,转了个弯就不认识了~~ [OPSX官网](https://opsx.alibaba.com/mirror "OPSX官网") 配置这个很简单,其实我之前就已经写过一个系统初始化脚本,里面就有涉及到,所以我把那几句脚本提取出来,按着执行就可以完成了~~~ ``` # 先安装个wget下载工具 yum -y install wget # 备份现有yum源配置文件(留一手~) mv /etc/yum.repos.d/*.repo /tmp # 下载阿里的yum源配置文件到本地并重命名(若是CentOS 6或5,直接修改最后面的数字7改为6或5即可) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 删除阿里内网yum源链接(非阿里机房服务器不删除可能会出现问题) sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo # 清理缓存数据并生成新的缓存数据 yum clean all && yum makecache ``` ### 网易163开源镜像站 [网易开源镜像站官网](http://mirrors.163.com/ "网易开源镜像站官网") ``` # 先安装个wget下载工具 yum -y install wget # 备份现有yum源配置文件(留一手~) mv /etc/yum.repos.d/*.repo /tmp # 下载阿里的yum源配置文件到本地并重命名(若是CentOS 6或5,直接修改最后面的数字7改为6或5即可) wget -O /etc/yum.repos.d/CentOS7-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo # 删除阿里云内网yum源地址(如果不是阿里云服务器则必须执行这条,否则使用yum安装容易出错) sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo # 清理缓存数据并生成新的缓存数据 yum clean all && yum makecache ``` ## 同步网络YUM源 搭建了本地yum源后,我们需要做个网络同步以报证软件的更新 但在国内很多镜像站都不支持rsync网络同步,所以我选了个中科大镜像站作为yum源同步的网站 #### 安装网络同步工具 ``` yum -y install rsync ``` #### 查看网络YUM源目录 ``` # 中科大镜像站 (命令可直接执行查看目录) rsync --list-only rsync://mirrors.ustc.edu.cn/epel/7/x86_64/ ``` #### 同步脚本 ``` # 创建脚本程序写入脚本内容并保存退出 [root@localhost ~]# vim /opt/rsyncyum.sh rsync -avrt --delete --no-iconv --bwlimit=1000 rsync://mirrors.ustc.edu.cn/epel/7/x86_64/ /localrpm # 赋予执行权限 [root@localhost ~]# chmod u+x /opt/rsyncyum.sh ``` #### 定时任务 ``` # 添加每天凌晨4点进行同步的计划任务(输入i进行编辑,输入内容后按esc后输入:wq保存退出) [root@localhost ~]# crontab -e * 4 * * * /opt/rsyncyum.sh # 查看是否在计划任务内生效 [root@localhost ~]# crontab -l * 4 * * * /opt/rsyncyum.sh ```