目标
使用 VirtualBox 最小安装 CentOS7.x 并配置网络、环境变量等…
VM 不支持 64 位系统问题
三种情况:
- 开启了 hyper-v,在
控制面板-启用或关闭 Windows 功能中取消勾选,重启。 - 未开启虚拟化,进入 BIOS 进行设置。
- 管理员 cmd 输入
bcdedit查看hypervisorlaunchtype,使用命令bcdedit /set hypervisorlaunchtype off将其设为 off 并重启。
配置网络
均采用 NAT 方式。
使用 VMware
配置虚拟网卡 VMnet8,其作用是供虚拟机和主机通信。

在 VM “虚拟网络编辑器”中配置 NAT 模式,需要同 VMnet8 在相同网段。配置静态 IP 的话,可以将 使用本地DHCP服务器xxx 选项取消。

在虚拟机中配置静态 IP:vi /etc/sysconfig/network-scripts/ifcfg-ens33,配置完后重启网络服务 service network restart。

ping 一下主机和外网,主机 ping 不通的话需要配置一下 windows 的防火墙,允许 ICMP 报文通过。 ping 不通外网的话,重启下 VMnet8 适配器。
关闭网火墙与自启:
systemctl stop firewalld.service
systemctl disable firewalld.service修改主机名和 hosts:分别在 etc/ 下的 hostname 和 hosts 进行配置。
使用 VirtualBox
区别在于虚拟机内网卡名称不同,除了配置 NAT 网卡,主机要 ping 通虚拟机的话,需要额外配置 Host 网卡,或者是 NAT 网卡的端口转发。
在虚拟机全局配置中,新增一个 NAT 网卡,配置一个网段;

在虚拟机实例的配置中启用该 NAT 网卡;

修改虚拟机实例内的网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 ,并重启 service network restart;
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
# 配置为静态
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=10a082aa-82b3-42d1-9469-81e280073af6
DEVICE=enp0s3
# 启动时生效
ONBOOT=yes
# 前面配置的网段内写一个即可
IPADDR=192.168.100.100
# VirtualBox 此处默认网络号.1
GATEWAY=192.168.100.1
DNS1=8.8.8.8这时虚拟机实例应该已经可以 ping 通外网,但主机无法 ping 通虚拟机,有两个办法:
方法 a. 配置 Host 网卡,与配置 NAT 网卡步骤相同,需要将 ifcfg-enp0s3 复制一份出来,改名为 Host 网卡在虚拟机实例中的名称 (通过 ip addr 命令查看),注意还要修改 NAME、UUID、DEVICE 这几项。

# enp0s8 Host 网卡配置
# ...
NAME=enp0s8
UUID=10a082aa-82b3-42d1-9469-81e280073af8
DEVICE=enp0s8
ONBOOT=yes
IPADDR=192.168.56.101
GATEWAY=192.168.56.1
DNS1=8.8.8.8此时主机应当可以通过 Host 网卡 ping 通虚拟机实例,但这有些麻烦,看下面的方法 b:
方法 b. 如图所示配置 NAT 端口转发,接下来就可以使用 127.0.0.1 + 主机端口 登录虚拟机实例:

软件安装
工具
yum update && yum upgrade -y
yum install -y net-tools
yum install -y rsync
yum install -y vim
# 安装额外软件仓库epel-release
yum install -y epel-release安装 JRE 配置环境变量
环境变量
以 CentOS7.x 安装 JRE 举例:
注意:
- 如果不是最小安装,需要先卸载自带的 Java 等:
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps- 前往 Java Archive Downloads - Java SE 8 (oracle.com) 下载 Server JRE (Java SE Runtime Environment) 8u202
指向原始笔记的链接 # 上传并解压 jre 到 /opt/module tar -zxvf server-jre-8u202-linux-x64.tar.gz -C /opt/module/ # 1.可以添加到 /etc/profile 最后面 vim /etc/profile # 观察该文件最后的脚本 for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do if [ -r "$i" ]; then if [ "${-#*i}" != "$-" ]; then . "$i" else . "$i" >/dev/null fi fi done # 作用是让 /etc/profile.d/ 下以.sh结尾的文件中配置的环境变量生效 # 2.故也可以在该文件夹下创建 xxx.sh 配置环境变量 vim /etc/profile.d/my_env.sh # 添加: #JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_202 export PATH=$PATH:$JAVA_HOME/bin # 生效一下 source /etc/profile # 验证 java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
source 命令失效
指向原始笔记的链接 ls -l /bin/sh # 输出 /bin/sh -> dash # 可以看到 sh 被链接到了 dash # 干掉,链接到 bash sudo rm /bin/sh sudo ln -s /bin/bash /bin/sh
其他
添加用户并配置权限
# 添加用户
useradd me
passwd me
# 配置me具有root权限
# 以后me用户执行sudo时,就不需要输入密码了
vim /etc/sudoers
# 在 %wheel ALL=(ALL) ALL 下面添加
me ALL=(ALL) NOPASSWD:ALL配置密钥登录
配置密钥登录
目的:便于本地与服务器、服务器与服务器之间建立链接,免去密码输入过程。
方法:要实现 A 能免密登陆 B,需要将 A 的公钥发送给 B,让 B 保存在.ssh/authorized_keys中。指向原始笔记的链接 # 生成密钥 ssh-keygen -t rsa # 位于用户家目录下的隐藏文件夹 .ssh/ 下 ls ~ -al # 在 A 中执行该命令将 A 的公钥复制到 B 的 authorized_keys 中,需要输入一次密码,后续链接将不需要密码 ssh-copy-id user@hostB # 宿主机是 Windows,则手动 copy 生成的公钥到 authorized_keys 下
Shell 脚本配置
Bash 配置
source 命令失效
ls -l /bin/sh # 输出 /bin/sh -> dash # 可以看到 sh 被链接到了 dash # 干掉,链接到 bash sudo rm /bin/sh sudo ln -s /bin/bash /bin/shscp
scp:用于在本机与服务器,远程服务器与服务器之间 复制 文件。
# 命令:scp -r 源文件或目录 目标地址 # 参数:-r 表示递归 # 举例: # 本机 --> 服务器A scp -r path/file user@hostA:path/ # 本机 <-- 服务器A scp -r user@hostA:path/file path/ # 服务器A --> 服务器B scp -r user@hostA:path/file user@hostB:path/rsync
用于 同步 文件。
# 如果没有安装 yum install -y rsync # rsync -av 源文件或目录 目标地址 # 参数:-a 归档拷贝;-v verbose # 举例: # 同步本地和服务器A的module文件夹 rsync -av module/ user@hostA:/opt/module/xsync
编写脚本,便于多个服务器同步文件
#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in centos101 centos102 centos103 do # 如果是本机则跳过 if [ $HOSTNAME == $host ] then continue fi echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4. 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done donexcall
#!/bin/bash # 指令 cmd=$* # 判断指令是否为空 if (( #$cmd -eq # )) then echo "command can not be null !" exit fi # 获取当前登录用户 user=`whoami` # 遍历执行发送指令 for host in centos101 centos102 centos103 do echo ------ $host ------ ssh $user@$host $cmd done echo ------ end ------指向原始笔记的链接 # 将脚本放到 ~/bin 中以方便全局调用 # 修改权限 chmod +x xsync chmod +x xcall
克隆虚拟机
关机 shutdown -h now,然后将这台虚拟机实例 centos00 作为模板机,另外克隆出几台实例方便后续操作,需要配置主机名称、网络等。