一、为什么需要搭建本地或者局域网源?
不管是Linux开发还是运维人员,经常遇到"command not found"或者"xxx.so not found"之类的错误,对于这两种错误,要么是程序或者so存在,只是没配好系统变量(PATH),要么就是不存在。对于不存在的情况,我们可以选择通过源码编译安装或者通过rpm安装,亦或者通过yum install安装。个人喜欢yum进行安装,因为它能自动解决依赖的问题,默认情况下,它会从外网仓库搜索依赖包。可是在实际开发中,常常处在内网环境,因此下面就简单描述下如何在内网搭建本地yum源和局域网源来快速安装包。

二、本地源和局域网源
从名称上就很好理解,本地源就是把所有的rpm包和索引信息都存放在本地环境,只需修改配置,让yum通过本地文件系统来搜索安装包和依赖包。局域网源同样也是先把所有的rpm包和索引信息存放在某台服务器上,不同的是,它通过http、ftp等网络协议让局域网内的其他服务器可以访问它的rpm包和索引信息。从这段描述我们大概就可以提取出几个关键词:rpm包索引信息本地文件系统网络协议yum配置(因为要修改默认的搜索方式)。下面我们将着重介绍本地源的搭建,对于局域网源,只需要将其信息通过网络协议暴露出去即可。

三、搭建本地源
1、搜集需要的rpm包
1)去网上下载所需的rpm包及其依赖包,比如都放到服务器的/iso/yumRepo目录下面(其他目录也行)
2)使用系统iso镜像文件
通过挂载命令mount -o loop xxx.iso /iso/yumRepo将其解压到/iso/yumRepo目录下

2、创建索引
对于使用iso镜像的方式,其自带repodata目录,无需再创建索引信息,而对于自搜集的方式,需要在/iso/yumRepo目录下执行,createrepo . 命令,生成repodata目录。

3、配置yum,使其不再默认到外网搜索而是在本地搜索,首先先备份原有配置(一定要养成备份的好习惯,因为不是每次都可以成功的),cp -R /etc/yum.repos.d /etc/yum.repos.d.bak, 然后修改/etc/yum.repos.d/目录下的xxx.repo文件,修改baseurl为本地的rpm目录,例如上面的/iso/yumRepo路径。然后执行yum clean all, yum makecache, yum update操作即可。

此时我们就可以在本地不连外网的情况下来通过yum install packagename -y 来安装缺少的包了(-y 默认yes,跳过询问)。当然前提是你收集的rpm包含你所需要安装的。

四、搭建局域网源
其实局域网源和本地源类似,唯一区别是在上面的2和3之间加一个步骤,什么步骤呢?其实就是把本地的rpm和索引信息通过网络协议暴露到局域网环境中,让其他的服务器可以访问即可,可以使用http或者ftp等协议,这里以http为例,通过tomcat快速配置一个文件下载服务器。
A、修改conf/web.xml将listings改为true。

<init-param>
  <param-name>listings</param-name>
  <param-value>true</param-value>
</init-param>

B、修改conf/server.xml,配置路径映射,增加Context,

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Valve className="org.apache.catalina.valves.AccessLogValve" 
        directory="logs" prefix="localhost_access_log." suffix=".txt"
        pattern="%h %l %u %t "%r" %s %b" />
    <Context path="/rpm" docBase="/iso/yumRepo"></Context>
</Host>

其中外部通过http://ip:tomcat端口/rpm即可访问到**/iso/yumRepo目录。如果无法访问,请检查tomcat是否重启、是否正常运行、端口是否正确、防火墙策略**等。

接下来只需在需要使用局域网源的外部服务器上配置yum信息即可,只需将baseurl修改为http://ip:tomcat端口/rpm,然后执行yum clean all, yum makecache, yum update操作即可。

(注意:最好把repo配置文件里面的gpgcheck设置为0,不然可能会因为gpgkey校验失败而报错

附1:rpm包以及依赖查询网址
https://pkgs.org/download/lz4(x86-64) (需要先填验证码,submit后再查找)

附2:其实像Python的pip源,dokcer镜像仓库等都有相似的配置思路