对于一些不能访问Internet的服务器,需要通过离线安装软件。通过制作ubuntu本地源,可以实现通过apt install来离线安装软件。
1.首先需要在能访问网络的机器上,将需要安装的软件包及依赖下载到本地。
以安装expect为例:
mkdir packages
cd packages
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances tcl | grep "^\w" | sort -u)
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances tk | grep "^\w" | sort -u)
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances expect | grep "^\w" | sort -u)
若碰到类似下面的错误
W: Download is performed unsandboxed as root as file '/home/dongsongz/local/packages/cdebconf_0.213ubuntu1_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
执行chown _apt:root ../packages/
然后重新下载(上面apt-get download三条命令)
dpkg-scanpackages . | gzip -9c > Packages.gz
Command 'dpkg-scanpackages' not found, but can be installed with:
apt install dpkg-dev
tar -zcf ubuntu_local_package.tar.gz packages/
2.将ubuntu_local_package.tar.gz拷贝到目标机器进行离线安装
tar zxf ubuntu_local_package.tar.gz -C localPackages/
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb [trusted=yes] file:///home/dongsongz/local/localPackages/packages/ ./" > /etc/apt/sources.list
/home/dongsongz/local/localPackages/packages/替换为实际解压的路径
apt clean all
apt update
apt install -y tcl tk expect
3.安装完毕,测试一下
#/usr/bin/expect
spawn ssh [email protected]
expect {
"*yes/no" {
send "yes\n"
expect "*password:" {
send "letmein\r"
}
}
"*password:" {
send "letmein\r"
}
}
expect "*#"
send "ls"
interact
expect -f login.sh
spawn ssh [email protected]
[email protected]'s password:
Last login: Tue Jul 21 19:18:36 2020 from ............
[root@cdh1 ~]#
登录成功~