Winter 2011 SBR600 Weekly Schedule
Previous semester: Fall 2010 SBR600 Weekly Schedule
Contents
Week 1 (Jan 10) - Introduction, Building from Source, and Creating RPM Packages
Tuesday
Welcome
- About this course
- Introductions
Intro to SBR600 - Software Build & Release
- Brief overview of the Build & Release process
- Introduction to Free Software and Open Source
- Introduction to the Fedora Project
- Fedora Project
- Fedora ARM Secondary Architecture project at Seneca and at the Fedora Project
- Course Layout
- Project-based course
- Working with Open Source
- Working with the Fedora Project
- Communication Tools
- Course Outline
- How this Course Works
- SBR600 Communication Tools
- How coursework is submitted in SBR600
- FUDCon Tempe 2011 trip
- Selection of attendees
- Visit to the CDOT Area
To Do
By Wednesday, January 12:
Thursday
Using make
RPM Packages
- Differences between managing RPMS and Installing from Source
- RPMS provide a database of installed software
- Let you determine what's installed
- Automatic management of dependencies
- Identify the origin of files
- Permit easy update or removal
- Enable you to verify installation (useful for spotting file corruption and intrusions)
- RPMS provide a database of installed software
- Contents of an RPM Package
The RPM Database
Layout of a specfile
- Basic Sections
- preamble - basic metadata
- %prep - commands to prepare the package for building
- %build - commands to build the package
- %install - commands to install the built files
- %check - commands to check/test the built files (optional, often not included)
- %clean - commands to clean up the disk space
- %files - list of files to be included in the pacakge
- %changelog - record of the package's change-history
- Scriptlets
- %pre -- run before installation
- %post -- run after installation
- %preun -- run before uninstallation
- %postun -- run after uninstallation
- Note that during upgrade, the installation of the new package is considered to happen before the removal of the old package.
- Macros
- %{_tmppath}
- %{buildroot}
- %{_bindir}
- %{_datadir}
- %{_mandir}
- %{_smp_flags}
- %setup
- %configure
- %makeinstall
Creating Packages
Demo: Creating a Simple Package
- Writing the specfile
- Testing the specfile
- Using rpmlint
Resources
- Two simple makefile examples
- Fedora Package Maintainers page
- Fedora Linux chapter 5 (see Seneca Library website > eBooks > View All > Safari > Fedora Linux).
- rpmlint
To Do
By Monday, January 17:
- RPM-Writing Lab
- Send your SSH public key to your professor so he can create accounts for you on the CDOT Development Systems.
Week 2 (January 17) - Using Mock and Koji
Tuesday
mock: Testing BuildRequires
It's often difficult to get the BuildRequires in a spec file exactly right, because it's easy to overlook packages that are coincidentally installed on the machine. mock
is a tool that uses the chroot system call to create a "cleanroom" environment for the build, so that any missing BuildRequires cause the build to fail.
To build with mock:
mock -r fedora-13-x86_64 --rebuild foo*.src.rpm
The value fedora-13-x86_64 may be changed to any of the config files found in /etc/mock
in order to test building based on the libraries and available packages for a specific architecture and Fedora release. If errors are reported, review the log files (see the mock output to determine the directory containing the log files).
Thursday
koji: Testing multiple architectures
koji
is a client-server system which allows you to queue builds within the Fedora build farm. This permits you to test whether your package builds on several different architectures, which is especially useful when you don't otherwise have access to the machines of that architecture.
To queue a build for all four Fedora-supported architectures (currently i386, x86_64, ppc, and ppc64):
koji build dist-f14 --scratch foo*.src.rpm
In this example, dist-f14 selects the package repository (similar to the -r
option for mock, except that the build arch is not specified); --scratch
specifies that this is a scratch build (the results are not kept or fed to Bodhi).
To perform a build that will be passed to Bodhi for distribution, substitute --rebuild
for --scratch
(do not do this until you have passed the package review and sponsor procedures).
Resources
ToDo
- Test your RPM from last week with:
- rpmlint
- mock
- koji
- Blog about your experience.
Week 3 (January 24) - Solving Build Issues
Week 4 (January 31) - Repositories/Distributing
Signing RPM packages
An RPM signature, like the digital signature used on many other software-signing systems, is a private key encryption of a checksum. RPM uses the GPG libraries for signing.
- Create a GPG key:
gpg --gen-key
- Add the e-mail address associated with your gpg key to the
%_gpg_name
macro in~/.rpmmacros
-- the line will look like this:%_gpg_name "e-mail-address
- Find (or make) some packages to put in your repository. Make sure that the epoch-version-release is higher than that of any package with the same name in the Fedora repositories.
- Sign those packages with:
rpm --addsign packagefile
Creating a YUM repository
A yum repository is just a directory of packages and some metadata.
- Create a directory that can be served. The protocol used to serve that directory could be http, ftp, nfs, or something else (the files can be served by putting them on a DVD too!). For http, create the directory within
/var/www/html
- Put your signed packages in that directory.
- Create the repository metadata for that directory:
createrepo /name/of/directory
Notice that the repository metadata will be placed in a directory named repodata
Testing
- Create a new repository file in
/etc/yum.repos.d
by copying and modifying an existing file in that directory. Keepgpgcheck=1
but comment out thegpgkey
file. - Confirm that you cannot install from that repository using yum.
- Uncomment the
gpgkey
line, and point it to a new file within/etc/pki/rpm-gpg/
- Create that file by running (as your regular user):
gpg --export --armour e-mail-address
and saving the output - Confirm that you can now install from your repository. You should be asked whether you wish to import the key for your repo.
Repository-release RPM
To make it easier for users to access your repository, create a RPM containing:
- Your repo file
- Your GPG key
Take a look at the RPMFusion release RPM for an example.
ToDo
Project
- Make sure your entry in the Fall 2010 SBR600 Project Table is complete, and that your project plan on your project page is filled in (including 0.1, 0.2, and 0.3 targets).
Lab
- Create an RPM package that will install your repository configuration file and the key.
- Test it.
- Blog about this lab, and include a link to your repository RPM package.
Week 5 (February 7) - Repositories/Distributing
Weeks 6 - 13
- Project work