Puppy From Scratch
or how to breed puppies                        (apologies to LFS)

Page updated 27 Sept 2005

March 2008:
The new Puppy From Scratch page is here

So, you like Puppy and would like to create your own custom Puppy?

There are different levels at which Puppy can be built. I will start at the highest level, which is to use PCCC, the Puppy Custom CD Creator.


This is a script with a GUI (Graphical User Interface).

It's very simple to use, but you do need to understand that Puppy is constructed from packages. Each application is a package. We are jumping a bit ahead of ourselves, but these packages are part of what we call Puppy Unleashed, and we call these Unleashed packages. The Puppy live-CD was created by me using Puppy Unleashed.

So, the current status is that we have a live-CD, and it is composed of application packages. What PCCC does is enable you to very easily add or remove packages and create a new live-CD. The collection of packages in the current live-CD is used as the starting point, and you can add or remove from that.

Having used Puppy, you will have seen the PupGet and DotPup package installers. This enables you to download and install more packages.
Actually, these get installed into the "pup001" file, which is on the hard drive (or USB stick in the case of Puppy booting off USB).
PCCC allows you to select any of these downloaded packages and also build them into the new live-CD.

PupGet and DotPup packages are explained here: Package management

Actually, I think that PCCC is much easier to use than to explain. So, go off and use it...

Puppy Unleashed

Now we are going down to a lower level. Puppy Unleashed is a collection of binary (compiled) packages, and a build script called "createpuppy".

You use createpuppy to choose the packages you want for the live-CD.

The main difference from PCCC is that you are starting from scratch, whereas PCCC uses the current live-CD as the starting point. Also, with createpuppy, you need to have the entire Puppy Unleashed installed, with all the Unleashed packages to choose from.

Note that PCCC will access the packages out of Puppy Unleashed if the latter is installed, but PCCC also gets the packages off the Internet as required.

Here is a page with more details: Puppy Unleashed

Puppy Sourcerer

This is the lowest level. This is a collection of the source code for all the packages. The ultimate objective is that we will have a build script that will enable us to compile all of Puppy from source, however what we have currently is a script to compile one package at a time and copy the binary files to Puppy Unleashed.

So, treat Puppy Sourcerer as very much a work-in-progress. It doesn't even have all the packages in it yet, only a fairly small subset.

Unleashed and Sourcerer work together

To get an idea how Unleashed and Sourcerer work together, here is how I see them using Rox on my system:

Each of these folders has a README that explains what it is about and how to use it.
In Sourcerer, there is a script to compile a chosen source package and send the binary files to puppy-unleashed, and also maybe to usr-development.
That last folder, usr-development, is where development files go, like headers, and usr-development will be converted into the file "usr_devx.sfs", which turns Puppy into a compiling environment.

How to compile a source package for use in Puppy

Say that you have downloaded a source package from the Internet and want to compile it and use in Puppy. All you have to do is download the file usr_devx.sfs from the Puppy download site on ibiblio.org, reboot Puppy and you're in business.

This page has more details:
How to compile applications for Puppy

The file usr_devx.sfs was created by me in a rather ad-hoc manner. I just grabbed anything that looked necessary for compiling out of Vector Linux 5.0STD, plus XFree86 headers and configuration files out of Mandrake 9.2, plus headers and associated files created in the usr-development directory that you see above in the Rox picture.

Maybe the above paragraph seems a rather vague description of how usr_devx.sfs was created. But, we do now have a development system that works very well.

Be clear on one point: usr_devx.sfs is stand-alone. You don't need Unleashed or Sourcerer to support it. If you want to compile applications, all you need is usr_devx.sfs.

So, how to install usr_devx.sfs? Very simple, just download it to /mnt/home and reboot Puppy. See the above link for more details.

Setting up Sourcerer

This is for the Linux guru. If you want to compile the source packages, maybe upgrade to a later version of GTK or whatever, you need Sourcerer. This is a work-in-progress, and a page will be written.

The three folders puppy-sourcerer, puppy-unleashed and usr-development occupy over 1G, so you need a lot of free space on the partition. Also, it must be a Linux partition: ext2, ext3 or reiserfs.

Puppy Sourcerer is available as a file, named something like puppy-sourcerer-1.0.5.tar.gz. You copy it to where you want it, in my case /mnt/data/root/puppy/ in the above figure, and expand it:
# tar -zxf puppy-sourcerer-1.0.5.tar.gz

Then you read the README.txt file inside the folder.

Note that I am kind of trying to achieve package version parity with Slackware 10.1, and I have used many files taken directly from Vector Linux 5.0STD (which is based on Slackware 10.1) for the base packages in Unleashed and in usr_devx.sfs. Thus, these are not compiled (yet) in Sourcerer. The file usr_devx.sfs in particular is mostly just composed of files dragged across from Vector.

(c) 2005 Barry Kauler www.goosee.com/puppy