Create Your Own Linux Desktop and Take It with You

Configure your own custom desktop and plug it in to any PC to re-create your working environment wherever you go.
Stage 1: Create a Puppy Linux Host System

Barry and the PL community have made this stage extremely easy. Simply download the latest Puppy Linux .iso file (LuPu 5.1.1 at the time of this writing) from one of the repositories listed on, and write the .iso to a bootable CD. On Ubuntu, you can use System→Administration→Startup Disk Creator to burn the CD. For Windows, the PL site recommends the BurnCDCC utility.

Once you have your PL CD, you need to boot it on a Linux system. Puppy Linux runs completely from memory, but Woof needs 10GB of file space to do the build, so you'll want to use the underlying hard disk. Unfortunately, Woof works only with an ext3 or ext4 filesystem, so a Windows disk won't work for you. When PL boots, it should display a desktop and allow you to start the SNS utility to configure your network connection.

At this point, you could use the Puppy Linux Install utility (on the desktop) to create a PL USB key. If you like PL as it comes preconfigured, or just want to install a few additional applications from .deb packages, you can stop here, without going through the full build of a distribution. You also could install Puppy Linux to your hard disk if you want, but you don't have to.

Stage 2: Download the Woof Tool

PL comes with its own version control system called Bones. The first thing you want to do is create a directory called woof-tree somewhere on your hard disk. In the setup I used, PL sees my Linux hard disk as /dev/sda1.

Now you can open a PL terminal window (Menu→Utility→Urxvt terminal emulator), and note that you're running as root (#). In my setup, I cd'd to my Linux home directory and created woof-tree:

# cd /mnt/sda1/home/rick
# mkdir woof-tree
# cd woof-tree

Once that's done, you first tell bones which repository:

# bones setup

Figure 2. bones Setup

You can fill in anything you like for local_username; the Download URL is

Now, enter:

# bones download

And, bones will do just that—download and unpack the current set of Woof files.

Once that's done, it's a good time to read the downloaded file README.txt, which you'll find in woof-tree. This file contains the latest information about the tools and also serves as the help file for the next stage.

Stage 3: Configure Woof

Bones downloaded a number of files into woof-tree, including some configuration files with names beginning in DISTRO_, some other files and scripts, and six numbered scripts: 0pre, 0setup, 1download, 2createpackages, 3builddistro and 4quirkybuild, which isn't used for Puppy Linux builds.

You can edit the configuration files and use Woof from the command line to build your distribution, but I'll warn you that it's a bit daunting. Luckily, Barry and friends have provided a GUI interface to the build system that helps you through the process:

# ./woof_gui

Figure 3. Woof GUI Spec Wary

The tabs at the top of this utility correspond to the steps in building a distribution. The tabs mirror the Woof configuration files and allow you to customize your distribution. To create your distribution, you move left to right through the tabs, making choices and executing the required builds.

The Specifications tab shows the high-level settings for the distribution to be built. At the time of this writing, woof comes preconfigured to build Wary, one of the derivatives of Puppy Linux. Notice the “Previous templates” section about two-thirds of the way down. From this pull-down, you can select a number of previously defined (and proven) build templates, which minimizes the choices you have to make and the possibility of specifying something that won't work. I chose “Ubuntu Lucid Lynx LuPu”. If you make changes, select UPDATE OVERALL SPECS at the bottom to update the corresponding configuration files. You may get some errors about missing files—at this point, all of those should be configured for loading when Woof does the build.

Figure 4. Woof GUI Spec Lucid

The next tab, PET repos, tells Woof where to find the PET packages and databases it needs for the build. PET is the native package format used by Puppy Linux and Woof. It is optimized so the packages are small and quickly loadable. Unless you want to add a PET package that isn't part of the standard Puppy PET repositories, you shouldn't have to change this tab. If you need to modify the list of repositories, click Edit, and you will be put into the text editor to edit the DISTRO_PET_REPOS configuration file. The Help: Repositories button will give you the format for the file. If you do make any changes, click UPDATE PET REPOS to save the updates.

Figure 5. PET Repos

The next tab, Compat repos, gives Woof the on-line locations for packages and databases compatible with the entry “Compatible-distro”, that you made on the Specifications tab. If you need to modify the list of compatible package locations, click the appropriate Edit button, and you will be put into the editor to edit the DISTRO_COMPAT_REPOS configuration file. Again, the format is available with the Help button, and if you make changes, you need to click UPDATE COMPAT-DISTRO REPOS to save them.

Figure 6. Compat Repos

The next tab, Download dbs, executes the script (0setup) to download the PET and compatible package databases from the last two tabs. The top half of the tab shows the PET databases selected and those that are actually available locally. The bottom half does the same for compatible databases. If the selected and local lists do not agree (which is likely at this point), click on the UPDATE LOCAL DB FILES button, and the files will be downloaded. This can take a while to complete.

Figure 7. Download dbs

The next tab, Choose pkgs, is where you see the PET and compatible packages included in your build. There are separate buttons to edit the list of PET packages and the list of compatible distro packages, but at the time of this writing, these editors have not been implemented. No matter, you can change the package selection by directly editing DISTRO_PKGS_SPECS-<compatible distro>. The format of the file is given as a comment in the file itself. At the time of this writing, the CHECK DEPENDENCIES button also has not been implemented, so be sure the dependencies for any additions are included, so the build can complete successfully.

Figure 8. Choose pkgs

The Download pkgs tab executes the script (1download) that actually downloads the packages you specified for your distribution. Again, this takes a while. The script first checks to be sure the on-line package locations are reachable, then downloads each of the packages needed. Downloading can take several hours, so a small control panel dialog box pops up to let you pause, resume or quit the script. If a package already exists in the local location, it does not download again, so the script also can be used to restart a download or update the set of packages when a change is made. The REPORT feature on the tab is not yet implemented, but the results are in a file called DOWNLOAD-FAILS-PET or DOWNLOAD-FAILS-<distro> in the woof-tree directory.

Here is where you get to use your Linux deductive skills if there were any problems in downloading the packages. In my case, the download for AbiWord failed—the script was looking for a prebuilt PET package, A quick grep of the Packages* files shows that the script expected to find it in puppy-5-official. Rerunning the Download, the problem is quickly apparent—abiword-2.8.3 fails to download because of a broken link, and discussions on confirm that there are some issues with AbiWord packages. I could find the .pet or .deb packages and copy them in by hand, but to tell the truth, I don't need AbiWord in my distribution, so instead, I edited DISTRO_PKGS_SPECS-ubuntu-lucid and changed the abiword entry from “yes” to “no”. Download pkgs confirms that everything is successfully downloaded.

Figure 9. Download pkgs

The Build pkgs tab executes the script (2createpackages) that takes the distro packages you downloaded (Ubuntu .deb packages in this example) and converts them to PET packages. At the end of this step, you have a complete collection of PET packages for your distribution.

Figure 10. Build pkgs

Kernel options offers you a choice of Linux kernels and some options for paring down the kernel size. Depending on your concern about kernel size, your need for the specific modules mentioned and your willingness to experiment, you can choose whether to include them.

Figure 11. Kernel Options


Rick Rogers has been a professional embedded developer for more than 30 years. Now specializing in mobile application software, when Rick isn't writing software for a living, he's writing books and magazine articles like this one.