搭建本地Yum源, 以及远程yum的访问

在客户开发中, 经常遇到不能连接外网的情况, 然后各种资料必须通过光盘, U盘来传输, 记录一次本都yum搭建, 只是自己做个备份, 但是这么做后, 包的版本关系就出来了, 毕竟即使是everything也不会提供不同版本的依赖的.

环境

  1. 使用CentOS 7.4 Everything系统.
  2. 基于MacOS Parallels虚拟机的CentOS虚拟系统做演示

搭建CentOS 7本地yum环境

  1. 首先, 将Everything的光盘完整的复制到CentOS的某个目录中, 这个来源可以通过光盘(需要2张DVD), U盘拷上去的, 并且将内容复制到自己喜欢的目录中, 这里使用/home/centosiso
    1. 建立一个目录, 以及一个挂载目录 mkdir /home/centosiso && mkdir /mnt/cdrom
    2. 挂载cdrom mount /dev/cdrom /mnt/cdrom/
    3. 复制光盘中所有的内容 cp -rf /mnt/cdrom/* /home/centosiso
  2. 我们使用 du -sh /home/centosiso 可以看到我这次用的这个镜像有8.2G的占用

    1
    2
    3
    [[email protected] cdrom]# cd /home/centosiso/
    [[email protected] centosiso]# du -sh .
    8.2G .
  3. 进入目录 /etc/yum.repos.d/

    1
    cd /etc/yum.repos.d/
  4. 默认官方安装的镜像有这些, 可能更多, 可能更少, 都没关系

    1
    2
    3
    4
    [[email protected] yum.repos.d]# ls
    CentOS-Base.repo CentOS-Media.repo CentOS-fasttrack.repo
    CentOS-CR.repo CentOS-Sources.repo
    CentOS-Debuginfo.repo CentOS-Vault.repo
  5. 删除或备份这些资源, 因为内网环境下, 这些库也用不到

    1
    2
    cp -rf /etc/yum.repos.d /etc/yum.repos.d.backup
    rm -rf /etc/yum.repos.d/* # 我这里是做备份加删除了
  6. 在yum.repos.d中, 创建一个文件, 名字随便, 后缀以repo即可, 这里创建的是CentOS-Local.repo, 内容如下所示

    1
    2
    3
    4
    5
    6
    [c7-media]
    name=CentOS-$releasever - Media
    baseurl=file:///home/centosiso
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    上面的baseurl填写本地的路径, 然后其他地方照抄即可, 其实也可以参考原来被删除前的CentOS-Media.repo这个文件, 配置与这个文件基本一致的. 也附上 CentOS-Media.repo的内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # CentOS-Media.repo
    #
    # This repo can be used with mounted DVD media, verify the mount point for
    # CentOS-7. You can use this repo and yum to install items directly off the
    # DVD ISO that we release.
    #
    # To use this repo, put in your DVD and use it with the other repos too:
    # yum --enablerepo=c7-media [command]
    #
    # or for ONLY the media repo, do this:
    #
    # yum --disablerepo=\* --enablerepo=c7-media [command]

    [c7-media]
    name=CentOS-$releasever - Media
    baseurl=file:///media/CentOS/
    file:///media/cdrom/
    file:///media/cdrecorder/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  7. 这里已经完成了, 运行下 yum makecache, 会提示如下的输出, 这就好了, 剩下就是可以使用yum进行安装任何包了, CentOS-Everything里面包含了大部分常见的依赖包, 只要不要这种很偏的都是包含的.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [[email protected] yum.repos.d]# yum makecache
    Failed to set locale, defaulting to C
    Loaded plugins: fastestmirror
    c7-media | 3.6 kB 00:00
    (1/4): c7-media/group_gz | 156 kB 00:00
    (2/4): c7-media/primary_db | 5.7 MB 00:00
    (3/4): c7-media/filelists_db | 6.7 MB 00:00
    (4/4): c7-media/other_db | 2.5 MB 00:00
    Loading mirror speeds from cached hostfile
    Metadata Cache Created

使用Http构建CentOS远程yum环境

上面是构建本地环境, 这里记录下如果使用http来使用有yum本地环境的机器, 进行依赖的安装, 当然, 这2台服务器之间的网络是通的.

使用上面配置的133服务器作为yum源

  1. 假设这台Linux什么都没有, 没有tomcat, 没有nginx, 反正就是一个很新的环境, 但是还有一个 python的SimpleHTTPServer服务, 这个组件默认都会安装, 可以用这个来测试端口是否通了啥的非常合适. 开启后, 会在本地打开一个监听端口, 访问这个端口后python可以提供基本的文件服务.

    1
    python -m SimpleHTTPServer 9000

    当然, 如果服务器环境允许, 可以在有yum本地环境的服务器上安装nginx, nginx的所有基本依赖, Everything都提供了的(下面也提供了nginx的安装).

  2. 这里先用python来构建临时的远程yum环境, 别忘了CentOS默认开启防火墙的.

    1
    python -m SimpleHTTPServer 9000

    很好记的一行命令

    1
    2
    python -m(odule) SimpleHTTPServer, 
    python执行一个模块, 简单的HTTP服务.

    如果不输入后面的9000, 就会默认监听8000端口, 开启后浏览器打开如图

    img

    可以看到这就是一个文件的列出服务

  3. 在新的服务器上, 进入/etc/yum.repos.d, 新建一个repo, 随便什么名字, 后面是repo即可, 内容只是将baseurl的地址改成一个http

    1
    2
    3
    4
    5
    6
    [CentOS-Remote-HTTP]
    name=CentOS-$releasever - Media
    baseurl=http://10.211.55.133:9000
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  4. 执行 yum makecache 可以看到可以使用了, 且此时yum源服务器会打印如图的信息

    img

  5. 整个过程其实很简单的. 如果用完的了, 就按下Ctrl-Z取消就行了, 下次用的时候再 python -m SimpleHTTPServer 9000 就行了

警告: 注意依赖的版本的问题, everything很多情况下遇到的问题是服务器安装了更高版本的依赖, 然后everything提供的依赖比较低, 此时就要慎重操作.

附Nginx编译安装, 并代理本地目录提供文件服务

SimpleHTTPServer毕竟是临时方案, 如果希望一直可用, 可以使用nginx来实现.

  1. 从官网下载nginx 下载地址.

  2. 上传到服务器, 假设目录是 /root

  3. 解压并进入目录

    1
    2
    3
    cd /root
    tar -zxvf nginx-1.16.0.tar.gz
    cd cd nginx-1.16.0
  4. 安装依赖并执行编译命令

    1
    yum  install pcre-devel zlib-devel openssl-devel gcc make -y
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_flv_module \
    --with-http_gzip_static_module \
    --with-http_stub_status_module \
    --with-stream

    等ready后, 执行

    make

    等make后, 执行

    make install
  5. 创建nginx组和用户

    1
    2
    [[email protected] nginx-1.16.0]# groupadd nginx
    [[email protected] nginx-1.16.0]# useradd -g nginx -s /sbin/nologin nginx
  6. 启动nginx, 没有任何提示, 打开浏览器访问, 如图所示

    1
    /usr/local/nginx/sbin/nginx

    img

  7. 编辑 vi /usr/local/nginx/conf/nginx.conf, 并在location / {上面(或下面)添加如下一行

    1
    2
    3
    location /centosyum {
    alias /home/centosiso;
    }

    整个配置如下
    img

  8. 执行nginx配置重载

    1
    /usr/local/nginx/sbin/nginx -s reload
  9. 因为监听的是80端口, 所以这个访问地址就是 http://10.211.55.133/centosyum 这个地址, 如上面的在/etc/yum.repos.d创建新的文本, 后缀名repo, 然后内容如下

    1
    2
    3
    4
    5
    6
    [CentOS-Remote-HTTP]
    name=CentOS-$releasever - Media
    baseurl=http://10.211.55.133/centosyum #就是这里的地址换了下而已
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  10. 此时浏览器访问 http://10.211.55.133/centosyum 是会提示403 Forbidden的, 如果想要像SimpleHTTPServer一样能看文件, 则刚刚的location /centosyum配置增加如下:

    1
    2
    3
    4
    location /centosyum {
    alias /home/centosiso;
    autoindex on; # 增加了这么一行
    }

    效果

    img

  11. 剩下的按照上面使用Http构建CentOS远程yum环境 - 第3步继续操作即可.