VMware安装CentOS最小化开发环境导引
目录
一、概要
二、介绍
三、下载
四、安装
4.1 创建虚拟机
4.2 安装CentOS
五、配置网卡
六、配置本地安装源
七、安装软件
7.1 gcc/g++
7.2 C++的atomic库
7.3 java
7.4 Cmake
7.5 MariaDB客户端(兼容mysql)
八、用户配置文件.bash_profile
九、命令速查
一、概要
本文指引你用虚拟机建立本地开发的最小环境。好程序员和普通程序员的一个很大的区别就是好程序员会建立自己的开发环境,而不是指望别人提供开发环境,更不会坦然和别人共享开发环境。
共享开发环境的理由很多,比如涉及到很多组件、涉及到第三方系统等等,甚至仅仅因为是小型机。没必要一一破解,因为懒人借口多。
为什么要用最小化开发环境呢?有几个理由:
- 本地虚拟机越小运行越顺畅,占用磁盘空间也更少
- 重新安装是减少本地磁盘占用的最佳方法,最小化系统安装最快
- 大部分情况下目标系统没有图形界面,虚拟机上装图形界面完全是浪费,不装图形界面可以保持操作方式一致
- 便于发现依赖项,减少部署时遇到突发状况
二、介绍
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(输出到当前目录)
(这里是结束)
相关文章:
VMware安装CentOS最小化开发环境导引
目录 一、概要 二、介绍 三、下载 四、安装 4.1 创建虚拟机 4.2 安装CentOS 五、配置网卡 六、配置本地安装源 七、安装软件 7.1 gcc/g 7.2 C的atomic库 7.3 java 7.4 Cmake 7.5 MariaDB客户端(兼容mysql) 八、用户配置文件.bash_profile…...
服务器端编程/数据库驱动程序/RESTful API:介绍
目录 服务器端编程数据库驱动程序RESTful API 👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你的意见是我进步的财富! 服务器端编程 服务器端编程是一种计…...
Qwt QwtThermo绘制温度计
1.简介 QwtThermo 是一个基于 Qt 框架的类库,用于创建温度计控件。它提供了一些方便的功能来展示和处理温度计相关的数据。 QwtThermo 添加了特定于温度计的功能。 使用 QwtThermo,可以实现以下功能: 设置温度范围:可以通过设置…...
U_boot介绍
系统移植之前的了解的: 首先需要移植一个 bootloader 代码,这个 bootloader 代码用于启动 Linux 内核,bootloader 有很多,常用的就是 U-Boot;移植好 U-Boot 以后再移植 Linux 内核,移植完 Linux 内核以后 Linux 还不能…...
Flink -- window(窗口)
1、窗口主要分成三大种: 1、Time Window (时间窗口):固定时间触发一次窗口 a、SlidingEventTimeWindows: 滑动的事件时间窗口 public class Demo1TImeWindow {public static void main(String[] args) throws Exception {/*** 时…...
原语:串并转换器
串并转换器OSERDESE2 可被Select IO IP核调用。 OSERDESE2允许DDR功能 参考: FPGA原语学习与整理第二弹,OSERDESE2串并转换器 - 知乎 (zhihu.com) 正点原子。 ISERDESE2原语和OSERDESE2原语是串并转换器,他的的功能都是实现串行数据和并行…...
没网络也能安装.Net 3.5!如何脱机安装.NET Framework 3.5
.NET框架是由微软制定的一个软件框架。它有助于在Windows上运行控制台、Web或移动应用程序。此有用的工具适用于Windows设备。 如何脱机安装.NET Framework 3.5 如果你拥有Windows 10、8、8.1或7,有时第三方软件可能会导致问题。你可能会在图片中看到这样的问题。 看这张照片…...
JVM运行时数据区-虚拟机栈
目录 一、内存中的栈 二、基本内容 三、优点 四、栈的存储单位 五、栈运行原理 六、栈的内部结构 (一)局部变量表 (二)操作数栈 (三)动态链接 (四)方法返回地址 …...
Java中介者模式
目录 定义 结构 案例 优点 缺点 使用场景 定义 又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。 结构 中介者模式包含以下主要角色: 抽象中介者角…...
前端框架Vue学习 ——(五)前端工程化Vue-cli脚手架
文章目录 Vue-cliVue项目-创建Vue项目-目录结构Vue项目-启动Vue项目-配置端口Vue项目开发流程 Vue-cli 介绍:Vue-cli 是 Vue 官方提供的一个脚手架,用于快速生成一个 Vue 的项目模版 安装 NodeJS安装 Vue-cli npm install -g vue/cliVue项目-创建 图…...
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
根据近日工业和信息化部发布的《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,相信不少要进行IOS平台App备案的朋友遇到了一个问题,就是apple不提供云管理式证书的下载,也就无法获取公钥及证书SHA-1指纹。 已经上架的应用不想重…...
Spring -Spring之依赖注入源码解析
依赖注入底层原理流程图:Spring中Bean的依赖注入原理| ProcessOn免费在线作图,在线流程图,在线思维导图 Spring中到底有几种依赖注入的方式? 首先分两种: 手动注入自动注入 手动注入 在XML中定义Bean时,就是手动注入…...
Spire.Office for .NET 8.10.2 同步更新-Crk
Spire.Office for .NET是 E-iceblue 提供的企业级 Office .NET API 的组合。它包括Spire.Doc、Spire.XLS、Spire.Spreadsheet、Spire.Presentation、Spire.PDF、Spire.DataExport、Spire.OfficeViewer、Spire.PDFViewer、Spire.DocViewer、Spire.Barcode和Spire.Email。Spire.O…...
MFC 基础篇(一)
目录 一.SDK编程 二.为什么要学MFC? 三.MFC能做什么? 四.MFC开发环境搭建 五.MFC项目创建 六.消息映射机制 一.SDK编程 Application Programming Interface 应用程序编程接口。 Software Development Kit 软件开发工具包,一般会包括A…...
Android技术-修改SO导出符号
背景 经常在使用第三方SDK的时候会莫名其妙报错,其中最常见的一种就是SO符号冲突,比如libA.so静态链接了libC.a,而libB.so动态链接了libC.so。这样便会导致符号冲突。又或者在使用不同版本的动态库,也会造成符号冲突。 报错案例 案例1 DEB…...
flutter 打包apk
Flutter项目打包生成APK_flutter打包apk_文阿花的博客-CSDN博客 关于iconData可能出现的错误: flutter build apk 打包报错调试过程 - 掘金 (juejin.cn) 使用命令行:flutter build apk --no-tree-shake-icons...
Halcon如何使用SaperaLT库连接dalsa相机
halcon安装好的时候,没有带SaperaLT的采集库,需要额外在Halcon官网下载此库。 以下是halcon官网下载此库的链接。官网需要注册才可以下载。 https://www.mvtec.com/downloads/interfaces?tx_mvtecproduct_extensiondownloadlist%5Bfilter%5D%5B0%5Dma…...
Vue 嵌套路由 多级路由规则
套娃路由 routes:[{path: /login,component: Login},{path: /user,component: User,children:[{ path: test, component: Test },{ path: test2, component: Test2 },]}]子路由不需要加/ 在父组件 子路由不需要加/ 需要带上父亲的路由路径 <router-link to"user/test…...
pandas教程:Introduction to pandas Data Structures pandas的数据结构
文章目录 Chapter 5 Getting Started with pandas5.1 Introduction to pandas Data Structures1 Series2 DataFrame3 Index Objects (索引对象) Chapter 5 Getting Started with pandas 这样导入pandas: import pandas as pde:\python3.7\lib\site-packages\numpy…...
MinIO 分布式文件(对象)存储
简介 MinIO是高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。 在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品 官网地址:http://www.minio.org.cn/ 下载 官网下载(8.4.3版本)&#x…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
