Install packager tools to do packaging on Fedora, seeing https://docs.fedoraproject.org/en-US/package-maintainers/Installing_Packager_Tools/.
Install the following packages.
$ sudo dnf install fedora-packager fedora-review
SSH keys
The type "ed25519" is accepted. See https://junaruga.hatenablog.com/entry/2021/04/08/054156. After setting the public key on https://accounts.fedoraproject.org/ , you need to wait for a hour for the public key setting to be actually set on the necessary servers in my experience.
Then you can download the RPM spec file (packaging recipe file).
$ fedpkg co hello Cloning into 'hello'... remote: Enumerating objects: 120, done. remote: Counting objects: 100% (120/120), done. remote: Compressing objects: 100% (76/76), done. remote: Total 120 (delta 51), reused 81 (delta 34), pack-reused 0 Receiving objects: 100% (120/120), 13.69 KiB | 4.56 MiB/s, done. Resolving deltas: 100% (51/51), done.
The default branch is "rawhide".
$ cd hello $ git branch * rawhide $ vi hello.spec
Mock
Here is the initial setting to use the mock command to build RPM package on a chroot environment.
$ sudo usermod -a -G mock jaruga
$ pwd /home/jaruga/fed/hello $ fedpkg srpm Downloading gnu-keyring.gpg ######################################################################## 100.0% Downloading hello-2.10.tar.gz ######################################################################## 100.0% setting SOURCE_DATE_EPOCH=1642636800 Wrote: /home/jaruga/var/pkg/fed/hello/hello-2.10-7.fc37.src.rpm
Build the SRPM file.
$ mock hello-2.10-7.fc37.src.rpm ... + exit 0 Finish: rpmbuild hello-2.10-7.fc37.src.rpm Finish: build phase for hello-2.10-7.fc37.src.rpm INFO: Done(hello-2.10-7.fc37.src.rpm) Config(default) 3 minutes 36 seconds INFO: Results and/or logs in: /var/lib/mock/fedora-35-x86_64/result Finish: run
The config file specified by mock
is in /etc/mock/*.cfg
. And the default config file used without mock -r CONFIG
option is the fedora-35.
$ ls -l /etc/mock/default.cfg lrwxrwxrwx. 1 root root 20 Dec 28 00:54 /etc/mock/default.cfg -> fedora-35-x86_64.cfg
But practically better to change like this. I much more often have built on the rawhide.
$ sudo rm default.cfg $ sudo ln -s fedora-rawhide-x86_64.cfg default.cfg $ sudo ln -s fedora-35-x86_64.cfg f35.cfg $ ls -l default.cfg f35.cfg lrwxrwxrwx. 1 root root 25 Feb 13 01:04 default.cfg -> fedora-rawhide-x86_64.cfg lrwxrwxrwx. 1 root root 20 Feb 13 01:04 f35.cfg -> fedora-35-x86_64.cfg
Then I see the "Error: GPG check FAILED". Fix it later.
$ mock hello-2.10-7.fc37.src.rpm ... GPG Keys are configured as: file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-36-primary, file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-36-primary, file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-35-primary Error: GPG check FAILED
Seeing /etc/mock/templates/fedora-rawhide.tpl
called in /etc/mock/fedora-rawhide-x86_64.cfg
, the gpgcheck is enabled as gpgcheck=1
. I checked the setting from the mock
command like this.
$ mock --debug-config | grep gpgcheck INFO: mock.py version 2.15 starting (python version = 3.10.2, NVR = mock-2.15-1.fc35)... Start(bootstrap): init plugins INFO: selinux enabled Finish(bootstrap): init plugins Start: init plugins INFO: selinux enabled Finish: init plugins INFO: Signal handler active Start: run 'gpgcheck=0\n' 'gpgcheck=1\n' 'gpgcheck=1\n' 'gpgcheck=1\n' 'gpgcheck=1\n' 'gpgcheck=1\n' 'gpgcheck=1\n'
As a temporary workflow, disable gpgcheck, but I didn't want to edit the /etc/mock/templates/fedora-rawhide.tpl
file to always use the latest updated file. So, I set the following user defined config file. The file is actually Python file.
$ cat ~/.config/mock.cfg # vim: set syntax=python: # Disable gpgcheck in `/etc/mock/templates/fedora-rawhide.tpl`. config_opts['dnf.conf'] = config_opts['dnf.conf'].replace('gpgcheck=1', 'gpgcheck=0')
I can see all the gpgcheck settings are disabled.
$ mock --debug-config | grep gpgcheck INFO: mock.py version 2.15 starting (python version = 3.10.2, NVR = mock-2.15-1.fc35)... Start(bootstrap): init plugins INFO: selinux enabled Finish(bootstrap): init plugins Start: init plugins INFO: selinux enabled Finish: init plugins INFO: Signal handler active Start: run 'gpgcheck=0\n' 'gpgcheck=0\n' 'gpgcheck=0\n' 'gpgcheck=0\n' 'gpgcheck=0\n' 'gpgcheck=0\n' 'gpgcheck=0\n' Finish: run
Building on mock is succeeded.
$ mock hello-2.10-7.fc37.src.rpm ... + exit 0 Finish: rpmbuild hello-2.10-7.fc37.src.rpm Finish: build phase for hello-2.10-7.fc37.src.rpm INFO: Done(hello-2.10-7.fc37.src.rpm) Config(default) 0 minutes 26 seconds INFO: Results and/or logs in: /var/lib/mock/fedora-rawhide-x86_64/result Finish: run