yum软件安装
在centos中,软件的安装方式有多种,yum安装,rpm包安装,二进制包安装,源代码编译安装,今天我们来说说常用的软件安装方式之一yum源安装。
yum 相关命令
yum repolist: 列出正在使用的yum源
yum repolist all:列出包含被禁用的yum源
yum install -y appname:安装软件
yum clean all:清除缓存
yum makecache:生成缓存
yum provides name:查询相关工具来自哪一个软件包
yum info appname:查看相关软件的介绍
yum search appname:查询相关软件包
那yum源是从哪里来的呢?来看看
[root@centos7 ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.huaweicloud.com
* updates: mirrors.163.com
repo id repo name status
!base/7/x86_64 CentOS-7 - Base 10,072
!extras/7/x86_64 CentOS-7 - Extras 448
!updates/7/x86_64 CentOS-7 - Updates 1,15
可以看到,yum的安装源来自名叫repo name字段的那些文件,这些文件的存储位置都是位于/etc/yum.repos.d/目录下。
[root@centos7 ~]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo CentOS-x86_64-kernel.repo
他们都有着共同的特点,都是以.repo结尾的文件,这就是yum源配置文件的格式要求--- name.repo。
来看看文件里面的内容
[root@centos7 ~]# cat /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
其中
[base]:代表软件源的名字,中括号一定要存在,里面的名称可以随意取,但是不能有两个相同的名字。
name:说明一下这个软件源的意义,
mirrorlist:列出这份软件源可以使用的镜像,不用可以注释掉或者不写。
baseurl:很重要,后面跟的是软件源的实际地址,
enabled:enabled=0代表不启用这个软件源,1代表启用。
gpgcheck:指定是否需要查看RPM文件的数字签名。gpgcheck=0代表不启用
gpgkey:数字签名的公钥所在位置,使用默认值即可。
#################################################
另外repo配置文件中还支持相关变量。
$releasever:当前OS的发行版的主版本号,如6.7.8
$arch:CPU架构,如:aarch64,i586,i686,x86_64等
$basearch:系统基础平台:i386,x86_64
$contentdir:表示目录,比如:centos-8.centos-7
$YUM0——$YUM8:自定义变量
在初始的yum源中,repo配置中的地址大多数都是来自国外的站点,这就会让我们在安装的时候,等待的时间会很长,所以我们可以将配置文件中的网络路径(baseurl)设置为国内的一些站点。
国内站点
#阿里云
https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
#华为云
https://mirrors.huaweicloud.com/
#清华大学
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
#网易云yum源
http://mirrors.163.com/.help/centos.html
其中的$releasever字段代表着使用系统的版本号。
现在网络连接的问题解决了,但是依然可能会存在网络波动的问题,而且若是在内网环境中使用,那么这些yum仓库便不可使用,所以可以建立一个私有的仓库来提供稳定的传输环境。
yum的实现
先在yum服务器上创建yum repository(仓库),在仓库中事先把原本我要向网络请求的程序包,还有包相关的元数据(放在特定的repodata下)下载下来。当yum客户端利用yum工具进行安装包时,会自动下载repodata中的元数据,查询元数据是否存在相关的包依赖关系,然后自动从仓库中找到相关包下载并安装。
yum服务器仓库可以多种形式存在:
- file://本地路径
- http://
- https://
- ftp://
yum的仓库源常用的有三个
base源:基础的源
epel源:为“红帽系”的操作系统提供额外的软件包
extra源:base的扩充源
好了,现在来创建一个属于自己的yun仓库吧。
实现步骤
事先准备,首先需要两台机器,一台作为服务器,一台作为客户端,并且服务器上需要配置一个http服务器作为客户端的网络源。
1.安装http服务器,安装方式这里选择编译安装。首先安装好http相关的依赖程序。
[root@centos7 yum.repos.d]# yum install -y gcc make
[root@centos7 ~]# tar jxvf httpd-2.4.25.tar.bz2 -C /usr/local/
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
出错了,原来是因为没有bizp2的解压工具。安装即可
[root@centos7 ~]# yum install -y bzip2
[root@centos7 ~]# tar -jxvf httpd-2.4.25.tar.bz2 -C /usr/local/
[root@centos7 ~]# ll /usr/local/
drwxr-xr-x 11 501 games 4096 Dec 17 2016 httpd-2.4.25
2.进入解压目录进行编译安装
[root@centos7 httpd-2.4.25]# cd /usr/local/httpd-2.4.25/
[root@centos7 httpd-2.4.25]# ./configure 这里使用默认选项即可,默认安装路径是/usr/local下
configure: summary of build options:
Server Version: 2.4.25
Install prefix: /usr/local/apache2
C compiler: gcc -std=gnu99
CFLAGS: -pthread
LDFLAGS:
LIBS:
CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
C preprocessor: gcc -E
[root@centos7 httpd-2.4.25]# make&&make install
Installing man pages and online manual
mkdir /usr/local/apache2/man
mkdir /usr/local/apache2/man/man1
mkdir /usr/local/apache2/man/man8
mkdir /usr/local/apache2/manual
make[1]: Leaving directory `/usr/local/httpd-2.4.25
3.安装完成后看一下是否能够访问
[root@centos7 bin]# /usr/local/apache2/bin/apachectl start
[root@centos7 bin]# ss -ntal
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 10 127.0.0.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:953 *:*
LISTEN 0 128 [::]:80
80端口已启用。
[root@centos7 bin]# curl localhost
<html><body><h1>It works!</h1></body></html>
能够正确访问本地网址,证明已经完成安装并正常启动了。
4.现在网络源的配置服务器已经完成,下面来完成服务器的元数据和软件包下载。
首先需要在repo文件配置好相关源的路径,这里以阿里云的extras源为例
[root@centos7 yum.repos.d]# cat base.repo
[extras]
name=extras
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
enabled=1
gpgcheck=0
配置完成后使用yum clean all清除缓存
在使用yum makecache 生成缓存
############################################
然后使用命令 reposync --repoid=REPOID --download-metadata -p /path 下载元数据和软件到指定目录下
注意,在CentOS7中使用--download-metadata不会下载repodata目录,需要使用createrepo 命令才可以
[root@centos7 7]# reposync --repoid=extras --download-metadata -p ./
下载软件包
[root@centos7 7]# createrepo -po /usr/local/apache2/htdocs/Centos/7/extras/ /usr/local/apache2/htdocs/Centos/7/extras/
然后将repodata文件生成在软件下载目录下。
[root@centos7 ~]# ll /usr/local/apache2/htdocs/Centos/7/extras/
total 36
drwxr-xr-x 2 root root 28672 Jan 7 03:18 Packages
drwxr-xr-x 2 root root 4096 Jan 7 03:30 repodata
craterepo 命令用法
-u --baseurl <url>
指定Base URL的地址
-o --outputdir <url>
指定元数据的输出位置
-x --excludes <packages>
指定在形成元数据时需要排除的包
-i --pkglist <filename>
指定一个文件,该文件内的包信息将被包含在即将生成的元数据中,格式为每个包信息独占一行,不含通配符、正则,以及范围表达式。
-n --includepkg
通过命令行指定要纳入本地库中的包信息,需要提供URL或本地路径。
-q --quiet
安静模式执行操作,不输出任何信息。
-g --groupfile <groupfile>
指定本地软件仓库的组划分,范例如下:
createrepo -g comps.xml /path/to/rpms
注意:组文件需要和rpm包放置于同一路径下。
-v --verbose
输出详细信息。
-c --cachedir <path>
指定一个目录,用作存放软件仓库中软件包的校验和信息。
当createrepo在未发生明显改变的相同仓库文件上持续多次运行时,指定cachedir会明显提高其性能。
--update
如果元数据已经存在,且软件仓库中只有部分软件发生了改变或增减,
则可用update参数直接对原有元数据进行升级,效率比重新分析rpm包依赖并生成新的元数据要高很多。
-p --pretty
以整洁的格式输出xml文件。
-d --database
该选项指定使用SQLite来存储生成的元数据,默认项。
好了,现在服务器已经就绪,准备在客户端上配置repo文件
5.客户端配置
[root@192 ~]# cat /etc/yum.repos.d/extras.repo
[extras]
name=extras
baseurl=http://192.168.37.130/Centos/$releasever/extras/ #指向服务器的地址
enabled=1
gpgcheck=0
[root@192 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
extras/7 extras 448
repolist: 448
这样就实现了网络源的配置,最后在配置一下本地源。
#本地源配置
[root@192 ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@192 ~]# vim /etc/yum.repos.d/base.repo
[root@192 ~]# cat /etc/yum.repos.d/base.repo
[base]
name=base
baseurl=file:///mnt/
enabled=1
gpgcheck=0
[root@192 ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
base | 3.6 kB 00:00:00
Not using downloaded base/repomd.xml because it is older than what we have:
Current : Fri Oct 30 04:03:00 2020
Downloaded: Wed Apr 22 08:19:29 2020
repo id repo name status
base base 10,072
extras/7 extras 448
repolist: 10,520
sed编辑器
sed是一个强大的编辑器,不仅可以实现grep的功能,还可以在它的基础上对文本进行修改,删除,替换,选取特定行等功能
sed的工作原理
sed是从文件或者管道中读取一行,处理一行,然后再输出一行,重复至结尾或者满足特定条件结束。在处理行时,会把当前的行存储在临时缓冲区域,称为模式空间。
sed的用法
格式 sed [option]... 'script' inputfile...
[option]
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
-r, -E 使用扩展正则表达式
-i.bak 备份文件并原处编辑
script格式
1. 不给地址:对全文进行处理
2. 单地址:
n:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
3. 地址范围:
n,m 从n行到第m行,3,6 从第3行到第6行
n,+m 从n行到+m行,3,+4 表示从3行到第7行
/pat1/,/pat2/
n,/pat/
4. 步进:~
1~2 奇数行
2~2 偶数行
5.命令
a:在当前行的下一行新增一行
c:c后面可以接字符,字符会替代n,m之间行
d:删除行
i:会在当前行的上一行新增一行
p:打印,通常和sed -n 一起使用
s:替换,可以直接进行替换工作,可以跟上正则表达式。
w:保存模式匹配的行到指定文本。
r:读取指定的文件的文本到匹配到的行后
=:为模式空间的行打印行号
!:对模式空间的匹配行做取反处理
g:全局替换
I,i:忽略大小写。
利用sed 取出ifconfig命令中本机的IPv4地址
[root@centos7 /]# ifconfig ens33| sed -rn '2s/^.*inet (.*) net.*$/\1/p'
192.168.37.130
[root@centos7 ~]# ifconfig ens33 | sed -rn '2s/[^0-9]+([0-9.]+).*/\1/p'
192.168.37.130
删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[root@centos7 ~]# sed -rn '/^#[[:blank:]]+/s@^#[[:blank:]]+(.*)@\1@p' /etc/fstab
处理/etc/fstab路径,使用sed命令取出其目录名和基名
分析:目录名是/etc,基名是fstab
/etc/fatab 可以以/为分割点,目录名前面存在/号,基名前面不存在/号
以此分成两组,组之间用/隔开 : (.*)/([^/]+)/?
[root@centos7 ~]# echo "/etc/fstab" | sed -rn 's@(.*)/([^/]+)/?@\1@p'
/etc
[root@centos7 ~]# echo "/etc/fstab/" | sed -rn 's@(.*)/([^/]+)/?@\2@p'
fstab
[root@centos7 ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33/ | sed -rn 's@(.*)/([^/]+)/?@\1@p'
/etc/sysconfig/network-scripts
[root@centos7 ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33/ | sed -rn 's@(.*)/([^/]+)/?@\2@p'
ifcfg-ens33