1
0

aboutdependencies.xml 2.8 KB

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