Differences between current version and previous revision of HowToSoftwareBuildingHOWTO.
Other diffs: Previous Major Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 3 | Last edited on Tuesday, October 26, 2004 11:08:01 am | by AristotlePagaltzis | |
Older page: | version 2 | Last edited on Friday, June 7, 2002 1:07:36 am | by perry | Revert |
@@ -1,2537 +1 @@
-
-
-
-Building and Installing Software Packages for Linux
-
-
-
-----
-
-!!!Building and Installing Software Packages for Linux
-
-!!''
-Mendel Cooper''
----
-http://personal.riverusers.com/~thegrendel/v1.91, 27 July 1999
-
-
-----
-''This is a comprehensive guide to building and installing "generic" UNIX
-software distributions under Linux. Additionally, there is some coverage
-of "rpm" and "deb" pre-packaged binaries.''
-----
-
-
-
-
-!!1. Introduction
-
-
-
-
-!!2. Unpacking the Files
-
-
-
-
-!!3. Using Make
-
-
-
-
-!!4. Prepackaged Binaries
-
-
-****4.1 Whats wrong with rpms?
-
-****4.2 Problems with rpms: an example
-
-
-
-
-
-!!5. Termcap and Terminfo Issues
-
-
-
-
-!!6. Backward Compatibility With a.out Binaries
-
-
-****6.1 An Example
-
-
-
-
-
-!!7. Troubleshooting
-
-
-****7.1 Link Errors
-
-****7.2 Other Problems
-
-****7.3 Tweaking and fine tuning
-
-****7.4 Where to go for more help
-
-
-
-
-
-!!8. Final Steps
-
-
-
-
-!!9. First Example: Xscrabble
-
-
-
-
-!!10. Second Example: Xloadimage
-
-
-
-
-!!11. Third Example: Fortune
-
-
-
-
-!!12. Fourth Example: Hearts
-
-
-
-
-!!13. Fifth Example: !XmDipmon
-
-
-
-
-!!14. Where to Find Source Archives
-
-
-
-
-!!15. Final Words
-
-
-
-
-!!16. References and Further Reading
-
-
-
-
-!!17. Credits
-----
-
-!!1. Introduction
-
-
-Many software packages for the various flavors of UNIX and Linux come as
-compressed archives of source files. The same package may be "built"
-to run on different target machines, and this saves the author of the
-software from having to produce multiple versions. A single distribution
-of a software package may thus end up running, in various incarnations,
-on an Intel box, a DEC Alpha, a RISC workstation, or even a mainframe.
-Unfortunately, this puts the responsibility of actually "building"
-and installing the software on the end user, the de facto "system
-administrator", the fellow sitting at the keyboard -- you. Take heart,
-though, the process is not nearly as terrifying or mysterious as it seems,
-as this guide will demonstrate.
-
-
-
-
-
-
-
-
-
-
-
-
-----
-
-!!2. Unpacking the Files
-
-
-You have downloaded or otherwise acquired a software package. Most likely
-it is archived (''tarred'') and compressed (''gzipped''),
-in .tar.gz or .tgz form (familiarly known as a
-"tarball"). First copy it to a working directory. Then ''untar''
-and ''gunzip'' it. The appropriate command for this is __tar
-xzvf ''filename''__, where ''filename'' is the name of the
-software file, of course. The de-archiving process will usually install
-the appropriate files in subdirectories it will create. Note that if
-the package name has a ''.Z'' suffix, then the above procedure will
-serve just as well, though running __uncompress__, followed by a
-__tar xvf__ also works. You may preview this process by a __tar
-tzvf filename__, which lists the files in the archive without actually
-unpacking them.
-
-
-The above method of unpacking "tarballs" is equivalent to either of the following:
-
-
-****gzip -cd filename | tar xvf -
-****
-
-****gunzip -c filename | tar xvf -
-****
-
-(The '-' causes the ''tar'' command to take its input from
-stdin.)
-
-
-Source files in the new ''bzip2'' (.bz2) format
-can be unarchived by a __bzip2 -cd filename | tar xvf -__,
-or, more simply by a __tar xyvf filename__, assuming that
-tar has been appropriately patched (refer to the
-Bzip2 HOWTO for details). Debian Linux uses a different patch for
-tar, one written by Hiroshi Takekawa, so that the ''-I,
---bzip2, --bunzip2'' options work with that particular tar
-version.
-
-
-
[[Many thanks to R. Brock Lynn and Fabrizio Stefani for corrections and
-updates on the above information.
]
-
-
-
-
-
-
-
-
-Sometimes the archived file must be untarred and installed from the
-user's home directory, or perhaps in a certain other directory, such
-as /, /usr/src, or /opt, as specified in
-the package's config info. Should you get an error message attempting
-to untar it, this may be the reason. Read the package docs, especially
-the README and/or Install files, if present, and edit
-the config files and/or Makefiles as necessary, consistent
-with the installation instructions. Note that you would __not__
-ordinarily alter the Imake file, since this could have unforseen
-consequences. Most software packages permit automating this process by
-running __make install__ to emplace the binaries in the appropriate
-system areas.
-
-
-
-
-
-****You might encounter shar files, or ''shell archives'',
-especially in the source code newsgroups on the Internet. These remain
-in use because they are readable to humans, and this permits newsgroup
-moderators to sort through them and reject unsuitable ones. They may
-be unpacked by the __unshar filename.shar__ command. Otherwise the
-procedure for dealing with them is the same as for "tarballs".
-
-****
-
-
-
-
-
-
-
-
-
-****Some source archives have been processed using nonstandard DOS,
-Mac, or even Amiga compression utilities such ''zip'', ''arc'',
-''lha'', ''arj'', ''zoo'', ''rar'', and ''shk''.
-Fortunately,
-Sunsite and
-other places have Linux uncompression utilities that can deal with most
-or all of these.
-
-****
-
-
-
-Occasionally, you may need to update or incorporate bug fixes into the
-unarchived source files using a patch or diff file
-that lists the changes. The doc files and/or README file will
-inform you should this be the case. The normal syntax for invoking Larry
-Wall's powerful ''patch'' utility is __patch < patchfile__.
-
-
-You may now proceed to the build stage of the process.
-
-
-
-
-
-
-
-
-
-
-
-
-----
-
-!!3. Using Make
-
-
-The Makefile is the key to the build process. In its simplest
-form, a Makefile is a script for compiling or building the "binaries",
-the executable portions of a package. The Makefile can also provide a
-means of updating a software package without having to recompile every
-single source file in it, but that is a different story (or a different
-article).
-
-
-At some point, the Makefile launches cc or gcc. This
-is actually a preprocessor, a C (or C++) compiler, and a linker, invoked
-in that order. This process converts the source into the binaries, the
-actual executables.
-
-
-Invoking ''make'' usually involves just typing __make__. This
-generally builds all the necessary executable files for the package in
-question. However, make can also do other tasks, such as installing the
-files in their proper directories (__make install__) and removing
-stale object files (__make clean__). Running __make -n__
-permits previewing the build process, as it prints out all the commands
-that would be triggered by a make, without actually executing them.
-
-
-
-
-
-Only the simplest software uses a generic Makefile. More complex
-installations require tailoring the Makefile according to the location
-of libraries, include files, and resources on your particular machine.
-This is especially the case when the build needs the X11
-libraries to install. ''Imake'' and ''xmkmf'' accomplish this
-task.
-
-
-An Imakefile is, to quote the man page, a "template"
-Makefile. The imake utility constructs a Makefile appropriate for your
-system from the Imakefile. In almost all cases, however, you would run
-__xmkmf__, a shell script that invokes imake, a front end for it.
-Check the README or INSTALL file included in the software archive for
-specific instructions. (If, after dearchiving the source files, there
-is an Imake file present in the base directory, this is a dead
-giveaway that __xmkmf__ should be run.) Read the Imake and
-xmkmf man pages for a more detailed analysis of the procedure.
-
-
-Be aware that xmkmf and make may need to be invoked as
-root, especially when doing a __make install__ to move the binaries
-over to the /usr/bin or /usr/local/bin directories.
-Using make as an ordinary user without root privileges will likely
-result in ''write access denied'' error messages because you lack
-write permission to system directories. Check also that the binaries
-created have the proper execute permissions for you and any other
-appropriate users.
-
-
-Invoking __xmkmf__ uses the Imake file to build a new
-Makefile appropriate for your system. You would normally invoke
-__xmkmf__ with the __-a__ argument, to automatically do a
-''make Makefiles, make includes,'' and ''make depend''. This
-sets the variables and defines the library locations for the compiler
-and linker. Sometimes, there will be no Imake file, instead
-there will be an INSTALL or configure script that will
-accomplish this purpose. Note that if you run configure, it
-should be invoked as __./configure__ to ensure that the correct
-configure script in the current directory is called. In most
-cases, the README file included with the distribution will
-explain the install procedure.
-
-
-It is usually a good idea to visually inspect the Makefile that
-xmkmf or one of the install scripts builds. The Makefile will
-normally be correct for your system, but you may occasionally be
-required to "tweak" it or correct errors manually.
-
-
-
-
-
-Installing the freshly built binaries into the appropriate system directories
-is usually a matter of running __make install__ as root. The usual
-directories for system-wide binaries on modern Linux distributions are
-/usr/bin, /usr/X11R6/bin, and /usr/local/bin. The
-preferred directory for new packages is /usr/local/bin, as this will
-keep separate binaries not part of the original Linux installation.
-
-
-Packages originally targeted for commercial versions of UNIX may attempt
-to install in the /opt or other unfamiliar directory. This will,
-of course, result in an installation error if the intended installation
-directory does not exist. The simplest way to deal with this is to
-create, as root, an /opt directory, let the package install
-there, then add that directory to the PATH environmental
-variable. Alternatively, you may create symbolic links to the
-/usr/local/bin directory.
-
-
-
-
-
-
-
-
-Your general installation procedure will therefore be:
-
-
-****Read the README file and other applicable docs.
-****
-
-****Run __xmkmf -a__, or the INSTALL or configure script.
-****
-
-****Check the Makefile.
-****
-
-****If necessary, run __make clean__, __make Makefiles__,
-__make includes__, and __make depend__.
-****
-
-****Run __make__.
-****
-
-****Check file permissions.
-****
-
-****If necessary, run __make install__.
-****
-
-
-
-
-
-
-''Notes:''
-
-
-
-
-
-****You would not normally build a package as root. Doing an __su__
-to root is only necessary for installing the compiled binaries into
-system directories.
-
-****
-
-****After becoming familiar with ''make'' and its uses,
-you may wish to add additional optimization options passed to
-gcc in the standard Makefile included or created
-in the package you are installing. Some of these common options are
-''-O2'', ''-fomit-frame-pointer'', ''-funroll-loops'',
-and ''-mpentium'' (if you are running a Pentium cpu). Use caution
-and good sense when modifying a Makefile!
-
-****
-
-****After the ''make'' creates the binaries, you may wish to
-__strip__ them. The __strip__ command removes the symbolic
-debugging information from the binaries, and reduces their size, often
-drastically. This also disables debugging, of course.
-
-****
-
-****The
-Pack Distribution Project offers a different approach to creating archived software
-packages, based on a set of Python scripting tools for managing
-symbolic links to files installed in separate ''collection
-directories''. These archives are ordinary ''tarballs'', but
-they install in /coll and /pack directories. You may
-find it necessary to download the ''Pack-Collection'' from the
-above site should you ever run across one of these distributions.
-****
-
-
-
-
-
-
-
-
-
-
-----
-
-!!4. Prepackaged Binaries
-
-
-
-
-
-
-
-!!4.1 Whats wrong with rpms?
-
-
-
-
-
-
-Manually building and installing packages from source is apparently so
-daunting a task for some Linux users that they have embraced the popular
-''rpm'' and ''deb'' or the newer Stampede ''slp'' package
-formats. While it may be the case that an ''rpm'' install normally
-runs as smoothly and as fast as a software install in a certain other
-notorious operating system, some thought should certainly be given to
-the disadvantages of self-installing, prepackaged binaries.
-
-
-First, be aware that software packages are normally released first as
-"tarballs", and that prepackaged binaries follow days, weeks, even
-months later. A current ''rpm'' package is typically at least a
-couple of minor version behind the latest "tarball". So, if you wish
-to keep up with all the 'bleeding edge' software, you might not wish to
-wait for an ''rpm'' or ''deb'' to appear. Some less popular
-packages may never be ''rpm'''ed.
-
-
-Second, the "tarball" package may well be more complete, have more
-options, and lend itself better to customization and tweaking. The binary
-rpm version may be missing some of the functionality of the full release.
-Source ''rpm'''s contain the full source code and are equivalent
-to the corresponding "tarballs", and they likewise need to be built and
-installed using either of the __rpm --recompile packagename.rpm__
-or __rpm --rebuild packagename.rpm__ options.
-
-
-Third, some prepackaged binaries will not properly install, and even
-if they do install, they could crash and core-dump. They may depend on
-different library versions than are present in your system, or they may
-be improperly prepared or just plain broken. In any case, when installing
-an ''rpm'' or ''deb'' you necessarily trust the expertise of
-the persons who have packaged it.
-
-
-Finally, it helps to have the source code on hand, to be able to tinker
-with and learn from it. It is much more straightforward to have the
-source in the archive you are building the binaries from, and not in a
-separate source ''rpm''.
-
-
-
-
-
-Installing an ''rpm'' package is not necessarily a no-brainer.
-If there is a dependency conflict, an ''rpm'' install will
-fail. Likewise, should the ''rpm'' require a different version of
-libraries than the ones present on your system, the install may not work,
-even if you create symbolic links to the missing libraries from the ones
-in place. Despite their convenience, ''rpm'' installs often fail
-for the same reasons "tarball" ones do.
-
-
-You must install ''rpm'''s and ''deb'''s as root, in order
-to have the necessary write permissions, and this opens a potentially
-serious security hole, as you may inadvertently clobber system binaries
-and libraries, or even install a ''Trojan horse'' that might wreak
-havoc upon your system. It is therefore important to obtain ''rpm''
-and ''deb'' packages from a "trusted source". In any case, you should
-run a 'signature check' (against the MD5 checksum) on the package, __rpm
---checksig packagename.rpm__, before installing. Likewise highly
-recommended is running __rpm -K --nopgp packagename.rpm__. The
-corresponding commands for ''deb'' packages are __dpkg -I | --info
-packagename.deb__ and __dpkg -e | --control packagename.deb__.
-
-
-
-
-
-****rpm --checksig gnucash-1.1.23-4.i386.rpm
-
-
-
-
-gnucash-1.1.23-4.i386.rpm: size md5 OK
-****
-
-
-
-
-
-
-****rpm -K --nopgp gnucash-1.1.23-4.i386.rpm
-
-
-
-
-gnucash-1.1.23-4.i386.rpm: size md5 OK
-****
-
-
-
-For the truly paranoid (and, in this case there is much
-to be said for paranoia), there are the ''unrpm''
-and ''rpmunpack'' utilities available from the
-Sunsite utils/package directory for unpacking and checking the individual
-components of the packages.
-
-
-
-Klee Diene has written an
-experimental ''dpkgcert'' package for verifying the integrity of
-installed ''.deb'' files against MD5 checksums. It is available from
-the
-Debian ftp archive. The current package name
-/ version is ''dpkgcert_.2-4.1_all.deb''. The
-Jim Pick Software site maintains
-an experimental server database to provide ''dpkgcert'' certificates
-for the packages in a typical Debian installation.
-
-
-In their most simple form, the commands __rpm -i packagename.rpm__
-and __dpkg --install packagename.deb__ automatically unpack and
-install the software. Exercise caution, though, since using these
-commands blindly may be dangerous to your system's health!
-
-
-Note that the above warnings also apply, though to a lesser extent,
-to Slackware's ''pkgtool'' installation utility. All "automatic"
-software installations require caution.
-
-
-The
-martian and
-alien programs allow conversion between the ''rpm'',
-''deb'', Stampede ''slp'', and ''tar.gz'' package
-formats. This makes these packages accessible to all Linux distributions.
-
-
-Carefully read the man pages for the ''rpm''
-and ''dpkg'' commands, and refer to the
-RPM HOWTO, TFUG's
-Quick Guide to Red Hat's Package Manager, and
-The Debian Package Management Tools for more detailed information.
-
-
-
-
-
-
-
-!!4.2 Problems with rpms: an example
-
-
-
-
-
-
-
-Jan Hubicka wrote
-a very nice fractal package called ''xaos''. At his
-home page, both
-.tar.gz and rpm packages are available. For the sake
-of convenience, let us try the rpm version, rather than the "tarball".
-
-
-Unfortunately, the rpm of ''xaos'' fails to install. Two separate
-rpm versions misbehave.
-
-
-__rpm -i --test XaoS-3.-1.i386.rpm__
-
-
-error: failed dependencies:
-libslang.so.0 is needed by XaoS-3.-1
-libpng.so.0 is needed by XaoS-3.-1
-libaa.so.1 is needed by XaoS-3.-1
-
-
-
-
-__rpm -i --test xaos-3.-8.i386.rpm__
-
-
-error: failed dependencies:
-libaa.so.1 is needed by xaos-3.-8
-
-
-
-
-The strange thing is that libslang.so., libpng.so.,
-and libaa.so.1 are all present in /usr/lib on the
-system tested. The rpms of ''xaos'' must have been built with
-slightly different versions of those libraries, even if the release
-numbers are identical.
-
-
-As a test, let us try installing xaos-3.-8.i386.rpm with the
-''--nodeps'' option to force the install. A trial run of ''xaos''
-crashes.
-
-
-xaos: error in loading shared libraries: xaos: undefined symbol: __fabsl
-
-
-
-
-Let us stubbornly try to get to the bottom of this. Running ''ldd''
-on the ''xaos'' binary to find its library dependencies shows
-all the necessary shared libraries present. Running ''nm'' on the
-/usr/lib/libaa.so.1 library to list its symbolic references
-shows that it is indeed missing ''__fabsl''. Of course, the absent
-reference ''could'' be missing from one of the other libraries...
-There is nothing to be done about that, short of replacing one or more
-libraries.
-
-
-Enough! Download the "tarball", XaoS-3..tar.gz, available from
-the
-ftp site, as well as from the home page. Try building it. Running
-__./configure__, __make__, and finally (as root) __make
-install__, works flawlessly.
-
-
-This is one of an number of examples of prepackaged binaries being more
-trouble than they are worth.
-
-
-
-
-
-
-
-
-
-
-
-
-----
-
-!!5. Termcap and Terminfo Issues
-
-
-
-
-
-
-
-
-According to its man page, ''"terminfo is a data base describing
-terminals, used by screen-oriented programs..."''. It defines a
-generic set of control sequences (escape codes) used to display text on
-terminals, and makes possible support for different terminal hardware
-without the need for special drivers. The ''terminfo'' libraries
-are located in /usr/share/terminfo on modern Linux distributions.
-
-
-The ''terminfo'' database has largely supplanted the older
-''termcap'' and the totally obsolete ''termlib'' ones. This
-is usually of no concern for program installation except when dealing
-with a package that requires ''termcap''.
-
-
-Most Linux distributions now use ''terminfo'', but still retain the
-older termcap libraries for compatibility with legacy applications (see
-/etc/termcap). Sometimes there is a special compatibility package
-that needs to be installed to facilitate use of termcap linked binaries.
-Very occasionally, an ''#define termcap'' statement might need to
-be commented out of a source file. Check the appropriate doc files for
-your particular distribution for definitive information on this.
-
-
-
-
-
-
-
-
-
-----
-
-!!6. Backward Compatibility With a.out Binaries
-
-
-
-
-
-In a very few cases, it is necessary to use a.out binaries, either because
-the source code is not available or because it is not possible to build
-new ELF binaries from the source for some reason.
-
-
-As it happens, ELF installations almost always have a complete set
-of a.out libraries in the /usr/i486-linuxaout/lib directory.
-The numbering scheme for a.out libraries differs from that of ELF ones,
-cleverly avoiding conflicts that could cause confusion. The a.out
-binaries should therefore be able to find the correct libraries at
-runtime, but this might not always be the case.
-
-
-Note that the kernel needs to have a.out support built into it, either
-directly or as a loadable module. It may be necessary to rebuild the
-kernel to enable this. Moreover, some Linux distributions require
-installation of a special compatibility package, such as Debian's
-xcompat for executing a.out X applications.
-
-
-
-
-!!6.1 An Example
-
-
-
-
-
-
-Jerry Smith wrote a very handy ''rolodex'' program some years
-back. It uses the Motif libraries, but fortunately is available
-as a statically linked binary in a.out format. Unfortunately, the
-source requires numerous tweaks to rebuild using the ''lesstif''
-libraries. Even more unfortunately, the a.out binary bombs on an ELF
-system with the following error message.
-
-
-xrolodex: can't load library '//lib/libX11.so.3'
-No such library
-
-
-
-
-As it happens, there is such a library, in
-/usr/i486-linuxaout/lib, but xrolodex is unable to locate it
-at run time. The simple solution is to provide a symbolic link in the
-/lib directory:
-
-
-ln -s /usr/i486-linuxaout/lib/X11.so.3.1.0 libX11.so.3
-
-
-
-
-
-It turns out to be necessary to provide similar links for the libXt.so.3
-and libc.so.4 libraries. This needs to be done as root, of course. Note
-that you should make absolutely certain you will not overwrite or cause
-version number conflicts with pre-existing libraries. Fortunately, the
-new ELF libraries have higher version numbers than the older a.out ones,
-to anticipate and forestall just such problems.
-
-
-After creating the three links, ''xrolodex'' runs fine.
-
-
-The ''xrolodex'' package was originally posted on
-Spectro, but seems to
-vanished from there. It may currently be downloaded from
-Sunsite as a ''tar.Z'' format source file [[512k].
-
-
-
-
-
-
-
-
-
-----
-
-!!7. Troubleshooting
-
-
-
-
-
-If ''xmkmf'' and/or ''make'' succeeded without errors,
-you may proceed to the
-next section.
-However, in "real life", few things work right the first time.
-This is when your resourcefulness is put to the test.
-
-
-
-
-!!7.1 Link Errors
-
-
-
-
-
-
-****Suppose ''make'' fails with a Link error: -lX11: No such
-file or directory, even after xmkmf has been invoked. This may mean
-that the ''Imake'' file was not set up properly. Check the first
-part of the ''Makefile'' for lines such as:
-
-
-LIB= -L/usr/X11/lib
-INCLUDE= -I/usr/X11/include/X11
-LIBS= -lX11 -lc -lm
-
-
-The -L and -I switches tell the compiler and linker
-where to look for the ''library'' and ''include'' files,
-respectively. In this example, the ''X11 libraries'' should be in
-the /usr/X11/lib directory, and the ''X11 include files''
-should be in the /usr/X11/include/X11 directory. If this is
-incorrect for your machine, make the necessary changes to the
-''Makefile'' and try the ''make'' again.
-
-****
-
-
-
-
-
-
-****Undefined references to math library functions, such as the following:
-
-
-/tmp/cca011551.o(.text+0x11): undefined reference to `cos'
-
-
-The fix for this is to explicitly link in the math library,
-by adding an __-lm__ to the ''LIB'' or ''LIBS'' flags in
-the Makefile (see previous example).
-
-****
-
-
-
-
-
-
-
-
-
-
-
-
-****Yet another thing to try if ''xmkmf'' fails is the following script:
-
-
-make -DUseInstalled -I/usr/X386/lib/X11/config
-
-
-This is a sort of bare bones equivalent of ''xmkmf''.
-
-****
-
-
-
-
-
-
-****In a very few cases, running ''ldconfig'' as ''root''
-may be the solution:
-
-
-
-
-__# ldconfig__ updates the shared library symbolic links. ''This
-may not be necessary .''
-
-****
-
-
-
-
-
-
-****Some Makefiles use unrecognized aliases for libraries
-present in your system. For example, the build may require
-libX11.so.6, but there exists no such file or link in
-/usr/X11R6/lib. Yet, there is a libX11.so.6.1. The
-solution is to do a __ln -s /usr/X11R6/lib/libX11.so.6.1
-/usr/X11R6/lib/libX11.so.6__, as root. This may need to be followed
-by a __ldconfig__.
-
-****
-
-
-
-
-
-
-
-
-
-****Sometimes the source needs the older release X11R5 libraries to
-build. If you have the R5 libs in /usr/X11R6/lib (you were given the
-option of having them when first installing Linux), then you need only
-ensure that you have the links that the software needs to build. The
-R5 libs are named libX11.so.3.1.,
-libXaw.so.3.1., and libXt.so.3.1.. You generally
-need links, such as ''libX11.so.3 -> libX11.so.3.1.''. Possibly
-the software will also need a link of the form ''libX11.so ->
-libX11.so.3.1.''. Of course, to create a "missing" link, use the
-command __ln -s libX11.so.3.1.0 libX11.so__, ''as root''.
-
-****
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-****Some packages will require you to install updated versions of one or
-more libraries. For example, the 4.x versions of the ''!StarOffice''
-suite from !StarDivision GmbH were notorious for needing a libc
-version 5.4.4 or greater. Even the more recent ''!StarOffice'' 5.
-will not run after installation with the new glibc 2.1 libs.
-Fortunately, the newer ''!StarOffice'' 5.1 solves these problems.
-If running an older version of ''!StarOffice'' you would, as
-''root'', need to copy one or more libraries to the appropriate
-directories, remove the old libraries, then reset the symbolic links
-(check the latest version of the !StarOffice miniHOWTO for more
-information on this).
-__Caution: Exercise extreme care in this, as you can render your
-system nonfunctional if you screw up.__
-You can usually find the latest updated libraries at
-Sunsite.
-
-****
-
-
-
-
-
-!!7.2 Other Problems
-
-
-
-
-
-
-
-
-
-****An installed ''Perl'' or shell script gives you a No such
-file or directory error message. In this case, check the file
-permissions to make sure the file is executable and check the file
-header to ascertain whether the shell or program invoked by the script
-is in the place specified.
-For example, the scrip may begin with:
-
-
-#!/usr/local/bin/perl
-
-
-If ''Perl'' is in fact installed in your /usr/bin
-directory instead of the /usr/local/bin one, then the script
-will not run. There are two methods of correcting this. The
-script file header may be changed to #!/usr/bin/perl, or
-a symbolic link to the correct directory may be added, __ln -s
-/usr/bin/perl /usr/local/bin/perl__.
-
-****
-
-
-
-
-
-
-****Some X11 software requires the Motif libraries to build.
-The standard Linux distributions do not have the Motif libraries
-installed, and at present Motif costs an extra $100-$200 (though the
-freeware
-Lesstif also works
-in many cases). If you need Motif to build a certain package, but lack
-the Motif libraries, it may be possible to obtain ''statically linked
-binaries''. Static linking incorporates the library routines in the
-binaries themselves. This results in much larger binary files, but the
-code will run on systems lacking the libraries.
-
-
-
-
-When a package requires libraries not present on your system for the
-build, it will result in link errors (undefined reference
-errors). The libraries may be expensive proprietary ones or difficult
-to find for sone other reason. In that case, obtaining a ''statically
-linked'' binary either from the author of the package or from a Linux
-user group may be the easiest to implement fix.
-
-****
-
-
-
-
-
-
-
-
-
-****Running a ''configure'' script creates a strange Makefile, one
-seemingly unrelated to the package you are attempting to build. This
-means the wrong ''configure'' ran, one found somewhere else in your
-path. Always invoke ''configure'' as __./configure__ to
-prevent this.
-****
-
-
-
-
-
-
-
-
-
-****Most Linux distributions have changed over to the libc 6 / glibc
-2 libraries from the older libc 5. Precompiled binaries
-that worked with the older library may bomb if you have upgraded your
-library. The solution is to either recompile the applications from the
-source or to obtain newer precompiled binaries. If you are in the process
-of upgrading your system to libc 6 and are experiencing problems,
-refer to Eric Green's ''Glibc 2 HOWTO''.
-
-
-
-
-Note that there are some minor incompatibilities between glibc
-versions, so a binary built with glibc 2.1 may not work with
-glibc 2., and vice versa.
-
-****
-
-
-
-
-
-
-****Sometimes it is necessary to remove the ''-ansi'' option from the
-compile flags in the Makefile. This enables gcc's extra, non-ANSI features,
-and allows building packages that require these extensions. (Thanks to Sebastien
-Blondeel for pointing this out.)
-****
-
-
-
-
-
-
-****Some programs require having ''setuid root'', in order to run
-with ''root privileges''. The command to implement this is
-__chmod u+s filename__, ''as root'' (note that the program
-must already be owned by root). This has the effect of setting
-the ''setuid'' bit in the file permissions. This issue comes up
-when the program accesses the system hardware, such as a modem or CD ROM
-drive, or when the SVGA libs are invoked from console mode, as in one
-particularly notorious emulation package. If a program works when run by
-root, but gives ''access denied'' error messages to an ordinary
-user, suspect this as the cause.
-
-
-
-
-
-__Warning:__
-A program with ''setuid'' as root may pose a security risk to your
-system. The program runs with root privileges and thus has the potential
-for doing significant damage. Make certain that you know what the
-program does, by looking at the source if possible, before setting the
-''setuid'' bit.
-
-
-
-
-****
-
-
-
-
-
-
-
-
-!!7.3 Tweaking and fine tuning
-
-
-
-
-
-
-You may wish to examine the Makefile to make certain that
-the best compilation options for your system are invoked. For example,
-setting the ''-O2'' flag chooses the highest level of optimization
-and the ''-fomit-frame-pointer'' flag results in a smaller binary
-(though debugging will then be disabled). __Do not play around with
-this unless you know what you are doing, and in any case, not until
-after a trial ''build'' works.__
-
-
-
-
-
-
-
-
-
-
-!!7.4 Where to go for more help
-
-
-
-
-
-
-In my experience, perhaps 25% of applications build "right out
-of the box". Another 50% or so can be "persuaded" to build with
-an effort ranging from trivial to herculean. That still means a
-significant number of packages will not build no matter what. Even
-then, the Intel ELF and/or a.out binaries for
-these might possibly be found at
-Sunsite or the
-TSX-11 archive.
-Red Hat and
-Debian have extensive archives of
-prepackaged binaries of most of the popular Linux software. Perhaps
-the author of the software can supply the binaries compiled for your
-particular flavor of machine.
-
-
-
-
-
-Note that if you obtain precompiled binaries, you will need to check
-for compatibility with your system:
-
-
-****The binaries must run on your hardware (i.e., Intel
-x86).
-****
-
-****The binaries must be compatible with your kernel (i.e., a.out or
-ELF).
-****
-
-****Your libraries must be up to date.
-****
-
-****Your system must have the appropriate installation utility (rpm or
-deb).
-****
-
-
-
-If all else fails, you may find help in the appropriate
-newsgroups, such as
-comp.os.linux.x or
-comp.os.linux.development.
-
-
-If nothing at all works, at least you gave it your best effort, and you
-learned a lot.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-----
-
-!! 8. Final Steps
-
-
-Read the software package documentation to determine whether certain
-environmental variables need setting (in .bashrc
-or .cshrc) and
-if the .Xdefaults and .Xresources files need customizing.
-
-
-There may be an applications default file, usually named Xfoo.ad
-in the original Xfoo distribution. If so, edit the Xfoo.ad file to
-customize it for your machine, then rename (__mv__) it Xfoo
-and install it in the /usr/lib/X11/app-defaults directory,
-''as root''. Failure to do this may cause the software to behave
-strangely or even refuse to run.
-
-
-Most software packages come with one or more preformatted man
-pages. ''As root'', copy the Xfoo.man file to the appropriate
-/usr/man, /usr/local/man, or /usr/X11R6/man
-directory (man1 - man9), and rename it accordingly.
-For example, if Xfoo.man ends up in /usr/man/man4, it should be
-renamed Xfoo.4 (mv Xfoo.man Xfoo.4). By convention, user commands go
-in man1, games in man6, and administration packages in
-man8 (see the ''man docs'' for more details). Of course,
-you may deviate from this on your own system, if you like.
-
-
-A few packages will not install the binaries in the appropriate system
-directories, that is, they are missing the ''install'' option in the
-Makefile. Should this be the case, you can install the binaries
-manually by copying the binaries to the appropriate system directory,
-/usr/bin, /usr/local/bin or /usr/X11R6/bin,
-''as root'', of course. Note that /usr/local/bin is
-the preferred directory for binaries that are not part of the Linux
-distribution's base install.
-
-
-Some or all of the above procedures should, in most cases, be handled
-automatically by a __make install__, and possibly a __make
-install.man__ or __make install_man__. If so, the README
-or INSTALL doc file will specify this.
-
-
-
-
-
-
-----
-
-!!9. First Example: Xscrabble
-
-
-Matt Chapman's Xscrabble seemed like a program that would be
-interesting to have, since I happen to be an avid ScrabbleTM
-player. I downloaded it, uncompressed it, and built it following the
-procedure in the README file:
-
-
-xmkmf
-make Makefiles
-make includes
-make
-
-
-
-
-''Of course it did not work...''
-
-
-
-
-
-gcc -o xscrab -O2 -O -L/usr/X11R6/lib
-init.o xinit.o misc.o moves.o cmove.o main.o xutils.o mess.o popup.o
-widgets.o display.o user.o !CircPerc.o
--lXaw -lXmu -lXExExt -lXext -lX11 -lXt -lSM -lICE -lXExExt -lXext -lX11
--lXpm -L../Xc -lXc
-!BarGraf.o(.text+0xe7): undefined reference to `!XtAddConverter'
-!BarGraf.o(.text+0x29a): undefined reference to `XSetClipMask'
-!BarGraf.o(.text+0x2ff): undefined reference to `XSetClipRectangles'
-!BarGraf.o(.text+0x375): undefined reference to `XDrawString'
-!BarGraf.o(.text+0x3e7): undefined reference to `XDrawLine'
-etc.
-etc.
-etc...
-
-
-
-
-I enquired about this in the
-comp.os.linux.x newsgroup, and someone kindly pointed out that
-apparently the Xt, Xaw, Xmu, and X11 libs were not being found at the
-link stage. Hmmm...
-
-
-There were two main Makefiles, and the one in the src directory
-caught my interest. One line in the Makefile defined LOCAL_LIBS as:
-LOCAL_LIBS = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) Here were
-references to the libs not being found by the linker.
-
-
-Looking for the next reference to LOCAL_LIBS, I saw on line 495 of that
-Makefile:
-
-
-$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LOCAL_LIBS) $(LDLIBS)
-$(EXTRA_LOAD_FLAGS)
-
-
-
-
-Now what were these LDLIBS?
-
-
-LDLIBS = $(LDPOSTLIB) $(THREADS_LIBS) $(SYS_LIBRARIES)
-$(EXTRA_LIBRARIES)
-
-
-
-
-The SYS_LIBRARIES were:
-
-
-SYS_LIBRARIES = -lXpm -L../Xc -lXc
-
-
-Yes! Here were the missing libraries.
-
-
-Possibly the linker needed to see the LDLIBS before the LOCAL_LIBS...
-So, the first thing to try was to modify the Makefile by transposing the
-$(LOCAL_LIBS) and $(LDLIBS) on line 495, so it would now read:
-
-
-$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LDLIBS) $(LOCAL_LIBS)
-$(EXTRA_LOAD_FLAGS) ^^^^^^^^^^^^^^^^^^^^^^^
-
-
-
-
-I tried running ''make'' again with the above change, and lo and
-behold, it worked this time. Of course, Xscrabble still needed some
-fine tuning and twiddling, such as renaming the dictionary and
-commenting out some assert statements in one of the source files, but
-since then it has provided me with many hours of pleasure.
-
-
-
-
-
-
-
-
-[[Note that a newer version of Xscrabble is now available in rpm format, and
-this installs without problems.]
-
-
-
-
-
-
-
-
-
-
-
-You may e-mail
-Matt Chapman, and download ''Xscrabble'' from his
-home page.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Scrabble is a registered trademark of the Milton Bradley Co., Inc.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-----
-
-!!10. Second Example: Xloadimage
-
-
-This example poses an easier problem. The ''xloadimage'' program
-seemed a useful addition to my set of graphic tools. I copied the
-xloadi41.gz file directly from the source directory on the CD
-included with the excellent
-X User Tools book, by
-Mui and Quercia. As expected, ''tar xzvf'' unarchives the files.
-The ''make'', however, produces a nasty-looking error and
-terminates.
-
-
-
-
-
-gcc -c -O -fstrength-reduce -finline-functions -fforce-mem
--fforce-addr -DSYSV -I/usr/X11R6/include
--DSYSPATHFILE=\"/usr/lib/X11/Xloadimage\" mcidas.c
-In file included from /usr/include/stdlib.h:32,
-from image.h:23,
-from xloadimage.h:15,
-from mcidas.c:7:
-/usr/lib/gcc-lib/i486-linux/2.6.3/include/stddef.h:215:
-conflicting types for `wchar_t'
-/usr/X11R6/include/X11/Xlib.h:74: previous declaration of
-`wchar_t'
-make[[1]: *** [[mcidas.o] Error 1
-make[[1]: Leaving directory
-`/home/thegrendel/tst/xloadimage.4.1'
-make: *** [[default] Error 2
-
-
-
-
-The error message contains the essential clue.
-
-
-Looking at the file image.h, line 23...
-
-
-#include <stdlib.h>
-
-
-
-
-Aha, somewhere in the source for ''xloadimage'', ''wchar_t''
-has been redefined from what was specified in the standard include file,
-stdlib.h. Let us first try commenting out line 23 in
-image.h, as perhaps the ''stdlib.h include'' is
-not, after all, necessary.
-
-
-At this point, the build proceeds without any fatal errors. The
-''xloadimage'' package functions correctly now.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-----
-
-!!11. Third Example: Fortune
-
-
-This example requires some knowledge of C programming. The majority
-of UNIX/Linux software is written in C, and learning at least a little
-bit of C would certainly be an asset for anyone serious about software
-installation.
-
-
-The notorious ''fortune'' program displays up a humorous saying, a
-"fortune cookie", every time Linux boots up. Unfortunately (pun intended),
-attempting to build fortune on a Red Hat distribution with a 2..30
-kernel generates fatal errors.
-
-
-
-
-
-~/fortune# make all
-gcc -O2 -Wall -fomit-frame-pointer -pipe -c fortune.c -o
-fortune.o
-fortune.c: In function `add_dir':
-fortune.c:551: structure has no member named `d_namlen'
-fortune.c:553: structure has no member named `d_namlen'
-make[[1]: *** [[fortune.o] Error 1
-make[[1]: Leaving directory `/home/thegrendel/for/fortune/fortune'
-make: *** [[fortune-bin] Error 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-Looking at fortune.c, the pertinent lines are these.
-
-
-
-
-
-if (dirent->d_namlen == )
-continue;
-name = copy(dirent->d_name, dirent->d_namlen);
-
-
-
-
-We need to find the structure dirent, but it is not declared in
-the ''fortune.c'' file, nor does a __grep dirent__ show it in
-any of the other source files. However, at the top of
-''fortune.c'', there is the following line.
-
-
-
-
-
-#include <dirent.h>
-
-
-
-
-This appears to be a system library include file, therefore, the logical
-place to look for ''dirent.h'' is in ''/usr/include''.
-Indeed, there does exist a ''dirent.h'' file in
-''/usr/include'', but that file does not contain the declaration of
-the dirent structure. There is, however, a reference to
-another ''dirent.h'' file.
-
-
-
-
-
-#include <linux/dirent.h>
-
-
-
-
-
-
-
-At last, going to ''/usr/include/linux/dirent.h'', we find the
-structure declaration we need.
-
-
-
-
-
-struct dirent {
-long d_ino;
-__kernel_off_t d_off;
-unsigned short d_reclen;
-char d_name[[256]; /* We must not include
-limits.h! */
-};
-
-
-
-
-Sure enough, the structure declaration contains no ''d_namelen'',
-but there are a couple of "candidates" for its equivalent. The most
-likely of these is ''d_reclen'', since this structure member
-probably represents the length of something and it is a short integer.
-The other possibility, ''d_ino'', could be an inode number, judging
-by its name and type. As a matter of fact, we are probably dealing with
-a "directory entry" structure, and these elements represent attributes
-of a file, its name, inode, and length (in blocks). This would seem to
-validate our guess.
-
-
-Let us edit the file fortune.c, and change the two
-''d_namelen'' references in lines 551 and 553 to ''d_reclen''.
-Try a ''make all'' again. __Success.__ It builds without
-errors. We can now get our "cheap thrills" from fortune.
-
-
-
-
-
-
-----
-
-!!12. Fourth Example: Hearts
-
-
-
-
-
-Here is the hoary old game of Hearts, written for UNIX systems by Bob
-Ankeney sometime in the '80's, revised in 1992 by Mike Yang, and currently
-maintained by
-Jonathan Badger. Its predecessor was an even older Pascal program by Don
-Backus of Oregon Software, later updated by Jeff Hemmerling. Originally
-intended as a multiplayer client, it also works well in single-player
-mode against computer opponents. The graphics are nice, though the game
-lacks sophisticated features and the computer players are not particularly
-strong. All the same, it seems to be the only decent Hearts game available
-for UNIX and Linux machines even at this late date.
-
-
-Due to its age and lineage, this package is particularly difficult to
-build on a Linux system. It requires solving a long and perplexing series
-of puzzles. It is an exercise in patience and determination.
-
-
-''Before beginning, make certain that you have either the motif or
-lesstif libraries installed.''
-
-
-
-
-
-****____
-****
-
-
-
-__xmkmf__
-
-
-__make__
-
-
-
-
-
-client.c: In function `read_card':
-client.c:430: `_tty' undeclared (first use in this function)
-client.c:430: (Each undeclared identifier is reported only once
-client.c:430: for each function it appears in.)
-client.c: In function `scan':
-client.c:685: `_tty' undeclared (first use in this function)
-make: *** [[client.o] Error 1
-
-
-
-
-
-
-
-These are the culprits in the file client.c:
-
-
-
-
-
-#ifndef SYSV
-(buf[[2] != _tty.sg_erase) && (buf[[2] != _tty.sg_kill)) {
-#else
-(buf[[2] != CERASE) && (buf[[2] != CKILL)) {
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-In client.c, add
-
-
-#define SYSV
-
-
-at line 39. This will bypass the reference to ''_tty''.
-
-
-__make__
-
-
-
-
-
-client.c:41: sys/termio.h: No such file or directory
-make: *** [[client.o] Error 1
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-The include file termio.h is in the /usr/include
-directory on a Linux system, rather than the /usr/include/sys
-one, as was the case on older UNIX machines. Therefore, change line 41
-of client.c from
-
-
-#include <sys/termio.h>
-
-
-to
-
-
-#include <termio.h>
-
-
-
-
-__make__
-
-
-
-
-
-gcc -o hearts -g -L/usr/X11R6/lib client.o hearts.o select.o connect.o
-sockio.o start_dist.o -lcurses -ltermlib
-/usr/bin/ld: cannot open -ltermlib: No such file or directory
-collect2: ld returned 1 exit status
-make: *** [[hearts] Error 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-Modern Linux distributions use the ''terminfo'' and/or
-''termcap'' database, rather than the obsolete ''termlib'' one.
-
-
-Edit the Makefile.
-
-
-Line 655:
-
-
-CURSES_LIBRARIES = -lcurses -ltermlib
-
-
-
-
-changes to:
-
-
-CURSES_LIBRARIES = -lcurses -ltermcap
-
-
-
-
-
-
-
-__make__
-
-
-
-
-
-gcc -o xmhearts -g -L/usr/X11R6/lib xmclient.o hearts.o select.o
-connect.o sockio.o start_dist.o gfx.o -lXm_s -lXt -lSM -lICE -lXext -lX11
--lPW
-/usr/bin/ld: cannot open -lXm_s: No such file or directory
-collect2: ld returned 1 exit status
-
-
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-The main ''lesstif'' library is libXm, rather than
-libXm_s. Therefore, edit the Makefile.
-
-
-In line 653:
-
-
-XMLIB = -lXm_s $(XTOOLLIB) $(XLIB) -lPW
-
-
-
-
-changes to:
-
-
-XMLIB = -lXm $(XTOOLLIB) $(XLIB) -lPW
-
-
-
-
-
-
-
-__make__
-
-
-
-
-
-gcc -o xmhearts -g -L/usr/X11R6/lib xmclient.o hearts.o select.o
-connect.o sockio.o start_dist.o gfx.o -lXm -lXt -lSM -lICE -lXext -lX11 -lPW
-/usr/bin/ld: cannot open -lPW: No such file or directory
-collect2: ld returned 1 exit status
-make: *** [[xmhearts] Error 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-Round up the usual suspects.
-
-
-There is no PW library. Edit the Makefile.
-
-
-Line 653:
-
-
-XMLIB = -lXm $(XTOOLLIB) $(XLIB) -lPW
-
-
-
-
-changes to:
-
-
-XMLIB = -lXm $(XTOOLLIB) $(XLIB) -lPEX5
-
-
-(The PEX5 lib comes closest to PW.)
-
-
-
-
-
-__make__
-
-
-
-
-
-
-
-
-rm -f xmhearts
-gcc -o xmhearts -g -L/usr/X11R6/lib xmclient.o hearts.o select.o
-connect.o sockio.o start_dist.o gfx.o -lXm -lXt -lSM -lICE -lXext -lX11 -lPEX5
-
-
-
-
-The make finally works (hurray!).
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-''Installation:''
-
-
-As root,
-
-
-
-
-
-[[root@localhost hearts]# make install
-install -c -s hearts /usr/X11R6/bin/hearts
-install -c -s xmhearts /usr/X11R6/bin/xmhearts
-install -c -s xawhearts /usr/X11R6/bin/xawhearts
-install in . done
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-''Test run:''
-
-
-__rehash__
-
-
-(We're running the tcsh shell.)
-
-
-__xmhearts__
-
-
-
-
-
-localhost:~/% xmhearts
-Can't invoke distributor!
-
-
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-From README file in the hearts package:
-
-
-
-
-
-Put heartsd, hearts_dist, and hearts.instr in the HEARTSLIB
-directory defined in local.h and make them world-accessible.
-
-
-
-
-
-
-
-From the file local.h:
-
-
-
-
-
-/* where the distributor, dealer and instructions live */
-#define HEARTSLIB "/usr/local/lib/hearts"
-
-
-
-
-This is a classic case of RTFM.
-
-
-
-
-
-As ''root'',
-
-
-__cd /usr/local/lib__
-
-
-__mkdir hearts__
-
-
-__cd !$__
-
-
-Copy the distributor files to this directory.
-
-
-__cp /home/username/hearts/heartsd .__
-
-
-__cp /home/username/hearts/hearts_dist .__
-
-
-__cp /home/username/hearts/hearts.instr .__
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-''Try another test run.''
-
-
-__xmhearts__
-
-
-It works some of the time, but more often than not crashes with a
-dealer died! message.
-
-
-
-
-
-
-
-
-
-
-
-****____
-****
-
-
-
-The "distributor" and "dealer" scan the hardware ports. We should thus
-suspect that those programs need root user privileges.
-
-
-Try, as ''root'',
-
-
-__chmod u+s /usr/local/lib/heartsd__
-
-
-__chmod u+s /usr/local/lib/hearts_dist__
-
-
-(Note that, as previously discussed, ''suid'' binaries may create
-security holes.)
-
-
-__xmhearts__
-
-
-
-
-
-''It finally works!''
-
-
-
-
-
-''Hearts'' is available from
-Sunsite.
-
-
-
-
-
-
-
-
-
-----
-
-!!13. Fifth Example: !XmDipmon
-
-
-
-
-
-
-
-
-Bullwinkle: Hey Rocky, watch me pull a rabbit out of my hat.
-Rocky: But that trick never works.
-Bullwinkle: This time for sure.
-Presto!
-Well, I'm gettin' close.
-Rocky: And now it's time for another special feature.
---- "Rocky and His Friends"
-
-
-
-
-
-
-
-!XmDipmon is a nifty little application that displays a button showing the
-status of an Internet connection. It flashes and beeps when the connection
-is broken, as is all too often the case in on rural telephone systems.
-Unfortunately, !XmDipmon works only with ''dip'', making it useless
-for those people, the majority, who use ''chat'' to connect.
-
-
-Building !XmDipmon is not a problem. !XmDipmon links to the ''Motif''
-libraries, but it builds and works fine with ''Lesstif''. The
-challenge is to alter the package to work when using ''chat''. This
-involves actually tinkering with the source code, and necessarily requires
-some programming knowledge.
-
-
-
-
-
-
-
-
-
-
-
-"When xmdipmon starts up, it checks for a file called /etc/dip.pid
-(you can let it look at another file by using the -pidfile
-command line option). This file contains the PID of the dip
-deamon (dip switches itself into deamon mode once it has
-established a connection)."
---- from the !XmDipmon README file
-
-
-
-
-
-
-
-Using the ''-pidfile'' option, the program can be directed to
-check for a different file upon startup, one that exists only during
-a successful ''chat'' login. The obvious candidate is the modem
-lock file. We could therefore try invoking the program with __xmdipmon
--pidfile /var/lock/LCK..ttyS3__ (this assumes that the modem is on
-com port #4, ttyS3). This only solves part of the problem, however. The
-program continually monitors the ''dip daemon'', and we need to
-change this so it instead polls a process associated with ''chat''
-or ''ppp''.
-
-
-There is only a single source file, and fortunately it is
-well-commented. Scanning the xmdipmon.c file, we find the
-''getProcFile'' function, whose header description reads as follows.
-
-
-
-
-
-/*****
-* Name: getProcFile
-* Return Type: Boolean
-* Description: tries to open the /proc entry as read from the dip pid file.
-<snip>
-*****/
-
-
-
-
-We are hot on the trail now. Tracing into the body of the function...
-
-
-
-
-
-/* we watch the status of the real dip deamon */
-sprintf(buf, "/proc/%i/status", pid);
-procfile = (String)!XtMalloc(strlen(buf)*sizeof(char)+1);
-strcpy(procfile, buf);
-procfile[[strlen(buf)] = '\';
-
-
-
-
-The culprit is line 2383:
-
-
-sprintf(buf, "/proc/%i/status", pid);
-^^^^^^^^^^^^^^^^^^^^^
-
-
-
-
-This checks whether the dip daemon process is running . So, how can we
-change this to monitor the pppd daemon instead?
-
-
-Looking at the ''pppd'' manpage:
-
-
-FILES
-/var/run/pppn.pid (BSD or Linux), /etc/ppp/pppn.pid (others)
-Process-ID for pppd process on ppp interface unit n.
-
-
-
-
-
-
-
-Change line 2383 in xmdipmon.c to:
-
-
-sprintf(buf, "/var/run/ppp0.pid" );
-
-
-
-
-Rebuild the revised package. No problems with the build. Now test it
-with the new command line argument. It works like a charm. The little
-blue button indicates when a ppp connection to the ISP has
-been established, and flashes and beeps when the connection is broken.
-Now we have a fully functional ''chat'' monitor.
-
-
-
-
-
-!XmDipmon can be downloaded from
-Ripley Linux Tools.
-
-
-
-
-
-
-----
-
-!!14. Where to Find Source Archives
-
-
-Now that you are eager to use your newly acquired
-knowledge to add utilities and other goodies to
-your system, you may find them online at the
-Linux Applications and Utilities Page, or on one of the very
-reasonably priced CD ROM archives by
-Red Hat,
-!InfoMagic,
-Linux Systems Labs,
-Cheap Bytes, and others.
-
-
-A comprehensive repository of source code is the
-comp sources UNIX archive.
-
-
-Much UNIX source code is posted on the
-alt.sources newsgroup. If you are looking for particular source
-code packages, you may post on the related
-alt.sources.wanted newsgroup.
-Another good place to check is the
-comp.os.linux.announce newsgroup. To get on the
-Unix sources mailing list,
-send a ''subscribe'' message there.
-
-
-Archives for the
-alt.sources
-newsgroup are at the following ftp sites:
-
-
-
-
-
-****
-ftp.sterling.com/usenet/alt.sources/
-****
-
-****
-wuarchive.wustl.edu/usenet/alt.sources/articles
-****
-
-****
-src.doc.ic.ac.uk/usenet/alt.sources/articles
-
-****
-
-
-
-
-
-
-
-
-
-
-----
-
-!!15. Final Words
-
-
-To sum up, persistence makes all the difference (and a high frustration
-threshold certainly helps). As in all endeavors, learning from mistakes
-is critically important. Each misstep, every failure contributes to the
-body of knowledge that will lead to mastery of __the art of building
-software__.
-
-
-
-
-
-
-----
-
-!! 16. References and Further Reading
-
-
-
-
-
-
-
-
-BORLAND C++ TOOLS AND UTILITIES GUIDE, Borland International, 1992,
-pp. 9-42.
-[[One of the manuals distributed with Borland C++, ver. 3.1. Gives
-a fairly good intro to make syntax and concepts, using Borland's
-crippled implementation for DOS.]
-!DuBois, Paul: SOFTWARE PORTABILITY WITH IMAKE, O'Reilly and Associates,
-1996, ISBN 1-56592-226-3.
-[[This is reputed to be the definitive imake reference, though I did not
-have it available when writing this article.]
-Frisch, Aeleen: ESSENTIAL SYSTEM ADMINISTRATION (2nd ed.), O'Reilly and
-Associates, 1995, ISBN 1-56592-127-5.
-[[This otherwise excellent sys admin handbook has only sketchy coverage
-of software building.]
-Hekman, Jessica: LINUX IN A NUTSHELL, O'Reilly and Associates, 1997, ISBN
-1-56592-167-4.
-[[Good all-around reference to Linux commands.]
-Lehey, Greg: PORTING UNIX SOFTWARE, O'Reilly and Associates, 1995, ISBN
-1-56592-126-7.
-Mayer, Herbert G.: ADVANCED C PROGRAMMING ON THE IBM PC, Windcrest Books,
-1989, ISBN -8306-9363-7.
-[[An idea-filled book for the intermediate to advanced C programmer.
-Superb coverage of algorithms, quirks of the language, and even
-amusements. Unfortunately, out of print.]
-Mui, Linda and Valerie Quercia: X USER TOOLS, O'Reilly and Associates,
-1994, ISBN 1-56592-019-8, pp. 734-760.
-Oram, Andrew and Steve Talbott: MANAGING PROJECTS WITH MAKE, O'Reilly
-and Associates, 1991, ISBN -937175-90-.
-Peek, Jerry and Tim O'Reilly and Mike Loukides: UNIX POWER TOOLS,
-O'Reilly and Associates / Random House, 1997, ISBN 1-56592-260-3.
-[[A wonderful source of ideas, and tons of utilities you may end up
-building from the source code, using the methods discussed in
-this article.]
-Stallman, Richard M. and Roland !McGrath: GNU MAKE, Free Software
-Foundation, 1995, ISBN 1-882114-78-7.
-[[Required reading.]
-Waite, Mitchell, Stephen Prata, and Donald Martin: C PRIMER PLUS, Waite Group
-Press, ISBN -672-22090-3,.
-[[Probably the best of the introductions to C programming. Extensive
-coverage for a primer. Newer editions now available.]
-Welsh, Matt and Lar Kaufman: RUNNING LINUX, O'Reilly and Associates,
-1996, ISBN 1-56592-151-8.
-[[Still the best overall Linux reference, though lacking in depth
-in some areas.]
-The man pages for dpkg, gcc, gzip, imake, ldconfig, ldd, make, nm, patch,
-rpm, shar, strip, tar, termcap, terminfo, and xmkmf.
-The BZIP2 HOWTO, by David Fetter.
-The Glibc2 HOWTO, by Eric Green
-The LINUX ELF HOWTO, by Daniel Barlow.
-The RPM HOWTO, by Donnie Barnes.
-The !StarOffice miniHOWTO, by Matthew Borowski.
-
-
-
-
-[[These HOWTOs should be in the /usr/doc/HOWTO or
-/usr/doc/HOWTO/mini directory on your system. Updated
-versions are available in text, HTML, and SGML format from the
-LDP site, and usually
-from the respective authors' home sites.]
-
-
-
-
-
-
-----
-
-!!17. Credits
-
-
-
-
-
-The author of this HOWTO would like to thank the following persons for their
-helpful suggestions, corrections, and encouragement.
-
-
-
-
-
-****R. Brock Lynn
-****
-
-****Michael Jenner
-****
-
-****Fabrizio Stefani
-****
-
-
-
-Kudos also go to the fine people who have translated this HOWTO into Italian
-and Japanese.
-
-
-And, of course, thanks, praise, benedictions and hosannahs to Greg
-Hankins and Tim Bynum of the
-Linux Documentation Project, which has made all this possible
.
-
-
-
-----
+Describe
[HowToSoftwareBuildingHOWTO
] here
.