VMware vSphere 离线虚拟机安装 BIND 9
VMware vSphere 离线虚拟机安装软件
「 2021 年 6 月 18 日更新」
在之前的博客中,因为我是在Windows下进行操控虚拟机的,首先,我自己本人对Windows操作系统并不是非常了解,因此折腾了不少精力,当把整个环境切换到了Mac OSX 我真的觉得整个人都是飞起来的感觉;效率提升不是一点点,作为一名资深果粉,我真的非常推荐你使用Mac系列进行工作;
在离线的环境下,你需要解决以下几个非常关键的问题:
- 如果你公司内部没有自己的内网私有镜像源,那么就需要考虑自己手动下载安装包和离线进行手动安装,这个时候就会涉及到依赖 (Depends) 的问题,依赖往往可以劝退很多新手,最开始往往是最难的,但是只要你愿意去解决那么问题就一定可以解决;
- 对于我个人来说,Vmware 的 Vsphere 是非常陌生的一个东西,因此自己在这么长时间的使用过程中,遇到了很多坑,因此这里也记录下来,希望看到这篇文章的你能够少走弯路;主要涉及的问题方面是:
- Vsphere 怎么快速、方便地把本地的文件传递给远程虚拟主机;
- Vsphere Client 在 MacOSX 环境下怎么访问;
- Mac OSX 中怎么切换网络环境,做到访问外网和内网的切换问题;
这些在网上我搜索了一下,鲜有非常明晰的教程,因为我刚刚解决了一系列问题,希望记录下来,能够帮助到也有同样困惑的你;
「 如果真的觉得我所写的博客有用,还请点一下右下角的❤️~」
1. 在 Debian 9.11 下 (apt-get) 离线下载、安装软件包
1.1 Debian 离线环境下解决安装软件中的依赖问题
下载过程 - 联网的Debian环境操作
这个问题相当头疼,最后还是解决了,解决的办法借用了网上的办法,因为依赖的问题非常麻烦,借鉴了一下网上的办法,然后自己改进了一下,最后解决了依赖下载的问题。
输入下边的指令:
$ sudo apt-get install --reinstall -d `sudo apt-cache depends bind9 bind9utils bind9-doc | grep Depends| cut -d: -f2 | tr -d "<>"`
出现了报错!.... 好像是因为版本的问题:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package debconf-2.0 is a virtual package provided by:
debconf 1.5.61
cdebconf 0.227
You should explicitly select one to install.
E: Package 'debconf-2.0' has no installation candidate
- 改进一下上边的命令,将
debconf
包进行跳过,即不进行安装;
$ sudo apt-get install --reinstall -d `sudo apt-cache depends bind9 bind9utils bind9-doc | grep Depends| grep -v debconf |cut -d: -f2 | tr -d "<>"`
- 就可以正常下载了,最后再下载上边没有下载成功的
debconf
,所有的安装包都被安装在了
$ sudo apt-get install --reinstall -d debconf cdebconf
- 当然,最后不要忘记使用
dpkg-scanpackages
命令 为所有的包添加索引文件,因为apt-get
是建立在dpkg
工具索引上的;
添加的命令为:(所有的软件和依赖被保存在 /var/cache/apt/archives
),因为之后创建的文件夹名为:software
,因此这里的命令是在文件夹中创建一个包的索引文件 Packages.gz
:
/var/cache/apt $ sudo cp ./archives ./software
/var/cache/apt $ sudo chmod 777./software
/var/cache/apt $ sudo dpkg-scanpackages ./software/ /dev/null | gzip > ./software/Packages.gz
以上的所有步骤都是在连接互联网的相同 Debian 操作系统版本的虚拟机环境进行操作的,需要将 /var/cache/apt/archives
文件下的所有内容复制到一个新的文件夹,使用的方法是创建一个虚拟共享文件夹,网上有很多这方面的教程,其路径为:/mnt/hgfs/DNS
;
设置的过程非常简单,即在 Vmware Fusion 设置一个共享文件夹路径,Vmware 就会自动创建一个共享文件夹用来虚拟机和主机进行连接和传递文件,非常方便,就不用配置非常复杂的:samba 软件了;
/mnt/hgfs/DNS
命令如下:
$ sudo cp -r /var/cache/apt/software /mnt/hgfs/DNS
$ sudo chmod 777 -R /mnt/hgfs/DNS/software
安装过程 - 离线的内网虚拟机操作
- 将上边的文件见拷贝到目标虚拟机的根目录下, 设置一个新的软件依赖源文件夹,目录路径为
/software
$ ls /
...
software
...
- 修改 离线虚拟机
apt
的 源配置文件,你可以将原来的内容注释掉,加入新的目标文件夹路径;
$ sudo nano /etc/apt/sources.list
# deb http://security.debian.org/debian-security buster/updates main
# deb-src http://security.debian.org/debian-security buster/updates main
# 新加上一个新的路径
deb file:/// software/
注意: software 前有一个空格!!!!
- 最后必须要更新一下源,中间可能有很多信息,不去管他们:
$ sudo apt-get update
- 就可以正常使用离线软件源下载了,但是因为这个离线软件源并没有配置
Release
文件信息,因此被认为是不安全的,需要安装的时候加上--allow-unauthenticated
:
$ sudo apt-get install bind9 bind9utils bind9-doc --allow-unauthenticated
1.2 在 Debian 下,ISO 中文件保存在本地后文件名会莫名的发生变化
背景:
- 在离线的 Debian 虚拟机上没有安装
vsftpd
软件,无法通过 FTP 端口传输文件; - 不知道 怎么打开 Debian 预先安装的 FTP 服务软件,各种找不到相关文件传输服务;
- 最后通过命令
sudo netstat -lntp
查找了一下服务打开的端口,好家伙端口都没有,算了,就自己制作 ISO 文件挂载安装传递; - 最后只能通过挂载
iso
镜像文件来做到vSphere
客户端与esxi
服务端的文件传递;
问题重现:
在上边的步骤已经生成了新的文件夹: /software
,现在需要将这个文件夹做成 iso
文件挂在在虚拟机上的 CD ROM 上传输数据,源文件名的截图如下:
源文件名: libxml2_2.9.4+dfsg1-2.2+deb9u3_amd64.deb
生成的 包索引文件名: Packages.gz
制作成 ISO 镜像之后在 Debian 系统 打开之后文件名悄然变化:
挂载到 Debian 系统上,之后的文件名: libxml2_294+dfsg1-22+deb9u.deb
丢失了第一个 .
;
索引包的文件名变成了: package.gz
第一个字母没有大写;
原因分析:
- 可能是 MAC OS 环境下的文件命名问题,我并不认为是 Debian 文件系统的设定问题,所以其原因我更偏向于 MAC OS 文件系统的问题 或者其他原因,查了一下资料我也搞不懂.... 反正确实在实际过程中有这个问题存在导致软件包安装失败;
解决方法:
-
将准备拷贝的文件夹压缩成一个压缩包,就上边生成的
software
文件夹为例子:/var/cache/apt$ tar -zcvf software.tar.gz ./software
-
将这个文件制作成一个 ISO 文件, 制作的方法: 在 Mac 下 使用 Keka 来制作...
-
最后将这个ISO文件挂载在 Debian CD ROM 上,最后 解压 压缩包
softwaretar.gz
就好了... 没错... 第一个.
也丢了不知道为什么...
1.3 在 离线的环境 下安装 GCC 以及 Build-essential - Debian
我认为之前以为前两个问题已经很不可思议了,但是最少已经找到了对应的解决办法,因为 apt-get
提供了离线下载安装包及其依赖的办法,至少在没有搭建内网 软件源下载服务器 或者 安装光盘 的情况下,虽然麻烦,也是一种不错的解决办法;
就在我觉得这个方法已经可以一劳永逸地去解决在离线安装的相关问题时,我还是太菜了,安装非常重要的 gcc
以及 build-essential
的时候,我发现了这两个东西的依赖解决问题根本就不能通过上边的方法来进行解决,折磨了我一个下午的时间;
问题是没解决!!
最后发现其实并不需要安装 GCC / Build-essential 也可以运行 queryperf
;
为了解决这个问题,我专门在 Vmware Fusion 软件上搭建一个完全相同的离线虚拟环境,就是为了把这两个东西一定装上;
我看了一下,网上关于这方面的资料是非常少的,基本上没有详细的介绍完整实现的流程,记录一下,希望看到这篇文章的你不要走我走过的老坑;
网上关于这方面的教程较少,参考 国外的论坛 比如: Stack Overflow 等论坛的方法有以下几种:
- 使用
apt-offline
生成sig
的文件进行安装; - 使用
apt-mirror
制作一个 自定义的镜像,来进行安装部署; - 自己做一个 CD 镜像源,简单粗暴;
- 参考的连接:https://ubuntuqa.com/zh-tw/article/151.html
- https://blog.csdn.net/ubuntu64fan/article/details/8522181
但是吧,我就是想折腾一下自己,顺着之前 apt-get install
命令继续做下去;
因为涉及到循环依赖相关问题,需要写一个 SHELL 脚本进行处理,当然,我现在其实不会写 SHELL 脚本,拼凑一下,问题不大!
1.执行一下下边的相关命令,在联网的虚拟机上执行下边的命令下载离线安装包:
$ sudo apt-get install -d --reinstall build-essential
...
The following NEW packages will be installed:
binutils build-essential dpkg-dev fakeroot g++ g++-6 gcc gcc-6
libalgorithm-diff-perl lgorithm-diff-xs-perl libalgorithm-merge-perl
libasan3 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 libdpkg-perl
libfakeroot libfile-fcntllock-perl libgcc-6-dev libitm1 liblsan0 libmpx2
libstdc++-6-dev libtsan0 libubsan0 linux-libc-dev make manpages-dev patch
...
2.在 /var/cache/apt
目录下运行下边的脚本,记得给 SHELL 脚本添加 执行权限~
添加对应权限命令为: chmod a+x ./script
/var/cache/apt $ sudo cat ./script.sh
# /bin/bash
gcc_require=("make" "patch" "libalgorithm-diff-perl" "libalgorithm-diff-xs-perl" "libalgorithm-merge-perl" "libdpkg-perl" "binutils" "dpkg" "libasan" "libubsan" "libcilkrts" "libmpx" "libtsan" "liblsan" "libitm" "libgcc" "libcc1-0" "gcc-" "gcc_" "libc-dev-bin" "linux-libc-dev" "libc6-dev" "libstdc" "g++-" "g++_" "build-essential" "libfakeroot" "libalgorithm")
for i in ${gcc_require[*]}
do
# 根据你下载安装包的文件夹路径进行修改
dpkg -i /var/cache/apt/archives/$i*.deb | grep "error"
done
/var/cache/apt $ sudo chmod +x ./script.sh
执行完上边的命令,我在 Debian 9.11.0 版本下安装是成功的,如果出现报错请根据相关的错误的错误类型进行处理,一般的错误可能是下载的包没有下载完全,重新下载即可~
现在已经完全安装 build-essential
的相关Packages了~
在 Debian 9.11 环境下验证以上的过程安装的GCC是没有报错问题的;
2. 使用 FileZilla 来进行文件传输
只要你的虚拟机是一个SSH服务器,那么就可以通过FileZilla软件连接远程虚拟机的22端口,并通过 22端口 - sftp
进行文件的传输,这种方式就比直接挂载 ISO 镜像好一点,就是更方便了,省去了需要重复制作镜像的麻烦;
但是在这个过程中,需要注意几个问题:
- 第一个问题: 登录远程虚拟机的账户建议是:
root
账户,拥有对根目录以及系统目录下文件的相关修改权限,这样在之前的相关步骤中的文件夹上传和配置步骤就会变得非常方便; - 第二个问题:因为我们使用 SSH 服务进行登录,因此在连接的时候必须要指定端口为:
22
,这样就可以直接成功连接远程虚拟机上的SSHD服务了~
思来想去,还是举一个例子,这个例子从EVE-NG模拟器的例子中来,我的 EVE-NG 的IP地址 - 172.16.2.10
用这个 IP 地址的模拟器模拟一下内网的环境;
因此,打开 FileZilla
应用程序,根据下图:
3. 在 Mac OSX 中进行切换网络环境 - 内网/公网
因为我的电脑涉及到在公网和内网的工作的问题,我从 2015年购买了我的第一台 Macbook Pro 笔记本电脑,我从来没有使用过网线,所以我真的不是很懂在 Mac OSX 怎么使用网线连接内网,这里我简单说一下 Mac OSX 的相关网络配置;
我的操作系统版本为:macOS Big Sur Version 11.4
我们都一般使用 Wi-Fi 来进行外网的连接,因此连接外网都是非常简单的,保持你的默认配置就好了~ 保持 Wi-Fi
来进行网络连接,并且并不需要额外进行相关的配置操作,因此非常简单的;
如下图所示:你只需关注 Wi-Fi 的相关配置就好了;
当你想要使用 USB 进行内网网络连接,这个时候需要进行一些手动配置;
-
创建一个新的 Locaiton (区域),我自己把这个区域命名成为: 内网
-
单击左下角的:“+” 并选择:
USB-10/100/1000 LAN
注意!!⚠️ 在这里你必须检查你的电脑已经连接上了网线,并且网线转换器的灯是持续闪亮的;
-
单击之后你就可以创建一个新的 USB 物理连接了,但是现在需要重新配置一下,比较关键的信息:
- 内网的 DNS 服务器;
- 内网的 IP 地址;
- 内网的 网关地址;
- 如果不需要手动配置,那么就需要选择自己的DHCP服务器;
这里就不再截图了,因为涉及到一些比较敏感的信息,如果有什么问题,还是欢迎联系我的 Email;
这里存在一个来回切换 Locaiton 的问题,在Mac OSX 之前我从来都不需要切换我自己的网络环境,但是现在需要牵扯到切换网络环境的问题,因此就变得非常棘手;
在 Mac OSX 上并没有可以挂起的轻量级的应用程序,因此对于切换网络区域是非常不方便的,因此可以开发一个新的 Mac App 来做到对网络区域的便捷切换;
暂时给这个应用起一个名字:
- TODO:HotNetz