我正在尝试编写一个使用一些非 shell 内置命令(例如expect
)的脚本,并且我计划离线使用它。
通常,我可以expect
使用 Fedora 安装sudo yum install expect
或使用 Ubuntu 安装sudo apt install expect
。
但我想下载expect
软件包,一切都取决于使用sudo apt-cache depends expect
(学习后取决于使用...)sudo apt download <depends>
。
我尝试了一下并下载了一些.deb
文件。我也尝试过这个:
从文件中提取
data.tar
文件.deb
(我不想使用,dpkg -i <some_pkg.deb>
因为我没有一直成功,我想在 Fedora 中使用它 - 它没有使用dpkg
-)。使用提取所有文件
tar -xhf data.tar -C ~/demo
最后我使用手动复制系统目录中的所有文件
cp -rPn ~/demo/bin/* /bin ~/demo/etc/* /etc ...
但是当我这样做时——特别是.deb
在 Fedora 中使用这种类型的包——时,我得到了segmentation fault (core dumped)
错误并且我的系统死机了。
我知道我正在尝试不推荐且危险的方法来实现我的目标,但是有没有办法(特别是备份命令,例如/usr/bin/expect
及其所有依赖)来离线使用它?
答案1
您可以尝试alien
它将在不同的包系统之间转换包。
它不是万无一失的,依赖关系将适用,并且可能存在其他问题,但值得一试。
答案2
不要尝试跨发行版混合和匹配软件包,除非在最简单的情况下,否则它不太可能可靠地工作。
相反,请使用目标发行版的工具。您已经了解了如何在基于 Debian 的发行版上下载软件包及其依赖项;这在基于 Fedora 的发行版上也是可能的。下载expect
并全部其依赖项,创建临时根目录和临时下载目录,并告诉下载安装在临时根目录中dnf
所需的软件包:expect
mkdir /tmp/expectroot
mkdir /tmp/expectdeps
sudo dnf install --installroot /tmp/expectroot \
--downloadonly --downloaddir /tmp/expectdeps \
--releasever 32 expect
(酌情替换“32”)。
然后,无论目标系统上现有的依赖项如何,您都将在/tmp/expectdeps
.