[2bd9e12] | 1 | <sect1 id="ch02-aboutdependencies">
|
---|
| 2 | <title>About dependencies</title>
|
---|
| 3 | <?dbhtml filename="aboutdependencies.html" dir="chapter02"?>
|
---|
| 4 |
|
---|
| 5 | <para>There are a few ways to compile a list of a package's installation
|
---|
| 6 | dependencies. What we consider the best way is using the
|
---|
| 7 | <command>strace</command> program available at <ulink
|
---|
| 8 | url="http://www.wi.leidenuniv.nl/~wichert/strace/"/>.</para>
|
---|
| 9 |
|
---|
| 10 | <para><command>strace</command> is a program that provides a trace of all
|
---|
| 11 | system calls made by another program. One of the most useful system calls
|
---|
| 12 | to trace when figuring out dependencies is the <emphasis>execve(2)</emphasis>
|
---|
| 13 | system call, which is used to execute programs (see its man page for
|
---|
| 14 | all the details). Whenever you run a program, be it from a shell or via a
|
---|
| 15 | configure script or Makefile file, the execve call is made. If you trace
|
---|
| 16 | these calls, you will know what programs were executed behind the
|
---|
| 17 | scenes.</para>
|
---|
| 18 |
|
---|
| 19 | <para>Here is a line of output from running a configure script:</para>
|
---|
| 20 |
|
---|
| 21 | <screen>19580 execve("/bin/rm", ["rm", "-f", "conf19538", "conf19538.exe", "conf19538.file"], [/* 26 vars */]) = 0</screen>
|
---|
| 22 |
|
---|
| 23 | <para>This line tells us that the <command>/bin/rm</command> program was
|
---|
| 24 | run with a PID of 19580, which command line parameters it was given (rm -f
|
---|
| 25 | conf195838 conf19538.exe conf19538.file) and its exit value (0).</para>
|
---|
| 26 |
|
---|
| 27 | <para>For dependency purposes all we care about is that
|
---|
| 28 | <command>/bin/rm</command> was run during the configure script, so this is
|
---|
| 29 | an installation dependency. Without <command>rm</command>, the script
|
---|
| 30 | wouldn't be able to run properly.</para>
|
---|
| 31 |
|
---|
| 32 | <para>Unfortunately, this method is not foolproof. Configure scripts check
|
---|
| 33 | for the presense of many programs, but not all of them are considered real
|
---|
| 34 | dependencies. For instance, configure scripts may check for the presence of
|
---|
| 35 | the <command>autoconf</command> program. It will be listed in the strace
|
---|
| 36 | output, but it's not a real installation dependency. A package will in most
|
---|
| 37 | if not all cases install just fine without that program. There are other
|
---|
| 38 | such false positives.</para>
|
---|
| 39 |
|
---|
| 40 | <para>This means automatic dependency gathering is never accurate. You will
|
---|
| 41 | always need to validate the list and figure out the false positives. In
|
---|
| 42 | some (rare) cases autoconf might be a real dependency, so you
|
---|
| 43 | can't simply ignore all autoconf entries. A manual validation really is a
|
---|
| 44 | requirement for an accurate list.</para>
|
---|
| 45 |
|
---|
| 46 | <para>This book is not as verbose to list exactly which program from which
|
---|
| 47 | package is required for a successfull installation (we used to, but it had
|
---|
| 48 | become too much work to maintain it). The book will contain simply the
|
---|
| 49 | names of packages you need to have installed. If you need the verbosity
|
---|
| 50 | in the form of "package a needs file b and c from package d", have a look
|
---|
| 51 | at <enter URL when it's available>.</para>
|
---|
| 52 |
|
---|
| 53 | </sect1>
|
---|
| 54 |
|
---|