Installing Eddie under Debian GNU/Linux (Sarge/Woody)?
Thomas Fischbacher
Thomas.Fischbacher@REDACTED
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 ===
tf@REDACTED:/tmp$ apt-cache show erlang
Package: erlang
Priority: optional
Section: non-US
Installed-Size: 27304
Maintainer: Samuel Tardieu <sam@REDACTED>
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.
tf@REDACTED:/tmp$ tar xzf eddie-1.5.1.tar.gz
tf@REDACTED:/tmp$ cd eddie-1.5.1
tf@REDACTED:/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
tf@REDACTED:/tmp/eddie-1.5.1$ ls -la erl_crash.dump
-rw-r----- 1 tf tf 75389 Jul 15 17:55 erl_crash.dump
tf@REDACTED:/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)
tf@REDACTED:/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>
tf@REDACTED:/tmp/eddie-1.5.1$ # This is where things fail:
tf@REDACTED:/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
tf@REDACTED:/tmp/eddie-1.5.1$ # ...and this is what I get when I try to compile this manually:
tf@REDACTED:/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}]}
tf@REDACTED:/tmp/eddie-1.5.1$
=== END SHELL LOG ===
--
regards, tf@REDACTED (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