如何使用 dpkg 在不同于根目录 (/) 的自定义文件夹中安装 .deb 包?

如何使用 dpkg 在不同于根目录 (/) 的自定义文件夹中安装 .deb 包?

我必须.deb在子目录中安装一些软件包,即/opt/corbos-linux/2.4.4/sysroots/x86_64-pokysdk-linux/。此文件夹应用作新的根目录。我尝试使用以下方法安装这些软件包

dpkg --root=/opt/corbos-linux/2.4.4/sysroots/x86_64-pokysdk-linux/ -i *.deb

但出现了这个错误:

dpkg: error: unable to access dpkg status area: No such file or directory

如果我给

dpkg --instdir=/opt/corbos-linux/2.4.4/sysroots/x86_64-pokysdk-linux/ -i *.deb

大多数软件包都会出现此错误:

dpkg (subprocess): admindir must be inside instdir for dpkg to work properly

一些额外的信息:所有命令都以 root 权限执行,并在包含.deb包的文件夹中执行(请注意,如果我只是运行dpkg -i *.deb,例如,,/home/folder_containing_debs包安装正确,但不在我想要的位置)。操作系统是 Ubuntu 16.04.6 LTS(x86-64 架构)

答案1

你可能在找这个:

dpkg-deb -x $YourDebFile $TARGET_DIRECTORY

# Example 
dpkg-deb -x <file_name>.deb /opt/corbos-linux/2.4.4/sysroots/x86_64-pokysdk-linux/

发现于此处


更新: --- 您可以使用简单的命令行循环安装所有“.deb”包。

例如,这是您当前的“文件和文件夹”并且您要将所有这些.deb文件安装到/home/username/testing/目录中:

some_deb_file.deb
another_file.deb
other/
testing/

为此,您可以运行以下命令:

ls -1 | grep [.]deb >> all_debs.txt
cat all_debs.txt | while read fn; do dpkg-deb -x $fn /home/username/testing; done
rm all_debs.txt

代码解释:


  1. 我们创建一个文件,其中all_debs.txt包含所有文件名。.deb在我们的案例中,文件看起来如下: 注意:如果您的一个包依赖于另一个包,那么您可以编辑此文件并根据需要排列文件名。
some_deb_file.deb
another_file.deb
  1. 我们在文件内部循环,取行(“文件名”),并利用结构进行安装dpkg-deb -x <file_name> <path>
  2. 删除我们一开始创建的文件。

书呆子的一行代码:)

ls -1 | grep [.]deb >> all_debs.txt && cat all_debs.txt | while read fn; do dpkg-deb -x $fn /home/username/testing; done && rm all_debs.txt

希望对你有帮助!祝你有个愉快的一天!:D

答案2

一行代码即可在一个文件夹中安装多个 deps:

ls -1 *.deb | xargs -i sudo dpkg-deb -x {} /path/to/folder

ls 将列出 deb 包,xargs 循环遍历列表并执行 dpkg-deb 命令,用列表中的文件名替换 {}

相关内容