How to create a Fedora spin – Developer Meet Up in Hong Kong

Hon Nguyen (Vietnam), Dicky (Hong Kong), Hong Phuc (Vietnam) (from right to left)

Dicky (Hong Kong) and Mathieu Bridon (France)

At our meet ups at GNOME.Asia in Hong Kong it was great to meet developers from different continents. One thing we were particularly interested in is, how to create a custom Linux based on Fedora Linux.

Well, we were lucky to meet Mathieu Bridon (Blog). There are some pictures below. Even though some pictures might look just like socializing in a pub, we actually took quite late until the eve to learn about using Kickstart files to create our own custom Linux. Thank you! So the how to of Mathieu below first.

== Building your downstream distro ==

From a Fedora system:
    # yum install spin-kickstarts pungi

See the kickstarts used to create the various Fedora spins in:

Use that as examples, the actual kickstart doc is at:

Then once you have your kickstart file:
    # pungi -c [your kickstart file]

(see pungi -h for all the options)

== Avoiding trademark issues ==

Replace fedora-logos by generic-logos to avoid the Fedora trademarks.

Clone the git repository for the package spec file:
$ fedpkg clone -a generic-logos
$ cd generic-logos

Fetch the source tarball:
$ fedpkg sources

Make your own tarball following the layout and file names.

Rename the spec file (and change the Name: tag):
Name:       xmario-logos
Version:    17.0.0
[… snip …]

See how the tarball is named like the spec file?

$ fedpkg mockbuild

== Caching packages ==

1. Synchronize the whole repository:
$ yum install yum-utils
$ reposync -r fedora -r updates -p /path/to/repository_cache

2. Keep in cache the packages you install:
  1. set keepcache=1 in /etc/yum.conf
  2. install, update,…
  3. $ find /var/cache/yum -name ‘*.rpm’

3. Download packages:
$ yum install yum-utils
$ yumdowloader foo
$ yumdownloader –resolve foo

Some different approaches to repo caching:


If you need to make an install media (not live), you’ll have to maintain
a trivial patch to anaconda.

$ fedpkg clone -a anaconda
$ cd anaconda
$ fedpkg prep
$ cd anaconda-$version
$ git init
$ git add .
$ git commit -m prepped
$ cp pyanaconda/installclasses/{,}

Replace all occurences of “fedora” by “xmario” in the file you copied,
and give it a **higher** priority (bigger number) than all other install
classes so that yours is used.

Create a patch that adds your modifications. I like to use git for that,
but you can just use the diff command if you prefer:
$ git commit -a -m “Create our install class for X-Mario”
$ git format-patch HEAD~1
$ mv 0001-*.patch ..
$ cd ..

Add the patch to the spec file header:
    [… snip …]
    Patch1000000: 0001-blabla.patch
    [… snip …]

Apply at the end of %setup:
    %patch1000000 -p1

Bump the “Release:” tag and add a changelog message in %changelog.

Commit to git:
$ git add 0000*.patch anaconda.spec
$ git commit -m “Bla bla bla commit message”

$ fedpkg mockbuild

More about fedpkg:

Mathieu Bridon and Sammy Fung (HK)