• 使用Docker搭建CentOS 7编译开发环境


    开发的软件要支持多个版本的Linux平台,最低需要支持到CentOS 7,以及一些 CentOS 7 的衍生版本。

    因为我日常并不使用 CentOS 7,如果在我本机编译的话,会有glibc版本问题,如果全部依赖都使用静态链接glib的方式也很麻烦,关于这个问题可以查看 glibc 版本(version 'GLIBC_2.14' not found)问题 。因此我一般都是再 CentOS 7 下进行编译打包发布,这样的话问题会少很多。Golang 的项目在 CentOS 7 下编译也不会出现 FATAL: kernel too old. Kernel 的问题。

    如果使用虚拟机的话,就比较重量级了,所以我一般都使用docker环境来进行项目的编译。放这里做一个环境配置过程的记录和备份。
    这个我已经推送到hub.docker.com上面了,可以直接拉取使用 docker pull liu2g/compilenv:v2

    1、安装 docker 环境

    这里就不详细说了,在Linux下基本就是几条命令搞定,可以参考下面文章:

    2、创建 centos 7 容器

    使用下面命令拉取 centos 7 镜像到本地

    docker pull centos:7
    

    使用下面命令创建 centos 7系统容器

    docker run -v /mnt/work:/mnt/work -v /home:/home --name=centos7go --hostname=centos7go --tty centos:7 /bin/bash
    

    我这里绑定了两个目录,这是我需要用的,可以不使用。这里使用--tty参数,是为了让容器可以一直运行,避免退出exec就停止了容器运行。

    如果需要,可以安装中文语言环境,参考 Docker中centos7的中文支持

    # 安装语言包
    yum install kde-l10n-Chinese -y
    yum install glibc-common -y
    # 安装本地化语言运行时需要使用的语言环境对象代码
    localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
    # 写入环境变量到配置
    echo "export LC_ALL=zh_CN.utf8" >> ~/.zshrc
    

    3、配置编译环境

    配置软件源

    先配置yum镜像仓库地址,以及启用sclepel仓库。

    cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
    
    #下载阿里云镜像的repo文件
    curl /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo > /etc/yum.repos.d/CentOS-Base.repo
    
    # 刷新一下 yum 缓存
    yum clean all && yum makecache
    
    # 安装 epel 源
    yum install -y epel-release
    
    # 安装 scl 源(devtoolset工具)
    yum install -y centos-release-scl
    
    # 安装完成,再次刷新一下缓存
    yum clean all && yum makecache
    

    参考:

    安装开发环境

    安装git软件,因为默认仓库的git版本比较低,所以安装rh-git227

    yum install rh-git227
    # 启用,也可以把这个文件软链接到 /etc/profile.d 目录下去
    source /opt/rh/rh-git227/enable
    # ln -s /opt/rh/rh-git227/enable /etc/profile.d/git.sh
    

    安装 devtoolset 软件包,也可以根据需要安装llvm-toolset

    # 可以先搜索,根据需要安装对应版本的 devtoolset
    yum install -y devtoolset-11
    # 使用 scl 命令来启用工具集(也可以之间 source /opt/rh/devtoolset-9/enable)
    scl enable devtoolset-11 bash
    # ln -s /opt/rh/devtoolset-11/enable /etc/profile.d/devtoolset-11.sh
    

    其他常用的开发工具安装

    yum install upx cmake3
    ln -s /usr/bin/cmake3 /usr/bin/cmake
    
    yum install golang
    go env -w GOPROXY="https://proxy.golang.com.cn,direct"
    go env -w GOPATH="/mnt/work/go"
    go env -w GOCACHE="/mnt/work/go/cache"
    

    参考:

    Dockerfile

    将上面全部操作做成了一个Dockerfile文件(多了安装配置 zsh 的过程),内容如下:

    FROM centos:7
    
    VOLUME /mnt/work
    
    # 下面依次执行
    #	切换yum源,启用 epel 和 scl 软件仓库
    #	安装 git2.27
    #	安装 devtoolset 11/upx/cmake等
    #	安装 golang ,并设置环境变量
    #	安装中文语言包,并将配置写入环境变量
    #	安装 zsh
    #	安装 oh-my-zsh,使用 gitee 镜像
    RUN cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak \
        && curl https://mirrors.aliyun.com/repo/Centos-7.repo > /etc/yum.repos.d/CentOS-Base.repo \
        && yum clean all && yum makecache \
        && yum install -y epel-release centos-release-scl \
        && yum clean all && yum makecache \
        && yum install -y rh-git227 \
        && ln -s /opt/rh/rh-git227/enable /etc/profile.d/git.sh \
        && yum install -y devtoolset-11 \
        && ln -s /opt/rh/devtoolset-11/enable /etc/profile.d/devtoolset-11.sh \
        && yum install -y upx cmake3 wget \
        && ln -s /usr/bin/cmake3 /usr/bin/cmake \
        && yum install -y golang \
        && go env -w GOPROXY="https://proxy.golang.com.cn,direct" \
        && go env -w GOPATH="/mnt/work/go" \
        && go env -w GOCACHE="/mnt/work/go/cache" \
        && yum install -y kde-l10n-Chinese \
        && yum install -y glibc-common \
        && yum install -y zsh \
        && source /opt/rh/rh-git227/enable \
        && yum clean all \
        && cd /root \
        && wget https://ghproxy.com/https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh \
        && export REMOTE=https://gitee.com/mirrors/ohmyzsh.git \
        && chmod a+x install.sh \
        && ./install.sh \
        && localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
        && echo "export LANG=zh_CN.utf8" >> ~/.zshrc \
        && echo "export LC_ALL=zh_CN.utf8" >> ~/.zshrc \
        && rm anaconda-ks.cfg install.sh
    

    构建命令

    docker build -t compilenv:v1 .
    
  • 相关阅读:
    【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏
    【洛谷2055】【CJOJ2487】【ZJOI2009】 假期的宿舍
    【NOIP2012】【CJOJ1093】【洛谷1083】借教室
    如何正确的深蹲
    6种食物
    9大食物 你都吃过几种?
    食物
    如何正确蹲马步 蹲马步的正确方法
    这才是俯卧撑的正确做法!你真的会做俯卧撑吗?
    如何保持良好的状态
  • 原文地址:https://www.cnblogs.com/oloroso/p/16590879.html
Copyright © 2020-2023  润新知