目录
[4.1 创建虚拟机](#4.1 创建虚拟机)
[4.2 安装CentOS](#4.2 安装CentOS)
[7.1 gcc/g++](#7.1 gcc/g++)
[7.2 C++的atomic库](#7.2 C++的atomic库)
[7.3 java](#7.3 java)
[7.4 Cmake](#7.4 Cmake)
[7.5 MariaDB客户端(兼容mysql)](#7.5 MariaDB客户端(兼容mysql))
一、概要
本文指引你用虚拟机建立本地开发的最小环境。好程序员和普通程序员的一个很大的区别就是好程序员会建立自己的开发环境,而不是指望别人提供开发环境,更不会坦然和别人共享开发环境。
共享开发环境的理由很多,比如涉及到很多组件、涉及到第三方系统等等,甚至仅仅因为是小型机。没必要一一破解,因为懒人借口多。
为什么要用最小化开发环境呢?有几个理由:
- 本地虚拟机越小运行越顺畅,占用磁盘空间也更少
- 重新安装是减少本地磁盘占用的最佳方法,最小化系统安装最快
- 大部分情况下目标系统没有图形界面,虚拟机上装图形界面完全是浪费,不装图形界面可以保持操作方式一致
- 便于发现依赖项,减少部署时遇到突发状况
二、介绍
CentOS是较常用的Linux发行版,由于被红帽(我们以前称之为"红帽子",后来他们自己给自己起名叫"红帽",不好听)公司收购,已经失去了前景,但是由于既往用户群太大,一时半会也替换不了。
以前CentOS是作为红帽企业版的下游,在红帽企业版正式版上搞动作,现在CentOS则作为红帽企业版的上游,给红帽企业版做试用测试。
现在CentOS分为正规发布版和Stream版,前者是我们以前用的,稳定可靠,后者是红帽企业版的测试版,充满了最新特性。
红帽公司有多损呢?把CentOS7作为长期支持版,支持到2024,CentOS8则更早结束支持,现在已经不提供下载了(我保存有2105版)。很快就只能使用Stream版了。
不过话说回来,白嫖这种事,咱们也没法理直气壮是不?
三、下载
CentOS官方站点是www.centos.org,以https访问:

点击"Download"进入下载页面:

然后选择CPU架构,大部分用的都是x86-64,点击后进入镜像网站列表:

随便选一个,比如清华大学的镜像网站:

这么多文件,其实就是对应两个版本:2009和2207-2,每种又分为标准版、完整版和精简版,torrent是BT种子文件,iso是光盘镜像文件。
不同镜像网站内容都一样,网速不一样,找个速度快的下就可以了。
建议都下过来保存着,谁也不知道哪天就不给下了。而且很多时候只能用旧版,所以旧版也别删了。
四、安装
以下用CentOS-7-x86_64-Everything-2207-02.iso来演示安装过程,不同版本安装界面或有不同但原理差不多。
虚拟机使用的是VMware Workstation 17 Pro。虚拟机用什么没关系,能跑起来就行了。VirtualBox和windows自带的Hyper-v也行,不过实际体验确实VMWare最好。
4.1 创建虚拟机
从VMware的菜单或主页开始,创建新的虚拟机:

默认就是"典型",一般没什么必要自定义:

通过"浏览"选择iso,看一下能不能自动识别:

上图表示正确识别了iso文件里的系统,不过我们并不使用默认安装,因为默认安装装的东西可能太多了,所以我们选择"稍后安装操作系统":

在下面选择正确的操作系统:

输入虚拟机名字和目录,默认位置是在用户的文档目录里,一般我们不这么做,我们会自己管理存放虚拟机的目录,注意这个目录是直接存放虚拟机文件的,所以要一个虚拟机一个目录:

磁盘容量根据需要,如果没有很多数据的话,20G足够了,最好将虚拟磁盘存储为单个文件,性能高一些,至于提示的"轻松移动"是个什么意思?指的是用4G容量的U盘分多次拷贝吧?干程序的,谁没有几个大号移动硬盘啊,所以这不是个事。
把磁盘改为单个文件:

基本配置就差不多了,可以在下面的界面上点"自定义硬件"修改硬件配置:

内存、处理器一般都要修改,改成满意的值,网络适配器也可以修改,不过本次先用默认的NAT。CD/DVD可以现在挂载,也可以等下再处理。这个界面就是虚拟机配置的一部分,随时可以从菜单或虚拟机页面打开。

关闭自定义硬件,完成虚拟机设置,然后得到下面的界面:

点击上面界面的CD/DVD,打开光驱设置:

选中"启动时连接",使用ISO文件,浏览选中iso文件,点确定关闭,然后"开启此虚拟机",第一次开启可能得到如下提示:

这是因为我的电脑上开启了Hyper-V的原因。点工具栏按钮关闭虚拟机,然后再点"编辑虚拟机设置",选择"选项"-"高级"-"为启用了Hyper-V的主机禁用测通道缓解":

确定后再运行虚拟机就不会有这个提示了。
4.2 安装CentOS
运行虚拟机,鼠标点进去,用方向键选择第一项"Install CentOS7",想在虚拟机里面操作,可能需要先用鼠标点一下,想出来,则可能需要按下左边的ctrl+alt:

选中第一项按下回车:

敲一下回车,似乎不敲也能自动往下走,直到:

找到自己想在安装过程中使用的语言,可以用鼠标滚动,注意如果改变了选项这个界面会立即变成那种语言:

点击"继续":

稍等片刻安装源和软件选择的感叹号会消失,用鼠标往下滚动可以看到只有安装位置还有感叹号,点击进去,其实也不需要修改什么,直接点击"完成"接受自动分区即可。
安装位置设置(什么都不用改):

点击"完成"后返回,然后可以看到"开始安装"按钮可用了:

然后可以点击"开始安装",安装过程中可以设置root密码和创建用户:

密码不够强会要求按两次"完成":


配置完用户等待安装完成:

配置是自动的,很快完成,到这一步就彻底完成了:

重启后看到登录界面时基本安装就算大功告成:

不过这个系统只能在控制台登录,因为网卡还没有配置,无法使用telnet/SSH和FTP。
五、配置网卡
登录root用户。
查看IP地址:ip addr:

由于默认网卡是未启动的,所以只能看到每个网卡,记住网卡名字后面用。
输入cd /etc/sysconfig/network-scripts/
查看目录下的文件,找到ifcfg-XX,后缀就是网卡名字:

用vi编辑(命令为"vi 文件名" ),修改ONBOOT为yes:

保存,重启系统
Vi操作:按i进入编辑模式,按esc退出编辑模式,输入:wq回车保存并退出
然后输入命令shutdown -r now,意思是立即重启:

重启后再次登录查看IP:

箭头所指处就是IP了,用PuTTY或者别的SSH工具登录:

再试试WinSCP或者别的FTP工具,登录成功。
这就算大功告成了,剩下的就是安装自己需要的个别软件和开发使用了。
动态IP一般不变,如果变了就再查看一下就可以了。
其实打开网卡这一步在安装时就可以选择了,或者直接选择特定虚拟网卡,预先配置静态IP地址。但是万一操作失误或者出了别的问题,还是要知道如何手动解决的。
六、配置本地安装源
首先要在虚拟机设置里连接光盘。虽然我们设置了"启动时连接",但是似乎安装好以后就给推出了,所以可以关掉虚拟机再重新打开,或者在菜单"虚拟机"-"设置"的CD/DVD勾选"已连接":

然后挂载光驱,输入命令mount /dev/cdrom /mnt(因为我们已经用客户端连接上,所以后续都用客户端来操作):

然后就可以访问"/mnt"下的文件了。
用FTP工具编辑文件/etc/yum.repos.d/CentOS-Media.repo:

要修改的就是baseurl,选中的部分替换成"mnt"就可以了:

保存以后就可以用了,仅使用本地安装源用这个命令格式:
yum --disablerepo=\* --enablerepo=c7-media ......
七、安装软件
安装好基本系统就可以上传代码进行开发了,然后当然会遇到各种命令不存在、头文件找不到、库文件找不到,这就说明我们缺东西,需要安装和配置。有些人可能觉得完全安装多省力啊,不就是多一点磁盘空间嘛------这种人我们不要理。
7.1 gcc/g++
默认安装连gcc都没有,用如下命令列出相关软件包:
yum --disablerepo=\* --enablerepo=c7-media list gcc*

无脑装可以用这个命令:
yum --disablerepo=\* --enablerepo=c7-media install gcc*
会多装很多,也可以精确地一个一个安装。
Yum会检查依赖关系,最后提示确认安装:

输入y继续安装:

又问,继续y,然后就开始安装了,可能需要一些时间,耐心等到最后:

验证一下:

7.2 C++的atomic库
列出可安装的清单:
yum --disablerepo=\* --enablerepo=c7-media list *atomic*

安装libatomic开头的全部:
yum --disablerepo=\* --enablerepo=c7-media install libatomic*

7.3 java
列出可用安装包:
yum --disablerepo=\* --enablerepo=c7-media list java*


选一个合适的版本,比如1.8:
yum --disablerepo=\* --enablerepo=c7-media install java-1.8*
依赖项非常多,时间会稍微久一点,不过安装源在本地,不用担心:

注意你的程序可能依赖环境变量JAVA_HOME,需要自己去设置,具体位置可以搜索相关头文件,如果安装了多个版本,要仔细区分不同的安装。
7.4 Cmake
列出安装包:
yum --disablerepo=\* --enablerepo=c7-media list *cmake*

安装:
yum --disablerepo=\* --enablerepo=c7-media install cmake.x86_64

7.5 MariaDB客户端(兼容mysql)
列出软件包:
yum --disablerepo=\* --enablerepo=c7-media list *maria*

安装mariadb-devel.x86_64:
yum --disablerepo=\* --enablerepo=c7-media install mariadb-devel.x86_64

安装完就有mysql.h了。但是并不支持MariaDB Connector/C 3.0新增的函数mariadb_get_infov。
所以为了支持这个要去官网下载,用https访问mariadb.com/downloads/connectors/,可以看出来,CentOS只提供CentOS7(x86_64)版本的下载,不提供CentOS8的下载:

点击下载会进入注册页面,不过不用担心,不是强迫注册,文件已经在下载中,下载到的文件叫做mariadb-connector-c-3.3.7-centos74-amd64.tar.gz。
上传之后解压缩(tar -zxvf 文件名),得到一个目录。进入目录后手动复制文件:
cp -r include/* /usr/local/include/
cp -r lib/* /usr/local/lib/
这两个应该就够了,还有man目录不知道放哪里去,也没用过。
注意头文件和库文件分别在系统目录的子目录mariadb下,引用头文件和链接库文件都要增加配置(共三处,.bash_profile的LD_LIBRARY_PATH,makefile的-I和-L)。
八、用户配置文件.bash_profile
默认情况下执行命令不会从当前目录搜索,所以要设置一下,在配置文件里增加:
export PATH=.:$PATH
默认也没有开启coredump文件,在配置文件里增加:
ulimit -c unlimited(顺便说一下:CentOS8.2的coredump输出文件不在当前目录下,需要额外设置)
除此而外一般还要设置动态库目录:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64/:/usr/local/lib/(这是程序执行时寻找动态链接库的位置,具体位置要看实际情况,编译程序则要在编译配置里面设置,可以和这个配置不同)
这三句是这个样子的:

有些写法是先写PATA=...,然后再写export PATH,分成两行,其实没必要,直接"export PATH=..."就可以了。
修改完.bash_profile需要退出重新登录,或者用"."命令立即执行:
. ~/.bash_profile
其中"~"在shell里代表用户的主目录。
九、命令速查
挂载光驱:mount /dev/cdrom /mnt
切换到root:su
从root退回:exit
查找文件:find / -name 文件名(可带*号)
重新执行用户配置文件:. ~/.bash_profile
列出安装包:yum --disablerepo=\* --enablerepo=c7-media list 包名(可带*号)
安装软件包:yum --disablerepo=\* --enablerepo=c7-media install 包名(可带*号)
卸载软件包:yum erase 软件包
解压缩:tar -zxvf 文件名.tar.gz(输出到当前目录)
(这里是结束)