Packit是一个CLI工具,可帮助你将上游项目自动打包到Fedora操作系统中,本文介绍安装和使用Packit的方法。
前言 作为开发人员,你可能希望在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,一旦你查看它,它就可以合并。
将下游更改同步回上游存储库 另一个用例是将下游更改同步到上游项目存储库。 用于此目的的命令称为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为此提供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收到的事件自动执行所有操作。
相关主题 |