首页 > 解决方案 > 是否可以从 Flutter linux 应用程序生成 linux .rpm 包?

问题描述

据我所知,Flutter for linux app 只针对snap打包格式。

是否可以从颤振构建中生成.rpm.deb(跨 Linux 平台)软件包?

请发布有关如何将 flutter-linux 应用程序打包为 RPM 包的任何帮助

标签: linuxflutter

解决方案


构建 RPM 和 DEB 是可行的,但过程相当复杂。我将尽我所能概述 RPM 的基本过程。制作 DEB 的过程大致相同,但有一些不同。我现在会坚持使用 RPM。

主要的痛点是要构建软件包,您需要特定的工具,这些工具仅在发行版上可用。因此,如果您想跨平台(例如在 ubuntu 机器上生成 RPM),我们需要使用 Docker。

  1. 创建一个Dockerfile我们将在其中安装rpm-build包含构建 RPM 的所有工具的包的其中。
FROM centos:7

RUN yum install -y -q rpm-build
  1. 构建这个 dockerfile 并记住 docker 镜像,我们稍后会用到它。
  2. 执行以下命令mkdir -p build/{BUILD,RPMS,SOURCES,SPECS,SRPMS}。这将创建所需的目录结构rpmbuild
  3. 创建一个 .spec 文件,该文件是rpmbuild命令的配置文件,并将其放在build/SPECS目录中。该文件的内容非常特定于包必须执行的操作。RPM 非常灵活,可以做很多事情,从复制文件到在目标机器上运行复杂的 bash 脚本,再到在目标机器上执行编译和执行复杂的安装。以下是一些我觉得有用的指南:包指南fedora 指南redhat 指南
  4. 下载您要打包的文件,它们通常以 tarball 的形式分发并放置在build/SOURCES目录中。
  5. 现在我们可以执行以下命令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构建二进制包和源包,以防您还需要源包。
  1. 如果一切顺利,您现在应该在目录中有一个 .rpm 文件build/RPMS和一个源包build/SRPMS

对于 DEB,过程几乎相同,除了您需要 debian 或 ubuntu docker 映像,您使用dpkg-deb命令构建并且您需要一个control文件而不是 .spec 文件(相同目的不同格式)


推荐阅读