Flatpak是一个用于在各种Linux上分发桌面应用程序的框架,它可以让应用程序摆脱各种依赖包的版本限制,让开发者只需要构建一个Faltpak app,就可以在多种Linux系统中进行安装使用,Flatpak自带的沙箱将app与宿主系统其它部分隔离,并且可以支持一个应用的多个版本,这对用户的使用和app的开发者来说都带来了很大的方便,再也不用为依赖问题而发愁。
目前,Flatpak可以在大多数Linux发行版上安装使用,如openKylin、Arch、Debian等。Flathub是构建和托管Flatpak应用程序的主要仓库,一般下载Flatpak app都是从Flathub中进行的下载。Flathub是一个开源项目,它使用了falt-manager来管理软件源仓库。
在多数情况下,当我们只想在一个小范围内分发自己的Flatpak应用程序时,就需要搭建一个自己的Flatpak软件源,这篇文章就主要来介绍,如何使用flat-manager来搭建一个属于自己的简易软件源仓库, 下图是下载软件包时的一个简单流程:
PART.01 flat-manager 搭建
源码使用flat-manager-0.3.7 版本,源码地址如下:
https://github.com/flatpak/flat-manager/releases/tag/0.3.7
下载完成后进行解压, 执行下面的命令:
tar -xf flat-manager-0.3.7.tar.gz
源码包下载完成并解压后,需要安装软件包编译和使用所需要的依赖, 可以执行命令:
sudo apt-get install flatpak cargo python3-aiohttp ostree flatpak-builder postgresql-all libostree-dev libssl-dev git autoconf python3-tenacity python3-pbr libostree-dev
这里面 python3-pbr 如果下载不到的话,可以从其它版本中下载deb包然后安装。
在编译flat-manager时,需要下载软件包,这些软件包在国内下载的话会比较慢,所以可以配置成国内的软件源来进行下载。 新增文件: ~/.cargo/config, 文件内容为:
[source.crates-io]
#指定镜像
replace-with="sjtu"
#上海交通大学
[source.sjtu]
registry="https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"
[net]
git-fetch-with-cli=true
使用cargo 命令开始进行编译, 进入到flat-manager 的源码目录,在终端执行命令:
cargo build
flat-manager需要使用到postgres数据库,可以在终端执行下面两个命令,来进行数据库创建:
sudo -u postgres createuser $(whoami)
sudo -u postgres createdb --owner=$(whoami) repo
配置 .evn文件, 可以执行下面的命令:
cp example.env .env
配置config.json文件, 执行命令 :
cp example-config.json config.json
根据本地电脑的ip,增加ip地址,不进行ip设置的话,会使用127.0.0.1,默认端口号为8080,在config.json 中增加host字段, 可以根据需要自行修改。
使用ostree 创建仓库, 执行命令:
ostree --repo=repo init --mode=archive-z2
在终端开始flat-manger 服务端, 执行命令:
cargo run --bin=flat-manager
PART.02 创建自己的 Flatpak 应用程序
新建一个目录 test-build , 执行命令:
mkdir test-build
新建hello.sh文件, 文件内容为:
#!/bin/bash
echo "Hello World"
创建 org.flatpak.Hello.yml 文件, 文件内容为:
app-id: org.flatpak.Hello
runtime:org.freedesktop.Platform
runtime-version: '22.08'
sdk:org.freedesktop.Sdk
command: hello.sh
modules:
-name: hello
buildsystem: simple
build-commands:
- install -D hello.sh /app/bin/hello.sh
version: 1.0
sources:
- type: file
path: hello.sh
tag: '1.0'
首先我们需要先安装编译所需要的依赖, 需要依次执行下列命令:
flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak --user install org.freedesktop.Platform.Locale//22.08
flatpak --user install org.freedesktop.Sdk.Locale//22.08
flatpak --user install org.freedesktop.Platform//22.08 org.freedesktop.Sdk//22.08
注意事项:这些依赖中,带有Locale的软件包需要一个一个下载,一起下载会遇到下载失败的情况。
安装完依赖后就可以进行软件包编译, 执行命令:
flatpak-builder --repo=local-repo builddir org.flatpak.Hello.yml
PART.03 使用创建的仓库源进行提交和安装flatpak app
在flat-manager和自己的应用程序都配置完整后,这时候就可以将应用程序提交到仓库源中了,然后通过配置软件源来进行下载。
首先,创建一个token令牌, 执行命令:
cargo run --bin=gentoken -- --secret=secret --repo=stable
执行成功后会输出token, 是行很长的字符串,可以将这串字符串保存到 stable.token 文件中
创建请求,执行命令:
./flat-manager-client --token-file ./stable.token create http://172.30.50.56:8080 stable
输出结果为 :
http://172.30.50.56:8080/api/v1/build/3
这个结果在后面都需要用到, 需要记录下来。
push应用程序,执行命令:
./flat-manager-client --token-file ./stable.token push http://172.30.50.56:8080/api/v1/build/3 ./test-build/local-repo
添加commit,执行命令:
./flat-manager-client --token-file ./stable.token commit http://172.30.50.56:8080/api/v1/build/3
publish 发布应用程序,执行命令:
./flat-manager-client --token-file ./stable.token publish http://172.30.50.56:8080/api/v1/build/3
2.从自己创建的仓库源中下载Flatpak app
首先,在其它可以连接到仓库源地址的电脑中,添加自己配置的仓库源, 执行命令:
flatpak --user remote-add --no-gpg-verify my-flathub http://172.30.50.56:8080/repo/stable
下载在上面章节已经发布的应用程序 org.flatpak.Hello
执行命令:
flatpak --user install -y my-flathub org.flatpak.Hello
执行应用程序,终端执行命令:
flatpak run org.flatpak.Hello
验证执行是否成功,如果执行成功,则会在终端输出: Hello World,
到此,一个简单的本地Flatpak仓库源已经搭建完成,并且从仓库源中可以顺利的下载app软件到同一网段的用户环境中。通过这个过程,大家对Faltpak的仓库配置和使用有了一些基础的了解,想要更多更详细的配置,我们可以通过查看代码,修改配置文件,来搭建一个更深层次符合自己要求的服务端。
投稿作者 | 作者网站 |
---|---|
微信捐赠 | 支付宝捐赠 |
---|---|