2

I'm trying to test this script from oracle to get active NFS clients on Ubuntu 10.04, but I can' get it to run.

To achieve that, I first installed dtrace following these instructions. This is what I've done exactly:

apt-get install bison flex zlib1g-dev libelf-dev binutils-dev libdw-dev libc6-dev-i386
wget ftp://crisp.dyndns-server.com/pub/release/website/dtrace/dtrace-20121009.tar.bz2
tar xfj dtrace-20121009.tar.bz2
cd dtrace-20121009
make all
make install
make load

However, I get this warning when compiling:

=================================================================
=== You need /usr/lib/libdwarf.a and /usr/lib/libbfd.a installed to build.
=== 
=== apt-get install binutils-dev
=== apt-get install libdw-dev
=== 
=== Without these, we will not build ctfconvert (needed for 
=== SDT structure definitions).
=================================================================
cd cmd/instr ; make --no-print-directory
cd usdt/c ; make --no-print-directory
tools/mkdriver.pl all
Executing: /usr/src/dtrace/dtrace-20121009/tools/make-me
make -C /lib/modules/2.6.38-16-server/build M=/usr/src/dtrace/dtrace-20121009/build-2.6.38-16-server/driver
  CC [M]  /usr/src/dtrace/dtrace-20121009/build-2.6.38-16-server/driver/systrace.o
  LD [M]  /usr/src/dtrace/dtrace-20121009/build-2.6.38-16-server/driver/dtracedrv.o
  Building modules, stage 2.
  MODPOST 1 modules
  LD [M]  /usr/src/dtrace/dtrace-20121009/build-2.6.38-16-server/driver/dtracedrv.ko
tools/mkctf.sh
build/ctfconvert not available - so not building the linux.ctf file
NOTE: The build is complete, but build/ctfconvert is not available.
      This means you will get run time errors from the io.d and sched.d files
      due to undefined kernel structure definitions. Simply delete or rename
      these files until a fix can be put in place to handle older
      distros which do not have the required libdwarf dependencies.

      (Typical error is references to undefined struct definitions such
      as dtrace_cpu_t).

sync

I've installed libdw-dev and binutils-dev, but taking a look at the makefile, it seems it looks for libdwarf.so, and libdw on my system is named libdw.so.

To circunvent this, I create a symlink with ln -s /usr/lib/libdw.so /usr/lib/libdwarf.so. After doing so, compiling fails.

cd cmd/ctfconvert ; make --no-print-directory
gcc -g -I. -I../../ -I../../libctf -I../../common -I../../uts/common -I../../linux -I/usr/include/libdwarf -c dwarf.c
In file included from dwarf.c:94:
/usr/include/dwarf.h:56: error: expected identifier before numeric constant
/usr/include/dwarf.h:136: error: expected identifier before numeric constant
/usr/include/dwarf.h:321: error: expected identifier before numeric constant
/usr/include/dwarf.h:461: error: expected identifier before numeric constant
/usr/include/dwarf.h:517: error: expected identifier before numeric constant
make[3]: *** [../../build/ctfconvert.obj/dwarf.o] Error 1
make[2]: *** [all] Error 2
make[1]: *** [do_cmds] Error 2
tools/bug.sh
make: *** [all] Error 1

So, let's undo that. I remove the symlink, compile again, run make install and make load and hope everything is fine. And everything seems to be fine.

But, then I try to run the script mentioned above, and it fails:

# ./get_ngs_clients.d 
dtrace: failed to compile script ./get_ngs_clients.d: Preprocessor not found

I have no clue on what's going on. I have gcc installed, just in case.

# dpkg -l | grep gcc
ii  gcc                                    4:4.4.3-1ubuntu1                  The GNU C compiler
ii  gcc-4.4                                4.4.3-4ubuntu5.1                  The GNU C compiler
ii  gcc-4.4-base                           4.4.3-4ubuntu5.1                  The GNU Compiler Collection (base package)
ii  gcc-4.4-multilib                       4.4.3-4ubuntu5.1                  The GNU C compiler (multilib files)
ii  gcc-multilib                           4:4.4.3-1ubuntu1                  The GNU C compiler (multilib files)
ii  lib32gcc1                              1:4.4.3-4ubuntu5.1                GCC support library (32 bit Version)
ii  libgcc1                                1:4.4.3-4ubuntu5.1                GCC support library
Community
  • 1
  • 1
Jorge Suárez de Lis
  • 565
  • 1
  • 10
  • 29

2 Answers2

1

If you do not have libdwarf.a on your system, the ctfconvert tool will not build. (libdwarf.a and libdw.a are not the same).

If ctfconvert does not build, then any of your own, or the dtrace etc/*.d scripts may not load. (Dtrace force loads these scripts for you automatically, which is annoying). Any script which relies on structure definitions will then fail.

As of May 2013, I am looking at seeing what it takes to update to libdw.a since this seems to be the modern replacement for libdwarf.

(posted by the 'author' of DTrace/Linux).

Paul Fox
  • 131
  • 3
0

Have you tried to add --enable-dtrace=false to /.configure? Or maybe --with-dtrace=false?

That should do the trick I think...