我在锁定的公司环境中工作,我需要安装最新的 MonoDevelop (http://www.monodevelop.com/download/linux/)在完全离线的环境中。我能够访问网络来完成我需要做的任何事情,但我需要以某种方式生成一组文件,我可以使用闪存驱动器或其他介质来携带这些文件,以便我可以在 RHEL 7.2 计算机上执行安装。
该flatpak build-bundle
命令看起来很有希望,但它似乎无法在在线存储库中工作。由于 MonoDevelop 是从 flatpakref 安装的,所以我一直无法弄清楚到底如何做到这一点。我需要在本地镜像整个存储库吗?如果是这样,因为 flatpakref 文件还引用了运行时 Gnome 存储库,我是否也需要对其进行镜像?
我真正喜欢的是安装这个,然后以某种方式导出一个包。对于以前版本的 MonoDevelop,我们能够使用 repotrack 来查找所有相关的 RPM 并手动将其引入,但现在它们已经转移到 flatpak,这似乎并不那么容易。
答案1
2020 年 11 月更新:在 Flatpak 1.7.1+ 中,有一个新的 cmdline 选项
--sideload-repo
和不同的离线存储库路径。还重新措辞了答案,尝试缩小整体规模。
2020 年 6 月更新:我对离线存储库的位置不够具体。为避免疑义,脱机存储库中摘要文件的完整路径应为:/.ostree/repos.d/myoffline_repo/summary
。下面澄清了说明。还发现离线存储库的链接必须位于同一文件系统上。
2020 年 5 月更新:记下两个使 Flatpak 离线使用变得痛苦的问题。
请注意两个导致使用离线 Flatpak 存储库变得困难的问题:
安装使用离线存储库扩展的 Flatpaks 时,有一个错误会导致出现问题:当两个存储库中存在相同的扩展引用时,Flatpak 会感到困惑离线工作时,您会创建第二个存储库来镜像在线存储库,因此无法避免此错误。这意味着离线计算机上未安装所需的扩展。检查是否属于这种情况的最佳方法是比较健康的在线系统与离线系统上安装的内容
flatpak list
。显着差异可能表明离线系统需要额外的扩展。当您安装某些东西时,Flatpak 会列出它将要安装的内容,以便您也可以通过这种方式进行比较。在离线系统上,它将无法列出扩展名。某些 Flatpaks 会在安装过程中尝试下载文件(额外数据),如果主机始终处于离线状态,则会失败:从 flatpak create-usb 离线安装时无法下载 libopenh264 其中一个示例是 openh264 扩展,该扩展在安装过程中从 cisco.com 下载。您可以通过将所需的下载放在正确的位置以便 flatpak 无需下载即可找到它们来规避此问题:“~/.local/share/flatpak/extra-data/$SHA256/$FILENAME”。然而,确切的文件名取决于 flatpak 的配置。找出问题的一种方法是使用 strace 安装有问题的flaptak,并针对额外数据路径查找 ENOENT。 shas 和文件名会在版本/更新之间发生变化,因此您必须持续更新它。
博客文章“关于 Flatpak 安装” (blogs.gnome.org)
官方 GNOME 博客上的 mclasen 表示这正是它的用途flatpak create-usb
- 它创建包含应用程序的远程存储库的镜像,并将捆绑所有依赖项。您甚至可以create-usb
多次重复该步骤,以将更多应用程序推送到新存储库,然后再转移到离线主机。您也不必使用 USB 记忆棒,您可以根据需要将存储库传输到目标计算机。
从您将构建离线存储库的计算机开始:您要镜像的远程服务器将需要一个集合 ID 和后续的 Flatpak 更新。如果您尝试从 flathub 打包应用程序,作者给出了一个示例:
# Configure the remote
flatpak remote-modify --collection-id=org.flathub.Stable flathub
# Force an update
flatpak update
# Package up GIMP (for example)
flatpak create-usb ./ org.gimp.GIMP
作者解释了为什么需要这些步骤:
如果您没有将集合 ID 添加到远程配置中,您将收到一条错误消息,提示“远程‘flathub’没有设置集合 ID”。如果省略 flatpak 更新,错误将显示“存储库中没有这样的分支(org.flathub.Stable,ostree-metadata)”。
.ostree
尽管谈到了 USB 记忆棒,但这会在当前目录下留下一个存储库。
现在您已经有了一个离线存储库,您想在安装 flatpaks 时使用它。根据您的 Flatpak 版本,此处存在差异。
Flatpak 1.7.1+
从 Flatpak 1.7.1 开始最新文档USB 驱动器将离线存储库称为旁载存储库。文档说您可以--sideload-repo
在命令行指定,使用他们的新 systemd 单元或
或者,可以使用放置在系统范围或用户特定目录中的符号链接来指定旁加载源,然后这些源将用于所有 Flatpak 操作,而不需要 --sideload-repo 选项。
这是指flatpak命令参考 内容如下:
此类存储库是通过在安装目录的 sideload-repos 子目录(即通常为 /var/lib/flatpak/sideload-repos)中创建指向 sideload 源的符号链接来配置的。此外,可以在 /run/flatpak/sideload-repos 中创建符号链接,这是非持久源的更好位置(因为它在重新启动时被清除)。这些符号链接可以指向指定给 flatpak create-usb 的目录(默认情况下写入子路径 .ostree/repo),也可以直接指向 ostree 存储库。
永久设置的最佳选择是在下面创建符号链接
/var/lib
。作为一个示例,Flatpak 应该能够offline_flatpak
在此处找到您的存储库摘要:
/var/lib/flatpak/sideload-repos/offline_flatpak/summary
前面提到的 systemd 单元似乎只是扫描新插入的驱动器并将符号链接放在下面,/run/flatpak/...
如果您真正使用 USB 驱动器,这可能就足够了。
Flatpak <1.7.1
Flatpak 有一个存储库查找器机制,在查找存储库或其镜像时不仅会考虑远程,还会考虑某些本地路径。您只需将镜像仓库放在目标机器上的正确位置,Flatpak 就可以使用它。 Flatpak 将在每个安装中搜索以下目录中的存储库:
.ostree/repo
ostree/repo
.ostree/repos.d/
ostree/repos.d/
因此,您可以将存储库复制到 USB 并将其粘贴到目标计算机中,或者将文件复制到例如/.ostree/repo
以使用根文件系统。
需要明确的是,如果您选择使用,/.ostree/repos.d
那么您的离线存储库的摘要文件应该位于/.ostree/repos.d/myoffline_repo/summary
。
您还可以在任何这些目录中使用符号链接并将真实文件放在其他地方,例如
mkdir -p /.ostree/repos.d
ln -s /home/user/Downloads/.ostree/repo /.ostree/repos.d/myoffline_repo
但请注意,链接必须指向相同的文件系统,否则 flatpak 将不会使用它。
另请注意,Flatpak 将优先选择它能找到的最新存储库,无论是哪个。
最后
当然,您仍然必须记住将原始存储库添加到目标计算机(在本例中为 flathub) - 并设置集合 ID。这是因为镜像存储库中的所有内容都是通过引用原始集合 ID 来存储的。在目标机器上:
flatpak remote-add flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak remote-modify --collection-id=org.flathub.Stable flathub
如果目标确实离线,您可以从 .flatpakrepo 文件添加远程,而不是使用 URL:
flatpak remote-add --if-not-exists flathub flathub.flatpakrepo
# Download file from https://flathub.org/repo/flathub.flatpakrepo
然后您可以继续在目标计算机上正常安装:
flatpak install flathub org.gimp.GIMP
如果有任何问题:
- 在 cmd 前面尝试 sudo ,以防其权限阻止 flatpak 到达您的存储库。
- 您可以将开关添加
--ostree-verbose
到 flatpak cmd,以查看 ostree 的调试,了解可能存在的问题。 - 您可以检查 ostree 存储库以
ostree summary -v --repo=REPO
查看其中实际内容。
答案2
请参阅此博客,了解如何离线安装 flatpak: https://blogs.gnome.org/mclasen/2018/08/26/about-flatpak-installations/
Flatpaks 原始文档引用了其中的内容: https://docs.flatpak.org/en/latest/usb-drives.html?highlight=offline
享受 ;-)