搭建本地Yum源, 以及远程yum的访问
在客户开发中, 经常遇到不能连接外网的情况, 然后各种资料必须通过光盘, U盘来传输, 记录一次本都yum搭建, 只是自己做个备份, 但是这么做后, 包的版本关系就出来了, 毕竟即使是everything也不会提供不同版本的依赖的.
(English version translate by GPT-3.5)
环境
- 使用CentOS 7.4 Everything系统.
- 基于MacOS Parallels虚拟机的CentOS虚拟系统做演示
搭建CentOS 7本地yum环境
- 首先, 将Everything的光盘完整的复制到CentOS的某个目录中, 这个来源可以通过光盘(需要2张DVD), U盘拷上去的, 并且将内容复制到自己喜欢的目录中, 这里使用
/home/centosiso
- 建立一个目录, 以及一个挂载目录
mkdir /home/centosiso && mkdir /mnt/cdrom
- 挂载cdrom
mount /dev/cdrom /mnt/cdrom/
- 复制光盘中所有的内容
cp -rf /mnt/cdrom/* /home/centosiso
- 我们使用
du -sh /home/centosiso
可以看到我这次用的这个镜像有8.2G的占用
1 | [root@localhost cdrom]# cd /home/centosiso/ |
- 进入目录
/etc/yum.repos.d/
1 | cd /etc/yum.repos.d/ |
- 默认官方安装的镜像有这些, 可能更多, 可能更少, 都没关系
1 | [root@localhost yum.repos.d]# ls |
- 删除或备份这些资源, 因为内网环境下, 这些库也用不到
1 | cp -rf /etc/yum.repos.d /etc/yum.repos.d.backup |
- 在yum.repos.d中, 创建一个文件, 名字随便, 后缀以repo即可, 这里创建的是
CentOS-Local.repo
, 内容如下所示
1 | [c7-media] |
上面的baseurl填写本地的路径, 然后其他地方照抄即可, 其实也可以参考原来被删除前的CentOS-Media.repo
这个文件, 配置与这个文件基本一致的. 也附上 CentOS-Media.repo
的内容
1 | # CentOS-Media.repo |
- 这里已经完成了, 运行下
yum makecache
, 会提示如下的输出, 这就好了, 剩下就是可以使用yum进行安装任何包了, CentOS-Everything里面包含了大部分常见的依赖包, 只要不要这种很偏的都是包含的.
1 | [root@localhost yum.repos.d]# yum makecache |
使用Http构建CentOS远程yum环境
上面是构建本地环境, 这里记录下如果使用http来使用有yum本地环境的机器, 进行依赖的安装, 当然, 这2台服务器之间的网络是通的
.
使用上面配置的133服务器作为yum源
假设这台Linux什么都没有, 没有tomcat, 没有nginx, 反正就是一个很新的环境, 但是还有一个 python的SimpleHTTPServer服务, 这个组件默认都会安装, 可以用这个来测试端口是否通了啥的非常合适. 开启后, 会在本地打开一个监听端口, 访问这个端口后python可以提供基本的文件服务.
1
python -m SimpleHTTPServer 9000
当然, 如果服务器环境允许, 可以在有yum本地环境的服务器上安装nginx, nginx的所有基本依赖, Everything都提供了的(下面也提供了nginx的安装).
这里先用python来构建临时的远程yum环境, 别忘了CentOS默认开启防火墙的.
1 | python -m SimpleHTTPServer 9000 |
很好记的一行命令
1 | python -m(odule) SimpleHTTPServer, |
如果不输入后面的9000, 就会默认监听8000端口, 开启后浏览器打开如图
可以看到这就是一个文件的列出服务
- 在新的服务器上, 进入/etc/yum.repos.d, 新建一个repo, 随便什么名字, 后面是repo即可, 内容只是将baseurl的地址改成一个http
1 | [CentOS-Remote-HTTP] |
- 执行
yum makecache
可以看到可以使用了, 且此时yum源服务器会打印如图的信息
- 整个过程其实很简单的. 如果用完的了, 就按下Ctrl-Z取消就行了, 下次用的时候再
python -m SimpleHTTPServer 9000
就行了
警告: 注意依赖的版本的问题, everything很多情况下遇到的问题是服务器安装了更高版本的依赖, 然后everything提供的依赖比较低, 此时就要慎重操作.
附Nginx编译安装, 并代理本地目录提供文件服务
SimpleHTTPServer毕竟是临时方案, 如果希望一直可用, 可以使用nginx来实现.
从官网下载nginx 下载地址.
上传到服务器, 假设目录是
/root
解压并进入目录
1 | cd /root |
- 安装依赖并执行编译命令
1 | yum install pcre-devel zlib-devel openssl-devel gcc make -y |
1 | ./configure \ |
- 创建nginx组和用户
1 | [root@localhost nginx-1.16.0]# groupadd nginx |
- 启动nginx, 没有任何提示, 打开浏览器访问, 如图所示
1 | /usr/local/nginx/sbin/nginx |
- 编辑
vi /usr/local/nginx/conf/nginx.conf
, 并在location / {
上面(或下面)添加如下一行
1 | location /centosyum { |
整个配置如下
- 执行nginx配置重载
1 | /usr/local/nginx/sbin/nginx -s reload |
- 因为监听的是80端口, 所以这个访问地址就是 http://10.211.55.133/centosyum 这个地址, 如上面的在/etc/yum.repos.d创建新的文本, 后缀名repo, 然后内容如下
1 | [CentOS-Remote-HTTP] |
此时浏览器访问
http://10.211.55.133/centosyum
是会提示403 Forbidden的, 如果想要像SimpleHTTPServer一样能看文件, 则刚刚的location /centosyum
配置增加如下:1
2
3
4location /centosyum {
alias /home/centosiso;
autoindex on; # 增加了这么一行
}效果
剩下的按照上面
使用Http构建CentOS远程yum环境 - 第3步
继续操作即可.