linux - 是否可以从 Flutter linux 应用程序生成 linux .rpm 包?
问题描述
据我所知,Flutter for linux app 只针对snap
打包格式。
是否可以从颤振构建中生成.rpm
和.deb
(跨 Linux 平台)软件包?
请发布有关如何将 flutter-linux 应用程序打包为 RPM 包的任何帮助
解决方案
构建 RPM 和 DEB 是可行的,但过程相当复杂。我将尽我所能概述 RPM 的基本过程。制作 DEB 的过程大致相同,但有一些不同。我现在会坚持使用 RPM。
主要的痛点是要构建软件包,您需要特定的工具,这些工具仅在发行版上可用。因此,如果您想跨平台(例如在 ubuntu 机器上生成 RPM),我们需要使用 Docker。
- 创建一个
Dockerfile
我们将在其中安装rpm-build
包含构建 RPM 的所有工具的包的其中。
FROM centos:7
RUN yum install -y -q rpm-build
- 构建这个 dockerfile 并记住 docker 镜像,我们稍后会用到它。
- 执行以下命令
mkdir -p build/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
。这将创建所需的目录结构rpmbuild
- 创建一个 .spec 文件,该文件是
rpmbuild
命令的配置文件,并将其放在build/SPECS
目录中。该文件的内容非常特定于包必须执行的操作。RPM 非常灵活,可以做很多事情,从复制文件到在目标机器上运行复杂的 bash 脚本,再到在目标机器上执行编译和执行复杂的安装。以下是一些我觉得有用的指南:包指南、fedora 指南和redhat 指南。 - 下载您要打包的文件,它们通常以 tarball 的形式分发并放置在
build/SOURCES
目录中。 - 现在我们可以执行以下命令
docker run --rm -v $(pwd)/build:/rpmbuild {name of image} /bin/bash -c "cd /rpmbuild && rpmbuild --define '_topdir /rpmbuild' -ba SPECS/flutter.spec"
,我将分解命令。
docker run --rm -v $(pwd)/build:/rpmbuild {name of image}
- 我们从我们之前创建的镜像启动一个容器,并挂载build
我们的 .spec 和 .tar.gz 所在的目录,以便容器可以看到它们。--rm
完成后清理容器,因为在第一个命令之后我们不需要它。/bin/bash -c
- 这是一个技巧,因为我们需要在 docker 容器内执行 2 个命令,如果我们不这样做,我们的 shell 将&&
在命令之后docker
执行而不是传递给容器。"cd /rpmbuild && rpmbuild --define '_topdir /rpmbuild' -ba SPECS/flutter.spec"
- 移动到安装build
目录并构建 RPM 包。该-ba
选项告诉rpmbuild
构建二进制包和源包,以防您还需要源包。
- 如果一切顺利,您现在应该在目录中有一个 .rpm 文件
build/RPMS
和一个源包build/SRPMS
。
对于 DEB,过程几乎相同,除了您需要 debian 或 ubuntu docker 映像,您使用dpkg-deb
命令构建并且您需要一个control
文件而不是 .spec 文件(相同目的不同格式)
推荐阅读
- postgresql - 分组后反转列值
- angular - ng-template 中组件的 EventEmitter 被组件的不同实例捕获
- html - 无论我尝试什么,我都无法摆脱这个空间
- xamarin - 如何在 Xamarin Forms 的文本字段中显示数据库中的注册数据以进行更新
- ebpf - 从事件中分离 bpf 对象?
- laravel - 在 new() 中传递主键时在 Laravel 中加载模型对象
- java - 如何从递归 getHeight 方法修复堆栈溢出
- matlab - 如何在条形图之间添加距离线
- java - 跟踪中缀评估算法是什么意思?
- javascript - 如何在 RESTDataSource 请求中包含标头?