diff options
-rw-r--r-- | chapter02/aboutdependencies.xml | 54 | ||||
-rw-r--r-- | chapter02/chapter02.xml | 1 | ||||
-rw-r--r-- | entities/book-structure.xml | 1 |
3 files changed, 56 insertions, 0 deletions
diff --git a/chapter02/aboutdependencies.xml b/chapter02/aboutdependencies.xml new file mode 100644 index 000000000..4913f6520 --- /dev/null +++ b/chapter02/aboutdependencies.xml @@ -0,0 +1,54 @@ +<sect1 id="ch02-aboutdependencies"> +<title>About dependencies</title> +<?dbhtml filename="aboutdependencies.html" dir="chapter02"?> + +<para>There are a few ways to compile a list of a package's installation +dependencies. What we consider the best way is using the +<command>strace</command> program available at <ulink +url="http://www.wi.leidenuniv.nl/~wichert/strace/"/>.</para> + +<para><command>strace</command> is a program that provides a trace of all +system calls made by another program. One of the most useful system calls +to trace when figuring out dependencies is the <emphasis>execve(2)</emphasis> +system call, which is used to execute programs (see its man page for +all the details). Whenever you run a program, be it from a shell or via a +configure script or Makefile file, the execve call is made. If you trace +these calls, you will know what programs were executed behind the +scenes.</para> + +<para>Here is a line of output from running a configure script:</para> + +<screen>19580 execve("/bin/rm", ["rm", "-f", "conf19538", "conf19538.exe", "conf19538.file"], [/* 26 vars */]) = 0</screen> + +<para>This line tells us that the <command>/bin/rm</command> program was +run with a PID of 19580, which command line parameters it was given (rm -f +conf195838 conf19538.exe conf19538.file) and its exit value (0).</para> + +<para>For dependency purposes all we care about is that +<command>/bin/rm</command> was run during the configure script, so this is +an installation dependency. Without <command>rm</command>, the script +wouldn't be able to run properly.</para> + +<para>Unfortunately, this method is not foolproof. Configure scripts check +for the presense of many programs, but not all of them are considered real +dependencies. For instance, configure scripts may check for the presence of +the <command>autoconf</command> program. It will be listed in the strace +output, but it's not a real installation dependency. A package will in most +if not all cases install just fine without that program. There are other +such false positives.</para> + +<para>This means automatic dependency gathering is never accurate. You will +always need to validate the list and figure out the false positives. In +some (rare) cases autoconf might be a real dependency, so you +can't simply ignore all autoconf entries. A manual validation really is a +requirement for an accurate list.</para> + +<para>This book is not as verbose to list exactly which program from which +package is required for a successfull installation (we used to, but it had +become too much work to maintain it). The book will contain simply the +names of packages you need to have installed. If you need the verbosity +in the form of "package a needs file b and c from package d", have a look +at <enter URL when it's available>.</para> + +</sect1> + diff --git a/chapter02/chapter02.xml b/chapter02/chapter02.xml index f1619e7ba..435da5e6f 100644 --- a/chapter02/chapter02.xml +++ b/chapter02/chapter02.xml @@ -5,6 +5,7 @@ &c2-aboutlfs; &c2-aboutsbus; &c2-abouttestsuites; +&c2-aboutdependencies; &c2-askforhelp; </chapter> diff --git a/entities/book-structure.xml b/entities/book-structure.xml index 1b9a3181d..b682dde2f 100644 --- a/entities/book-structure.xml +++ b/entities/book-structure.xml @@ -16,6 +16,7 @@ <!ENTITY c2-aboutlfs SYSTEM "../chapter02/aboutlfs.xml"> <!ENTITY c2-aboutsbus SYSTEM "../chapter02/aboutsbus.xml"> <!ENTITY c2-abouttestsuites SYSTEM "../chapter02/abouttestsuites.xml"> +<!ENTITY c2-aboutdependencies SYSTEM "../chapter02/aboutdependencies.xml"> <!ENTITY c2-askforhelp SYSTEM "../chapter02/askforhelp.xml"> <!ENTITY chapter03 SYSTEM "../chapter03/chapter03.xml"> |