linux_wiki:rpm_building

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
linux_wiki:rpm_building [2015/10/22 22:15]
billdozor [Spec Example: Custom Scripts]
linux_wiki:rpm_building [2019/05/25 23:50] (current)
Line 4: Line 4:
  
 How to create RPM packages from source files. How to create RPM packages from source files.
 +
 +Resources:
 +  * [[https://fedoraproject.org/wiki/How_to_create_an_RPM_package]]
 +  * [[https://fedoraproject.org/wiki/Using_Mock_to_test_package_builds]]
  
 **Checklist** **Checklist**
-  * Distro: Enterprise Linux 6.x+  * Distro(s): Enterprise Linux 6
  
 ---- ----
Line 12: Line 16:
 ====== Setup Build Environment ====== ====== Setup Build Environment ======
  
-  * Add the [[linux_wiki:epel_repo|EPEL Repo]].+  * Add the [[linux_wiki:repos#epel|EPEL repo]].
  
   * Install packages   * Install packages
Line 21: Line 25:
   * Create a user that will build rpms (regular user)   * Create a user that will build rpms (regular user)
 <code bash> <code bash>
-useradd rpmbuild +useradd builder 
-passwd rpmbuild+passwd builder
 </code> </code>
  
   * Login as user, create rpm build tree   * Login as user, create rpm build tree
 <code bash> <code bash>
-su - rpmbuild+su - builder
 rpmdev-setuptree rpmdev-setuptree
 </code> </code>
-  * This creates a tree structure like: /home/rpmbuild/rpmbuild/+  * This creates a tree structure like: ~/rpmbuild/
    * BUILD    * BUILD
    * RPMS    * RPMS
Line 44: Line 48:
  
 ===== Source Example: Custom Scripts ===== ===== Source Example: Custom Scripts =====
 +
 +Follow the "Custom Scripts" example in each section to create a custom RPM that contain your own directories and shell scripts.
  
 Create your directory structure: Create your directory structure:
Line 49: Line 55:
 mkdir -p ~/myscripts-1.0.0/opt/myscripts mkdir -p ~/myscripts-1.0.0/opt/myscripts
 </code> </code>
 +  * Note: Everything under "myscripts-1.0.0/" will end up being the normal file system path. Re-create all system paths that you need.
  
 Copy scripts into the directory Copy scripts into the directory
Line 68: Line 75:
  
 ===== Source Example: Xymon ===== ===== Source Example: Xymon =====
 +
 +Follow the "Xymon" examples in each section to build a RPM for the Xymon monitoring server and client. ([[https://www.xymon.com/]])
  
 Download source files, place a copy in rpmbuild's SOURCES directory. Download source files, place a copy in rpmbuild's SOURCES directory.
-  * Download the Xymon tar file +  * Download the Xymon tar file<code bash>wget http://downloads.sourceforge.net/project/xymon/Xymon/4.3.21/xymon-4.3.21.tar.gz</code> 
-    * <code bash>wget http://downloads.sourceforge.net/project/xymon/Xymon/4.3.21/xymon-4.3.21.tar.gz</code> +  * Extract<code bash>tar -zxvf xymon-4.3.21.tar.gz</code> 
-  * Extract +  * Copy the original tar file into rpmbuild's SOURCES<code bash>cp ~/xymon-4.3.21.tar.gz ~/rpmbuild/SOURCES/</code> 
-    * <code bash>tar -zxvf xymon-4.3.21.tar.gz</code> +  * Copy all files but "xymon.spec" from the xymon-4.3.21/rpm directory into SOURCES<code bash>cp ~/xymon-4.3.21/rpm/xymon-client* ~/rpmbuild/SOURCES/
-  * Copy the original tar file into rpmbuild's SOURCES +
-    * <code bash>cp ~/xymon-4.3.21.tar.gz ~/rpmbuild/SOURCES/</code> +
-  * Copy all files but "xymon.spec" from the xymon-4.3.21/rpm directory into SOURCES +
-    * <code bash>cp ~/xymon-4.3.21/rpm/xymon-client* ~/rpmbuild/SOURCES/+
 cp ~/xymon-4.3.21/rpm/xymon-init.d ~/rpmbuild/SOURCES/ cp ~/xymon-4.3.21/rpm/xymon-init.d ~/rpmbuild/SOURCES/
 cp ~/xymon-4.3.21/rpm/xymon.logrotate ~/rpmbuild/SOURCES/</code> cp ~/xymon-4.3.21/rpm/xymon.logrotate ~/rpmbuild/SOURCES/</code>
Line 114: Line 119:
 Create spec file: vim ~/rpmbuild/SPECS/myscripts.spec Create spec file: vim ~/rpmbuild/SPECS/myscripts.spec
 <code bash> <code bash>
-Don't create debug package +Package information
-%define          debug_package %{nil} +
 Name: myscripts Name: myscripts
 Version: 1.0.0 Version: 1.0.0
 Release: 1%{?dist} Release: 1%{?dist}
 Summary: My Custom Scripts Summary: My Custom Scripts
- +License: GPL+ 
-License: GPL +Source0: %{name}-%{version}.tar.gz
-URL: www.mysite.com +
-SOURCE0: %{name}-%{version}.tar.gz+
  
 %description %description
 These are my custom scripts used for fun things. These are my custom scripts used for fun things.
  
 +# Don't create debug package
 +%define  debug_package %{nil}
 +
 +# prep => remove previous build and extract source file (.tar.gz) to the builddir
 %prep %prep
 %setup -q %setup -q
  
 +# build => ./configure && make files in builddir; No building for shell scripts required
 %build %build
-# No building for scripts required. 
  
 +# install => make install ; read files from builddir, write to buildrootdir. 
 +# Nothing to make install, so do a manual clean, mkdir, and copy.
 %install %install
-rm -rf $RPM_BUILD_ROOT +rm -rf %{buildroot} 
-mkdir -p $RPM_BUILD_ROOT +mkdir -p %{buildroot} 
- +cp -a * %{buildroot}
-# From Build Dir +
-cp -a * $RPM_BUILD_ROOT+
  
 +# clean => remove files from buildrootdir; redundant in Fedora, EPEL still requires this
 %clean %clean
-rm -rf $RPM_BUILD_ROOT+rm -rf %{buildroot}
  
-Set directory and file attributes on same line as which files to include in RPM+files => set file permissions, owner, group, and what files/dirs to include
 %files %files
-%attr(755, root, users) %dir /opt/myscripts +%attr(755, root, root) /opt/myscripts
-%attr(750, root, users) /opt/myscripts/*.sh+
  
-Changelog notes => Format of date and summary lines important.+changelog => RPM itself, not software's changelog
 %changelog %changelog
 * Thu Oct 22 2015 Robert Jones <rjones.email.com> 1.0.0-1 * Thu Oct 22 2015 Robert Jones <rjones.email.com> 1.0.0-1
-- Initial custom scripts build +- Initial custom scripts packaging
 </code> </code>
  
Line 365: Line 369:
 RPM Build Command RPM Build Command
 <code bash> <code bash>
-rpmbuild -ba /home/rpmbuild/rpmbuild/SPECS/myapp.spec+rpmbuild -ba ~/rpmbuild/SPECS/myapp.spec
 </code> </code>
  
Line 413: Line 417:
 ====== Mock to Test Dependencies ====== ====== Mock to Test Dependencies ======
  
 +  * **More Details**: [[https://fedoraproject.org/wiki/Using_Mock_to_test_package_builds]]
 +
 +\\
 Mock is used to rebuild binary RPMs from source RPMs in a clean environment to ensure you are not missing any dependencies in your SPEC file. Mock is used to rebuild binary RPMs from source RPMs in a clean environment to ensure you are not missing any dependencies in your SPEC file.
 +\\ 
  
 Install mock Install mock
-<code bash>yum install mock</code>+<code bash> 
 +yum install mock 
 +</code>
  
 +\\
 Add user to the mock group Add user to the mock group
-<code bash>usermod -a -G mock rpmbuild</code>+<code bash> 
 +usermod -a -G mock builder 
 +</code>
  
-**TODO**+\\ 
 +Set default mock config of the type of repos you are building for (ie EPEL 6, Fedora 23, etc) 
 + 
 +Example: Set default config to EPEL 6 x86_64 
 +<code bash> 
 +cd /etc/mock 
 +ln -sf epel-6-x86_64.cfg default.cfg 
 +</code> 
 + 
 +\\ 
 +Go to where your source RPMs were built and run mock against that package 
 +<code bash> 
 +cd ~/rpmbuild/SRPMS 
 +mock --rebuild myscripts-1.0.0-1.el6.src.rpm 
 +</code> 
 + 
 +\\ 
 +Results location is displayed (/var/lib/mock/epel-6-x86_64/result/) in the above example. 
 +<code bash> 
 +ls -l /var/lib/mock/epel-6-x86_64/result 
 +total 172 
 +-rw-rw-r-- 1 builder mock   4500 Oct 16 07:32 build.log 
 +-rw-rw-r-- 1 builder mock   2740 Oct 16 07:32 myscripts-1.0.0-1.el6.src.rpm 
 +-rw-rw-r-- 1 builder mock   2524 Oct 16 07:32 myscripts-1.0.0-1.el6.x86_64.rpm 
 +-rw-rw-r-- 1 builder mock 153606 Oct 16 07:32 root.log 
 +-rw-rw-r-- 1 builder mock    782 Oct 16 07:32 state.log 
 +</code>
  
 ---- ----
  • linux_wiki/rpm_building.1445566531.txt.gz
  • Last modified: 2019/05/25 23:50
  • (external edit)