Skip to Content

基于 Parallels 尝鲜 CentOS-8

Taste CentOS-8 Through Parallels
Taste CentOS-8 Through Parallels
Table of Contents

之前为了应对在跨语言开发过程中,需要折腾各种开发环境,我做了一个工具包 runX 来自动化环境部署的过程, 当全新的 CentOS-8 可用后,我就一直想折腾一把,毕竟 7 的内核版本实在太低了。因为最近又对环境部署和自动化工具有些新的想法, 干脆一气呵成,直接在工具集中把这些想法实现出来,但是考虑到变化比较大,而且 runX 本身其实已经是稳定状态, 所以索性搞一个 runX 的全新升级版 Lego

Lego,旨在想搭积木一样来组合各种部署功能,因为在 runX 这几年的使用过程中,发现经常还是会有些复用的功能, 在 k8s-start 项目中我试验了这种积木的思想,发现很受用。重新整理 runX 到 Lego,主要包含以下几个方面:

  1. 最核心的当然是积木的思想,所有的方法和模块都是可组合的。
  2. 新装虚拟机当前可能无法做到完全自动化,但是可以通过组合的方式实现半自动化。

下面是装机初始的一些步骤,相关的代码会逐步整理到 Lego 这个项目中。

Base 装机步骤

  1. 修改运行级别,CentOS 7 通过修改 /etc/inittab 已经过时,CentOS 8 使用 Target,见下
  2. 通网,往后的各种操作都需要联网进行(设置免密登陆,后续操作都可以通过 ssh 完成)
  3. 更换阿里云的 yum 源,阿里云已经建了 CentOS 8 的 yum 源,因为安装 Parallels Tools 依赖的包需要
  4. 安装 Parallels Tools(否则无法共享目录,以及使用命令行 prlctl 命令控制 pvm)
  5. 关机,设置共享文件夹等通用设置(关机后,在 Parallels 图形界面进行设置较为方便,目前尚未研究通过 prlctl 命令来设置)
  6. 安装 Parallels Tools 后,就可以将 Mac 宿主机中的 runX 项目挂载到 pvm 中,运行相关自动化脚本,比如一些基础设置(/etc/profile,/etc/sudoers 等)

修改运行级别,关闭图形界面

systemctl set-default multi-user.target # run level 3
systemctl set-default graphical.target # run level 5

Removed /etc/systemd/system/default.target
Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target

通网

目前 CentOS 8 默认的网络设备为 enp0s5,而不是 eth0,管理工作也由 nmcli 来完成 修改 /etc/sysconfig/network-scripts/ifcfg-enp0s5 文件的内容,然后运行 nmcli c reload 重启 这里主要将 IP 的获取方式由 dhcp 方式修改为静态 IP,相关设置列举如下:

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=enp0s5
UUID=xxx-334e-4f70-a808-66b097fd4ba1
DEVICE=enp0s5
ONBOOT=yes
IPADDR="10.xxx.xxx.xxx"
NETMASK="255.255.255.0"
GATEWAY="10.xxx.xxxx.1"

更换 yum 源

这里选择阿里云的 yum 源(阿里云率先支持了 CentOS 8 的 yum 源) 首先备份原始源:sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 修改 /etc/yum.repos.d/CentOS-Base.repo 的 baseurl 为 baseurl=https://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/ 修改 /etc/yum.repos.d/CentOS-AppStream.repo 的 baseurl 为 baseurl=https://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/

最后更新缓存使 yum 源的变更生效:

sed -i 's/#baseurl=.*/baseurl=https:\/\/mirrors.aliyun.com\/centos\/$releasever\/BaseOS\/$basearch\/os\//g'  /etc/yum.repos.d/CentOS-Base.repo
sed -i 's/#baseurl=.*/baseurl=https:\/\/mirrors.aliyun.com\/centos\/$releasever\/AppStream\/$basearch\/os\//g'  /etc/yum.repos.d/CentOS-AppStream.repo

sudo yum clean all
sudo yum makecache

安装 Parallels Tools

Parallels Tools 的安装依赖 epel 和 dkms,而当前 dkms 仅提供了 src.rpm 包,需要下载后自行编译。下面是安装步骤:

  1. 安装 epel 和 rpm-build(后面编译安装 src.rpm 包需要)
  2. rpm-build 编译安装 dkms src.rpm 包
  3. Parallels 图形界面挂载 Parallels Tools 安装包,进行安装

    sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm \
    rpm-build
    curl -fSL https://linux.itecs.ncsu.edu/redhat/ncsu/rhel8-beta-needed/8/SRPMS/dkms-2.6.1-1.el8.src.rpm -o dkms-2.6.1-1.el8.src.rpm
    rpmbuild --rebuild --clean dkms-2.6.1-1.el8.src.rpm # 从编译结果中找到生成的 RPM 包,/home/z/rpmbuild/RPMS
    sudo yum install -y /home/z/rpmbuild/RPMS/noarch/dkms-2.6.1-1.el8.noarch.rpm
    
    [ ! -d /media/cdrom ] && sudo mkdir /media/cdrom
    sudo mount | grep iso9660
    sudo umount /dev/cdrom \
    	mount -o exec /dev/cdrom /media/cdrom \
    	cd /media/cdrom/ \
    	./install

免密登陆 mac -> pvm

免密登陆的 2 个关键:

  1. 在于目标机器的 ~/.ssh/authorized_keys 文件中是否包含当前机器用户的 ~/.ssh/id_rsa.pub 文件中的内容。
  2. 限制 ~/.ssh 目录的权限为 700,~/.ssh/authorized_keys 文件的权限为 600。

如下:

mkdir -m 700 -p ~/.ssh
sudo su - && mkdir -m 700 -p ~/.ssh
# 将 id_rsa.pub 的内容 添加到要登陆机器的 authorized_keys 中
STATIC_IP="目的 IP 地址"
scp ~/.ssh/id_rsa.pub z@${STATIC_IP}:~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub root@${STATIC_IP}:~/.ssh/authorized_keys

反向免密登陆 pvm -> mac

设置方式与正向免密是一个道理,但其实并不需要设置,直接退出就回来了。

# ssh-keygen -t rsa 生成 id_rsa id_rsa.pub
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

过程中遇到如下问题

  • Parallels 15 才能正常安装(怀疑是 Parallels 14 与 MacOSX Catania 的兼容问题)
  • 手动安装 Parallels Tools(1. 需要先通网;2. 手动编译安装 dkms)
  • 通网,默认网络设备不再是 eth0
  • prlctl 执行 pvm 命令报错:How to fix ‘sudo: no tty present and no askpass program specified’ error? 这个错误是因为 /etc/sudoers 文件中尚未设置当前用户拥有 root 权限
微信公众号 / Vanilla-OpenResty