blob: 2620af06b0a932b9ce517933c1b9ec3567c00ca4 [file] [log] [blame]
$Id: INSTALL,v 1.36 2010/01/18 23:46:09 yaberauneya Exp $
Requirements
-------------------
1. In order to compile ltp you must have make 3.80+ (make 3.81 preferred).
2. In order to compile and use ltp-scanner (a utility in the pan directory),
you must have bison/yacc, and flex installed.
bison can be obtained here:
- http://ftp.gnu.org/gnu/bison/bison-2.4.1.tar.gz
Berkeley yacc can be obtained here:
- ftp://invisible-island.net/byacc/byacc.tar.gz
flex can be obtained here:
- http://downloads.sourceforge.net/project/flex/flex/flex-2.5.33/flex-2.5.33.tar.bz2
make 3.81 can be obtained here:
- http://ftp.gnu.org/gnu/make/make-3.81.tar.bz2
If you want to use auto configuration, be sure autoconf-2.61+ & automake-1.10+
are installed.
automake-1.10.2's sources can be downloaded from:
- ftp://ftp.gnu.org/gnu/automake/automake-1.10.2.tar.bz2
- ftp://ftp.gnu.org/gnu/automake/automake-1.10.2.tar.gz
autoconf-2.61's sources can be downloaded from:
- ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.61.tar.bz2
- ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.61.tar.gz
autoconf-2.61 also requires m4-1.4.7+ be installed. Its sources can be
downloaded from:
- http://ftp.gnu.org/gnu/m4/m4-1.4.7.tar.bz2
- http://ftp.gnu.org/gnu/m4/m4-1.4.7.tar.gz
Configuration
-------------------
Using autoconf (preferred):
$ make autotools # This must be run from "$TOP_SRCDIR"!
$ test -d "$TOP_BUILDDIR" || mkdir -p "$TOP_BUILDDIR"
$ cd "$TOP_BUILDDIR" && "$TOP_SRCDIR/configure" \
# [configure args go here, e.g. CC=$CC, LDFLAGS=$LDFLAGS, etc]
Not using autoconf:
$ test -d "$TOP_BUILDDIR" || mkdir -p "$TOP_BUILDDIR"
$ cp "$TOP_SRCDIR/include/config.h.default" \
"$TOP_BUILDDIR/include/config.h"
$ cp "$TOP_SRCDIR/include/mk/config.mk.default" \
"$TOP_BUILDDIR/include/mk/config.mk"
$ cp "$TOP_SRCDIR/include/mk/features.mk.default" \
"$TOP_BUILDDIR/include/mk/features.mk"
# Fire up your favorite editor and set each value appropriately in
# include/mk/config.mk. Uncomment all values commented out, such as
# NUMA_LIBS, etc, but only if you're sure that the libraries exist and
# can be linked on your system.
- $TOP_SRCDIR and $TOP_BUILDDIR are the same for in-build-tree scenarios.
- $TOP_SRCDIR and $TOP_BUILDDIR differ for out-of-build-tree scenarios.
See the In-build-tree and Out-of-build-tree sections below for more details on
what to do next...
Compiling LTP
-------------------
"What's in a Path?"
-------------------
Before getting started, you should make sure that your build directory and
source directory are as basic as possible: no commas, colons, semicolons,
spaces, etc. In fact, this is a relatively good rule of thumb when dealing
with any [Gnu?] make based opensource project.
We won't `fix' the `issues' associated with these particular set of build
errors resulting from non-sane pathnames, because it would introduce unneeded
complexity into the build system and would require non-trivial effort to fix
and validate the third-party packages, and thus wouldn't be a sustainable
model to follow.
So, we apologize for the inconvenience, but using other characters like
underscores and dashes should help when disambiguating words between build
and source pathnames.
In-build-tree
-------------------
In-build-tree support is when you build binaries (applications, binary objects)
in the same directory where the source files reside.
$ make all
$ make \
"DESTDIR=$SYSROOT" \
SKIP_IDCHECK=[0|1] \
install
- Specifying DESTDIR is optional, but required when installing to a non-host
sysroot, as opposed to the host system's sysroot.
- Specify SKIP_IDCHECK=1 if and when you don't want to modify /etc/{group,passwd}
on the target system's sysroot.
If you get a build error, please report it to ltp@lists.linux.it with
following information,
1. The error output before the failure.
2. If you used configure:
i. include/config.h
ii. include/mk/config.mk
iii. config.log
Out-of-build-tree
-------------------
Out-of-build-tree support is when you build binaries (applications, binary
objects, generated files) outside of the directory where the source files
reside. This is typically used when cross-compiling for multiple targets.
NOTE: This is by and large correctly implemented, but there are several corner
cases, where this isn't implemented properly. Please see TODO for a list of
items which need fixing in the LTP tree.
$ mkdir "$OUT_OF_BUILD_TREE_DIR"
$ make \
-C "$OUT_OF_BUILD_TREE_DIR" \
-f "$TOP_SRCDIR/Makefile" \
"top_srcdir=$TOP_SRCDIR" \
"top_builddir=$OUT_OF_BUILD_TREE_DIR"
$ make \
-C "$OUT_OF_BUILD_TREE_DIR" \
-f "$TOP_SRCDIR/Makefile" \
"top_srcdir=$TOP_SRCDIR" \
"top_builddir=$OUT_OF_BUILD_TREE_DIR" \
"DESTDIR=$SYSROOT" \
SKIP_IDCHECK=[0|1]
install
- Specifying DESTDIR is optional, but required when installing to a non-host
sysroot, as opposed to the host system's sysroot.
- Specify SKIP_IDCHECK=1 if and when you don't want to modify /etc/{group,passwd}
on the target system's sysroot.
Quick Start
-----------
1> tar xzf ltp-XXXXXXXX.tar.gz
2> cd ltp
3> ./configure
4> make all
5> make install
6> /opt/ltp/runltp
*NOTE:
- LTP assumes the existence of the nobody, bin, and daemon users and their
groups. If these IDs do not exist, certain tests will fail. The respective
user and group IDs should be the same, i.e. if `nobody's' user ID is 99, then
its group ID should also be 99. The names of the groups are irrelevant.
- The installation directory is /opt/ltp by default. Please see
"Using autoconf" above and specify the appropriate path via --prefix.
DESTDIR= is also honored for install and will install into $DESTDIR/$prefix,
if you want to install into a chroot or a rootfs for instance.
Detailed Installation
---------------------
Beyond the "Quick Start" instructions, there are only a few other things
that should be done. The Linux Test Project build process uses a
minimalist approach. There is a lot of room for improvement and
contributions are welcome.
1. Log in as root.
2. Untar the ltp tarball into a spare directory. There is not a
standard location for it yet. We put it in our home directory
while we're working on it.
Note that the full path to this location must be accessible for
unprivileged users, as some tests are run as a different user than root.
Hence /root is not a good choice on several distributions.
3. Build and install everything, as described above. Note the minimum software
requirements above before doing so.
4. The disk I/O tests can be run by executing the diskio.sh script. In order
for these tests to successfully operate a writable high-density 3.5" floppy
must be in the disk drive and a CD-ROM with more than 100Mb of data must be
in the CD-ROM drive. The corresponding tests will fail if either disk is
missing.
5. The network tests are executed by running the network.sh script. The network
tests require some configuration for them to work correctly:
i) First, there MUST be another test machine setup to act as the server
to these client side tests. This machine MUST have the LTP installed
in the same exact location, i.e. if the client has /root/ltp, then the
server must have /root/ltp. This is required because certain tests
expect to find server files in certain locations. Make sure to compile
the LTP on this server machine also.
ii) Second, the server must be setup to allow the client to connect using
the "r" commands, such as rsh. This is done by simply creating/editing
the ".rhosts" file under /root. Place the hostname of the client
machine in this file to allow root to remotely connect without the use
of a password. If server has the PAM system security tool, you need
to add the following lines to /etc/securetty:
rlogin
rsh
rexec
pts/0
pts/1
:
pts/9
iii) Next, certain services must be activated in order for certain tests to
execute. The following services are activated via inetd/xinetd:
rlogind
ftpd
telnetd
echo (stream)
fingerd
rshd
Also, because certain RPC programs are tested, the "portmapper" daemon
MUST be started, as well as NFS server AND lock services.
iv) Finally, before running the network.sh script, two variables must be
set: The "RHOST" variable should be set to the hostname of the server.
The "PASSWD" variable should be set to root's password on the server
machine. This is necessary for tests such as telnet01 and ftp01.
You can now successfully execute the network.sh script.
You can run the test category which you are interested in, -h option shows
the list of the test category:
# ./network.sh -h
For more info about howto run network.sh see testcases/network/README.md.
Cross compiling
---------------
To cross compile, you must specify the correct variables when running configure.
e.g. CC, CXX, CXXFLAGS, LDFLAGS, etc...
After configure has run, it will generate include/mk/config.mk. You can tweak
settings in there if need be, but you should not specificy settings on the
command-line when running make.
uClinux Users
--------------
Specify UCLINUX=1 when calling make; -DUCLINUX=1 use is deprecated and highly
discouraged.
Android Users
-------------
Specify ANDROID=1 when calling make. Many tests which would otherwise work are
currently not built because they share a directory with an incompatible test.
The shell scripts expect /bin/sh to exist, so create a symlink.
Variables in Makefile
----------------------
The conventions enforced are standard ones. Here's a quick summary:
CFLAGS - used when compiling/linking C code, e.g. -D_GNU_SOURCE (no CPPFLAGS!)
CXXFLAGS - used when compiling/linking C++ code (no CPPFLAGS!)
CPPFLAGS - used when preprocessor is run (so C/C++ compiling with $(CPP)
functions, e.g. -I$SYSROOT/usr/include -I$SYSROOT/include -I$SYSROOT
LDFLAGS - linker flags, e.g. "-L$SYSROOT/usr/lib" "-L$SYSROOT/lib". DO NOT
PUT LIBRARIES IN THIS LIST (see LDLIBS for that).
LDLIBS - libraries listed after objects during link, e.g. -lc, -lpthread,
-lltp.
See README.mk-devel for a more terse description of what's available.
Common Issues
----------------------
Issue: When executing configure it says:
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
configure: error: cannot run /bin/sh ./config.sub
Solution: You must upgrade autoconf to 0.10.2+ and m4 to 1.4.7+; config.guess and config.sub aren't necessarily generated with older revisions of the Gnu autotools chain.
Issue: When executing make [all] it says:
" *** No rule to make target `/$*', needed by `pan-all'. Stop."
Solution: You must upgrade to make 3.81. Please see the Requirements section above.
Issue: When executing make [all] it says something like:
# ...
install -m 00644 "/scratch/ltp-dev2/ltp/include/test.h" "/scratch/ltp-install12/include/test.h"
install -m 00644 "/scratch/ltp-dev2/ltp/include/tlibio.h" "/scratch/ltp-install12/include/tlibio.h"
install -m 00644 "/scratch/ltp-dev2/ltp/include/usctest.h" "/scratch/ltp-install12/include/usctest.h"
install -m 00644 "/scratch/ltp-dev2/ltp/include/write_log.h" "/scratch/ltp-install12/include/write_log.h"
make[1]: Leaving directory `/scratch/ltp-dev2/ltp/include'
make -C lib -f "/scratch/ltp-dev2/ltp/lib/Makefile" all
make[1]: Entering directory `/scratch/ltp-dev2/ltp/lib'
" *** No rule to make target `dataascii.o', needed by `libltp.a'. Stop." # <-- the error
Solution: You cannot build LTP with -r / --no-builtin-rules and/or
-R / --no-builtin-variables specified. LTP relies heavily on built-in
implicit rules and variables to function properly.
Issue: When executing make (no target, 3.80), it does the following, and doesn't execute all:
#
make -C testcases/realtime autotools
make[1]: Entering directory `/scratch/ltp/testcases/realtime'
autoheader
make[1]: Leaving directory `/scratch/ltp/testcases/realtime'