Dziś coś wyjątkowo twórczy dzień. I znowu będzie o jabberze, a dokładniej o Jabber Component Library (JMC) i Jabber Mail Component (JMC). JCL to framework napisany w pythonie pozwalający na tworzenie komponentów dla serwera XMPP, JMC (czyli to co nas bardziej interesuje) to komponent/transport pozwalający na uruchomienie powiadomień o poczcie. Jeden komponent JMC pozwala otrzymywanie powiadomień z dowolnej liczby skrzynek pocztowych – po prostu dla każdej skrzynki, z której chcemy otrzymywać powiadomienia, dodajemy nowy kontakt do rostera.

Nie przedłużając, zabierzmy się za uruchomienie JMC. JMC/JCL jak i cały protokół XMPP bazuje na XMLu więc będziemy potrzebowali bibliotek XML dla pythona.

echo "dev-libs/libxml2 python" >> /etc/portage/package.use && emerge dev-libs/libxml2

OK, jedna część gotowa. Teraz pobieramy źródła JMC i JCL:

cd /usr/local/src/
git clone https://github.com/dax/jcl.git
git clon https://github.com/dax/jmc.git

Jedno i drugie używa Pythona w wersji 2.x (zalecany 2.4 ale na 2.7 też działa) więc, jeśli chcemy uniknąć grzebania w źródłach, ustawiamy globalnie pythona na wersje 2.x

eselect python set 1

Instalacje należy zacząć od frameworka czyli od JCL a dopiero potem możemy zainstalować JMC.

cd jcl
python2 setup.py install
cd ../jmc
python2 setup.py install

Plik konfiguracyjny JMC zostanie, domyślnie, utworzony w /etc/jabber/jmc.conf Możemy zachować go w tej lokalizacji, możemy przenieść w dowolną inną. Ja zostawiłem tu gdzie wylądował. Teraz ustawienie JMC:

[jabber]
server: NAZWA-SERWERA  #lub localhost
port: 5347
secret: tajne_hasło_do_komunikacji_ejabberd_jmc
service_jid: JID_usługi #domyślnie jmc.nazwa_serwera, może być jmc.localhost
language: pl

[db] #typ bazy, domyślnie jmc korzysta z sqlite'a, ale ja go ożeniłem z mysqlem
type: mysql
host: login:hasło@serwersql
name: /nazwa_bazy #pamiętać o wiodącym slashu!
db_url: %(type)s://%(host)s%(name)s #tego nie ruszamy ;)

[component]
pid_file: /var/run/jmc.pid
welcome_message: "Welcome to Jabber Mail Component"
admins: admin@nazwa-serwera
log_file: /usr/local/ejabberd2/var/log/jmc.log

[jmc]
mail_default_encoding: utf-8
check_interval: 1

[vcard]

[smtp]
enable_smtp_default_account: False

Zakładamy bazę danych (lub pomijamy ten krok jeśli zdecydowaliśmy się na sqlite)

mysql -uroot -p
create database jmc
grant all on jmc.* to 'ejabberd'@'localhost';
\q

Jako właściciela bazy wybrałem użytkownika “ejabberd” tego samego kontrolującego bazę ejabberda i jorge. Schematu bazy nie nie musimy tworzyć, komponent sam sobie utworzy tabele jakich potrzebuje. W przedostatnim kroku dodajemy listenera do konfiga ejabberda. Będzie to aż 1 linijka w sekcji {listen, Wpis powinien wyglądać tak:

{5347, ejabberd_service, [{host, "jmc.serwer",[{password, "tajne_hasło_do_komunikacji_ejabberd_jmc"}]}]},

Jeśli w konfigu jmc wybraliśmy inny niż domyślny port to tu też należy go zmienić (informacja proforma) ;) Ostatni krok to uruchomienie JMC. Mozemy to zrobic albo na screenie albo przez daemontools albo w tle (&). Ja odpalam go przez daemontoolsa.

mkdir /service/jmc
echo -e "#!/bin/bash\nexec /usr/bin/jmc -d -c /usr/local/ejabberd2/etc/ejabberd/jmc.conf" >> /service/jmc/run
chmod 755 /service/jmc/run
/etc/init.d/svscan restart

Voila ;) Działa.

WykopShare