rpkg executable is a bridge between git and rpm.

This project provides rpkg command-line tool, which is an rpm packaging utility that works with both DistGit and standard Git repositories.

It can handle two basic types of directory content: packed and unpacked:

  • Packed (unexpanded) content is that composed of tarballs, patches, and a .spec file
  • Unpacked (expanded) content is that composed of plain source files and a .spec file

You can also use git submodules with any of the above options.

Some history: This project is a continuation of rpkg executable script that used to be provided by python-rpkg library/package. That library is called "rpkg" in some contexts, therefore we opted for name rpkg-util here on pagure and in Bugzilla as well (basically "rpkg-util" denotes source component of rpkg rpm package and the command-line tool).

Spec templates

This is an rpkg's extension to the standard rpm spec file syntax.

Spec templates make it possible to generate certain parts of your spec file automatically from a Git repository where your spec file is located.

An example spec template might look like this:

Name:       {{{ git_dir_name }}}
Version:    {{{ git_dir_version }}}
Release:    1%{?dist}
Summary:    This is a test package.

License:    GPLv2+
URL:        https://someurl.org
VCS:        {{{ git_dir_vcs }}}

Source:     {{{ git_dir_pack }}}

%description
This is a test package.

%prep
{{{ git_dir_setup_macro }}}

%changelog
{{{ git_dir_changelog }}}

Having a template like this in your project (instead of just a plain spec file) allows you to build rpm packages that automatically follow git history and the current content of your project. Read more here. If you just want to quickly start a new project with rpkg, go here. And if you are completely new to .spec files, you can find out a little bit more here.

Examples

Generate source rpm ("srpm"):

    $ rpkg srpm
    git_dir_pack: archiving /home/clime/rpkg-util:
    commit 77117acfc089de7eab46baa0308f46413e71b431 (HEAD -> master, tag: rpkg-util-3.beta-1)
    Author: clime <clime@fedoraproject.org>
    Date:   Fri Apr 30 18:22:21 2021 +0200

        mark beta version
    git_dir_pack: Wrote: /tmp/rpkg/rpkg-util-1-9dnhco7d/rpkg-util-77117acf.tar.gz
    Wrote: /tmp/rpkg/rpkg-util-1-9dnhco7d/rpkg-util.spec
    setting SOURCE_DATE_EPOCH=1619740800
    Wrote: /tmp/rpkg/rpkg-util-1-9dnhco7d/rpkg-util-3.beta-1.fc31.src.rpm

Run %prep phase of an rpm build:

    $ rpkg prep
    git_dir_pack: archiving /home/clime/rpkg-util:
    commit 77117acfc089de7eab46baa0308f46413e71b431 (HEAD -> master, tag: rpkg-util-3.beta-1)
    Author: clime <clime@fedoraproject.org>
    Date:   Fri Apr 30 18:22:21 2021 +0200

        mark beta version
    git_dir_pack: Wrote: /tmp/rpkg/rpkg-util-2-ts2unr3s/rpkg-util-77117acf.tar.gz
    Wrote: /tmp/rpkg/rpkg-util-2-ts2unr3s/rpkg-util.spec
    setting SOURCE_DATE_EPOCH=1619740800
    Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.NaPmFp
    + umask 022
    + cd /tmp/rpkg/rpkg-util-2-ts2unr3s
    + cd /tmp/rpkg/rpkg-util-2-ts2unr3s
    + rm -rf rpkg-util
    + /usr/bin/gzip -dc /tmp/rpkg/rpkg-util-2-ts2unr3s/rpkg-util-77117acf.tar.gz
    + /usr/bin/tar -xof -
    + STATUS=0
    + '[' 0 -ne 0 ']'
    + cd rpkg-util
    + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
    + RPM_EC=0
    ++ jobs -p
    + exit 0

For the following command, you need to have a project in COPR created. See quick tutorial here on how to do it.

    $ rpkg build
    git_dir_pack: archiving /home/clime/rpkg-util:
    commit 77117acfc089de7eab46baa0308f46413e71b431 (HEAD -> master, tag: rpkg-util-3.beta-1)
    Author: clime <clime@fedoraproject.org>
    Date:   Fri Apr 30 18:22:21 2021 +0200

        mark beta version
    git_dir_pack: Wrote: /tmp/rpkg/rpkg-util-3-793uxgm5/rpkg-util-77117acf.tar.gz
    Wrote: /tmp/rpkg/rpkg-util-3-793uxgm5/rpkg-util.spec
    setting SOURCE_DATE_EPOCH=1619740800
    Wrote: /tmp/rpkg/rpkg-util-3-793uxgm5/rpkg-util-3.beta-1.fc31.src.rpm
    Uploading package /tmp/rpkg/rpkg-util-3-793uxgm5/rpkg-util-3.beta-1.fc31.src.rpm
     |################################| 204.8 kB 266.8 kB/s eta 0:00:00Build was added to rpkg-util:
      https://copr.fedorainfracloud.org/coprs/build/2157665
    Created builds: 2157665

Other useful commands that you can use:

  • rpkg lint to check the .spec file and the overall package conformance to RPM standard
  • rpkg local to locally build the package into an rpm
  • rpkg upload to upload a new source to DistGit lookaside cache
  • rpkg pull/push/clone/log/... to have an easy access to basic git operations
  • rpkg ... (see rpkg --help or man rpkg)

Warning

Do not put sensitive data into directory with your sources, otherwise they might get published together with them.

Credits