Installing Eddie under Debian GNU/Linux (Sarge/Woody)?

Thomas Fischbacher <>
Fri Jul 15 18:36:14 CEST 2005


Hello together,

(1) I am in the situation that I have to set up a DNS server for a cluster 
of machines which may well be small and simple, but should do its job 
well.

(2) For some not too strange reasons, I am quite reluctant to use either 
of BIND9 or djbdns.

(3) I like the idea of having a reliable DNS server written in a safe 
language, and if it's functional, the better. 

(4) There are a few other lightweight implementations out there, like oak 
(written in python) or the Net::DNS::Server perl library. These, 
unfortunately, seem to be quite broken.

(5) Hence, I would like to give the Erlang DNS server from 
http://eddie.sourceforge.net a try. It can do much more than what I need, 
but that does not matter to me. (Somehow, I have the impression that 
Erlang is just the tool one should use for building an application like a 
DNS server, so why not have a look. I consider myself quite proficient 
with functional programming, but never had any hands-on exposure to erlang 
whatsoever so far. However, I know about the underlying concepts and find 
them quite nice and appealing.)

My problem is: I cannot get the thing to compile.

I downloaded the sources from http://eddie.sourceforge.net/1p50.html 
(eddie-1.5.1.tar.gz) and use Debian 3.1 on x86/32 bit (Sarge - but as 
there are no Erlang packages for Sarge, I resorted to installing those 
from woody).

The log transcript at the end of this email contains pretty much all the 
information I can provide about this in a distilled form. Does anybody 
have an idea what is going wrong and how to fix it?

But before I delve deeper into this, I'd like to ask two further 
questions:

(a) Does anyone know how Eddie's DNS server chooses source ports for 
recursive resolver queries? (I have IP source address randomization on my 
machine from the grsecurity.net kernel patch, but it's better not to have 
to rely on that.) Is the IP ID random number generation in the DNS 
reasonable?

(b) I am assuming that with an Erlang-implemented DNS, there should not be 
any possibility for low-level system attacks that result in the execution 
of foreign code (i.e. stack or heap overflows and their relatives) as a 
principal matter of the design. Is that assumption justified?

=== SHELL LOG ===

:/tmp$ apt-cache show erlang
Package: erlang
Priority: optional
Section: non-US
Installed-Size: 27304
Maintainer: Samuel Tardieu <>
Architecture: i386
Version: 1:8.0-4
Replaces: erlang-base (<< 1:8.0-2)
Depends: libc6 (>= 2.2.4-4), libncurses5 (>= 5.2.20010310-1), libssl0.9.6, xlibs (>> 4.1.0), erlang-base (=1:8.0-4)
Pre-Depends: dpkg (>= 1.4.1.17)
Recommends: erlang-manpages, erlang-doc-html
Conflicts: erlang-jams, erlang-jams-erl, erlang-dev
Filename: pool/non-US/main/e/erlang/erlang_8.0-4_i386.deb
Size: 13555706
MD5sum: ca5410df8facb7d2a80b75c406cebda1
Description: A real-time, concurrent and distributed functional language
 Open Source Erlang is a functional programming language designed at
 the Ericsson Computer Science Laboratory.
 .
 Some of Erlang's main features are:
  Clear declarative syntax and is largely free from side-effects;
  Builtin support for real-time, concurrent and distributed programming;
  Designed for development of robust and continuously operated programs;
  Dynamic code replacement at runtime.
 .
 This package contains architecture-specific files of the runtime system.

:/tmp$ tar xzf eddie-1.5.1.tar.gz 
:/tmp$ cd eddie-1.5.1
:/tmp/eddie-1.5.1$ sh configure
creating cache ./config.cache
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking build system type... i686-pc-linux-gnu
checking for gmake... no
configure: warning: gmake not found, will try to use: make
checking for ssh... /usr/bin/ssh
checking for eddie_rootdir.erl... /tmp/eddie-1.5.1/eddie_rootdir.erl
checking for eddie root directory... /tmp/eddie-1.5.1
checking for erl... /usr/bin/erl
checking for erlc... /usr/bin/erlc
checking for whoami... /usr/bin/whoami
checking for addgroup... /usr/sbin/addgroup
checking for groupadd... /usr/sbin/groupadd
checking checking for Erlang machine type... {"init terminating in do_boot",{undef,[{compile,file,[eddie_rootdir,[report_errors,report_warnings]]},{lists,map,2},{c,lc_batch,1},{init,start_it,1},{init,start_em,1}]}}
init terminating in do_boot ()
no
configure: error: Unable to determine Erlang machine type: jam/beam
:/tmp/eddie-1.5.1$ ls -la erl_crash.dump 
-rw-r-----    1 tf       tf          75389 Jul 15 17:55 erl_crash.dump
:/tmp/eddie-1.5.1$ head -n 20 erl_crash.dump 
<Erlang crash dump>
Fri Jul 15 17:55:42 2005

Slogan: init terminating in do_boot ()


Erlang (BEAM) emulator version 5.1
Compiled on Tue Dec 18 21:07:58 2001

Process Information
--------------------------------------------------
<0.0.0> Running. Registered as: init
Spawned as: otp_ring0:start/2
Message buffer data: 45 words
Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
Reductions 3611 stack+heap 377 old_heap_sz=233 
Heap unused=95 OldHeap unused=233
Stack dump:
program counter = 0x81c66cc (init:boot_loop/2 + 32)
cp = 0x81c654c (init:things_to_string/1 + 68)
:/tmp/eddie-1.5.1$ tail -n 10 erl_crash.dump 
'-i/1-fun-1-'
'-i/1-fun-0-'
'-alive_processes/0-fun-0-'
'-lc_batch/1-fun-0-'
'-lc/1-fun-0-'
io_request_loop
get_until_loop
'-do_start/4-fun-0-'

<End of Erlang crash dump>
:/tmp/eddie-1.5.1$ # This is where things fail:
:/tmp/eddie-1.5.1$ head -n 1028 configure | tail -n 10


echo $ac_n "checking checking for Erlang machine type""... $ac_c" 1>&6
echo "configure:1023: checking checking for Erlang machine type" >&5
rm -f $EDDIE_ROOTDIR.{jam,beam}
$ac_cv_erl -compile $EDDIE_ROOTDIR
EDDIE_ROOTDIR_FILES=`echo $EDDIE_ROOTDIR.*`
case "$EDDIE_ROOTDIR_FILES" in
*jam*)
	EMULATOR=jam
:/tmp/eddie-1.5.1$ # ...and this is what I get when I try to compile this manually:
:/tmp/eddie-1.5.1$ erlc eddie_rootdir.erl 
Compiler function compile:compile/3 failed:
{undef,[{compile,compile,
                 ["/tmp/eddie-1.5.1/eddie_rootdir",
                  "/tmp/eddie-1.5.1/eddie_rootdir",
                  {options,[],
                           "/tmp/eddie-1.5.1",
                           undefined,
                           [],
                           0,
                           false,
                           999,
                           [],
                           [],
                           '/tmp/eddie-1.5.1',
                           undefined}]},
        {erl_compile,compile_file,4},
        {erl_compile,compile3,3},
        {erl_compile,compiler_runner,1}]}
:/tmp/eddie-1.5.1$ 

=== END SHELL LOG ===

-- 
regards,                             (o_
 Thomas Fischbacher -  http://www.cip.physik.uni-muenchen.de/~tf  //\
(lambda (n) ((lambda (p q r) (p p q r)) (lambda (g x y)           V_/_
(if (= x 0) y (g g (- x 1) (* x y)))) n 1))                  (Debian GNU)



More information about the erlang-questions mailing list