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

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

(English version translate by GPT-3.5)

环境

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

搭建CentOS 7本地yum环境

  1. 首先, 将Everything的光盘完整的复制到CentOS的某个目录中, 这个来源可以通过光盘(需要2张DVD), U盘拷上去的, 并且将内容复制到自己喜欢的目录中, 这里使用/home/centosiso
  2. 建立一个目录, 以及一个挂载目录 mkdir /home/centosiso && mkdir /mnt/cdrom
  3. 挂载cdrom mount /dev/cdrom /mnt/cdrom/
  4. 复制光盘中所有的内容 cp -rf /mnt/cdrom/* /home/centosiso
  5. 我们使用 du -sh /home/centosiso 可以看到我这次用的这个镜像有8.2G的占用
1
2
3
[root@localhost cdrom]# cd /home/centosiso/
[root@localhost centosiso]# du -sh .
8.2G .
  1. 进入目录 /etc/yum.repos.d/
1
cd /etc/yum.repos.d/
  1. 默认官方安装的镜像有这些, 可能更多, 可能更少, 都没关系
1
2
3
4
[root@localhost 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
  1. 删除或备份这些资源, 因为内网环境下, 这些库也用不到
1
2
cp -rf /etc/yum.repos.d /etc/yum.repos.d.backup
rm -rf /etc/yum.repos.d/* # 我这里是做备份加删除了
  1. 在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
  1. 这里已经完成了, 运行下 yum makecache, 会提示如下的输出, 这就好了, 剩下就是可以使用yum进行安装任何包了, CentOS-Everything里面包含了大部分常见的依赖包, 只要不要这种很偏的都是包含的.
1
2
3
4
5
6
7
8
9
10
[root@localhost 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

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

  1. 在新的服务器上, 进入/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
  1. 执行 yum makecache 可以看到可以使用了, 且此时yum源服务器会打印如图的信息

img

  1. 整个过程其实很简单的. 如果用完的了, 就按下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
  1. 安装依赖并执行编译命令
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
  1. 创建nginx组和用户
1
2
[root@localhost nginx-1.16.0]# groupadd nginx
[root@localhost nginx-1.16.0]# useradd -g nginx -s /sbin/nologin nginx
  1. 启动nginx, 没有任何提示, 打开浏览器访问, 如图所示
1
/usr/local/nginx/sbin/nginx

img

  1. 编辑 vi /usr/local/nginx/conf/nginx.conf, 并在location / {上面(或下面)添加如下一行
1
2
3
location /centosyum {
alias /home/centosiso;
}

整个配置如下
img

  1. 执行nginx配置重载
1
/usr/local/nginx/sbin/nginx -s reload
  1. 因为监听的是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
  1. 此时浏览器访问 http://10.211.55.133/centosyum 是会提示403 Forbidden的, 如果想要像SimpleHTTPServer一样能看文件, 则刚刚的location /centosyum配置增加如下:

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

    效果

    img

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