Package managementPAGE UPDATED: Feb 17, 2007, for Puppy v2.14+ only
BackgroundThe 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
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.
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
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
There is also a page that introduces Unleashed: Puppy Unleashed introduction
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'
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.
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
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:
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
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 PETgetWhen a PET
package is installed, the PETget package manager keeps a record of the
installation like this:
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":
Simple enough, just a list of the files that got installed.
Unofficial PET packagesAnyone 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":
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".
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