From 2bd9e124abc00016803bc7a89562c6f0ea84683c Mon Sep 17 00:00:00 2001 From: Gerard Beekmans Date: Wed, 22 Oct 2003 20:12:28 +0000 Subject: Added some notes how to create dependency lists git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@3026 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689 --- chapter02/aboutdependencies.xml | 54 +++++++++++++++++++++++++++++++++++++++++ chapter02/chapter02.xml | 1 + entities/book-structure.xml | 1 + 3 files changed, 56 insertions(+) create mode 100644 chapter02/aboutdependencies.xml 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 @@ + +About dependencies + + +There are a few ways to compile a list of a package's installation +dependencies. What we consider the best way is using the +strace program available at . + +strace 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 execve(2) +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. + +Here is a line of output from running a configure script: + +19580 execve("/bin/rm", ["rm", "-f", "conf19538", "conf19538.exe", "conf19538.file"], [/* 26 vars */]) = 0 + +This line tells us that the /bin/rm 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). + +For dependency purposes all we care about is that +/bin/rm was run during the configure script, so this is +an installation dependency. Without rm, the script +wouldn't be able to run properly. + +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 autoconf 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. + +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. + +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>. + + + 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; 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 @@ + -- cgit v1.2.3-54-g00ecf