Previous semester: [[Fall 2010 SBR600 Weekly Schedule]]
= Week 1 (Jan 10) - Introduction , Building from Source, and Creating RPM Packages =
== Tuesday ==
=== Welcome ===* WelcomeAbout this course
* Introductions
* === Intro to Build & Release===** Brief overview of the process*** Versioning & repository systems*** Compilation*** Testing*** Packaging*** Compositing*** Release*** Distribution*** Mirroring** - These steps vary according to the particular project/product. For example, when distributing software physically, "Release" means performing a release-to-manufacturing (RTM), where the final "gold disk" is sent to the duplicating house to be mass-produced; but when distributing software electronically, "Release" means sending the software to the online distribution system. The sequence of steps also varies between projects/products.** Versioning & repository systems** Compilation** Testing** Packaging** Compositing** Release** Distribution** Mirroring
* Introduction to Free Software and Open Source
** The [http://fsf.org Free Software Foundation]
** Working with Open Source
** Working with the Fedora Project
* <span style="background: #ffff00">* [[SBR600 Communication Tools|Communication Tools]]</span> - '''Resource page for setting up wiki, IRC, and FAS2 accounts'''** [[SBR600|Course Outline]]* Visit to the [[CDOT]] Area
=== To Do ===
'''By Wednesday, January 12:'''
# [[SBR600 Communication Lab]]
== Thursday ==
* Make=== Using ''make'' ===
* Makefile Basics
** Targets, Dependencies, and Commands
** Examples
* Building software from a source tarball using a makefile
=== RPM Packages ===
* Purpose
* What's in an RPM package file
=== The RPM Database ===
* Purpose of the database
* [[RPM Queries|Querying the RPM database]]
** rpm -q
== Friday ==
=== Creating Packages ===
* Packaging scenarios
* Setting up a Packaging Environment
* Using rpmlint
=== Resources === * [[:fedora:PackageMaintainers|Fedora Package Maintainers page]]** [[:fedora:PackageMaintainers/CreatingPackageHowTo|Packaging How-To]] See also "Fedora Linux" chapter 5 (see Seneca Library website > eBooks > View All > Safari > Fedora Linux).
== Readings/Resources ==
* Two simple [http://matrix.senecac.on.ca/~chris.tyler/osd600/makefile-examples.tgz makefile examples]
#'''Communication Lab'''
#* Set up your accounts (wiki, IRC, FAS2).'''
#* Create a blog post which will appear on the OpenSource@Seneca Planet which introduces yourself. Include:
#*# An introduction. Tell us a bit about yourself.
#*# A portion of an IRC conversation you've had with someone on a Fedora or Seneca IRC channel.
#*# A link to your User page on the Seneca wikis
#*# A link to your User page on the Fedora wiki
#** Note: don't just dump this stuff in a blog post, add some introductory text as well!
#* Add an entry to the [[Fall 2010 SBR600 Participants]] page
#'''Fedora Set-Up'''
#* Ensure you have a working, currently-supported (F12 or F13) Fedora system (on a laptop, on a SATA disk pack for use in the Seneca labs, or on a desktop machine at home)
'''Lab 1: By Monday, September 13:'''
# '''Lab 1'''
#* Build 2 packages from Source
#*# The NLED editor from [http://cdot.senecac.on.ca http://cdot.senecac.on.ca]
#*# Any package that uses a configure script -- SourceForge might be a good place to look for such packages.
#* Blog about the experience.
= Week 2 (January 17) - RPM Packages I =
== Tuesday ==
* Discussion of issues related to building
** Finding dependencies.
** <code>-j''X''</code> flag to enable multiple jobs
=== RPM Packages ===
* Purpose
* What's in an RPM package file
** Metadata
*** What the package provides
*** Dependencies
*** Packager, date, license, summary, description, ...
** Digital signature
** Software
** Data
*** Fonts
*** Icons
*** Sample data
** Documentation
** Configuration files
** Setup scripts
*** Pre-install
*** Post-install
*** Pre-uninstall
*** Post-uninstall
*** Triggers
=== The RPM Database ===
* Purpose of the database
* Querying the RPM database
** rpm -q
== Thursday ==
=== Creating Packages ===
* Packaging scenarios
* Setting up a Packaging Environment
** Needed packages
*** rpm-build
*** rpmdevtools
*** rpmlint
*** yum-utils
** Setting up the RPM tree
*** run <code>rpmdev-setuptree</code>
* Taking a look at existing source RPMS (useful as examples)
** Installing
*** <code>yumdownloader --source <i>nameofpackage</i></code>
*** <code>rpm -i <i>nameofpackage</i>.src.rpm</code>
*** Source will be in ~/rpmbuild/SOURCES and specfile will be in ~/rpmbuild/SPECS
** Examine the specfile
** Rebuild on the local machine -- takes a source RPM (SRPM) as input, produces binary and source RPMs as output
*** <code>rpmbuild --rebuild <i>nameofpackage</i>.src.rpm</code>
** Building from the spec file -- takes a specfile and source code as input, produces binary and source RPMs as output
*** <code>cd ~/rpmbuild/SPECS; rpmbuild -ba <i>nameofpackage</i>.spec</code>
=== Writing a specfile ===
* Run <code>rpmdev-newspec ''packagename''</code> in ~/rpmbuild/SPECS
* Edit the skeleton specfile.
* Test it: <code>rpmbuild -ba ''packagename''.spec</code>
** If successful, output will be binary RPM(s) in ~/rpmbuild/RPMS and source RPM in ~/rpmbuild/SRPMS
*** Can install binary RPM with: <code>rpm -i ''rpmname''</code>
** If unsuccessful, read the error messages carefully.
* Check it with rpmlint: <code>rpmlint ''packagename''*</code>
** Remember to check the spec file as well as the binary and source RPMs.
** Correct any errors found.
=== 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 a Simple Package ===
* NLED
* Writing the specfile
* Testing the specfile
* Using rpmlint
=== Resources ===
* [[:fedora:PackageMaintainers|Fedora Package Maintainers page]]
** [[:fedora:PackageMaintainers/CreatingPackageHowTo|Packaging How-To]]
* ''Fedora Linux'' chapter 5 (see Seneca Library website > eBooks > View All > Safari > Fedora Linux).
See also "Fedora Linux" chapter 5 (see Seneca Library website > eBooks > View All > Safari > Fedora Linux). == ToDo == * Finish tasks from week 1 if not already completed.** Remember, marking in this course is done on the basis of blog posts which appear on the planet.** You should have two blog posts on the planet by now: One with a link to your Seneca and Fedora user pages plus a snippet of IRC conversation, and one with a reflection on your experience compiling software from source code.* Rebuild an existing Fedora SRPM. The <code>-j</code> value in your ~/.rpmbuild config file controls how many simultaneous jobs <code>make</code> starts. Experiment to see which value results in the fastest build time for the software you have chosen on your particular hardware. Blog about your experience -- don't bog down your blog with technical output, but instead focus on the process and results, and your reflections (for example: did you get the value you expected? was it a fast or slow process? did you automate it with a script or do it manually? what seems to affect the results?).<!-- * Take the software you compiled last week and package it (not Nled!). Blog about the experience. Include a link to your source RPM (and optionally your binary RPM) from your blog. Do ''not'' use the Fedora spec file. '''Please complete this by Monday, January 20.''' -->* Listen to the [http://cdot.senecac.on.ca/audio/sbr600/ audio recording] of last Fall's conference call with Jesse Keating, Fedora Release Engineer* Start considering the projects on the [[SBR600 Potential Projects|potential projects]] list. = Week 3 2 (January 2417) - Using Mock and Koji =
== rpmlint: Checking for a clean spec file, SRPM, and RPM ==
* Blog about your experience.
= Week 4 (January 31) - Using Mock and Koji II =
= Week 5 3 (February 7January 24) - Solving Build Issues = = Week 4 (January 31) - Repositories/Distributing =
== Signing RPM packages ==
# 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
<!-- = Week 8 =
* Git
** See http://git-scm.org for basic notes and tutorials
git pull origin $SomeoneElsesBranch
git checkout $SomeoneElsesBranch
-->
= Exam Week =