- I have played with RabbitMQ for a few months so I tried to install RabbitMQ on a Linux distro running on VMWare. I do this as setting up a development environment at home since I don't want to install so much stuff on my Win7 machine.
And another reason, for fun with Linux things since It's been along time I didn't mess with Linux. Well I did some googling to find some tiny distros. I like simple things that just work and Ubuntu is so fancy for my purpose.
- SliTaz came out to be the highest rated tiny Linux so I gave it a try. It took me a whole day for trouble shooting problems when install RabbitMQ on this distro. There are quite a few problems such as Erlang version, OpenSSL for mochiweb, and daemon on SliTaz so I think it's worth to write down my experience incase someone likes to do something like this.
1/ The problems
- RabbitMQ (current 2.8.2) requires Erlang R12B-3 (www.rabbitmq.com/which-erlang.html). However, mochiweb requires R13B01 which is not available for SliTaz. I could't find any exising packages for Erlang with that version so I had to build OTP version from source which I have never done before :D
- There is not RabbitMQ package available for SliTaz, so I found out that we can convert from debian package and use within SliTaz.
- Mochiweb requires OpenSSL so we not only need Erlang source but we also need OpenSSL source. If you check Erlang website, you will see they've mentioned that.
- I want the RabbitMQ server autostart when system starts but the daemon script for Debian which is installed when you install rabbitmq package does not work. So I have to use "screen" to work around.
- And many many more :D but I promish it will be less pain if you follow these below steps
2/ Installation steps:
- Assume that you have install SliTaz successfully (If using VMWare, try use IDE instead of SCSI, I got the problem finding HDD with that) and login as root, the first thing to do is enable SSH on the SliTaz server because it's alot easier using "putty" than "sakura". You'll need to copy and paste something and doing this with putty is damn simple. The SSH server in SliTaz is "dropbear" and it will not start automatically when system boot so you have to put that to SliTaz "daemon" script. In SliTaz, daemon scripts locate at /etc/init.d/ folder and the primary script is /etc/rcS.conf. Simply put "dropbear" to the end of RUN_DAEMONS to make it autostart. Save the file and reboot.- When system reboot, SSH to SliTaz server and executing following commands to install make, perl, gcc and other tools required to compile erlang.
tazpkg get-install make tazpkg get-install perl tazpkg get-install gcc tazpkg get-install slitaz-toolchain --forced
- Then we'll get erlang and openssl source, at this time they are latest version.
root@slitaz:/# mkdir /home/temp root@slitaz:/# mkdir /home/temp/erlang root@slitaz:/# mkdir /home/temp/openssl root@slitaz:/# cd /home/temp/openssl root@slitaz:/home/temp/openssl/# wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz root@slitaz:/home/temp/openssl/# gunzip -c openssl-1.0.1c.tar.gz | tar xf - root@slitaz:/# cd /home/temp/erlang root@slitaz:/home/temp/erlang/# wget http://www.erlang.org/download/otp_src_R15B01.tar.gz root@slitaz:/home/temp/erlang/# gunzip -c otp_src_R15B01.tar.gz | tar xf -- Now we will config erlang with ssl tag (It's a requirement to use mochiweb)
root@slitaz:/home/temp/erlang/# ./configure --with-ssl=/home/temp/openssl/openssl-1.0.1c
- If everything is okey, you'll see this at the end:
.............. config.status: creating Makefile config.status: creating ../make/i686-pc-linux-gnu/otp.mk config.status: creating ../make/i686-pc-linux-gnu/otp_ded.mk config.status: creating ../lib/ic/c_src/i686-pc-linux-gnu/Makefile config.status: creating ../lib/os_mon/c_src/i686-pc-linux-gnu/Makefile config.status: creating ../lib/crypto/c_src/i686-pc-linux-gnu/Makefile config.status: creating ../lib/orber/c_src/i686-pc-linux-gnu/Makefile config.status: creating ../lib/runtime_tools/c_src/i686-pc-linux-gnu/Makefile config.status: creating ../lib/tools/c_src/i686-pc-linux-gnu/Makefile config.status: creating i686-pc-linux-gnu/config.h config.status: creating include/internal/i686-pc-linux-gnu/ethread_header_config.h config.status: creating include/i686-pc-linux-gnu/erl_int_sizes_config.h ********************************************************************* ********************** APPLICATIONS DISABLED ********************** ********************************************************************* jinterface : No Java compiler found odbc : ODBC library - link check failed ********************************************************************* ********************************************************************* ********************** APPLICATIONS INFORMATION ******************* ********************************************************************* wx : wxWidgets not found, wx will NOT be usable ********************************************************************* ********************************************************************* ********************** DOCUMENTATION INFORMATION ****************** ********************************************************************* documentation : fop is missing. Using fakefop to generate placeholder PDF files. *********************************************************************
- We will make and install Erlang:
root@slitaz:/home/temp/erlang/# make root@slitaz:/home/temp/erlang/# make install
- Now, it's time to grab and install rabbitmq package
root@slitaz:/home/temp/erlang/# cd /home/temp root@slitaz:/home/temp/# mkdir rabbitmq root@slitaz:/home/temp/# cd rabbitmq root@slitaz:/home/temp/rabbitmq/# wget http://www.rabbitmq.com/releases/rabbitmq-server/v2.8.2/rabbitmq-server_2.8.2-1_all.deb root@slitaz:/home/temp/rabbitmq/# tazpkg convert rabbitmq-server_2.8.2-1_all.deb root@slitaz:/home/temp/rabbitmq/# tazpkg install rabbitmq-server-2.8.2-1.tazpkg
- We are almost done. Let's test things by checking rabbitmqctl
root@slitaz:/# rabbitmqctl id: unknown user rabbitmq sh: rabbitmqctl: unknown operand su: unknown user rabbitmq
- Seem like the converted package didn't create user rabbitmq and group rabbitmq for the server. So we have to do it manually:
root@slitaz:/# addgroup rabbitmq root@slitaz:/# adduser -S rabbitmq -G rabbitmq root@slitaz:/# rabbitmqctl status Status of node rabbit@slitaz ... Error: unable to connect to node rabbit@slitaz: nodedown DIAGNOSTICS =========== nodes in question: [rabbit@slitaz] hosts, their running nodes and ports: - slitaz: [{rabbitmqctl22218,45733}] current node details: - node name: rabbitmqctl22218@slitaz - home dir: /home/rabbitmq - cookie hash: vPSQrFu2FNfj5/GsGmwn5A== root@slitaz:/#
- Awesome, it works. Now it's time to start the server:
root@slitaz:/# rabbitmq-server start /usr/lib/rabbitmq/bin/rabbitmq-server: line 70: can't create /var/lib/rabbitmq/mnesia/rabbit@slitaz.pid: Permission denied Activating RabbitMQ plugins ... ERROR: Could not create dir /var/lib/rabbitmq/mnesia/rabbit@slitaz-plugins-expand (eacces) root@slitaz:/#
- Hmm, the user we've created doesn't have permission on that folder. We have to chown:
root@slitaz:/# chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/mnesia root@slitaz:/# rabbitmq-server start Activating RabbitMQ plugins ... 0 plugins activated: {"init terminating in do_boot",{{nocatch,{error,{cannot_log_to_file,"/var/log/rabbitmq/rabbit@slitaz.log",{error,eacces}}}},[{rabbit,ensure_working_log_handler,5,[]},{rabbit,ensure_working_log_handlers,0,[]},{rabbit,prepare,0,[]},{init,eval_script,8,[]},{init,do_boot,3,[]}]}} init terminating in do_boot ()
- Hmm, we'll have to do the same thing for /var/log/rabbitmq
root@slitaz:/# chown -R rabbitmq:rabbitmq /var/log/rabbitmq root@slitaz:/# rabbitmq-server start Activating RabbitMQ plugins ... 0 plugins activated: {"init terminating in do_boot",{{nocatch,{error,{cannot_log_to_file,"/var/log/rabbitmq/rabbit@slitaz.log",{error,eacces}}}},[{rabbit,ensure_working_log_handler,5,[]},{rabbit,ensure_working_log_handlers,0,[]},{rabbit,prepare,0,[]},{init,eval_script,8,[]},{init,do_boot,3,[]}]}} init terminating in do_boot () root@slitaz:/# chown -R rabbitmq:rabbitmq /var/log/rabbitmq root@slitaz:/# rabbitmq-server start Activating RabbitMQ plugins ... 0 plugins activated: +---+ +---+ | | | | | | | | | | | | | +---+ +-------+ | | | RabbitMQ +---+ | | | | | | v2.8.2 +---+ | | | +-------------------+ AMQP 0-9-1 / 0-9 / 0-8 Copyright (C) 2007-2012 VMware, Inc. Licensed under the MPL. See http://www.rabbitmq.com/ node : rabbit@slitaz app descriptor : /usr/lib/rabbitmq/lib/rabbitmq_server-2.8.2/sbin/../ebin/rabbit.app home dir : /home/rabbitmq config file(s) : (none) cookie hash : vPSQrFu2FNfj5/GsGmwn5A== log : /var/log/rabbitmq/rabbit@slitaz.log sasl log : /var/log/rabbitmq/rabbit@slitaz-sasl.log database dir : /var/lib/rabbitmq/mnesia/rabbit@slitaz erlang version : 5.9.1 -- rabbit boot start starting file handle cache server ...done starting worker pool ...done starting database ...done starting database sync ...done starting codec correctness check ...done -- external infrastructure ready starting plugin registry ...done starting auth mechanism cr-demo ...done starting auth mechanism amqplain ...done starting auth mechanism plain ...done starting statistics event manager ...done starting logging server ...done starting exchange type direct ...done starting exchange type fanout ...done starting exchange type headers ...done starting exchange type topic ...done -- kernel ready starting alarm handler ...done starting node monitor ...done starting cluster delegate ...done starting guid generator ...done starting memory monitor ...done -- core initialized starting empty DB check ...done starting exchange, queue and binding recovery ...done starting mirror queue slave sup ...done starting adding mirrors to queues ...done -- message delivery logic ready starting error log relay ...done starting networking ...done starting direct client ...done starting notify cluster nodes ...done broker running
- Muahahaha, it's running without a problem except there are not any plugins available. Press CTRL-C and choose a to stop the server. Then enable the management plugin. Before that (this is optional), we can manually create a config file for rabbitmq: /etc/rabbitmq/rabbitmq.config. Hope you know how to use vi :D. Here i make it use 80% available guest memory and 5GB hard disk for data. You can find out these things on rabbitmq memory management website
[ {mnesia, [{dump_log_write_threshold, 1000}]}, {rabbit, [{tcp_listeners, [5672]}, {vm_memory_high_watermark, 0.8}, {disk_free_limit, 5368709120}]} ].
The dot at the end of the script is required :D
- To enable management plugin, simply execute
rabbitmq-plugins enable rabbitmq_management
- Finally, we have to let RabbitMQ server auto start when system boot. We'll use screen. First, download and install screen:
root@slitaz:/# tazpkg get-install screen
- And create the bash script to start rabbitmq in a screen session, i name it start-rabbitmq.sh and put in /etc/init.d
/etc/init.d/start-rabbitmq.sh
PATH=$PATH:/usr/local/bin export PATH screen -dmS rabbitmq /usr/sbin/rabbitmq-server start
- Obviously, we have to chmod this file
root@slitaz:/# chmod +x /etc/init.d/start-rabbitmq.sh
- And the last step, put it to /etc/init.d/local.sh:
echo "Run rabbitmq startup script" /etc/init.d/start-rabbitmq.sh
- Save and reboot, you have the awesome RabbitMQ server running on SliTaz. If you want to use it on internet, find dyndns service and do some port fowarding. The ports you need to foward are 5672 and 55672, default port for the server and mochiweb.
Cheers
1 comments:
TY so very much for posting this. I'm playing w/ Elixir & SliTAZ 5 rolling. I might need to give this a go!
Post a Comment