搭建centos基础开发环境的一些考虑

或许会有疑问,只要项目工程预编译好二进制文件,checkout下来就能跑了,几乎不需要再给centos安装些什么环境!因为开发过程还可能需要ssh远程,设置账号权限,设置网络端口规则,崩溃调试和性能采集等。作为技术人员可以很轻松地完成这些工作,但实际情况是非技术人员也有可能要搭自己的本地运行环境,尽管提供了搭建文档,但对他们来讲处理这些并不容易。

考虑各个项目的代码框架各有差异。此处不会涉及广泛的内容,仅以C/C++游戏后端开发基于Window主机+centos客机的搭建模式,其中只安装了必备的一些工具,你可能需要根据项目框架的实际情况另行安装。

开发环境配置的基础认知:

  1. 搭建本地运行环境有很好的隔离作用。使用项目任务得以尽可能并行开发而互不干扰。技术同事有着各自的前端/后端环境,避免频繁的污染trunk代码。测试同事在自己的运行环境,修改系统时间或本地修改配置等以验证数值结果。策划同事在自己的环境里,调整数值并验证。
  2. 所谓的开发环境只会内网使用,且大多数情况就是开发者本人使用,不会和其他人共享。所以系统安全参数/选项不必严格。
  3. 只会是本地使用并只用来运行项目代码,登入的用户量基本上只有自己,最多也只是几个人。所以客机本身不需要具备很高的性能。
  4. 开发人员会在本地环境进行小规模的性能工作。所以centos必须包含常用的性能采集工具。
  5. 需要远程协助其他同事,处理业务问题。统一登录名和密码以便快速登录。比如都使用root账号,密码都是111111

选用虚拟机还是容器作为基础?

目前流行的虚拟环境有wsl、docker、vmware、hyper-v和vbox

wsl需要window 1903以上才能使用,但是好多公司还在使用window7。另外wsl内核kernel-microsoft兼容性不是十分完善,个人觉得wsl只适用来跑点小代码。在执行perf性能命令需要先装微软特定的软件程序 ,另外wsl未实现/proc/net/tcp,一些依赖它的工具无法工作,如netstat不能正常工作。不过如果选用wsl,建议选用wsl2而非wsl1,按wsl2的介绍其中内部是真实linux内核,前面提到的问题,在wsl2中均已解决。不过目前要忍受wsl2在跨文件系统IO操作时,非常非常非常非常之慢

docker的优点是脚本化构建环境、启动快,但依然有和wsl同样的系统资源隔离问题,比如执行iotop报错在默认配置下有些系统调用禁止使用,总的来看docker cgroup依旧对IO的隔离不成熟,docker并不十分适用用作开发环境。

尽管wsl和docker都有各自的方法来隔离资源,wsl可以通过修改.wslconfig配置文件,docker通过docker run 启动时指定资源参数,总体而言wsl和docker在隔离系统资源还有些欠缺。考虑到开发同事要进行本地系统性能调式和监控,我不希望在业务开发过程,还要花时间处理这类兼容问题,也许折腾一番才发现根本就无法解决。

hyper-v、vmware、和virtualbox基于guest os的虚拟技术是更好的选择。hyper-v在window专业版本才能使用但如果公司只配备了家庭版本还得重装系统。vmware是收费软件,如果在公司使用破解版本很可能会收到律师函。

所以最终选择开源免费的virtualbox,尽管网上好多人说它性能比vmware差,但我们此处讨论的开发环境没必要比较谁的性能更好。正如开头说到只会用来跑业务代码,并且大多数情况下只几个游戏角色登录,virtualbox吃不吃性能这点考虑完成可以忽略。

各个项目的代码框架各有差异,我没打算也没必要在centos里安装适合所有各类开发工作的工具。只是装了对于C/C++游戏开发来讲必备的一东西,比如gdb, gcc, make等,具体修改内容看下文。你可以基于此镜像进行“二次安装”, 以符合项目的实际需要。

VirtualBox centos7.9 C/C++基础运行环境镜象 百度网盘 提取码:3o16

使用的软件版本

  1. VirtualBox版本 6.1.32 r149290 (Qt5.6.2) 百度网盘 提取码:lumm
  2. CentOS-7-x86_64-DVD-2009基于minal安装 百度网盘 提取码:m8rz

账号&密码

登录账号:root 密码:111111

网络配置

修改enp0s3网卡配置

vi /etc/sysconfig/network-scripts/ ifcfg-enp0s3
BOOTPROTO=dhcp
ONBOOT=yes

添加DNS配置

vi /etc/resolv.conf
nameserver 8.8.8.8

安装软件包

yum install -y epel-release
yum install -y centos-release-scl \
       vim lrzsz file \
       make cmake \
       zip unzip zlib* \
       tar gzip bzip2 wget zlib \
       gcc-c++ lua perl \
       kernel kernel-headers kernel-devel \
       openssl* openssh-* \
       gdb glibc-devel  libgcc \
       git svn \
       readline-devel devtoolset-9-gcc* \
       net-tools nc tcpdump \
       procps-ng lsof perf iperf iotop htop dstat strace sysstat collectl

glibc调试符号

yum install /usr/bin/debuginfo-install 
/etc/yum.repos.d/CentOS-Debuginfo.repo”文件的enable=1;
debuginfo-install glibc-2.17-325.el7_9.x86_64 libasan-4.8.5-44.el7.x86_64 libgcc-4.8.5-44.el7.x86_64 libstdc++-4.8.5-44.el7.x86_64

升级gcc9

yum install centos-release-scl -y && yum install devtoolset-9-gcc* -y && scl enable devtoolset-9 bash

ssh打开保活

vim /etc/ssh/sshd_config
每120秒是发1次保活包
ClientAliveInterval 120
720次没有响应就会断开
ClientAliveCountMax 720

关闭防火墙

systemctl disable firewalld

vscode

已安装vscode server

VirtualBox安装增强功能

已安装,这个功能主要是为了与宿主机共享复制/粘贴和目录

Tips: 导入时如果提示找不到网卡

操作方式:

  1. 进入控制面板的网络适配器界面, 右键需要用来桥接的网卡, 选择属性
  2. 弹出窗口中选中Microsoft网络客户端, 安装
  3. 弹出窗口中选中服务, 添加
  4. 弹出窗口中点击从磁盘安装
  5. 路径选择VirtualBox安装目录下的drivers/network/netlwf/VBoxNetLwf.inf文件后点击打开, 完成安装

其它

虚拟机与主机时间同步

  • 关闭时间同步,要先关闭虚拟机: VBoxManage setextradata <虚拟机名/虚拟机UUID> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"
  • 打开时间同步,要先关闭虚拟机: VBoxManage setextradata <虚拟机名/虚拟机UUID> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
  • 设置系统时区为上海 `timedatectl set-timezone Asia/Shanghai


 
  原文:
https://lizijie.github.io/2022/05/15/%E6%90%AD%E5%BB%BAcentos%E5%9F%BA%E7%A1%80%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E7%9A%84%E4%B8%80%E4%BA%9B%E8%80%83%E8%99%91.html
作者github:
https://github.com/lizijie

PREVIOUSlua代码规范
NEXT计算平均值,复杂度O(1)