开发者学堂课程【Linux 软件包安装和 yum:yum 仓库实现 - 2】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/590/detail/8338
yum 仓库实现 - 2
内容简介:
1.利用 yum 仓库安装需要的包
2.yum 仓库中的其他配置
3.yum 仓库客户端配置文件
4.实验:基于 HTTP 协议的网络 yum 仓库
1.利用 yum 仓库安装需要的包
在 Centos 上利用相同的方法搭好一个 Yum 仓库,用 repolist 可以看到仓库的信息, centos 是仓库的名称,base 是它的对应的 ID。
仓库有了之后可以利用仓库做很多事,除了装软件,还可以去做查询等等。
比方说,可以用 info 去安装 System config- Kick Start,也能看到这个包的信息:
[root@centos7 ~]#yum info system-config-kickstart
Loaded plugins : fastestmirror, , langpacks_
Loading mirror speeds from cached hostfile
AvaiTable Packages
Name: system-config-kickstart
Arch : noarch
version: 2.9.7
Release: 1.el7
size: 348 k
Repo: base
summary: A graphical interface for making kickstart files
URL: http: //fedoraproject.org/wiki/systemconfig/Tools
License:GPLv2+
Description : Kickstart configurator is a graphical tool for creating kickstart files.
这个信息和 rpm 命令有一个选项很像叫 qi,不过这里显示的是仓库里的包的版本信息描述。
此外,也可以去列出所有仓库里的包, List 列出所有仓库里的包,Installed 表示已经装好的包。
其中,最左边一列是包名,中间一列是版本号。at 开头表示已经装好的包。
当然 at 后面跟着,实际上就是表示你是通过哪种方法安装好的包,anaconda 是安装操作系统的安装向导,base 说的是什么呢?
base 说的是利用 yum base 源安装的,不是安装操系统安装的,是后来装好系统以后,利用 Yum,通过 base 仓库安装。
可以去 System-config-kick 看到的如果是 at 开头的就表示安装上了,如果没有at开头就表示没有安装,available Package 是现在还没有安装的可用的包,如果通过 yum 查看已知包是否已经装好,可以使用命令 rpm -q、echo $? 查询。
通过一个脚本实现初始化的功能,实现仓库的配置,创建一个 bak 文件,将系统下的目录移动到 bak 下,
装上 httpd 包
cat > letc/ yum.repos.d/ base.repo
[base]
name=cdrom repo
baseurl=file:/l lmisc/cd/
gpgkey=file: /llmisc/ cd/RPM-GPG-KEY-Centos-7
EOF
rpm -q httpd &>/dev/null ll yum install httpd
2.yum 仓库中的其他配置
仓库的主配置文件:vim/etc/yum.conf,在这个文件中它定义了很多和仓库相关的内容。
cachedir=/var/cache/yum/ $basearch/ $releasever
keepcache=0
debugleve1=2
logfi1e=/var / log/yum. Log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installon1y_limit=5
bugtracker_url=http: / /bugs.centos.org/set_project_id=19&ref=http:rg/ bug_report_page.php?category=yum
distroverpkg=centos-release
#This is the default,if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'11 "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
#information.
#It is esp. important,to have correct metadata,for distributions like
# Fedora which don't keep old packages around. If you don't 1ike this checking# interupting your command line usage,it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).#metadata expire=90m
# PUT YOUR REPOS HERE OR IN separate files named file.repo#in /etc/yum.repos.d
~
"/etc/vum.conf" 25L. 969℃1.1A17
Cachedir 是缓存 yum 中的源数据,keepcache=0 表示这个包安装完成后会被删除,debugleve1=2 调试,logfi1e=/var / log/yum.
Log 日志中记录了利用 yum 安装了哪些包,exactarch=1 为是否匹配架构,obsoletes=1 是过期的包的管理,plugins=1 是否支持插件,installon1y_limit=5是否支持五个并发的进程组织安装。
处理 yum 故障的两种方式:
第一确认文件格式是否正确、缓存路径是否存在,第二是否是缓存出现问题,清除缓存。
3.yum 客户端配置文件
/etc/yum.conf : 为所有仓库提供公共配置
/etc/yum.repos.d/*.repo: 为仓库的指向提供配置
仓库指向的定义∶
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1/0}
gpgkey=URL
enablegroups={1/0}
failovermethod={roundrobin|priority}
cost=默认为1000
enabled={1|0}
是在特殊的场景下临时的禁用或启用某些仓库,failovermethod={roundrobin|priority}
是实现多个仓库冗余,为了容错创建多个仓库路径,
其中 roundrobin :
意为随机挑选,默认值,priority: 按顺序访问。
光盘源:
[base]
name=Centos
baseur1=file:/ l/misc/ cd
https://mirrors.aliyun.com/centos/7/os/x86_64/gpgcheck=0
epel 源:
[epel]
name=EPEL
baseurl=http://mirrors.aliyun.com/epe1/$releasever/$basea
https://mirrors.tuna.tsinghua.edu.cn/epe1/$releasgpg
check=0
enabled=0
想把安装依赖性的包卸载干净,可以利用命令 yum history 查看以前的安装信息,再使用 yum history undo 撤销操作,如果错删也可以使用 yum history redo 后悔操作。
yum的repo配置文件中可用的变量有如下︰
①$releasever:当前OS的发行版的主版本号
②$arch:平台,i386,i486,i586,x86_64 等
③$basearch :基础平台;i386,x86_64
④$YUMO-$YUM9:自定义变量
实例:
http://server/centos/$releasever/$basearch/http://server/centos/7/x86_64
http://server/centos/6/i384
①yum 源
阿里云 repo 文件http://mirrors.aliyun.com/repo/
②CentOS 系统的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/
4.实验:基于 HTTP 协议的网络 yum 仓库
CentOS: yum, dnf
YUM: Yellowdog Update Modifier , rpm 的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date 的替代工具.
yum repository: yum repo,存储了众多 rpm 包,以及包的相关的元数据文件(放置于特定目录 repodata 下 )
生产中搭建一个局域网内部的服务器,文件服务器基于以下几种格式:
http://
https://
ftp://
file://
(1)建立 yum 服务器
①配置仓库
mkdir /mnt/ cdrom 临时创建一个文件夹
mount /dev/ sro /mnt/ cdrom 挂上安装光盘
vim /etc/ yum.repos.d/base.repo 临时配置一个yum源
[root@centos7 ~]#cat /etc/yum.repos.d/base.repo
[base]
name=Centos
baseur7-fi1e:/ l/misc/cd
gpgcheck=0
[epel]
name=EPEL
baseurl=http: //mirrors.aliyun . com/epe1/$releaseverch
gpgcheck=0
enabled=o
②安装 httpd 包
命令 Yum install httpd,先用本地光盘的路径,给自己来提供服务,安装 httpd 包
③查看 httpd 包中含有的文件
命令rpm -ql httpd可以查看包里面所有包括的文件列表,其中比较关注的是/var/www/htm,这是一个文件夹,用来存放我们基于HTTP协议共享目录的所在地。
事实上,当我们去访问某个网站的时候,看到的这些内容,实际上就来自于我们说的这个工作默认。
如果你要是用 Apache 就是 APP 这个网站提供了外部服务,那你看到的这些页面的内容就是来自于这个文件。
接下来,作为一个 Http 它是一个稍微有点规模的一应用,那么对于这种一般有规模的应用,往往是有以服务的方式运行的,它都是希望长期运行的。要长期运行,它就意味着开着不停,假设有一个程序长期开着不停,是没法执行其他的文件的。
所以那些服务希望长期运行的,它往往是在后面执行称为后台执行,所谓后台执行就是他执行的时候,它是不占用你的终端资源的。
④启用服务
有一个文件可以用来实现服务的后台执行,这个文件叫 service,这个 service 文件在 USRCT 目录下。
这种服务它都是后台执行的,所以我们需要启用它,可以直接执行命令 systemctl Start HTTP service。
它是后台执行的,它可以接着工作,后面悄悄为我们提供专业的称呼叫后台服务。
⑤创建目录结构
参考安装源 CentOS,它支持各种版本,对于 centos 的7,它的 CPU 只有一个。
这个路径稍后建立的时候要参考它的路径来建立自己的参考路径。
具体创建如下:
[root@centos7 html]#mkdir -pv centos/{6,7}/os/x86_64/
kdir: created directory ' centos’
mkdir: created directory ' centos/6’
mkdir:created directory ' centos/6/os'
mkdir:created directory ' centos/6/os/x86_64/'
mkdir: created directory ' centos/7'
mkdir:created directory ' centos/7/os’
mkdir: created directory ' centos/7'/os/x86_64/’
⑥挂入安装光盘
[root@centos7htm1]#mount/dev/srO /var/www/htm1/centos/6/ 7/
[root@centos7htm1]#mount/dev/sr0 /var/www/htm1/centos/7/os/x86_64/mount:/dev/sr0 is write-protected,mounting read-only
(2)配置 yum 客户端
把自己的仓库配置文件给它
name=Centos
#baseurl=file:/ l/misc/cd
baseur1=http://192.168.34.7/centos/$releasever/os/$basearch
gpgcheck=0
[epe1]name=EPEL
baseur1=http: //mirrors.aliyun . com/epe1 / $basearch
gpgcheck=0
enabled=0