NEWS

新闻

了解openKylin最新资讯,关注社区和产品动态。

NEWS

Learn about the latest news.

【小白课程】如何在openKylin中搭建自己的Flatpak软件源仓库

2023-10-24 09:32:53

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 搭建

1.源码下载

源码使用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

2.安装依赖

源码包下载完成并解压后,需要安装软件包编译和使用所需要的依赖, 可以执行命令:

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包然后安装。

3.配置cargo 的国内源

在编译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

4.开始编译

使用cargo 命令开始进行编译, 进入到flat-manager 的源码目录,在终端执行命令:

cargo build

5.配置数据库

flat-manager需要使用到postgres数据库,可以在终端执行下面两个命令,来进行数据库创建:

sudo -u postgres createuser $(whoami)
sudo -u postgres createdb --owner=$(whoami) repo

6.更改配置

配置 .evn文件, 可以执行下面的命令:

cp example.env  .env

配置config.json文件, 执行命令 :

cp example-config.json  config.json

根据本地电脑的ip,增加ip地址,不进行ip设置的话,会使用127.0.0.1,默认端口号为8080,在config.json 中增加host字段, 可以根据需要自行修改。

7.添加远程仓库

使用ostree 创建仓库, 执行命令:

ostree --repo=repo init --mode=archive-z2

8.启动应用程序

在终端开始flat-manger 服务端, 执行命令:

cargo run  --bin=flat-manager

PART.02

创建自己的 Flatpak 应用程序

1.编写源码文件

新建一个目录 test-build , 执行命令:

mkdir test-build

新建hello.sh文件, 文件内容为:

#!/bin/bashecho "Hello World"

2.编写配置文件

创建 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'

3.编译Flatpak应用程序

首先我们需要先安装编译所需要的依赖, 需要依次执行下列命令:

flatpak --user remote-add --if-not-exists flathub  
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和自己的应用程序都配置完整后,这时候就可以将应用程序提交到仓库源中了,然后通过配置软件源来进行下载。

1.上传 flatpak app到搭建的仓库源中

首先,创建一个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,如图:

openKylin(开放麒麟)


到此,一个简单的本地Flatpak仓库源已经搭建完成,并且从仓库源中可以顺利的下载app软件到同一网段的用户环境中。通过这个过程,大家对Faltpak的仓库配置和使用有了一些基础的了解,想要更多更详细的配置,我们可以通过查看代码,修改配置文件,来搭建一个更深层次符合自己要求的服务端。