Ubuntu 获取非本机主机上Debian包的依赖项列表

Ubuntu 获取非本机主机上Debian包的依赖项列表,ubuntu,package,debian,cross-compiling,Ubuntu,Package,Debian,Cross Compiling,我正在维护和发布一个开源软件包,它需要为Windows和Linux构建。我选择使用mingw进行交叉编译,并使用Debian软件包为我的Windows软件包构建和维护二进制文件。也就是说,我已经定义了Debian体系结构mingw-i686和mingw-amd64,对dpkg cross和一些Debian安装脚本进行了轻微修改,以说明PE命名方案(*.dll,*.dll.a而不是.so.和*.so),并开始构建 这进行得非常顺利,直到最近,我还可以根据安装计划,即需要为我的软件包安装的.deb列

我正在维护和发布一个开源软件包,它需要为Windows和Linux构建。我选择使用mingw进行交叉编译,并使用Debian软件包为我的Windows软件包构建和维护二进制文件。也就是说,我已经定义了Debian体系结构mingw-i686和mingw-amd64,对dpkg cross和一些Debian安装脚本进行了轻微修改,以说明PE命名方案(*.dll,*.dll.a而不是.so.和*.so),并开始构建

这进行得非常顺利,直到最近,我还可以根据安装计划,即需要为我的软件包安装的.deb列表,使用Inno setup轻松构建Windows安装程序。此列表由chroot-ed-apt-get生成(带有
--print-uri
),如下所示:

/projects/www/debian/dev/pool/dists/experimental/main/base/libfreetype6_2.4.4-1+mingw.1_mingw-amd64.deb
/projects/www/debian/dev/pool/dists/experimental/main/base/libwxmsw2.8_2.8.10.1-3.1_mingw-amd64.deb
[...]
基本上,我是用apt来解决依赖关系,用Inno安装来完成安装

当然,mingw-i686没有真正的debian系统,所以我无法在本地运行apt。我已经破解了一个解决方案,将必要的文件放入一个目录,并使用
apt get-o RootDir=
将apt的根目录更改为这个目录。这是有效的,因为apt从未真正进入该目录,只在那里查找其数据库

最近,一个新的apt版本被推到了Debian测试中,这个apt版本实际上是在RootDir中执行chroot操作的。因此,我的RootDir解决方案变得不切实际,建立一个合适的chroot需要做大量的工作


有人知道我怎样才能以其他方式得到包裹清单吗?也就是说,获取非本机体系结构上特定包的.deb及其所有依赖项的列表

我通过修复apt找到了解决方案

我遇到了两个不同的问题:首先,国外版本的apt目前似乎在测试中被打破,因为multi-arch dpkg还没有出现。Apt尝试调用
dpkg——打印外部架构
,但失败了,因为它是一个多拱dpkg调用,而dpkg还不远。这必须通过明确设置APT::Architectures来解决

其次,我只能通过将apt称为:

APT_CONFIG=apt.conf apt-get
并使用此配置文件:

APT::Architecture "@ARCH@";
APT::Architectures { "@ARCH@"; }
Dir::State      "@TREE@/var/lib/apt";
Dir::Cache      "@TREE@/var/cache/apt";
Dir::Etc        "@TREE@/etc/apt";
Dir::Parts      "@TREE@/etc/apt/apt.conf.d";
Dir::State::status "@TREE@/var/lib/dpkg/status";
APT::Get::Assume-Yes    "true";
将@TREE@替换为我准备好的、干净的apt树,将@ARCH@替换为我的架构(mingw-i686)。尽管有一点隐秘,但所有这些都在优秀的文档中