Search code examples
erlangrabbitmqamqp

compiling rabbitMQ 2.4.1 error - []escript: script failed: ... needed by `ebin/ bpqueue.beam'


rabbitMQ version 2.4.1 Builds fail with

[]escript: script failed: {function_clause,
               [{erl_parse,
                    build_type,
                    [{atom,159,ok_or_error2},
                     [{type,pid,[]},{type,any,[]}]]},
                {erl_parse,yeccpars2,7},
                {erl_parse,yeccpars0,2},
                {epp,parse_file,2},
                {epp,parse_file,2},
                {epp,parse_file,2},
                {epp,parse_file,2},
                {epp,parse_file,2}]}
make: *** No rule to make target `deps.mk', needed by `ebin/
bpqueue.beam'.  Stop.

Here is the history of commands.

    $ uname -a
    SunOS dev21 5.10 Generic_141445-09 i86pc i386 i86pc

$ erl --version
Erlang (BEAM) emulator version 5.5.5 [source] [async-threads:0]
[kernel-poll:false]

$ python --version
Python 2.6.2

$ make --version
GNU Make 3.81

$ wget 'http://www.rabbitmq.com/rabbitmq-signing-key-public.asc'

$ wget 'http://www.rabbitmq.com/releases/rabbitmq-server/v2.4.1/
rabbitmq-server-2.4.1.zip.asc'

$ wget 'http://www.rabbitmq.com/releases/rabbitmq-server/v2.4.1/
rabbitmq-server-2.4.1.zip'

$ gpg --verify rabbitmq-server-2.4.1.zip.asc rabbitmq-server-2.4.1.zip
gpg: Signature made Thu Apr 07 09:04:47 2011 PDT using DSA key ID
056E8E56
gpg: Good signature from "RabbitMQ Release Signing Key
<[email protected]>"

$ unzip rabbitmq-server-2.4.1.zip

$ cd rabbitmq-server-2.4.1

$ make clean
/bin/sh: python2.5: not found
rm -f ebin/*.beam
rm -f ebin/rabbit.app ebin/rabbit.boot ebin/rabbit.script ebin/
rabbit.rel
rm -f include/rabbit_framing.hrl src/rabbit_framing_amqp_*.erl
codegen.pyc
rm -f docs/*.[0-9].gz docs/*.man.xml docs/*.erl     src/
rabbit_ctl_usage.erl
rm -f rabbit.plt
rm -f deps.mk

$ make
/bin/sh: python2.5: not found
python codegen.py body codegen/amqp-rabbitmq-0.9.1.json src/
rabbit_framing_amqp_0_9_1.erl
python codegen.py body codegen/amqp-rabbitmq-0.8.json src/
rabbit_framing_amqp_0_8.erl
xsltproc --stringparam modulename "`basename src/
rabbit_ctl_usage.erl .erl`" \
            docs/usage.xsl docs/rabbitmqctl.1.xml > src/
rabbit_ctl_usage.erl.tmp
sed -e 's/"/\\"/g' -e 's/%QUOTE%/"/g' src/rabbit_ctl_usage.erl.tmp >
src/rabbit_ctl_usage.erl.tmp2
fold -s src/rabbit_ctl_usage.erl.tmp2 > src/rabbit_ctl_usage.erl.tmp3
mv src/rabbit_ctl_usage.erl.tmp3 src/rabbit_ctl_usage.erl
rm src/rabbit_ctl_usage.erl.tmp src/rabbit_ctl_usage.erl.tmp2
python codegen.py --ignore-conflicts header codegen/amqp-
rabbitmq-0.9.1.json codegen/amqp-rabbitmq-0.8.json include/
rabbit_framing.hrl
rm -f deps.mk
echo src/bpqueue.erl:src/delegate.erl:src/delegate_sup.erl:src/
file_handle_cache.erl:src/gatherer.erl:src/gen_server2.erl:src/
gm.erl:src/gm_soak_test.erl:src/gm_speed_test.erl:src/gm_tests.erl:src/
pg_local.erl:src/priority_queue.erl:src/rabbit.erl:src/
rabbit_access_control.erl:src/rabbit_alarm.erl:src/
rabbit_amqqueue.erl:src/rabbit_amqqueue_process.erl:src/
rabbit_amqqueue_sup.erl:src/rabbit_auth_backend.erl:src/
rabbit_auth_backend_internal.erl:src/rabbit_auth_mechanism.erl:src/
rabbit_auth_mechanism_amqplain.erl:src/
rabbit_auth_mechanism_cr_demo.erl:src/
rabbit_auth_mechanism_plain.erl:src/rabbit_backing_queue.erl:src/
rabbit_basic.erl:src/rabbit_binary_generator.erl:src/
rabbit_binary_parser.erl:src/rabbit_binding.erl:src/
rabbit_channel.erl:src/rabbit_channel_sup.erl:src/
rabbit_channel_sup_sup.erl:src/rabbit_client_sup.erl:src/
rabbit_command_assembler.erl:src/rabbit_connection_sup.erl:src/
rabbit_control.erl:src/rabbit_direct.erl:src/
rabbit_error_logger.erl:src/rabbit_error_logger_file_h.erl:src/
rabbit_event.erl:src/rabbit_exchange.erl:src/
rabbit_exchange_type.erl:src/rabbit_exchange_type_direct.erl:src/
rabbit_exchange_type_fanout.erl:src/
rabbit_exchange_type_headers.erl:src/
rabbit_exchange_type_topic.erl:src/rabbit_framing.erl:src/
rabbit_guid.erl:src/rabbit_heartbeat.erl:src/rabbit_limiter.erl:src/
rabbit_log.erl:src/rabbit_memory_monitor.erl:src/rabbit_misc.erl:src/
rabbit_mnesia.erl:src/rabbit_msg_file.erl:src/rabbit_msg_store.erl:src/
rabbit_msg_store_ets_index.erl:src/rabbit_msg_store_gc.erl:src/
rabbit_msg_store_index.erl:src/rabbit_net.erl:src/
rabbit_networking.erl:src/rabbit_node_monitor.erl:src/
rabbit_prelaunch.erl:src/rabbit_queue_collector.erl:src/
rabbit_queue_index.erl:src/rabbit_reader.erl:src/
rabbit_registry.erl:src/rabbit_restartable_sup.erl:src/
rabbit_router.erl:src/rabbit_sasl_report_file_h.erl:src/
rabbit_ssl.erl:src/rabbit_sup.erl:src/rabbit_tests.erl:src/
rabbit_tests_event_receiver.erl:src/rabbit_types.erl:src/
rabbit_upgrade.erl:src/rabbit_upgrade_functions.erl:src/
rabbit_variable_queue.erl:src/rabbit_version.erl:src/
rabbit_vhost.erl:src/rabbit_writer.erl:src/supervisor2.erl:src/
tcp_acceptor.erl:src/tcp_acceptor_sup.erl:src/tcp_listener.erl:src/
tcp_listener_sup.erl:src/test_sup.erl:src/vm_memory_monitor.erl:src/
worker_pool.erl:src/worker_pool_sup.erl:src/worker_pool_worker.erl:src/
rabbit_framing_amqp_0_9_1.erl:src/rabbit_framing_amqp_0_8.erl:src/
rabbit_ctl_usage.erl:include/gm_specs.hrl:include/rabbit.hrl:include/
rabbit_auth_backend_spec.hrl:include/
rabbit_auth_mechanism_spec.hrl:include/
rabbit_backing_queue_spec.hrl:include/
rabbit_exchange_type_spec.hrl:include/rabbit_msg_store.hrl:include/
rabbit_msg_store_index.hrl:include/rabbit_framing.hrl: | escript
generate_deps deps.mk ebin
[]escript: script failed: {function_clause,
               [{erl_parse,
                    build_type,
                    [{atom,159,ok_or_error2},
                     [{type,pid,[]},{type,any,[]}]]},
                {erl_parse,yeccpars2,7},
                {erl_parse,yeccpars0,2},
                {epp,parse_file,2},
                {epp,parse_file,2},
                {epp,parse_file,2},
                {epp,parse_file,2},
                {epp,parse_file,2}]}
make: *** No rule to make target `deps.mk', needed by `ebin/
bpqueue.beam'.  Stop.

Again, the notable error was

rabbit_msg_store_index.hrl:include/rabbit_framing.hrl: | escript generate_deps deps.mk ebin []escript: script failed: {function_clause, [{erl_parse, build_type, [{atom,159,ok_or_error2}, [{type,pid,[]},{type,any,[]}]]}, {erl_parse,yeccpars2,7}, {erl_parse,yeccpars0,2}, {epp,parse_file,2}, {epp,parse_file,2}, {epp,parse_file,2}, {epp,parse_file,2}, {epp,parse_file,2}]} make: *** No rule to make target `deps.mk', needed by `ebin/bpqueue.beam'. Stop.*

Solution

  • The problem was the erlang version used.
    Here is my complete solution (originally posted here)

    step 0. The error message

    # My version of Sun OS (Solaris). 
    $ uname -a 
    SunOS dev21 5.10 Generic_141445-09 i86pc i386 i86pc 
    
    # my version of erlang (the problem source)
    $ erl --version 
    Erlang (BEAM) emulator version 5.5.5 [source] [async-threads:0] 
    [kernel-poll:false] 
    
    # making rabbitMQ server version 2.4.1 (here is the failure)
    $ make 
    ...
    []escript: script failed: {function_clause, 
                       [{erl_parse, 
                            build_type, 
                            [{atom,159,ok_or_error2}, 
                             [{type,pid,[]},{type,any,[]}]]}, 
                        {erl_parse,yeccpars2,7}, 
                        {erl_parse,yeccpars0,2}, 
                        {epp,parse_file,2}, 
                        {epp,parse_file,2}, 
                        {epp,parse_file,2}, 
                        {epp,parse_file,2}, 
                        {epp,parse_file,2}]} 
    make: *** No rule to make target `deps.mk', needed by `ebin/ 
    bpqueue.beam'.  Stop. 
    

    step 1. the problem source (the erlang version)

    From: Emile Joubert <[email protected]>
    Subject: Re: [rabbitmq-discuss] build failure: `deps.mk', needed by `ebin/bpqueue.beam'

    $ erl --version
    Erlang (BEAM) emulator version 5.5.5 [source] [async-threads:0]

    Unfortunately R11B-5 is too old. You need at least R12B-5 to build and R12B-3 to run rabbit at the moment. It is fairly straight-foward to build the latest version of Erlang on Solaris.

    step 2. my complete solution for installing rabbitMQ server 2.4.1 on Solaris:

    #!/usr/bin/env bash
    set -eu
    
    # check versions (for good bug reports) 
    python --version 
    # ouput: Python 2.6.2
    make --version
    gcc --version
    # ouput: gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
    
    # create a work space 
    cd ${HOME} 
    mkdir rabbitmq-workspace 
    cd rabbitmq-workspace 
    
    # get erlang R12B-5 
    ERLANG_HOME=${HOME}/erlang-R12B-5 
    PATH="${ERLANG_HOME}:${ERLANG_HOME}/bin:${PATH}" 
    export PATH 
    wget 'http://www.erlang.org/download/otp_src_R12B-5.tar.gz' 
    
    # compile erlang R12B-5 
    gunzip -c otp_src_R12B-5.tar.gz | tar -xvf - 
    cd 'otp_src_R12B-5'
    LANG=C 
    export LANG # Bourne shell 
    ./configure --prefix="${ERLANG_HOME}" 
    make 
    make install 
    ${ERLANG_HOME}/bin/erl -version
    # ouput: Erlang (ASYNC_THREADS,HIPE) (BEAM) emulator version 5.6.5
    cd ..
    
    # get rabbitmq server
    wget 'http://www.rabbitmq.com/rabbitmq-signing-key-public.asc' 
    wget 'http://www.rabbitmq.com/releases/rabbitmq-server/v2.4.1/rabbitmq- 
    server-2.4.1.zip.asc' 
    wget 'http://www.rabbitmq.com/releases/rabbitmq-server/v2.4.1/rabbitmq- 
    server-2.4.1.zip' 
    gpg --verify rabbitmq-server-2.4.1.zip.asc rabbitmq-server-2.4.1.zip 
    
    # compile rabbitmq server
    unzip rabbitmq-server-2.4.1.zip 
    cd rabbitmq-server-2.4.1 
    make clean 
    make 
    
    # run rabbitmq server 
    PATH="${ERLANG_HOME}/bin:${PATH}"
    # NOTE that the default "sh" on Solaris will fail to run the script - must use "xpg4 sh"
    sudo /usr/xpg4/bin/sh ./scripts/rabbitmq-server