Index of /

[ICO]NameLast modifiedSizeDescription

[   ]LICENSE2022-02-27 21:07 1.0K 
[   ]Makefile2023-03-02 15:42 1.5K 
[TXT]README.md2023-08-25 22:37 9.5K 
[TXT]README.txt2023-08-25 22:37 9.9K 
[DIR]binpkgs/2023-09-02 20:57 -  
[DIR]dist/2023-09-02 20:57 -  
[TXT]leopard.sh2023-08-29 05:16 41K 
[DIR]leopardsh/2023-09-02 20:31 -  
[DIR]linux/2023-03-20 00:42 -  
[   ]md52023-08-29 05:18 226  
[TXT]md5s.manifest2023-09-02 20:57 146K 
[   ]md5s.manifest.gz2023-09-02 20:57 48K 
[DIR]misc/2023-03-23 07:37 -  
[DIR]stats/2022-03-09 04:17 -  
[TXT]tiger.sh2023-08-29 05:17 42K 
[DIR]tigersh/2023-08-30 07:46 -  
[DIR]utils/2023-08-30 08:53 -  

| `` and `` |

Package managers for PowerPC Macs running OS X Leopard (10.5) and Tiger (10.4),
written in Bash!

Github repo:

In a nutshell:

    $ curl -O
    $ chmod +x
    $ ./
    $ open "/Applications/GLQuake 1.1"


    $ curl -O
    $ chmod +x
    $ ./
    $ open "/Applications/GLQuake 1.1"

Binary package support:

I build pre-compiled binary packages optimized for the following platforms:

|         | G3  | G4  | G4e | G5/32 | G5/64 |
| Leopard |  -  |  -  |  X  |   X   |   X   |
| Tiger   |  X  |  X  |  X  |   X   |   X   |

The above processors can be understood as the following gcc flags:

- G3:    `-mcpu=750`
- G4:    `-mcpu=7400`
- G4e:   `-mcpu=7450`
- G5/32: `-mcpu=970 -m32`
- G5/64: `-mcpu=970 -m64`

Optimization flags used:

|         | G3  | G4  | G4e | G5/32 | G5/64 |
| Leopard |     |     | -O2 |  -O2  |  -O2  |
| Tiger   | -Os | -Os | -O2 |  -O2  |  -O2  |


On your Mac, open up

Download the `` Bash script:

    $ curl -O

or, for Tiger users:

    $ curl -O

Now make it executable:

    $ chmod +x

Now run it:

    $ ./

During the first run, some setup will be performed, e.g. creating /opt,
downloading a few dependencies, etc.  You'll be prompted for your password,
because a few of these commands need root access.

Also, you'll be prompted to visit to verify that the
script wasn't tampered with during download.  Because the version of Safari
which shipped with Leopard and Tiger doesn't support modern SSL, this step has
to be performed on either a modern PC or on your smartphone.

List the available packages:

Fetch the list of the available packages:

    $ ./
    Available packages:

These names, e.g. `gzip-1.11` are called "pkgspecs".

You'll also notice that there are two kinds of pkgspecs supported:
- Unix software, e.g. gzip-1.11
- Mac applications, e.g.

Note that the pkgspecs are printed to stdout, while the "Available packages:"
header is printed to stderr.  This means we can pipe `` into `grep`:

    $ | grep gzip
    Available packages:

We could also use `grep` to list just the Mac applications:

    $ | grep .app
    Available packages:

The Unix geeks will note that technically we should grep for '\.app', not .app.

Install a package:

To install a package, call `` with a pkgspec:

    $ gzip-1.11

Note: currently, you have to use the full pkgspec, i.e. you can't do something
like " gzip".  I'll implement some sort of pkgspec aliases soon, but
in the mean time you could use a subshell as a work-around:

    $ $( | grep gzip)

The above command will fetch and run

That script will look for a pre-compiled binary package (a "binpkg") which
matches your CPU type, e.g. a Mac with a G5 would try to fetch and unpack it
into /opt/gzip-1.11, and create symlinks in /usr/local/bin.

If for some reason a binpkg is unavailable, the script will instead attempt to
compile gzip-1.11 from source.  (However, I currently build binpkgs for every
supported OS / CPU combo, so I'm the only one who will ever see this step).

Some pkgspecs depend on other pkgspecs, i.e.

In that case, the script will call `` to install each of its
dependencies, and so on, recursively.

Remove a package:

To remove a package, first clean up its symlinks from `/usr/local/bin`:

    $ --unlink gzip-1.11

and then delete it from `/opt`:

    $ rm -rf /opt/gzip-1.11

That's right: you remove packages from `/opt` manually.  Note that ``
does not maintain any sort of database or state tracking about what's currently
installed (it simply checks if /opt/foo-1.0 exists), so in general you are
free to muck with /opt in any way you see fit.  That is, `` does not
*own* /opt, it is a *citizen* of /opt.

If you had previously unlinked a package but hadn't actually deleted it, and
now you'd like to re-link it, just run:

    $ --link gzip-1.11

Project goals:

- Performance

It should be snappier than homebrew, even on a slow G3.

- Full binary package availability.

Every pkgspec should have a pre-compiled binary package available for every
OS / CPU combo.  Users should never wait on compilation.

- Simplicity / hackability / conceptual flatness.

The problem with most package managers is that they have a very steep learning
curve for contributing / hacking.

`` and `` will take the opposite approach: the installation
of a package shall be encompassed entirely by two Bash scripts:
- the orchestrator script: `` or ``
- the package-specific script: e.g. ``

`` and `` are spritual brethren to the 'Linux From Scratch'
project (see

Would you like to hack on some of the installer scripts yourself?  It is as
simple as:

    $ cd
    $ curl -L | gunzip | tar x
    $ export LEOPARDSH_MIRROR=file://$HOME/
    $ # or, for tiger:
    $ export TIGERSH_MIRROR=file://$HOME/

Bam, you're now running entirely from your self-contained copy of the project.

In fact, as long as you drop any needed source tarballs into `~/Downloads`
before running ``, you're now also completely offline-capable.

Project non-goals:

- Supporting Intel Macs ;p

Other options:

If `` and `` aren't for you, checkout these other package managers:
- MacPorts:
- Tigerbrew:
- Fink: (looks like they only support 10.6 and up these days)


The server now runs rsyncd!

List the available directories via:


The only exposed directory is 'html' (as in '/var/www/html'), so you can create
a mirror via:

    rsync -av .

But in practice this would look something more like:

    rsync -av --delete /var/www/html/mirrors/

Support for mirrors which force HTTPS

Where appropriate, will use plain-HTTP URLs for a small performance
boost (or in the case of a slow G3, not so small!).

However, some mirrors automatically redirect all plain-HTTP traffic to HTTPS.
This defeats the point of using plain-HTTP, as you not only suffer the
performance hit of using HTTPS, but on top of that an additional redirect from
HTTP to HTTPS.  It would have been better to use HTTPS to begin with!

In this case, you can 'export LEOPARDSH_MIRROR_NO_HTTP=1' (or 'export TIGERSH_MIRROR_NO_HTTP=1')
to inform that it should not use plain-HTTP URLs.

Note that if you set LEOPARDSH_MIRROR_NO_HTTP and use an HTTPS-only mirror when
intially installing ``, it will be unable to download download its
dependencies, as /usr/bin/curl does not support modern HTTPS.

In this case, you can download
using another computer, then place it in /tmp and run again.

### Support for mirrors which don't allow HEAD

The HTTP HEAD operation can be used to fetch only the HTTP headers without
downloading the contents of the URL. uses HEAD to fetch the Content-Length of files before downloading
them, and hands that size to 'pv' to make its progress bar more informative.

However, some mirrors do not support the HEAD operation, causing spurious

In this case, you can 'export LEOPARDSH_MIRROR_NO_HEAD=1' (or 'export TIGERSH_MIRROR_NO_HEAD=1')
to inform that it should not attempt to fetch the size of files before downloading them.

Useful links for OS X PowerPC users:

- 'Last versions of applications for Mac OS X on PowerPC'
- 'The Tiger Thread (Mac OS X 10.4)'
- 'The Leopard Thread'
- FrogFind!
- (YouTube transcoding proxy)

Vintage Mac content: