云网牛站
所在位置:首页 > Linux教程 > 安装和使用Packit:将你的项目自动打包到Fedora中

安装和使用Packit:将你的项目自动打包到Fedora中

2019-05-24 21:50:58作者:叶云稿源:云网牛站

Packit是一个CLI工具,可帮助你将上游项目自动打包到Fedora操作系统中,本文介绍安装和使用Packit的方法。

安装和使用Packit:将你的项目自动打包到Fedora中

 

前言

作为开发人员,你可能希望在Fedora中添加或更新你的包,如果你以前做过,你知道这不是一件容易的事,如果你还没有让我重申:这不是一件容易的事。

这正是packit可以提供帮助的地方:只需在上游存储库中配置一个配置文件,packit就会自动将你的软件打包到Fedora中,并在上游更新源代码时更新它。

此外,packit可以将SPEC文件的下游更改同步回上游存储库,如果在Fedora存储库中更改了包的SPEC文件,并且你希望将其同步到上游项目中,这可能很有用。

Packit还提供了一种基于上游存储库检出来构建SRPM包的方法,该方法可用于在COPR中构建RPM包。

最后但并非最不重要的是,packit提供了一个状态命令,此命令提供有关上游和下游存储库的信息,如拉取请求,发布和其他更多。

Packit还提供了另外两个命令:build和create-update。

packit build命令在Fedora构建系统中执行项目的生成构建 - koji,你可以使用选项-dist-git-branch来构建Fedora版本,packit create-updates命令使用选项-dist-git-branch为特定分支创建Bodhi更新。

 

安装Packit

使用dnf在Fedora上安装packit,直接运行以下命令:

sudo dnf install -y packit

参考:dnf命令_Linux dnf命令使用详解:新一代的RPM软件包管理器

 

Configuration

对于演示用例,我选择了colin的上游存储库,Colin(https://github.com/user-cont/colin)是一个检查容器,dockerfiles和容器映像的通用规则和最佳实践的工具。

首先,clone colin git存储库:

$ git clone https://github.com/user-cont/colin.git

$ cd colin

Packit希望在你的git存储库的根目录中运行。

Packit(https://github.com/packit-service/packit/)需要有关你的项目的信息,该信息必须存储在.packit.yaml文件的上游存储库中。

请参阅colin的packit配置文件:

$ cat .packit.yaml

specfile_path: colin.spec

synced_files:

-.packit.yaml

- colin.spec

upstream_project_name: colin

downstream_package_name: colins

说明:

specfile_path - 上游存储库中spec文件的相对路径(必需)。

synced_files - 上游仓库中文件的相对路径列表,用于在更新期间复制到dist-git。

upstream_project_name - 上游存储库的名称(例如,在PyPI中);这用于%prep部分。

downstream_package_name - Fedora中包的名称(必填)。

 

packit能做什么?

使用packit的先决条件是你在上游项目的git checkout的工作目录中。

在运行任何packit命令之前,你需要执行多个操作,这些操作对于将PR提交到上游或下游存储库以及访问Fedora dist-git存储库是必需的。

导出GitHub令牌取自 https://github.com/settings/tokens:

$ export GITHUB_TOKEN=<YOUR_TOKEN>

获取Fedora帐户系统(FAS)所需的Kerberos帐户:

$ kinit <yourname>@FEDORAPROJECT.ORG

导出从 https://src.fedoraproject.org/settings#nav-api-tab 获取的Pagure API密钥:

$ export PAGURE_USER_TOKEN=<PAGURE_USER_TOKEN>

Packit还需要fork令牌来创建拉取请求,该令牌取自 https://src.fedoraproject.org/fork/YOU/rpms/PACKAGE/settings#apikeys-tab。

通过运行来做到:

$ export PAGURE_FORK_TOKEN=<PAGURE_FORK_TOKEN>

或者将这些标记存储在~/.config/packit.yaml文件中:

$ cat ~/.config/packit.yaml

github_token: <GITHUB_TOKEN>

pagure_user_token: <PAGURE_USER_TOKEN>

pagure_fork_token: <PAGURE_FORK_TOKEN>

 

在Fedora中创建一个新的上游版本

第一个用例的命令称为proposal-update(https://github.com/jpopelka/packit/blob/master/docs/propose_update.md),该命令使用选定的或最新的上游版本在Fedora dist-git存储库中创建一个新的pull请求:

$ packit propose-update

INFO: Running 'anitya' versioneer

Version in upstream registries is '0.3.1'.

Version in spec file is '0.3.0'.

WARNING  Version in spec file is outdated

Picking version of the latest release from the upstream registry.

Checking out upstream version 0.3.1

Using 'master' dist-git branch

Copying /home/vagrant/colin/colin.spec to /tmp/tmptfwr123c/colin.spec.

Archive colin-0.3.0.tar.gz found in lookaside cache (skipping upload).

INFO: Downloading file from URL https://files.pythonhosted.org/packages/source/c/colin/colin-0.3.0.tar.gz

100%[===================>]     3.18M  eta 00:00:00

Downloaded archive: '/tmp/tmptfwr123c/colin-0.3.0.tar.gz'

About to upload to lookaside cache

won't be doing kinit, no credentials provided

PR created: https://src.fedoraproject.org/rpms/colin/pull-request/14

命令完成后,你可以在Fedora Pagure实例中看到基于最新上游版本的PR,一旦你查看它,它就可以合并。

安装和使用Packit:将你的项目自动打包到Fedora中

 

将下游更改同步回上游存储库

另一个用例是将下游更改同步到上游项目存储库。

用于此目的的命令称为sync-from-downstream(https://github.com/jpopelka/packit/blob/master/docs/sync-from-downstream.md),同步到上游存储库的文件在synced_files值下的packit.yaml配置文件中提到:

$ packit sync-from-downstream

upstream active branch master

using "master" dist-git branch

Copying /tmp/tmplvxqtvbb/colin.spec to /home/vagrant/colin/colin.spec.

Creating remote fork-ssh with URL git@github.com:phracek/colin.git.

Pushing to remote fork-ssh using branch master-downstream-sync.

PR created: https://github.com/user-cont/colin/pull/229

只要packit完成,你就可以看到上游存储库中Fedora dist-git存储库的最新更改,这可能是有用的,例如当Release Engineering执行批量重建时,他们会在Fedora dist-git存储库中更新你的SPEC文件。

安装和使用Packit:将你的项目自动打包到Fedora中

 

获取上游项目的状态

如果你是开发人员,你可能希望从上游和下游存储库获取有关最新版本,标记,拉取请求等的所有信息,Packit为此提供status命令:

$ packit status

Downstream PRs:

ID Title URL

14  Update to upstream release 0.3.1 https://src.fedoraproject.org//rpms/colin/pull-request/14

12  Upstream pr: 226 https://src.fedoraproject.org//rpms/colin/pull-request/12

11  Upstream pr: 226 https://src.fedoraproject.org//rpms/colin/pull-request/11

8  Upstream pr: 226 https://src.fedoraproject.org//rpms/colin/pull-request/8

Dist-git versions:

f27: 0.2.0

f28: 0.2.0

f29: 0.2.0

f30: 0.2.0

master: 0.2.0

GitHub upstream releases:

0.3.1

0.3.0

0.2.1

0.2.0

0.1.0

Latest builds:

f27: colin-0.2.0-1.fc27

f28: colin-0.3.1-1.fc28

f29: colin-0.3.1-1.fc29

f30: colin-0.3.1-2.fc30

Latest bodhi updates:

Update Karma status

colin-0.3.1-1.fc29 1 stable

colin-0.3.1-1.fc28 1 stable

colin-0.3.0-2.fc28 0 obsolete

 

创建SRPM

最后一个packit用例是基于上游项目的git checkout生成SRPM包,SRPM生成的packit命令是srpm:

$ packit srpm

Version in spec file is '0.3.1.37.g00bb80e'.

SRPM: /home/phracek/work/colin/colin-0.3.1.37.g00bb80e-1.fc29.src.rpm

 

Packit作为一个service

packit-service(https://github.com/packit-service/packit-service),在这种情况下,packit GitHub应用程序将安装到上游存储库中,packit将根据从GitHub或fedmsg收到的事件自动执行所有操作。

 

相关主题

希望阿里巴巴普惠体能够提供DEB/RPM软件包,附dpkg -b手动打包操作

精选文章
热门文章