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