
本文共 5095 字,大约阅读时间需要 16 分钟。
VMware vSphere 离线虚拟机安装软件
在 Debian 9.11 下 (apt-get) 离线下载、安装软件包
相当费劲,我只想说相当费劲,好家伙折腾了我一天,真的有些问题我很郁闷,在这里记录一下:
!!!!! 相当费劲!
1. 在 Debian 下,使用离线软件包源,安装 BIND9 依赖总是出错...出错...出错...
下载过程 - 联网的环境操作
这个问题相当头疼,最后还是解决了,解决的办法借用了网上的办法,因为依赖的问题非常麻烦,借鉴了一下网上的办法,然后自己改进了一下,最后解决了依赖下载的问题。
输入下边的指令:
$ sudo apt-get install --reinstall -d `sudo apt-cache depends bind9 bind9utils bind9-doc | grep Depends| cut -d: -f2 | tr -d "<>"`
出现了报错!.... 好像是因为版本的问题:
Reading package lists... DoneBuilding dependency tree Reading state information... DonePackage debconf-2.0 is a virtual package provided by: debconf 1.5.61 cdebconf 0.227You 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 dpkg-scanpackages ./software/ /dev/null | gzip > ./software/Packages.gz
以上的所有步骤都是在连接互联网的相同 Debian 操作系统版本的虚拟机环境进行操作的,需要将 /var/cache/apt/archives
文件下的所有内容复制到一个新的文件夹,使用的方法是创建一个虚拟共享文件夹,网上有很多这方面的教程,其路径为:
/mnt/hgfs/DNS
命令如下:
$ sudo cp -r /var/cache/apt/software /mnt/hgfs/DNS$ sudo chmod 777 -R /mnt/hgfs/DNS/sooftware
安装过程 - 离线的内网虚拟机操作
- 将上边的文件见拷贝到目标虚拟机的根目录下, 设置一个新的软件依赖源文件夹,目录路径为
/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
2. 在 Debian下,ISO 中文件保存在本地后文件名会莫名的发生变化
背景:
- 在离线的 Debian 虚拟机上没有安装
vsftpd
软件,无法通过 FTP 端口传输文件; - 不知道 怎么打开 Debian 预先安装的 FTP 服务软件,各种找不到相关文件传输服务;
- 最后通过命令
sudo nestat -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 下 使用 来制作...
最后将这个ISO文件挂载在 Debian CD ROM 上,最后 解压 压缩包
softwaretar.gz
就好了... 没错... 第一个.
也丢了不知道为什么...
3. 在 离线的环境 下安装 GCC 以及 Build-essential - Debian
我认为之前以为前两个问题已经很不可思议了,但是最少已经找到了对应的解决办法,因为 apt-get
提供了离线下载安装包及其依赖的办法,至少在没有搭建内网 软件源下载服务器 或者 安装光盘 的情况下,虽然麻烦,也是一种不错的解决办法;
就在我觉得这个方法已经可以一劳永逸地去解决在离线安装的相关问题时,我还是太菜了,安装非常重要的 gcc
以及 build-essential
的时候,我发现了这两个东西的依赖解决问题根本就不能通过上边的方法来进行解决,折磨了我一个下午的时间;
最后发现其实并不需要安装 GCC / Build-essential 也可以运行 queryperf
;
为了解决这个问题,我专门在 Vmware Fusion 软件上搭建一个完全相同的离线虚拟环境,就是为了把这两个东西一定装上,并且能够正确地编译 queryperf
;
我看了一下,网上关于这方面的资料是非常少的,基本上没有详细的介绍完整实现的流程,记录一下,希望看到这篇文章的你不要走我走过的老坑;
网上关于这方面的教程较少,参考 国外的论坛 比如: Stack Overflow 等论坛的方法有以下几种:
- 使用
apt-offline
生成sig
的文件进行安装; - 使用
apt-mirror
制作一个 自定义的镜像,来进行安装部署; - 自己做一个 CD 镜像源,简单粗暴;
- 参考的连接:
但是吧,我就是想折腾一下自己,顺着之前 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 脚本添加 执行权限~
/var/cache/apt $ sudo cat ./script.sh# /bin/bashgcc_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" if [ $? -ne 0] then echo $? exit 1 fidone/var/cache/apt $ sudo chmod +x ./script.sh
执行完上边的命令,我在 Debian 9.11.0 版本下安装是成功的,如果出现报错请根据相关的错误的错误类型进行处理,一般的错误可能是下载的包没有下载完全,重新下载即可~
现在已经完全安装 build-essential
的相关Packages了~
Enjoy it!
发表评论
最新留言
关于作者
