<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../../general.ent">
  %general-entities;
]>

<sect1 id="beyond" xreflabel="Going Beyond BLFS">
  <?dbhtml filename="beyond.html"?>

  <sect1info>
    <othername>$LastChangedBy: ken $</othername>
    <date>$Date: 2013-08-26 11:43:33 -0400 (Mon, 26 Aug 2013) $</date>
  </sect1info>

  <title>Going Beyond BLFS</title>

  <para>The packages that are installed in this book are only the tip of the
  iceberg. We hope that the experience you gained with the LFS book and
  the BLFS book will give you the background needed to compile, install
  and configure packages that are not included in this book.</para>

  <para>When you want to install a package to a location other than
  <filename class='directory'>/</filename>, or
  <filename class='directory'>/usr</filename>, you are installing
  outside the default environment settings on most machines.  The following
  examples should assist you in determining how to correct this situation.
  The examples cover the complete range of settings that may need
  updating, but they are not all needed in every situation.</para>

  <itemizedlist>
    <listitem>
      <para>Expand the <envar>PATH</envar> to include
      <filename class='directory'>$PREFIX/bin</filename>.</para>
    </listitem>
    <listitem>
      <para>Expand the <envar>PATH</envar> for
      <systemitem class="username">root</systemitem> to include
      <filename class='directory'>$PREFIX/sbin</filename>.</para>
    </listitem>
    <listitem>
      <para>Add <filename class='directory'>$PREFIX/lib</filename>
      to <filename>/etc/ld.so.conf</filename> or expand
      <envar>LD_LIBRARY_PATH</envar> to include it. Before using the latter
      option, check out <ulink
      url="http://xahlee.org/UnixResource_dir/_/ldpath.html"/>.
      If you modify <filename>/etc/ld.so.conf</filename>, remember to update
      <filename>/etc/ld.so.cache</filename> by executing
      <command>ldconfig</command> as the
      <systemitem class="username">root</systemitem> user.</para>
    </listitem>
    <listitem>
      <para>Add <filename class='directory'>$PREFIX/man</filename>
      to <filename>/etc/man_db.conf</filename> or expand
      <envar>MANPATH</envar>.</para>
    </listitem>
    <listitem>
      <para>Add <filename class='directory'>$PREFIX/info</filename>
      to <envar>INFOPATH</envar>.</para>
    </listitem>
    <listitem>
      <para>Add <filename class='directory'>$PREFIX/lib/pkgconfig</filename>
      to <envar>PKG_CONFIG_PATH</envar>. Some packages are now installing
      <filename class='extension'>.pc</filename> files in
      <filename class='directory'>$PREFIX/share/pkgconfig</filename>, so you may
      have to include this directory also.</para>
    </listitem>
    <listitem>
      <para>Add <filename class='directory'>$PREFIX/include</filename> to
      <envar>CPPFLAGS</envar> when compiling packages that depend on
      the package you installed.</para>
    </listitem>
    <listitem>
      <para>Add <filename class='directory'>$PREFIX/lib</filename> to
      <envar>LDFLAGS</envar> when compiling packages that depend on a library
      installed by the package.</para>
    </listitem>
  </itemizedlist>

  <para>If you are in search of a package that is not in the book, the following
  are different ways you can search for the desired package.</para>

  <itemizedlist>
    <listitem>
      <para>If you know the name of the package, then search Freecode for
      it at <ulink url="http://freecode.com/"/>. Also search Google at
      <ulink url="http://google.com/"/>. Sometimes a search for the
      <filename class='extension'>rpm</filename> at
      <ulink url="http://rpmfind.net/"/> or the
      <filename class='extension'>deb</filename> at
      <ulink url="http://www.debian.org/distrib/packages#search_packages"/> can
      also lead to a link to the package.</para>
    </listitem>
    <listitem>
      <para>If you know the name of the executable, but not the package
      that the executable belongs to, first try a Google search with the name
      of the executable. If the results are overwhelming, try searching for the
      given executable in the Debian repository at <ulink
      url="http://www.debian.org/distrib/packages#search_contents"/>.</para>
    </listitem>
  </itemizedlist>

  <para>Some general hints on handling new packages:</para>

  <itemizedlist>
    <listitem>
      <para>Many of the newer packages follow the <command>./configure
      &amp;&amp; make &amp;&amp; make install</command> process.
      Help on the options accepted by configure can be obtained via the
      command <command>./configure --help</command>.</para>
    </listitem>
    <listitem>
      <para>Most of the packages contain documentation on compiling and
      installing the package. Some of the documents are excellent, some not so
      excellent. Check out the homepage of the package for any additional and
      updated hints for compiling and configuring the package.</para>
    </listitem>
    <listitem>
      <para>If you are having a problem compiling the package, try
      searching the LFS archives at
      <ulink url="http://www.&lfs-domainname;/search.html"/> for the error or if
      that fails, try searching Google. Often, a distribution will have already
      solved the problem (many of them use development versions of packages, so
      they see the changes sooner than those of us who normally use stable released
      versions).  But be cautious - all builders tend to carry patches which are no
      longer necessary, and to have fixes which are only required because of their
      particular choices in how they build a package. You may have to search
      deeply to find a fix for the package version you are trying to use, or even
      to find the package (names are sometimes not what you might expect, e.g.
      <application>ghostscript</application> often has a prefix or a suffix in its
      name), but the following notes might help:</para>
      <itemizedlist>
        <listitem>
          <para>Arch
          <ulink url="http://www.archlinux.org/packages/"/> - enter the package name
          in the 'Keywords' box, select the package name, select one of the 'SVN
          Entries' fields, then select the <filename>PKGBUILD</filename> to see how
          they build this package, or look at any patches.</para>
        </listitem>
        <listitem>
          <para>Debian
          <ulink url="ftp://ftp.uk.debian.org/debian/pool"/> (use your country's
          version if there is one) - the source will be in .tar.gz tarballs (either
          the original upstream <filename class='extension'>.orig</filename> source,
          or else a <filename>dfsg</filename> containing those parts which comply
          with debian's free software guidelines) accompanied by versioned .diff.gz
          or .tar.gz additions. These additions often show how the package is built,
          and may contain patches. In the .diff.gz versions, any patches create files
          in <filename class="directory">debian/patches</filename>.</para>
        </listitem>
        <listitem>
          <para>Fedora
          <ulink url="http://pkgs.fedoraproject.org/cgit/"/> - this site
          is still occasionally overloaded, but it is an easy way of looking at .spec
          files and patches. If you know their name for the package (e.g. mesa.git)
          you can append that to the URI to get to it.  If not, use the search box.
          If the site is unavailable, try looking for a local mirror of ftp.fedora.com
          (the primary site is usually unavailable if fedora cgit is not responding)
          and download a source rpm to see what they do.</para>
        </listitem>
        <listitem>
          <para>Gentoo - the mirrors for ebuilds and patches seem to be well-hidden,
          and they change frequently.  Also, if you have found a mirror, you need to
          know which directory the application has been assigned to.  The ebuilds
          themselves can be found at <ulink url="http://packages.gentoo.org/"/> -
          use the search field.  If there are any patches, a mirror will have them
          in the <filename class="directory">files/</filename> directory. Depending
          on your browser, or the mirror, you might need to download the ebuild to
          be able to read it.  Treat the ebuild as a sort of pseudo-code / shell
          combination - look in particular for <command>sed</command> commands and
          patches, or hazard a guess at the meanings of the functions such as
          <command>dodoc</command>.</para>
        </listitem>
        <listitem>
          <para>openSUSE
          <ulink url="http://download.opensuse.org/factory/repo/src-oss/suse/src/"/> -
          source only seems to be available in source rpms.</para>
        </listitem>
        <listitem>
          <para>Slackware - the official package browser is currently broken.  The
          site at <ulink url="http://slackbuilds.org/"/> has current and previous
          versions in their unofficial repository with links to homepages, downloads,
          and some individual files, particularly the <filename>.SlackBuild</filename>
          files.</para>
        </listitem>
        <listitem>
          <para>Ubuntu <ulink url="ftp://ftp.ubuntu.com/ubuntu/pool/"/> - see the
          debian notes above.</para>
        </listitem>
      </itemizedlist>
      <para>If everything else fails, try the blfs-support mailing-list.</para>
    </listitem>
  </itemizedlist>

  <tip>
    <para>If you have found a package that is only available in
    <filename class='extension'>.deb</filename> or
    <filename class='extension'>.rpm</filename>
    format, there are two small scripts, <command>rpm2targz</command> and
    <command>deb2targz</command> that are available at
    <ulink url="&downloads-project;/deb2targz.tar.bz2"/> and
    <ulink url="&downloads-project;/rpm2targz.tar.bz2"/> to convert the archives
    into a simple <filename>tar.gz</filename> format.</para>
    <para>You may also find an rpm2cpio script useful.  The Perl version in the
    linux kernel archives at <ulink
    url="http://lkml.indiana.edu/hypermail/linux/kernel/0210.2/att-0093/01-rpm2cpio"/>
    works for most source rpms.  The rpm2targz script will use an rpm2cpio script
    or binary if one is on your path.  Note that rpm2cpio will unpack a source
    rpm in the current directory, giving a tarball, a spec file, and perhaps patches
    or other files.</para>
  </tip>

</sect1>
