Package management

PAGE UPDATED: Feb 17, 2007, for Puppy v2.14+ only

Background

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 -- in Puppy a package has a filename ending in ".pet"  (or ".pup") to clearly show that this is a package.

Puppy started life 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 contains inside it a 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 loads into the ramdisk at bootup -- so, anything written to those directories got lost at end of the session.

The exception was that if Puppy was installed to hard drive, with a full installation where Puppy takes over an entire partition -- as opposed to what we call a "frugal" or "coexist" installation -- then all directories are writable, as it is just like any normal installation of Linux.

With the situation of Puppy 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 do install into /root, but that is incidental -- now packages could install into /usr also.

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

There was some confusion that we had two different package systems. Actually, there is a clear distinction between the two: PupGet packages are 'official', that is, they are the pool of packages used to create the live-CD, whereas DotPups are 'unofficial', that is, extra packages created by Puppy enthusiasts.

Puppy 2.14 has taken 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.

Puppy Unleashed

The Puppy live-CD is created from a collection of about 500 packages and a build script, collectively called Puppy Unleashed. The build script, actually named "createpuppy", allows selection of packages that are desired to be in the live-CD, and will create the ISO file all ready to be burned to a CD.

The official Puppy live-CD is named like this, "puppy-2.14-seamonkey.iso", and currently is based on the Mozilla Seamonkey suite. But, there is also an Opera package, and John Murga has available another 50M ISO build from Unleashed based on Opera. Anyone can create their own custom Puppy live-CD, and many other Puppy enthusiasts have created their own custom Puppy.

The Unleashed suite has the 'official' PET packages. However, what about all the "left over" packages, the rest of that approx. 500 package collection that were not chosen to be in a particular build of a live-CD? The entire Unleashed suite is at various repositories on the Internet and this is where the PETget package manager comes in.

PETget is to be found in the Setup menu in Puppy (or the "install" icon on the desktop). Just select from the menu and you are greeted with a list of packages to install. Now here is the good part -- the list that you are presented with is the "left overs" of that 500 package collection. Thus, although they never made it into the live-CD, you can still install and uninstall them.

If you want to know more about Unleashed, get hold of the Puppy Unleashed core tarball and in it you will find a very helpful README file -- the Unleashed tarball is named something like 'puppy-unleashed-core-2.14.tar.gz' at the online repositories.

There is also a page that introduces Unleashed: Puppy Unleashed introduction

DotPup packages

DotPup is a simple package installation system developed by GuestToo and is described at www.puppylinux.org/wikka/DotPups.

GuestToo originally intended DotPups to be a simple package system where you download the '.pup' package then just click on it to install. Later on, MU developed a DotPup-creation tool that also registers the DotPup with the PETget package manager when it installs, so PETget can be used to uninstall it.

One word of warning. Many DotPups modify the 'Menu' (see bottom-left of screen) directly, however Puppy 2.14 has moved to an XDG menu system in which the window manager menu configuration file is not edited at all. Instead, the new package should install a '.desktop' file. Simple DotPups that do not require a menu entry do not have this problem, those that do should really be converted to PETs, using the 'pup2pet' utility.
Or, DotPups can be created that support XDG and do not directly modify the menu config file, and will thus be fully compatible with Puppy 2.14 -- likely MU and others will update DotPup creation tools accordingly.

Slackware packages

Puppy is compiled from source and has unique bootup and shutdown architecture, different from any other distro. The same point applies to Slackware -- Puppy is not based on Slackware in any way. However, a Slackware binary package may be installed in Puppy and it may work.

A Slackware package can be converted to PET using the 'tgz2pet' utility. For example:

# tgz2pet xgames-0.2-i386-1.tgz

Which will create 'xgames-0.2-i386-1.pet'. Click on this and PETget will install it, and will even run the install script inside the Slackware package.

A warning though. Slackware has a different architecture and the install script could do something undesirable in Puppy. Slackware has different shared libraries and the required dependencies may be missing in Puppy. However, if a Puppy developer finds that a Slackware package does work in Puppy then technically it can be provided as a PET package for others to install.

Note, the 'tgz2pet' script doesn't add any PET-specific enhancements when it converts the Slackware package, so if the package does not have a '.desktop' file then the script will not create one and there will not be any menu entry created upon installation. More features to support Slackware package conversion could be added in the future if there is demand.

PETget package manager

The PETget package manager (previously known as the PupGet package manager) is selected from the Setup menu in Puppy (or via the "install" icon on the desktop). It is very simple to use. The initial window has buttons to choose from, and normally you choose to "Install or remove pkgs", then a two-pane window comes up, like this:
PETget 2 pane view

In the left pane are all the "left over" packages from Unleashed that never made it into the live-CD, that is, are not in file pup_xxx.sfs. Physically, they are all available on the Internet at various download sites such as ibibilio.org.
By clicking on a package to highlight it, then clicking on the "Add" button, the highlighted package moves to the right pane, meaning that you have chosen to download and install it in Puppy. Any packages that you have previously installed will already be in the right pane. In the example you can see that I have already got subversion_client, Cutecom and Xbubble in the right pane so they are either already installed or I have just moved them across.

It's incredibly simple: after moving a package across to the right side, click on "OKAY" button and the package will be downloaded and installed. Alternatively, it is just as easy to uninstall an installed package, by highlighting it, click on "Remove" button and it will move to the left side, then click "OKAY" to uninstall it.

You can see that the packages have brief descriptions, but if you hover the mouse pointer over a package listing, an extra info window pops up, with information about the "category" or "group" of the package, its dependencies and how big it is.

However, it doesn't end there. The above describes how to install an 'official' package, that is, one from the Unleashed suite. However, a PET package can also be 'unofficial', meaning not part of the Unleashed suite, created by a Puppy enthusiast.
How would you install such a PET package? Simple, just download it, then click on it.

The ROX-Filer file manager understands any file that ends with '.pet' and if you click on it then ROX-Filer will launch PETget. Any PET package, official or unofficial, can be installed this way.
In addition, so does SeaMonkey, the web browser. Click on any ".pet" file on a webpage and SeaMonkey will offer to either download it or immediately open it in PETget. The latter means that you just click on a PET package on a web page and it gets installed!
(In fact, any application that reads mime-type information from /etc/mailcap and /etc/mime.type will recognise .pet files and launch PETget. Ditto for the mime-type database in /usr/share/mime)

Technical details of PETget

When a PET package is installed, the PETget package manager keeps a record of the installation like this:
packages directory

That is, /root/.packages directory has the files as shown. Each installed package will have at least one file here. For example, the Xbubble package has "xbubble-0.2.4.files". This is used by the PETget package manager to uninstall the package.

The file "packages.txt" is a list of all the Unleashed suite of packages, whereas "livepackages.txt" is a list of packages not in pup_xxx.sfs (and so not in the live-CD) and thus candidates for installation by PETget -- it is this file that is read and appears in the 2-pane window shown above.

The file "alienpackages.txt" is a list of packages that are installed but are not part of the Unleashed collection. The PETget package manager has an option to install any arbitrary PET package available locally (on your computer) or somewhere on the Internet and if this isn't a package from the Unleashed suite then it is classed as "alien" or "unofficial".

The easiest way to learn what is in those files is to go and look at them, but here is a typical entry in "livepackages.txt":
"xchat-1.8.11" "xchat-1.8.11: IRC chat client" on "GTK1APPS +gtk+ 520K" \
The first field is the package name, second field is the info that appears in the PETget 2-pane window, third field is either "on", "off" or "unavailable" and "on" means that it is installed, "off" means it isn't. The last field is extra info that appears when the mouse pointer is hovered over the listing in the 2-pane window.

The ".files" files are just a list of the installed files. For example, this is the content of "xchat-1.8.11.files":
/usr/local/bin/xchat
/usr/share/doc/xchat/xchat.html
/usr/share/doc/xchat/xchat.sgml
/usr/share/doc/xchat/xchat-1.html
/usr/share/doc/xchat/xchat-10.html
/usr/share/doc/xchat/xchat-2.html
/usr/share/doc/xchat/xchat-3.html
/usr/share/doc/xchat/xchat-4.html
/usr/share/doc/xchat/xchat-5.html
/usr/share/doc/xchat/xchat-6.html
/usr/share/doc/xchat/xchat-7.html
/usr/share/doc/xchat/xchat-8.html
/usr/share/doc/xchat/xchat-9.html
/usr/local/lib/X11/mini-icons/xchat.xpm
/usr/local/lib/X11/mini-icons/xchat_mini.xpm
Simple enough, just a list of the files that got installed.

Unofficial PET packages

Anyone can create a PET package. There are tools that make it extremely easy. Once created, it can then be made available online for others to use.

If a Puppy user downloads an unofficial PET package, how do they install it? How can they uninstall it?

Installation is very simple, just click on it. ROX-Filer will then launch PETget and the package will install.

PETget will create an entry in "alienpackages.txt" for the package, just like I showed above for Xchat. And, PETget will create a list of the installed files, just like I showed above for Xchat.

For example, say that you installed a package called "Torsmo", that is a single executable that installs into /usr/local/bin. and maybe an icon into /usr/local/lib/X11/mini-icons/. Here is an entry that would go into into "alienpackages.txt":
"torsmo-1.0" "torsmo-1.O: system monitor utility" on "XLIBAPPS 56K" \
And here is what would be put into file "torsmo-1.0.files":
/usr/local/bin/torsmo
/usr/local/lib/X11/mini-icons/torsmo.xpm
One other point. A PET package can optionally have an uninstall script. In the example of Torsmo, this will be a file called "torsmo-1.0.remove". PETget package manager will recognise this as an uninstall script for the Torsmo package and will execute this after deleting the files.

I have written a page that introduces PET packages.



(c) Copyright Barry Kauler 2006,2007, www.puppyos.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.