pet

Package management

PAGE UPDATED: 12 October 2009, for Puppy 4.3+

New to Puppy? -- it is highly recommended to read this page!

Background

You can speed-read this section!

The name "package" is used in Linux for an application with all of its support files. If you have a Windows background, you will know that you can download an application and double-click on it to install it, or the web browser can choose to install immediately. It's the same thing.
Calling it a "package" distinguishes it from an actual executable -- Puppy's own native package format has filenames ending in ".pet", to clearly show that this is a package. Other distros have their own package formats, for example Debian/Ubuntu name their package files ending in ".deb".

Puppy started life in 2003 as a collection of applications on a live-CD, and that was it, no mechanism for adding packages. The fundamental reason for this was that all of the /usr directory was stored as a single file called "usr_cram.fs", that contained inside it a cramfs or squashfs filesystem -- which is a compressed read-only filesystem. So, there was no way to write to /usr. Also, /bin, /sbin, /etc, /var and so on were all in ramdisk -- in fact, they were on the live-CD in the file "image.gz" which loaded into the ramdisk at bootup -- so, anything written to those directories got lost at end of the session.

As Puppy was running in ramdisk, the only place that files could be saved permanently was in /root, the user's home directory, and we did offer a small collection of packages that could be downloaded and installed into /root.

Anyway, with the release of version 1.0.1, /usr became writable, by use of a technique known as unionfs. Suddenly the gates were opened, and along with two new package managers, PupGet and DotPup, we had a flood of new packages. Many of the DotPup packages did install into /root, but that was incidental -- now packages could install into /usr also.

Then, Puppy 2.00 made everything under "/" writable. That is, everything under "/" got saved, nothing was lost at shutdown.

Puppy 2.14 took a major step to merge the package systems into one, the PET format. It has been suggested that 'PET' is an acronym for "Puppy's Extra Treats" (courtesy of Lobster) or "Puppy's Enhanced Tarballs".
PET is intended to have all the advantages of each of the earlier package formats and none of the disadvantages.

PET packages

As introduced above "Puppy's Extra Treats" are applications, files that end with '.pet'.

Note, they are actually tarballs, just like '.tar.gz' files, except have an md5sum appended on the end. The in-built md5sum is handy, as the file can be checked for integrity after being downloaded.

I have written a page that introduces PET packages:

PET packages

Woof

Up to version 4.2x, the Puppy live-CD was created from a collection of about 500 PET packages and a build script, collectively called Puppy Unleashed. The build script, actually named "createpuppy", allowed selection of packages that are desired to be in the live-CD, and to create the ISO file all ready to be burned to a CD.

From Puppy 4.3, the build system, that is the collection of packages and build scripts to create a live-CD, was completely redesigned, and is now named Woof.

If you want to know more about how to build your own custom live-CD, Woof has its own web page:

Introduction to Woof

The Puppy Package Manager

Also known just as the PPM. This provides you with a very nice GUI for installing packages, either Puppy's own PET packages or those of some other distro (such as Debian/Ubuntu .deb packages).

The PPM also underwent a revolution from Puppy 4.3+. Previously it was called PETget and handled PET packages only.

Note, the PPM still does have a utility named 'petget'. This is now a commandline tool for the PPM and is called from applications such as ROX-Filer (the file manager). That is, you can download a package and in a ROX-Filer window just click on it to install it.

The PPM also has its own web page:

Puppy Package Manager

SFS modules

Last but not least! SFS modules are a very powerful system of "package management", totally different from PET packages and the PPM.

If you read the technical docs about Puppy, you will learn that the live-CD has (at least) three files on it -- vmlinuz, initrd.gz and pup-xxx.sfs. You may also have come across a file devx_xxx.sfs, that we call the "devx" file. This is not the place to describe what those files do, but see that two of them have '.sfs' filename extension -- this means that they are SFS files.

Puppy uses Unionfs or Aufs, which enables these SFS files to be in layers, one under the other. When Puppy is running, there are at first two layers, approximately like this:
Top layer: The "pupsave" file (your personal files)
Second layer: The pup-xxx.sfs file (all the Puppy files)

Now, this is what you can do: you can load additional SFS files as third, fourth and fifth layers. But, what does this mean in practice?

It would be good to summarise the overall concept from the usage point of view:

Download any SFS file to /mnt/home (the same place as your "pupsave" personal storage file), run the BootManager (in the System menu) to select or deselect what SFS files you want to use, reboot Puppy and its ready to go.

The above summary encapsulates the entire thing. SFS files are typically "combo packs" of applications, containing all packages needed for what is required. For example, there is a "mySQL-PHP-Apache" SFS module available. The really beautiful thing is, you just download it, select it in the BootManager, reboot, and its installed and ready to go. Don't want it anymore? -- either just delete the '.sfs' file or deselect it in the BootManager.

Another important point: no dependencies to worry about! If the SFS file is designed for your version of Puppy, then it will have all needed dependencies in it.

This is the most incredibly simple way to install (and uninstall) large combinations of packages. A few great SFS files:
devx_xxx.sfs
This has everything needed to turn Puppy into a complete C/C++/Vala/Genie compiling environment. Want to compile source packages? -- this is what you need. Note, the "xxx" is the Puppy version number, so be sure to get the right one (for example devx_431.sfs is for Puppy version 4.3.1)
kernel_src-2.6.30.5.sfs
Use this as well as the above if you want to compile kernel drivers.
openoffice-3.1.1.sfs
The entire Open Office suite. Wordprocessor, spreadsheet, database, graphics.
anjuta-2.4.2.sfs
This is an IDE (Integrated Development Environment) for writing GTK applications in C/C++.

So, where do you get them? SFS modules have caught the imagination of many Puppy enthusiasts, and if you look around in the Puppy Discussion Forum you can find announcements of the latest on offer. Make sure that you get SFS modules that work with your version of Puppy.

I have the 'devx_xxx.sfs' file available at the official Ibiblio repository, see my Download page. I also have the Open Office SFS, Anjuta SFS and maybe some others available.

There are a couple of things that you need to be aware of about SFS files:

The BootManager SFS loading and unloading mechanism does not work in a full hard-drive installation of Puppy. Mostly Puppy is run from live-CD, USB Flash or hard-drive frugal installation, but for those who think in traditional terms and want a full hd installation, read this page for instructions on how to install an SFS file.

Puppy built with any Linux kernel 2.6.29 or later uses Squashfs version 4, and SFS files created for these kernels will not work with older kernels (that use Squashfs v3). The main Puppy live-CD build uses kernel 2.6.30.5 (or later), but there are builds using older kernels, so be careful that you get a compatible SFS file. Note, Puppy does have an SFS v3 -- v4 converter tool.



(c) Copyright Barry Kauler 2009, puppylinux.com
No part of this page is to be reproduced anywhere else. I have found that there is a problem where parts of my web pages are being inserted at other sites, then not updated, whereas I am updating my pages regularly. This is not a desirable situation, so please just link to my pages.