180 likes | 255 Views
RPM Packaging 101. Tanner Lovelace Triangle Linux Users Group 11/Jan/2003. Outline. Package Management Basics RPM Package Management Basics Creating Your Own RPM Packages Creating RPM Packages of Downloaded Programs Advanced RPM Packaging. Package Management Basics .
E N D
RPM Packaging 101 Tanner Lovelace Triangle Linux Users Group 11/Jan/2003
Outline • Package Management Basics • RPM Package Management Basics • Creating Your Own RPM Packages • Creating RPM Packages of Downloaded Programs • Advanced RPM Packaging
Package Management Basics • Why use package management? • OpenBSD base doesn’t • Most Linux systems do • Keeps track of system packages • Files • Descriptions • Checksums • Other… • Allows easy upgrades and uninstalls
RPM Package Management Basics • Developed by Redhat • Dominant distribution at the time was Slackware • Slackware has packages, but not really a package management system • RPM was a big advance over Slackware • Current stable version is 4.1 • Most commonly used version today is 4.0.x • We will be covering 4.0.x
RPM Package Concepts • Pristine Sources • Most Linux software downloaded from the Internet • Any distribution specific customizations should be kept separately in patches • Makes it easier to handle new versions • Reproducible Builds • Building and packaging should be easy and reproducible • Shell script automation
Common RPM Installation Commands • Installation • rpm –ihv <package name> • Upgrade • rpm –Uhv <package name> • Freshen • rpm –Fhv <package names…> • Erase • rpm –e <package name>
Other Common RPM Commands • Query • rpm –q[option] <package name> • -qi = Query Package Information • -ql = List Package Files • -qf = Query which package a file belongs to. • --queryformat – Construct Special Query • --querytags – List available tags • -p – Specify non-installed rpm package • -a – Query all installed files
Other Common RPM Commands • Verify • rpm –V[option] <package name> • Compare information about installed package files with information stored in rpm database and note any discrepencies. • Compares size, MD5 sum, permissions, type, owner, and group of each package file • Signature checking • rpm {-K|--checksig} <package name> • Checks package gpg/pgp signature • Conversion to cpio • rpm2cpio cpio converts rpm files to cpio streams
Setting up the RPM Build Environment • NEVER BUILD RPMs AS ROOT!!! • ~/.rpmmacros • %_topdir /path/to/rpm/build/env • I typically use ~/RPM • Optional temp directory • %_tmppath /path/to/tmp • Create directories • ~/RPM/BUILD • ~/RPM/RPMS/<arch> • ~/RPM/RPMS/noarch • ~/RPM/SOURCES • ~/RPM/SPECS • ~/RPM/SRPMS
Creating Your Own RPMs • rpmbuild command • rpmbuild –ba – build binary and source rpms • rpmbuild –bb – build binary rpm • rpmbuild –bs – build source rpm • Before version 4, the rpm command was used instead of rpmbuild. • Compatibility aliases in 4.0 • Aliases removed in 4.1 (Redhat 8.0) • Need source files, patches (if any) and a spec file. • Source and patch files go in SOURCES/ • Spec file goes in SPECS/
RPM Spec Files • Instructions for building and packaging an rpm. • Building – set of shell scripts • Packaging – General info, lists of files, etc. • Divided into sections • Headers (unlabeled section) • %description • %prep • %build • %install • %files • Others
Creating RPMs Examples • See Pinky and the Brain Examples at http://home.fnal.gov/~dawson/rpms/howto/index.html • Sub package example • Example of how to “rpm-ify” a package. • Patching • Conditional building
References • References will go here when presentation goes online..