Centos离线源制作教程

技术总结 yangchenhui 13555℃ 0评论

背景

最近项目需要安装在一台完全无公网的服务器上,所以很多基础软件都要通过安装包的形式在内网传输。

概念解释

  • 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包的结构信息,相当于一个索引,所以想将目录作为软件源,还需要创建这个索引。

环境准备

  1. 准备一台和目标服务器版本一致(理论上版本差距不是太大即可,但是最好完全一样),并且能联网的机器,用来下载软件包和制作软件源。

制作离线源步骤

  1. 在公网服务器上,可以先修改为阿里的软件源
    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
  2. 下载两个工具,yum-utils createrepo,yum-utils用来下载rpm包,createrepo用来创建上面说的索引文件
    yum install -y yum-utils
    yum -y install createrepo
  3. 下载准备安装的软件,如postgresql-server,下载目录(根据自己需要修改路径,名称无所谓)
    yumdownloader --resolve --destdir=/root/myrepo/ postgresql-server
  4. 制作软件源
    createrepo -v /root/myrepo/

使用离线源

从上面我们介绍中可以看到,离线源配置的就是目录文件,所以我们可以根据自己情况使用本地路径或者http路径来提供软件源。(二者选其一即可)

本地使用,适合只需要一台服务器使用的情况。

  1. 将文件夹拷贝到目标服务器,删除/etc/yum.repo.d下的文件
  2. vi /etc/yum.repo.d/local.repo,内容如下,路径根据实际调整
    #本源的名字(不能和其他重复)
    [base-local]
    name=CentOS7.2-local
    baseurl=file:///root/myrepo
    enabled=1 
    gpgcheck=0
  3. 更新本地缓存
    yum clean all
    yum make cache
  4. 安装软件
    yum install postgresql-server

配置http软件源,适合内网多台机器使用。

  1. 安装http服务,如apache/nginx,本示例采用docker nginx来制作,选择自己熟悉的http服务即可。
  2. 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;
    }
  3. 通过浏览器访问该服务,看看是否能看到相应的rpm包信息。
  4. 配置目标服务器的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
    1. 更新本地缓存
      yum clean all
      yum make cache
    2. 安装软件
      yum install postgresql-server

本文固定链接:杨晨辉的个人博客 » Centos离线源制作教程
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!

喜欢 (9)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址