在客户开发中, 经常遇到不能连接外网的情况, 然后各种资料必须通过光盘, 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的占用
123[root@localhost cdrom]# cd /home/centosiso/[root@localhost centosiso]# du -sh .8.2G .
进入目录 /etc/yum.repos.d/
1cd /etc/yum.repos.d/
默认官方安装的镜像有这些, 可能更多, 可能更少, 都没关系
1234[root@localhost yum.repos.d]# lsCentOS-Base.repo CentOS-Media.repo CentOS-fasttrack.repoCentOS-CR.repo CentOS-Sources.repoCentOS-Debuginfo.repo CentOS-Vault.repo
删除或备份这些资源, 因为内网环境下, 这些库也用不到
12cp -rf /etc/yum.repos.d /etc/yum.repos.d.backuprm -rf /etc/yum.repos.d/* # 我这里是做备份加删除了
在yum.repos.d中, 创建一个文件, 名字随便, 后缀以repo即可, 这里创建的是CentOS-Local.repo, 内容如下所示
123456[c7-media]name=CentOS-$releasever - Mediabaseurl=file:///home/centosisogpgcheck=1enabled=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
上面的baseurl填写本地的路径, 然后其他地方照抄即可, 其实也可以参考原来被删除前的CentOS-Media.repo这个文件, 配置与这个文件基本一致的. 也附上 CentOS-Media.repo的内容
123456789101112131415161718192021# 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 - Mediabaseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/gpgcheck=1enabled=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
这里已经完成了, 运行下 yum makecache, 会提示如下的输出, 这就好了, 剩下就是可以使用yum进行安装任何包了, CentOS-Everything里面包含了大部分常见的依赖包, 只要不要这种很偏的都是包含的.
12345678910[root@localhost yum.repos.d]# yum makecacheFailed to set locale, defaulting to CLoaded plugins: fastestmirrorc7-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 hostfileMetadata Cache Created
使用Http构建CentOS远程yum环境上面是构建本地环境, 这里记录下如果使用http来使用有yum本地环境的机器, 进行依赖的安装, 当然, 这2台服务器之间的网络是通的.
使用上面配置的133服务器作为yum源
假设这台Linux什么都没有, 没有tomcat, 没有nginx, 反正就是一个很新的环境, 但是还有一个 python的SimpleHTTPServer服务, 这个组件默认都会安装, 可以用这个来测试端口是否通了啥的非常合适. 开启后, 会在本地打开一个监听端口, 访问这个端口后python可以提供基本的文件服务.
1python -m SimpleHTTPServer 9000
当然, 如果服务器环境允许, 可以在有yum本地环境的服务器上安装nginx, nginx的所有基本依赖, Everything都提供了的(下面也提供了nginx的安装).
这里先用python来构建临时的远程yum环境, 别忘了CentOS默认开启防火墙的.
1python -m SimpleHTTPServer 9000
很好记的一行命令
12python -m(odule) SimpleHTTPServer, python执行一个模块, 简单的HTTP服务.
如果不输入后面的9000, 就会默认监听8000端口, 开启后浏览器打开如图
可以看到这就是一个文件的列出服务
在新的服务器上, 进入/etc/yum.repos.d, 新建一个repo, 随便什么名字, 后面是repo即可, 内容只是将baseurl的地址改成一个http
123456[CentOS-Remote-HTTP]name=CentOS-$releasever - Mediabaseurl=http://10.211.55.133:9000gpgcheck=1enabled=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
执行 yum makecache 可以看到可以使用了, 且此时yum源服务器会打印如图的信息
整个过程其实很简单的. 如果用完的了, 就按下Ctrl-Z取消就行了, 下次用的时候再 python -m SimpleHTTPServer 9000 就行了
警告: 注意依赖的版本的问题, everything很多情况下遇到的问题是服务器安装了更高版本的依赖, 然后everything提供的依赖比较低, 此时就要慎重操作.
附Nginx编译安装, 并代理本地目录提供文件服务SimpleHTTPServer毕竟是临时方案, 如果希望一直可用, 可以使用nginx来实现.
从官网下载nginx 下载地址.
上传到服务器, 假设目录是 /root
解压并进入目录
123cd /roottar -zxvf nginx-1.16.0.tar.gzcd cd nginx-1.16.0
安装依赖并执行编译命令
1yum install pcre-devel zlib-devel openssl-devel gcc make -y
1234567891011121314151617./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
创建nginx组和用户
12[root@localhost nginx-1.16.0]# groupadd nginx[root@localhost nginx-1.16.0]# useradd -g nginx -s /sbin/nologin nginx
启动nginx, 没有任何提示, 打开浏览器访问, 如图所示
1/usr/local/nginx/sbin/nginx
编辑 vi /usr/local/nginx/conf/nginx.conf, 并在location / {上面(或下面)添加如下一行
123location /centosyum { alias /home/centosiso; }
整个配置如下
执行nginx配置重载
1/usr/local/nginx/sbin/nginx -s reload
因为监听的是80端口, 所以这个访问地址就是 http://10.211.55.133/centosyum 这个地址, 如上面的在/etc/yum.repos.d创建新的文本, 后缀名repo, 然后内容如下
123456[CentOS-Remote-HTTP]name=CentOS-$releasever - Mediabaseurl=http://10.211.55.133/centosyum #就是这里的地址换了下而已gpgcheck=1enabled=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
此时浏览器访问 http://10.211.55.133/centosyum 是会提示403 Forbidden的, 如果想要像SimpleHTTPServer一样能看文件, 则刚刚的location /centosyum配置增加如下:
1234location /centosyum { alias /home/centosiso; autoindex on; # 增加了这么一行}
效果
剩下的按照上面使用Http构建CentOS远程yum环境 - 第3步继续操作即可.