Huginn is probably the best automation software that I’ve ever seen. It’s not only easy to use, but also easy to deploy and easy to extend. Unfortunately there’s no FreeBSD port for it, but looks like it’s something wanted by the community, at least according to WantedPorts.
I realized that I have at least 5 accounts on IFTTT, which is also an amazing automation service. However, 3/5 of these accounts were not “my own”. It belonged to our communities. You know, Meetups in Armenia and news listing websites similar to Lobste.rs. So if I get hit by a bus, it will be very hard for our community to operate these accounts, that’s why I wanted to deploy Huginn.
Like a sane person, I deploy in FreeBSD Jails (I recommend you do too!). Which meant there’s no official (or maybe even unofficial?) docs on how to deploy Huginn on FreeBSD.
It’s written in Ruby, which means it should work and should be very easy to ports. I’ll go over the deployment needs without the actual deployment, setup of Jails, or anything similar. Let’s go!
First thing first, you need Ruby thingies:
- ruby
- rubygem-bundler
- rubygem-mimemagic
- rubygem-rake
- rubygem-mysql2
Here’s the full command for copy/paster:
pkg instal ruby rubygem-bundler rubygem-mimemagic rubygem-rake rubygem-mysql2
Next, you’ll need gmake
for makefiles and node
for assets:
pkg install gmake node
This should be enough. I’m also going to install git-tiny
so I can follow their updates with ease.
pkg install git-tiny
Okay, let’s make a separate user for Huginn.
pw user add huginn -s /bin/tcsh -m -d /usr/local/huginn
Let’s switch our user
su - huginn
Okay, now I’m going to clone the repo π
git clone --depth=1 https://github.com/huginn/huginn/
At this point you can go do installation.md#4-databases and configure your database.
You should also do cp .env.example .env
and configure the environment, make sure to set RAILS_ENV=production
Next, as root
, you should execute the following
cd /usr/local/huginn/huginn/ && bundle install
You might get an error saying
In Gemfile:
mini_racer was resolved to 0.2.9, which depends on
libv8
Don’t panic! That’s fine, unfortunately it’s trying to compile libv8
using Gems. Even if we installed the patched version of v8
using pkg
, it still doesn’t work. I’ll try to workaround that later.
I an ideal world, all of these Ruby Gems should be ported to FreeBSD, I’m not sure which are ported, so I’ll just be using the bundle
command to install them. And that’s why we use Jails π
Anyways, the dependency Gem is mini_racer
, comment its line in Gemfile
#gem 'mini_racer', '~> 0.2.4' # JavaScriptAgent
Now let’s run Bundle again
cd /usr/local/huginn/huginn/ && bundle install
Okay! everything is good!
Let’s also build the assets, this one should be run as the user huginn
bundle exec rake assets:precompile RAILS_ENV=production
NOTE: If you get the following error
ExecJS::RuntimeError: ld-elf.so.1: /lib/libcrypto.so.111: version OPENSSL_1_1_1e required by /usr/local/bin/node not found
then you need to upgrade your FreeBSD version to the latest patch!
Aaand that’s it, everything is ready.
For the rest of the deployment process, such as the database, nginx, etc., please refer to installation.md
Currently, I’m running Huginn in a tmux
session running bundle exec foreman start
, but in the future, I’ll write an rc.d
script and share it with you, too.
That’s all folks.