rpm包安装的时候会有很多软件会出现因为其他依赖包没有,而导致安装失败的情况。一般可以连接外网的时候我们直接使用 yum 进行安装,可以为我们解决依赖包关系,但是很多工作环境下是没有外网的,内网情况下就需要我们自行准备软件包进行安装,而安装包较多的情况下可能出现各种情况,甚至仅仅因为看着乱就干不动的事儿。目前个人的方法还是构建本地的 yum 仓库,将自己准备的软件包放到仓库目录,然后构建,这样可以像平常一样 yum install 就可以直接进行安装了。

首先是准备各种rpm软件包,我的方法是用 yum-utils 的 yumdownloader 命令进行本地下载,该命令可以在不安装的情况下,仅下载安装包及其需要的其他依赖包,比较好用;

使用语法:yumdownloader --resolve --destdir=保存路径 软件包名称

还可以修改 /etc/yum.conf 配置文件,将第三行的缓存功能打开:

keepcache=1 (默认是0,关闭状态,1是开启,可以在安装结束后保留其使用的rpm包)

下方操作均在CentOS7上面进行,且确保是一个可以连接外网的网络环境,因为这是下载,顺便可以下一些其他服务的rpm包,比如这里我下载了httpd的安装包,当然还有一些其他的:

  ##首先安装必要的下载软件包 yum-utils
[root@graylog ~]# yum install -y yum-utils   ##下载安装 createrepo 所需的安装包及依赖包
[root@graylog ~]# yumdownloader --resolve --destdir=/opt/createrepo/ createrepo

之后将软件包转到需要安装的机器上,当前我是在同一虚拟机上做的,所以需要断网,修改 /etc/sysconfig/network-scripts/ 下的网卡文件,注释网关和DNS的行 #GATEWAY、#DNS,之后 systemctl restart network 重启网卡

  ##查看下载的rpm包(此为当前版本信息,根据实际情况可能有变化)
  ##在依赖包关系上,是4个包,有时候也会是3个软件包的,以防万一,第4个包 libxml2-python-2.9.1-6.el7.5.x86_64.rpm 也给下载了
[root@graylog ~]# ls /opt/createrepo/
createrepo-0.9.9-28.el7.noarch.rpm libxml2-python-2.9.1-6.el7.5.x86_64.rpm
deltarpm-3.6-3.el7.x86_64.rpm python-deltarpm-3.6-3.el7.x86_64.rpm   ##安装 createrepo
  ##一些情况下会提示 libxml2-python 与一个类似的包相冲突(当时上班急于解决问题,忘了是什么,好像也是一个libxml的包,若发生可以使用 yum erase 该软件包 卸载之后再安装)
[root@graylog ~]# rpm -ivh /opt/createrepo/*
Preparing... ################################# [100%]
Updating / installing...
1:deltarpm-3.6-3.el7 ################################# [ 25%]
2:python-deltarpm-3.6-3.el7 ################################# [ 50%]
3:libxml2-python-2.9.1-6.el7.5 ################################# [ 75%]
4:createrepo-0.9.9-28.el7 ################################# [100%]   ##命令已经有了
[root@graylog ~]# which createrepo
/usr/bin/createrepo

接下来将我们准备构建 yum 仓库的包放入我们指定的一个目录下,当前我指定的是 /opt/rpm/ :

  ##当前准备了36个rpm包,放到了指定目录下
[root@graylog ~]# ls /opt/rpm/ | wc -l
36   ##修改 /etc/yum.repos.d 下的配置文件
  ##创建一个保留原来配置文件的目录,像这种默认的原有配置文件,其他软件的也一样,做个备份,千万别删了,再需要的时候麻烦死了
[root@graylog ~]# cd /etc/yum.repos.d/
[root@graylog yum.repos.d]# mkdir backup
[root@graylog yum.repos.d]# mv CentOS-* backup/   ##之后我们需要创建一个自定义的 yum 配置文件,这里名称暂定 local.repo
  ## name 名称自定义
  ## baseurl 设置作为yum仓库的位置,支持 http:// ftp:// file:// 三种,我们是本地目录,用 file://
  ## enabled 设置是否启用配置得到yum仓库,1是启用,0是关闭,这里必须是1
  ## gpgcheck 设置是否进行gpg校验,1是启用,0是不启用,我们用0就行
[root@graylog yum.repos.d]# vi local.repo
[local]
name=local
baseurl=file:///opt/rpm
enabled=1
gpgcheck=0   ##配置文件完成后,用命令将指定目录配置为yum仓库,下面是显示的信息
[root@graylog ~]# createrepo -d /opt/rpm/
Spawning worker 0 with 36 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete   ##之后会在该目录下生成一个 目录,其中是我们构建完yum仓库的信息
[root@graylog ~]# ls /opt/rpm/repodata/
5aac96c5eeec4bcac4711a1477e493b6ba0db8d832815e85c03d6a4f0ee65228-other.xml.gz
76d8434b71546529a5b940ae751bebb378d5d090e5ca7d77d7cf9c09ce7d08fb-filelists.sqlite.bz2
9272d004c79884094a81f66a096acc62099374f5392eabec3e19c1559603a233-primary.xml.gz
9bcfa36ad4df6bb60f7cb7d0eddc5e94e761dab60c839b6500015d07161c393e-primary.sqlite.bz2
c8be56b036a57429f208d31a7907587662bc85a6c0bad2c1387b1f6d0c69ea28-filelists.xml.gz
e40763b7002928663359a73b1c7d090776dd7efc6ecd19fed2b58823d978dbbd-other.sqlite.bz2
repomd.xml   ##之后我们清除一下现在的yum缓存
[root@graylog ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: local
Cleaning up list of fastest mirrors
Other repos take up 349 M of disk space (use --verbose for details) ##然后重新建立缓存
[root@graylog ~]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
local | 2.9 kB 00:00:00
(1/3): local/filelists_db | 16 kB 00:00:00
(2/3): local/other_db | 19 kB 00:00:00
(3/3): local/primary_db | 30 kB 00:00:00
Metadata Cache Created

到目前我们的yum仓库就建立完成了,可以测试一下准备的这些rpm包是否可以正常安装,我这里有httpd服务的包,先试下:

    ##进行httpd服务的安装
[root@graylog ~]# yum install -y httpd ##启动服务,看看是否可以,尝试访问一下,没啥问题
[root@graylog ~]# systemctl start httpd
[root@graylog ~]# systemctl status httpd
[root@graylog ~]# curl 本机IP地址

此时代表我们构建的yum仓库是没有问题的。

接下来是更新,我们有的时候会不仅一次使用到本地的yum仓库来安装软件,要是遇到需要更新的情况,还需要我们重新操作一下;

我们需要的是更新我们构建yum仓库的信息,就是需要我们重新的 createrepo 一次,并刷新缓存;

之前我没有将准备的nginx的包放入目录,在没更新的状态下是找不到该包进行安装的,那么我们来更新一下,并进行安装看看:

    ##尝试安装一下nginx,失败了,找不到
[root@graylog ~]# yum install -y nginx
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Nothing to do ##将额外更新的rpm包放入yum仓库目录下,然后确认下,这时原来36个包变成了44个包,+1是有一个 repodata 目录
[root@graylog ~]# ls /opt/rpm/ | wc -l
45 ##之后重新用 createrepo 执行一遍,发现信息更新了
[root@graylog ~]# createrepo -d /opt/rpm/
Spawning worker 0 with 44 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete ##此时去安装是失败的,我们还需要更新缓存,先进行清除
[root@graylog ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: local
Cleaning up list of fastest mirrors
Other repos take up 349 M of disk space (use --verbose for details) ##然后重新建立缓存
[root@graylog ~]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
local | 2.9 kB 00:00:00
(1/3): local/filelists_db | 17 kB 00:00:00
(2/3): local/other_db | 22 kB 00:00:00
(3/3): local/primary_db | 34 kB 00:00:00
Metadata Cache Created ##这时我们再试一下,安装成功
[root@graylog ~]# yum install -y nginx ##启动服务访问一下,不过按照我的步骤,之前的httpd服务要关闭,否则争用80端口,不能启动
[root@graylog ~]# systemctl stop httpd
[root@graylog ~]# systemctl start nginx
[root@graylog ~]# systemctl status nginx
[root@graylog ~]# curl 本机IP地址

至此我们搭建yum仓库,并在后续更新yum仓库 的操作就已经完成了。

对于工作上很多小的,认为很简单的东西,总是不用,时间长,突然用到的时候,全忘了,适当的作记录还是有必要的。

使用createrepo构建本地yum仓库的更多相关文章

  1. 构建企业 YUM仓库

    构建企业 YUM仓库 本地光盘提供基础软件包Base yum缓存提供update软件包 yum缓存提供常用软件包: nginx, zabbix, docker, saltstack 环境准备 系统 I ...

  2. CentOS7搭建本地YUM仓库,并定期同步阿里云源

    CentOS7同步阿里云镜像rpm包并自建本地yum仓库 系统环境 # cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) # u ...

  3. 本地yum仓库的搭建

    . 1.直接断开网络,模拟生产内网环境 2.将原先的网络yum仓库全部移动到 backup目录下 3.创建本地yum仓库  local_yum.repo vi /etc/yum.repos.d/loc ...

  4. 搭建本地YUM仓库

    YUM介绍 yum(yellow dog updater modified)为多个Linux发行版的软件包管理工具,Redhat RHEL CentOS Fedora YUM主要用于自动安装,升级rp ...

  5. 其他综合-搭建本地yum仓库及自制rpm包

    搭建本地yum仓库及自制rpm包 实验目的 为方便本地 yum 的管理,建本地 yum 仓库,实现局域网内部快速安装常用软件 实验环境 VMware:12版本 系统版本:CentOS Linux re ...

  6. 配置本地 yum 仓库

    配置本地 yum 仓库 # yum 官网 http://yum.baseurl.org/ # yum 手册页 man yum man yum.conf SEE ALSO pkcon (1) yum.c ...

  7. 配置本地yum仓库

        前言 我们知道yum工具是基于rpm的,其一个重要的特性就是可以自动解决依赖问题,但是yum的本质依旧是把后缀名.rpm的包下载到本地,然后按次序安装之.但是每次执行yum install x ...

  8. 微服务架构 - 基于Harbor构建本地镜像仓库

    之前写过<搭建docker本地镜像仓库并提供权限校验及UI界面>文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大.于是抽时间研究了基于Harbor构建本 ...

  9. 关于yum网络版仓库(本地yum仓库的安装配置,如果没网了,做一个局域网内的yum仓库)

    2017-11-13 22:49:48 1:两种方式:   a.每一台机器都配一个本地文件系统上的yum仓库 file:///packege/path/ b.在局域网内部配置一台节点(server-b ...

随机推荐

  1. HDU - 3281 dp

    题意: 给你b个球,m个楼层,你需要找到一个楼层数k,使得从小于k这个楼层上面扔下去球,而球不会碎.求在最糟糕的情况下你最多要尝试多少次 题解: dp[i][j]表示你有b个球,楼层总数为m,你找到那 ...

  2. Codeforces Round #643 (Div. 2) E. Restorer Distance (贪心,三分)

    题意:给你\(n\)个数,每次可以使某个数++,--,或使某个数--另一个++,分别消耗\(a,r,m\).求使所有数相同最少的消耗. 题解:因为答案不是单调的,所以不能二分,但不难发现,答案只有一个 ...

  3. .Net Core 国际化

    创建项目什么的就不说了吧 直接进入正题吧 我这里建的是个webapi 添加资源文件 1.首先我们创建一个Language文件夹,这就是我们在后面Startup类中需要配置的目录名. 2.然后我们在La ...

  4. Python 是什么语言

    Python 是 解释型语言,强类型定义语言,动态类型定义语言 编译型语言 & 解释型语言 编译型语言:代码在执行前,需要编译(成机器语言文件,如 .exe 文件):以后再运行时,直接使用编译 ...

  5. MySQL5.6 与 MySQL5.7 的区别

    目录 编译安装区别 初始化的区别 其他区别 编译安装区别 # 5.7在编译安装的时候多了一个 boost 库 [root@db02 mysql-5.7.20]# yum install -y gcc ...

  6. spring再学习之注解

    1.使用注解配置spring <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi= ...

  7. codeforce 849B

    B. Tell Your World time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  8. C# 类 (12) - Partial

    Partial 前面说了,同一个namespace 里 class 名字是不能重的,除非是在不同的namespace里,下面开始打脸在同一个namespace里,加上partial 关键字,可以写同样 ...

  9. Pymongo 笔记

    Pymongo 1.MongoDB概念 MongoDB是一种非关系型数据库(NoSQL),MongoDB数据存储于内存,内存不足则将热度低数据写回磁盘.存储的数据结构为文档.每个数据库包含若干集合(c ...

  10. canvas绘制五星红旗

    代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...