一.什么是yum

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。是基于rpm但更胜于rpm的软件管理工具,能够从指定的服务器自动下载RPM包并且安装用yum只能查到rpm包软件的信息,不能查到源代码软件的信息,yum只能安装rpm格式的软件包。yum的优点就是自动解决rpm包的依赖关系。

二.yum相关文件

yum的配置文件(服务器端):/etc/yum.conf

yum的配置文件(客户端):/etc/yum.repos.d/目录下以. repo结尾的文件

打包yum仓库为iso镜像 yum仓库配置文件_配置文件


上图是我本机中的已有的repo配置文件,将这些文件统一移动到一个新建目录中,防止对后续的试验产生影响。

[root@localhost yum.repos.d]# mkdir repo
[root@localhost yum.repos.d]# mv *.repo ./repo

再创建自己的配置文件,且必须以.repo做文件结尾,并添加自己的配置。

[root@localhost yum.repos.d]# vim base.repo
[base]
name=base
baseurl=file:///mnt/
enabled=1
gpgcheck=0

[base]:表示Yum 软件仓库唯一标识符,避免与其他仓库冲突,名字自取;同一个服务器下可以配置多个yum源仓库,分别对应不同的以.repo结尾的文件,所以这里要起不同的名字;
name:yum仓库名字,以识别仓库;
baseurl:这个参数指定yum源仓库所在位置,提供的方式包括 FTP(ftp://…)、HTTP(http://…)、本地(file://…),这里是本地仓库,所以以file://开头,后面是具体路径;
enabled:表示此源是否可用:1为可用,0 为禁用
gpgcheck:设置此源是否校验文件:1 为校验,0 为不校验
gpgkey:若gpgcheck参数开启校验,则需要通过该参数指定公钥文件地址

yum的缓存目录:/var/cache/yum。存放从服务器上下载下来的索引文件,一般说的清空缓存就是清空缓存目录。

yum的日志文件:/var/log/yum.log

三.本地yum搭建

1.确保本机的CD/DVD光盘镜像处于连接状态:
[root@localhost yum.repos.d]# ls -l /dev | grep cdrom

lrwxrwxrwx  1 root root           3 Sep  1 12:09 cdrom -> sr0
crw-rw----+ 1 root cdrom    21,   0 Sep  1 12:09 sg0
brw-rw----+ 1 root cdrom    11,   0 Sep  1 12:09 sr0
2.挂载光盘

将/dev/sr0即表示光盘文件,挂载到/mnt文件下

[root@localhost yum.repos.d]# mount /dev/cdrom  /mnt/
3.配置yum的配置文件

进入到/etc/yum.repos.d/目录中(因为该目录存放着 Yum 软件仓库的配置文件),将该目录下的所有文件转移到其他目录下,创建一个新的配置文件base.repo,名字任取但必须以.repo结尾。内容如下:

[base]							#Yum 软件仓库唯一标识符,避免与其他仓库冲突
name=base          				#Yum 软件仓库名称描述,易于识别仓库用处
baseurl=file:///mnt/	        #这里指定挂载路径
enabled=1						#设置此源是否可用;1 为可用,0 为禁用
gpgcheck=0						#设置此源是否校验文件;1 为校验,0 为不校验
4.检验yum仓库是否可用

可以使用yum repolist命令来检查配置是否已经生效

[root@localhost yum.repos.d]# yum repolist 

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id               repo name                      status
!base                 base                           10,019
repolist: 10,019

四.建立EPEL,BASE仓库

安装epel源方法与安装本地磁盘的配置类似,只是将路径改成远程的路径,可用的yum源有:
 
阿里云: https://mirrors.aliyun.com/centos/ $ releasever/os/x86_64/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
EPEL的yum源
阿里云:https://mirrors.aliyun.com/epel/ $ releasever/x86_64
阿里巴巴开源软件
https://opsx.alibaba.com/
再在base.repo基础上再添加一组配置如下:

[epel]
name=EPEL
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
enabled=1

在yum的repo配置文件中可用的变量有如下这些:

变量

说明

$releasever

当前OS的发行版的主版本号

$arch

i386,i486,i586,x86_64等

$basearch

基础平台;i386, x86_64

$ YUM0-$YUM9

自定义变量

之前有本地的配置,为了使新的配置生效,可以使用下面两个命令:

yum clean all  	#清空缓存
yum makecache	#重新生成缓存

可以使用yum repolist命令来检查配置是否已经生效

[root@localhost yum.repos.d]# yum repolist 
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id                                          repo name                                     status
epel                                             EPEL                                          13,373
repolist: 13,373

验证命令:
可以随意安装一个命令:sl

[root@localhost yum.repos.d]# yum install sl

当运行sl命令时,可以看到如下现象:

打包yum仓库为iso镜像 yum仓库配置文件_配置文件_02

五.基于HTTP协议的网络yum仓库

在centos7搭建http服务,提供给centos7仓库服务

1.安装httpd服务,并查看

使用本地光盘先在centos7下安装httpd服务

[root@localhost yum.repos.d]# yum install httpd

安装完后,查看httpd里的内容,使用下面这命令:

[root@localhost yum.repos.d]#rpm -ql httpd

可以看到最后一个目录,/var/www/html该目录是个极其重要的目录

2.启动httpd服务

启动服务前需要关闭防火墙:

#centos7关闭防火墙命令:
 
systemctl disable firewalld 
systemctl stop firewalld

#centos6 关闭防火墙命令:

chkconfig iptables off
service iptables stop

以及SELinux 关闭

vim /etc/selinux/config
SELINUX=disabled

启动httpd服务

[root@localhost yum.repos.d]# systemctl start httpd

是没有任何输出显示的,我的本机ip地址是192.168.81.134,通过浏览器访问这个地址显示如下页面就代表成功:

打包yum仓库为iso镜像 yum仓库配置文件_缓存_03

3.在/var/www/html创建目录
[root@localhost html]# mkdir -pv centos/7/os/x86_64
mkdir: created directory ‘centos’
mkdir: created directory ‘centos/7’
mkdir: created directory ‘centos/7/os’
mkdir: created directory ‘centos/7/os/x86_64’
4.将本地光盘挂载到上步创建的目录中去
[root@localhost html]# mount /dev/sr0 /var/www/html/centos/7/os/x86_64
mount: /dev/sr0 is write-protected, mounting read-only
5.验证和使用

刷新页面显示出如下所示,即代表挂载成功:

打包yum仓库为iso镜像 yum仓库配置文件_缓存_04


再在自己的yum源配置文件中添加该路径:

[base]
name=base
#baseurl=file:///mnt/
baseurl=http://192.168.81.134/centos/7/os/x86_64/
enabled=1
gpgcheck=0

再执行以下两个命令:

yum clean all  	#清空缓存
yum makecache	#重新生成缓存

为了验证是否生效,我们安装几个命令试一下:

1.安装tree包

[root@localhost yum.repos.d]# yum install tree

打包yum仓库为iso镜像 yum仓库配置文件_打包yum仓库为iso镜像_05


显示如上图所示即代表成功。

打包yum仓库为iso镜像 yum仓库配置文件_打包yum仓库为iso镜像_06


2.安装ftp包

首先用命令检查是否安装了ftp,无任何信息显示,就代表没有安装

[root@localhost yum.repos.d]# rpm -qa |grep vsftpd

安装ftp包,显示如下即代表成功

打包yum仓库为iso镜像 yum仓库配置文件_打包yum仓库为iso镜像_07


3.安装lftp包

使用命令:

[root@localhost yum.repos.d]# sudo yum install lftp

打包yum仓库为iso镜像 yum仓库配置文件_打包yum仓库为iso镜像_08


4.安装telnet包

首先先查找telnet包有哪些安装包

[root@localhost yum.repos.d]# yum list | grep telnet
telnet.x86_64                           1:0.17-64.el7                  base     
telnet-server.x86_64                    1:0.17-64.el7                  base

安装telnet包

[root@localhost yum.repos.d]# yum install -y telnet-server.x86_64
[root@localhost yum.repos.d]# yum install -y telnet.x86_64

打包yum仓库为iso镜像 yum仓库配置文件_缓存_09

六.yum命令

yum命令的用法:
yum [options] [command] [package ...]
显示仓库列表:
yum repolist [all|enabled|disabled]
显示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)

升级程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
检查可用升级:
yum check-update
卸载程序包:
yum remove | erase package1 [package2] [...]

查看程序包information:
yum info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

搜索:yum search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息
查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]
查看yum事务历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6

安装及升级本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)
包组管理的相关命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

yum的命令行选项:
--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件

----引申

编写系统初始化脚本reset.sh,包括别名,提示符颜色,yum仓库配置文件

#!/bin/bash
#
#********************************************************************
#Author:        linteng
#QQ:            1025602981
#Date:          2019-09-01
#FileName:     reset.sh
#********************************************************************
#decide current system os
echo "Start Init System,Please Waiting Some Time~~"
sleep 2
version=`egrep -o "[0-9]" /etc/centos-release |head -n1
echo "Current System Version is Centos $version"
echo "Setting Alias...."
sleep 1
cat >>/root/.bashrc<<END
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias IPOUT='ifconfig | egrep -o "\<([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}\>" | head -1'
alias cls='clear'
if [ "$version" -eq 7 ];then
    ps1="\[\e[1;36m\][\u@\h \W]\$\[\e[0m\]"
elif [ "$version" -eq 6 ];then
    ps1="\[\e[1;33m\][\u@\h \W]\$\[\e[0m\]"
else
                                                                                   1,1           Top
    ps1="\[\e[1;33m\][\u@\h \W]\$\[\e[0m\]"
else
    ps1="\[\e[1;35m\][\u@\h \W]\$\[\e[0m\]"
fi`
PS1=$ps1
END
echo "Alias and PS1 be Ready~"
echo "Start Setting Yum Repository..."
sleep 1
#mount cd rom
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
mkdir /etc/yum.repos.d/bak
#move system Centos repo
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

cat >>/etc/yum.repos.d/bash.repo<<END
[base]
name=Centos "$version"
baseurl=file:///mnt/cdrom
gpgcheck=0

[epel]
name=Aliyun
baseurl=https://mirrors.aliyun.com/epel/$version/x86_64
gpgcheck=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-$version
END
                                                                                   26,5          69%
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-$version
END

sleep 1
if [ $version -eq 7 ];then
    systemctl stop firewalld
    systemctl disable firewalld
elif [ $version -eq 6 ];then
    service iptables stop
    chkconfig iptables off
else
    echo "Please Manual Stop Firewall"
echo "Init System Over"
unset version