Ubuntu 获取非本机主机上Debian包的依赖项列表
我正在维护和发布一个开源软件包,它需要为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生成(带有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列
--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)。尽管有一点隐秘,但所有这些都在优秀的文档中