rpms: install build deps with yum-builddep and srpm
authorMichael Meffie <mmeffie@sinenomine.net>
Fri, 20 Mar 2020 18:54:58 +0000 (14:54 -0400)
committerMichael Meffie <mmeffie@sinenomine.net>
Fri, 20 Mar 2020 18:54:58 +0000 (14:54 -0400)
Normally, one could just run yum-builddep with the SRPM, and have
everything you need to build the rpms. Sadly, the kernel-devel
and elfutils-devel (needed only on rhel/centos 8), are hidden
under the build_modules conditional, so are not included as
requirements for the SRPM.

The workarounds are to install the srpm into your local workspace and
run yum-builddep against the unpacked spec file (which seems to work) or
to just manually install the kernel module deps separately.

This is yet another reason it would be better to have a separate spec
file for the kernel module builds.

admin/InstallingOpenAFSonCentOS7.mdwn
devel/HowToBuildOpenAfsRpmPackages.mdwn

index 76a7f6d..7e5dd9f 100644 (file)
@@ -138,10 +138,12 @@ paths.
     $ tar xf openafs-<version>-src.tar.bz2 --strip-components=4 '*/makesrpm.pl'
     $ perl makesrpm.pl openafs-<version>-src.tar.bz2 openafs-<version>-doc.tar.bz2 RELNOTES-<version> ChangeLog
 
-    $ rpm -iv openafs-<version>-1.src.rpm
-    $ sudo yum-builddep ~/rpmbuild/SPECS/openafs.spec
+    $ sudo yum-builddep openafs-<version>-1.src.rpm
 
-    $ rpmbuild -bb --define "build_modules 0" ~/rpmbuild/SPECS/openafs.spec
+    $ rpmbuild --rebuild \
+        --define "build_userspace 1" \
+        --define "build_modules 0" \
+        openafs-<version>-1.src.rpm
 
 where `<version>` is the OpenAFS version you wish to install, e.g. "1.8.5".
 
@@ -272,10 +274,31 @@ The OpenAFS kernel module must match your kernel version.  Unless you are mainta
 a local `yum` repository that tracks every single kernel release and updates its kmod builds,
 you will want to use the DKMS mechanism for installing the the kernel module.  If
 you are installing on a freshly patched machine, be sure to reboot before installing
-the OpenAFS kernel module.  Assuming you are using the same set of packages built earlier:
+the OpenAFS kernel module.
 
-    # yum install -y dkms gcc kernel-devel kernel-headers
-    # yum install -y openafs-<version>-1.el7.x86_64.rpm openafs-client-<version>-1.el7.x86_64.rpm openafs-krb5-<version>-1.el7.x86_64.rpm dkms-openafs-<version>-1.el7.x86_64.rpm
+    $ sudo yum install rpm-build yum-utils make perl libtool bzip2 wget
+
+    $ wget https://www.openafs.org/dl/openafs/<version>/openafs-<version>-src.tar.bz2
+    $ wget https://www.openafs.org/dl/openafs/<version>/openafs-<version>-doc.tar.bz2
+    $ wget https://www.openafs.org/dl/openafs/<version>/RELNOTES-<version>
+    $ wget https://www.openafs.org/dl/openafs/<version>/ChangeLog
+
+    $ tar xf openafs-<version>-src.tar.bz2 --strip-components=4 '*/makesrpm.pl'
+    $ perl makesrpm.pl openafs-<version>-src.tar.bz2 openafs-<version>-doc.tar.bz2 RELNOTES-<version> ChangeLog
+
+    $ sudo yum-builddep openafs-<version>-1.src.rpm
+    $ sudo yum install "kernel-devel-uname-r == $(uname -r)"
+    $ sudo yum install elfutils-devel
+
+    $ rpmbuild --rebuild openafs-<version>-1.src.rpm
+
+    $ sudo yum install -y dkms gcc kernel-devel kernel-headers
+    $ cd ~/rpmbuild/RPMS/x86_64
+    $ sudo yum install -y \
+        openafs-<version>-1.el7.x86_64.rpm \
+        openafs-client-<version>-1.el7.x86_64.rpm \
+        openafs-krb5-<version>-1.el7.x86_64.rpm \
+        dkms-openafs-<version>-1.el7.x86_64.rpm
 
 ### Client side configuration
 
index 71a0dbf..11b67b8 100644 (file)
@@ -13,10 +13,6 @@ Upgrade your kernel to the most recent version:
     $ sudo yum update kernel
     $ sudo reboot                   # if updated
 
-Install the kernel-devel package for your running kernel.
-
-    $ sudo yum install "kernel-devel-uname-r == $(uname -r)"
-
 Install the packages required to build the OpenAFS source RPM (SRPM):
 
     $ sudo yum install rpm-build yum-utils make perl libtool bzip2 wget
@@ -40,10 +36,11 @@ Download the source distribution files from [openafs.org][3].  Four files are
 provided in a release; a source tarball, a documentation tarball, release
 notes, and a change log. Extract the `makesrpm.pl` script from the source
 tarball and then run `makesrpm.pl` to build the source RPM (SRPM). The
-resulting SRPM will be placed in the current directory.  Install the SRPM in
-your package workspace. Use the `yum-builddeps` to install the build
-dependencies. Run `rpmbuild` to build the binary RPMs.  The resulting RPMs will
-be placed in `~/rpmbuild/RPMS`.
+resulting SRPM will be placed in the current directory.  Install the build
+dependencies with `yum-builddeps`, plus the kernel module build dependencies
+(which will not be installed with `yum-builddeps` due to some quirks of the
+OpenAFS spec file.) Finally, run `rpmbuild` to build the binary RPMs.  The
+resulting RPMs will be placed in `~/rpmbuild/RPMS`.
 
     # Download source release.
     $ wget https://www.openafs.org/dl/openafs/1.8.5/openafs-1.8.5-src.tar.bz2
@@ -55,14 +52,12 @@ be placed in `~/rpmbuild/RPMS`.
     $ tar xf openafs-1.8.5-src.tar.bz2 --strip-components=4 '*/makesrpm.pl'
     $ perl makesrpm.pl openafs-1.8.5-src.tar.bz2 openafs-1.8.5-doc.tar.bz2 RELNOTES-1.8.5 ChangeLog
 
-    # Install build dependencies and build the binary RPMs.
-    $ rpm -iv openafs-1.8.5-1.src.rpm
-    $ sudo yum-builddep ~/rpmbuild/SPECS/openafs.spec
-    $ rpmbuild -bb ~/rpmbuild/SPECS/openafs.spec
-
-If the build dependencies are already installed, you can let rpmbuild install
-the source RPM and build the packages in one step:
+    # Install build dependencies.
+    $ sudo yum-builddep openafs-1.8.5-1.src.rpm
+    $ sudo yum install "kernel-devel-uname-r == $(uname -r)"
+    $ sudo yum install elfutils-devel                         # if RHEL/CentOS 8
 
+    # Build RPMs.
     $ rpmbuild --rebuild openafs-1.8.5-1.src.rpm
 
 ## Method 2: Building from a git checkout
@@ -80,7 +75,9 @@ release or pre-release tag, or a commit based on a stable branch.  Run the
 `regen.sh` tool to generate the `configure` script, then run `configure` to
 generate the makefile. (The `configure` options given in this step are not used
 to generate the binaries; those are defined in the spec file.)  The resulting
-source RPM will be placed in the `./packages` directory.
+source RPM will be placed in the `./packages` directory.  Install the build
+dependencies with `yum-builddep` and then build the binary RPMs with
+`rpmbuild`.
 
     $ sudo yum install git make krb5-devel
 
@@ -93,14 +90,12 @@ source RPM will be placed in the `./packages` directory.
     $ make dist
     $ make srpm
 
-    # Install build dependencies and build the binary RPMs.
-    $ rpm -iv packages/openafs-1.8.5-1.src.rpm
-    $ sudo yum-builddep ~/rpmbuild/SPECS/openafs.spec
-    $ rpmbuild -bb ~/rpmbuild/SPECS/openafs.spec
-
-If the build dependencies have already been installed, you can let rpmbuild
-install the source RPM and build the packages in one step:
+    # Install build dependencies.
+    $ sudo yum-builddep packages/openafs-1.8.5-1.src.rpm
+    $ sudo yum install "kernel-devel-uname-r == $(uname -r)"
+    $ sudo yum install elfutils-devel                         # if RHEL/CentOS 8
 
+    # Build RPMs.
     $ rpmbuild --rebuild packages/openafs-1.8.5-1.src.rpm
 
 ## Build options
@@ -117,11 +112,19 @@ both the userspace and kernel modules are built.
 
 To build all of the packages except the OpenAFS kernel module:
 
-    $ rpmbuild -bb --define "build_userspace 1" --define "build_modules 0" ~/rpmbuild/SPECS/openafs.spec
+    $ rpmbuild \
+      --rebuild \
+      --define "build_userspace 1" \
+      --define "build_modules 0" \
+      openafs-<version>-<release>.src.rpm
 
 To build only the OpenAFS kernel module for the currently running kernel:
 
-    $ rpmbuild -bb --define "build_userspace 0" --define "build_modules 1" ~/rpmbuild/SPECS/openafs.spec
+    $ rpmbuild \
+      --rebuild \
+      --define "build_userspace 0" \
+      --define "build_modules 1" \
+      openafs-<version>-<release>.src.rpm
 
 Specify the `kervers` option to build kernel modules for specific kernel
 versions.  Install `kernel-devel` packages for the versions you wish to build.
@@ -135,6 +138,8 @@ older kernel versions.
     kernel-devel-3.10.0-957.27.2.el7.x86_64
     kernel-devel-3.10.0-1062.12.1.el7.x86_64
 
+    $ rpm -i openafs-<version>-<release>.src.rpm
+
     $ rpmbuild \
       -bb \
       --define "build_userspace 0" \
@@ -314,7 +319,6 @@ To build OpenAFS packages from a git checkout:
     $ git clone git://git.openafs.org/openafs.git
     $ cd openafs
     $ afsutil package
-    $ ls packages
 
 The `afsutil package` command will build packages for the userspace and kernel
 modules by default. See the `--build` option to build these separately.