I just wanted to rpm -tb lilypond-1.1.47.tar.gz ...

Well actually I wanted to typeset the music of Domenico Scarlatti. But, the above is what the Unix gurus told me I wanted to do.

A bit of history: I began using computers when they had to be made with relays for lab use, because vacuum tube computers weren't reliable enough. (You'll find some of my later stuff in Computing Reviews if you look hard enough.) The 'proper' computers were called mainframes, occupied whole buildings, and were guarded by bureaucrats whose career was controlled by IBM. Later on, my life as a computer user was controlled by DEC. About a year after Microsoft teamed up with Intel to produce the MS-DOS PC, I stopped using just about everything else - it was so simple, stable, and well-documented compared to the two dozen or so systems I had used before. I moved to Windows 3.1 when I started using graphics a lot, and to NT4 when the graphics grew to 50 MB size. But, my 1983 DOS Basic systems still work fine.

However, the only music typesetting software I could find for the Windows world was far too primitive for serious use, or was ported from MacIntosh and loaded with disk-screwing-up copy protection stuff. And, none of it permitted the kind of typesetting I wanted to demonstrate the technique of Domenico Scarlatti. Enter the GNU project and the LilyPond music typesetting system, whose authors agreed to support the crucial details I needed to publish my work. But, GNU runs on Linux, and let's just say that when I fired Linux up in Y2K, it reminded me of what computers were like when I was young ...

I began with a basic RedHat 5.2 Linux installation (without Xwindows - LilyPond is non-gui) on a 600 MB ext2 partition of a Pentium 75 with 32MB RAM. Apart from the RedHat installation manual, the documentation is meticulously written for people who are expert enough in Unix that they don't need it, but I eventually got it to read a FAT16 partition (no luck on NTFS, though), and to load a LilyPond binary rpm. The sound system still doesn't work - something about a bad DMA channel that doesn't bother any Microsoft-based software ...

But, just as in the old days, new 'goodies' turn up every month with Linux. And, just as before Microsoft+Intel, there is this destructive pride that the new be incompatible with what has gone before. Four months after I started, Linux had changed enough that LilyPond binary rpm's didn't work any more on my system. So, I had to 'upgrade' my box to handle tarballs. Here is what it took.

In the following, comments are in black, input to Linux in green, and Linux output in red.

Downloaded lilypond-1.1.47.tar.gz from ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/ with Cupertino on NT. Put it into the MS-DOS (FAT16) partition that can be read by Linux.
cp /mnt/msdos/linux/lilypo~1.gz .
mv lilypo~1.gz lilypond-1.1.47.tar.gz
rpm -tb lilypond-1.1.47.tar.gz

checking for stepmake... ./stepmake (${prefix}/share/stepmake not found)
checking host system type... configure: error: can not guess host type; you must specify one
Bad exit status from /var/tmp/rpm-tmp.27025 (%build)

checked with help-gnu-music@gnu.org: "read INSTALL.txt". Checked /usr/doc/, man find, then a guru.
find / -name 'INSTALL.txt'.
/usr/src/redhat/BUILD/lilypond-1.1.47/INSTALL.txt
/usr/src/redhat/BUILD/lilypond-1.1.47/Documentation/topdocs/out/INSTALL.txt
/usr/src/redhat/BUILD/lilypond-1.1.47/stepmake/INSTALL.txt
/usr/src/redhat/BUILD/lilypond-1.1.47/stepmake/Documentation/topdocs/out/INSTALL.txt

Tried the first one. For compilation I need:
EGCS 1.1 or newer (only have 1.0.3a-14)
Python 1.5 (have 1.5.1-5)
GUILE 1.3 (have 1.3 rpm from LilyPond site)
GNU make (have 3.76.1-5)
Flex (have 2.5.4a-4)
Bison 1.25 or newer (have 1.25-5)
Yodl 1.30.17 ftp://ftp.lilypond.org/pub/yodl
Checked with a guru: you'll also need "things like (g?)libc-devel, gettext & guile-devel." So,
mount /mnt/cdrom
rpm -i /mnt/cdrom/RedHat/RPMS/gettext-0.10.35-3
rpm -i /mnt/cdrom/RedHat/RPMS/glibc-devel-2.0.7-29

Downloaded egcs-1.1.2-12.src.rpm from ftp://egcs.cygnus.com (10.4MB), moved it to Linux, named it properly, then spent some time at http://www.rpm.org/support/RPM-HOWTO.html
rpm -i egcs-1.1.2-12.src.rpm
rpm -bb /usr/src/redhat/SPECS/egcs.spec

-snip-
/var/tmp/rpm-tmp.40864: /usr/bin/bzip2: No such file or directory
Bad exit status from /var/tmp/rpm-tmp.40864 (%prep)

rpm -i /mnt/cdrom/RedHat/RPMS/bzip2-0.9.0b-2
rpm -bb /usr/src/redhat/SPECS/egcs.spec

/var/tmp/rpm-tmp.56433: patch: command not found
Bad exit status from /var/tmp/rpm-tmp.56433 (%prep)

rpm -i /mnt/cdrom/RedHat/RPMS/patch-2.5-5
rpm -bb /usr/src/redhat/SPECS/egcs.spec

/var/tmp/rpm-tmp.4213: autoconf: command not found
Bad exit status from /var/tmp/rpm-tmp.4213 (%prep)

rpm -i /mnt/cdrom/RedHat/RPMS/autoconfig-2.12-6
rpm -bb /usr/src/redhat/SPECS/egcs.spec

-snip- an hour
make[1]: makeinfo: Command not found
Bad exit status from /var/tmp/rpm-tmp.24747 (%install)

No module called makeinfo in the RPMS directory of RedHat 5.2. Consulted a guru: "it's in the texinfo package".
rpm -i /mnt/cdrom/RedHat/RPMS/texinfo-3.12-9
rpm -bb /usr/src/redhat/SPECS/egcs.spec

After 3 hours and 136 pages output: 35 files not found; e.g. /var/tmp/egcs-1.1.2-root/usr/lib/gcc-lib/%_target_cpu-redhat-linux
Consulted a guru: "add %define _target_cpu i386 at beginning of egcs.spec". Did it, then
rpm -bb egcs.spec
-snip - 145 pages and another 3 hours
Wrote: /usr/src/redhat/RPMS/i386/egcs-1.1.2-12.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/egcs-c++-1.1.2-12.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/egcs-objc-1.1.2-12.i386.rpm
(which I don't need)
Wrote: /usr/src/redhat/RPMS/i386/egcs-g77-1.1.2-12.i386.rpm (ditto)
Wrote: /usr/src/redhat/RPMS/i386/libstdc++-2.9.0-12.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/cpp-1.1.2-12.i386.rpm

Discovered that I had almost no room left for Scarlatti on the disk - 28,000+ files. Consulted a guru.
rm -rf /usr/src/redhat/BUILD/*
It removed 8500 files, including, as it turned out, most LilyPond documentation of the time.
rpm -U /usr/src/redhat/RPMS/i386/libstdc++-2.9.0-12.i386.rpm
rpm -U /usr/src/redhat/RPMS/i386/cpp-1.1.2-12.i386.rpm
rpm -U /usr/src/redhat/RPMS/i386/egcs-1.1.2-12.i386.rpm

binutils >=2.9.1.0.21 needed for egcs-1.1.2-12
Downloaded binutils-2.9.1.0.25-1.src.rpm from http://rpmfind.net (5.8MB), moved it to Linux and named it properly.
rpm -i binutils-2.9.1.0.25-1.src.rpm
rpm -bb /usr/src/redhat/SPECS/binutils.spec

Wrote: /usr/src/redhat/RPMS/i386/binutils-2.9.1.0.25-1.i386.rpm
rpm -U /usr/src/redhat/RPMS/i386/binutils-2.9.1.0.25-1.i386.rpm
rpm -U /usr/src/redhat/RPMS/i386/egcs-1.1.2-12.i386.rpm
rpm -U /usr/src/redhat/RPMS/i386/egcs-c++1.1.2-12.i386.rpm

/usr/bin/c++filt conflicts with file from binutils-2.9.1.0.25-1
error: egcs-c++-1.1.2-12.i386.rpm cannot be installed

Consulted man rpm
rpm -U --replacefiles /usr/src/redhat/RPMS/i386/egcs-c++1.1.2-12.i386.rpm
Got an e-mail that the guile rpm's omit several files that are required for LilyPond to run - guile has to be compiled on my system. Downloaded guile-1.3.tar.gz from http://rpmfind.net, moved it to Linux and named it properly.
rpm -tb guile-1.3.tar.gz
Name field must be present in package: (main package)
Version field must be present in package: (main package)
Release field must be present in package: (main package)
Summary field must be present in package: (main package)
Group field must be present in package: (main package)
Copyright field must be present in package: (main package)

Ah yes - that's how the best software packaging tool the world has ever seen tells you it can't find a spec file. Consulted a guru - "here's one - put it in /usr/src/redhat, put patch files in SOURCES and guile.spec in SPECS". Surfed the web until I found http://www.redhat.com/mirrors/LDP/HOWTO/Software-Building-HOWTO-2.html
cd /usr/src/redhat
tar xvf guile-ex.tar
mv *.patch SOURCES/
mv guile.spec SPECS/
mv guile-1.3.tar.gz SOURCES/
rpm -bb SPECS/guile.spec

bad owner/group: guile-1.3-scm.patch
Poked around in /usr/doc/: fileutils-3.16/README mentions commands chown and chgrp; figured out group of root with a few ls -l
chown root SOURCES/*.patch
chgrp root SOURCES/*.patch
rpm -bb SPECS/guile.spec

/var/tmp/rpm-tmp.57881: libtoolize: command not found
Bad exit status from /var/tmp/rpm-tmp.57881 (%build)

Tried a search on http://redhat.google.com/ and found 100+ packages that have removed libtoolize from their %build, and two lines referring to a libtool package. Tried
rpm -i /mnt/cdrom/RedHat/RPMS/libtool-1.2b-1.i386.rpm
rpm -bb SPECS/guile.spec

-snip- 27 pages
Wrote: /usr/src/redhat/RPMS/i386/guile-1.3-6.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/guile-devel-1.3-6.i386.rpm

rpm -U /usr/src/redhat/RPMS/i386/guile-1.3-6.i386.rpm
rpm -U /usr/src/redhat/RPMS/i386/guile-devel-1.3-6.i386.rpm

Now - back to LilyPond...
rpm -tb lilypond-1.1.47.tar.gz
... page 38
checking for stepmake... ./stepmake (${prefix}/share/stepmake not found)
... page 208
sh: ps-to-pngs: command not found
Warning: child program ps-to-pngs --crop --output=out-www/gnu-page.yo-0.0.1.png out-www/gnu-page.yo-0.0.1.ps indicates failure

... page 223
/usr/src/redhat/BUILD/lilypond-1.1.47/buildscripts/out/ps-to-gifs: gs: command not found
ls: out-www/refman.yo-0.2.1*ppm: No such file or directory
mv: out-www/refman.yo-0.2.1-page1.png: No such file or directory
Warning: child program ps-to-pngs --crop --output=out-www/refman.yo-0.2.1.png out-www/refman.yo-0.2.1.ps indicates failure

... page 437
make[2]: bib2html: Command not found
/bin/sh: xpmtoppm: command not found
/bin/sh: pnmtopng: command not found
tar (child): Cannot open archive out/htmldoc.tar.gz: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error exit delayed from previous errors
Bad exit status from /var/tmp/rpm-tmp.88463 (%install)

Poked around the RPM site, tried
cd /mnt/cdrom/RedHat/RPMS/
rpm -qpil *.*&>log

It output 1483 pages - looked through it, found
/usr/bin/xpmtoppm and
/usr/bin/pnmtopng
and a few pages above it,
Name : libgr-progs
rpm -i libgr-progs-2.0.13-13.i386.rpm
It needs libtiff.so.3; found it in libtiff
rpm -i libtiff-3.4-4.i386.rpm
rpm -i libgr-progs-2.0.13-13.i386.rpm

Consulted help-gnu-music@gnu.org re the other problems. Answer:
"14:19:56 appel ~$ grep bib2html usr/src/lilypond/INSTALL.txt
o Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html"
True - it's near the end, under "If you want to auto-generate Lily's website, you'll need some additional conversion tools", along with a note that RedHat 5.2 pnmtopng doesn't work. Downloaded bib2html from http://pertsserver.cs.uiuc.edu/~hull/bib2html and man2html from http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05
tar xzf man2html-1.05-ss-9.05.tar.gz
cd Man2html-1.05
make

make: *** No targets. Stop.
because it's designed to only work on HP Unix systems. Consulted help-gnu-music@gnu.org again - should I really "auto-generate Lily's website"? Meanwhile, hit Infoseek to search for man2html - it came up with their home page http://www.oac.uci.edu/indiv/ehood/man2html.doc.html Downloaded their version, unpacked it, and checked README: Just enter the command "% perl install.me". Well, make that
perl install.me
and it seems to work. On to bib2html ...
make
make install

install: /root/texmf/bibtex/bst/: no such file or directory
Checked Makefile - everything is referred to $(HOME). Corrected the directory lines to /usr/bin and /usr/share/texmf then
make install
install: /usr/dcs/www/cgi-bin/: No such file or directory
make: *** [install] Error 1

At this point, help-gnu-music@gnu.org responded: "It's easier to remove the lines from the spec file that say
make htmldoc || true
tar -C htmldocs -xzf out/htmldoc.tar.gz
%doc htmldocs/
and skip the whole documentation creation". Did it, then (of course)
cd /usr/src
mv lilypond-1.1.47.tar.gz redhat/SOURCES/
cd redhat
rpm -bb SPECS/lilypond.spec

-snip- 203 pages
Wrote: /usr/src/redhat/RPMS/i386/lilypond-1.1.47-1.i386.rpm
cd RPMS/i386
rpm -U lilypond-1.1.47-1.i386.rpm

and it runs. Now, all I have to do is edit 100+ 1.1.26 Scarlatti files to use the incompatible 1.1.47 syntax e.g. changing every occurence of 'fontsize' to 'fontSize' ...

And, issue rm -rf /brain/linux/* to leave some room for Scarlatti again.

John Sankey
other notes on computing