Linux之自建yum仓库,sed文本处理器

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容