背景
最近项目需要安装在一台完全无公网的服务器上,所以很多基础软件都要通过安装包的形式在内网传输。
概念解释
- Centos软件源: 从字面意思上来讲,就是一个app store,你可以从里面搜索、安装自己需要的软件.
- RPM包: linux的安装包格式,类似windows的exe,但是单个rpm包仅包含当前的软件,不包含依赖的相关软件,所以如果软件不依赖其他,则可以下载rpm包,然后通过rpm -ive **.rpm进行安装,否则需要吧依赖全部装完之后才能安装这个rpm.
- yum: Centos的安装工具,会自动从app store中检索要安装的软件RPM,并自动分析依赖包,按照依赖顺序依次安装。
运行原理
yum程序会自动从/etc/yum.repo.d/下的所有.repo结尾的配置文件中加载软件源的配置,所谓的软件源其实就是一个文件目录,目录可以是本地目录,也可以是http目录,所以如果自己的服务器要换国内的源,则直接下载相应的repo文件,放到/etc/yum.repo.d/ 并删除旧的文件就行。
当然,这样解释可能大家觉得,只要将相应的rpm下载,放到文件夹中,然后配置本地地址或者http地址是不是就可以用,然而不是,因为yum不会扫描整个目录,而是会先扫描文件夹下的repo文件夹内的meta信息,这个文件夹存储了该目录能提供的rpm包的结构信息,相当于一个索引,所以想将目录作为软件源,还需要创建这个索引。
环境准备
- 准备一台和目标服务器版本一致(理论上版本差距不是太大即可,但是最好完全一样),并且能联网的机器,用来下载软件包和制作软件源。
制作离线源步骤
- 在公网服务器上,可以先修改为阿里的软件源
cp -r /etc/yum.repos.d ./yum.repo.d_bak rm -rf /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- 下载两个工具,yum-utils createrepo,yum-utils用来下载rpm包,createrepo用来创建上面说的索引文件
yum install -y yum-utils yum -y install createrepo
- 下载准备安装的软件,如postgresql-server,下载目录(根据自己需要修改路径,名称无所谓)
yumdownloader --resolve --destdir=/root/myrepo/ postgresql-server
- 制作软件源
createrepo -v /root/myrepo/
使用离线源
从上面我们介绍中可以看到,离线源配置的就是目录文件,所以我们可以根据自己情况使用本地路径或者http路径来提供软件源。(二者选其一即可)
本地使用,适合只需要一台服务器使用的情况。
- 将文件夹拷贝到目标服务器,删除/etc/yum.repo.d下的文件
- vi /etc/yum.repo.d/local.repo,内容如下,路径根据实际调整
#本源的名字(不能和其他重复) [base-local] name=CentOS7.2-local baseurl=file:///root/myrepo enabled=1 gpgcheck=0
- 更新本地缓存
yum clean all yum make cache
- 安装软件
yum install postgresql-server
配置http软件源,适合内网多台机器使用。
- 安装http服务,如apache/nginx,本示例采用docker nginx来制作,选择自己熟悉的http服务即可。
- docker-compose.yml配置如下:
version: '2' services: nginx: restart: always image: registry.cn-hangzhou.aliyuncs.com/moojnn/nginx ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - /root/myrepo:/usr/share/nginx/html
nginx配置文件文件如下(仅增加了开启目录的配置autoindex相关):
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; // 开启目录,离线源本身就是目录,所以需要开启目录访问 autoindex on; autoindex_exact_size off; autoindex_localtime on; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
- 通过浏览器访问该服务,看看是否能看到相应的rpm包信息。
- 配置目标服务器的repo
vi /etc/yum.repo.d/pg.repo
repo配置如下
[postgresql] name=postgresql baseurl=http://192.168.1.69/myrepo gpgcheck=0 enabled=1 priority=1
- 更新本地缓存
yum clean all yum make cache
- 安装软件
yum install postgresql-server
- 更新本地缓存
本文固定链接:杨晨辉的个人博客 » Centos离线源制作教程
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!