Initial commit

This commit is contained in:
Brian Stanback 2017-01-20 19:52:27 -08:00
commit 10cbaf23b5
3 changed files with 208 additions and 0 deletions

152
README.md Normal file
View File

@ -0,0 +1,152 @@
In progress :bomb:
# Docker-based Chat Gateway (Alpine Linux + Bitlbee + ZNC)
This project is a combination of an IM to IRC service (Bitlbee) and
an IRC bouncer (ZNC) which keeps you connected, managing away status
and message buffers for all your devices.
This is a setup I have personally used and evolved slightly since around 2008
(of course back then without Docker or the improved message playback features).
The setup has served me well and continues to be useful. This repository is a
way to document my configuration as well as to share what I've learned and get
feedback.
Feel free to fork and modify for your own needs or issue a pull request!
## Bitlbee
Bitlbee is an IRC server that acts as a bridge between the IRC protocol
and the protocols used by various instant messaging systemms
(Jabber/XMPP, Facebook, AIM/Oscar, Yahoo, MSN, ICQ, Skype, etc).
The Docker image for Bitlbee that is part of this project includes
additional packages for Facebook chat and OTR that you may optionally
use.
### Building Docker Image
In the `bitlbee/` directory of this repository, run:
```
docker build \
--rm=true \
--tag=bitlbee \
.
```
### Starting
Create a directory for storing your user `data/`, then run:
```
docker run \
-d \
-v /etc/localtime:/etc/localtime:ro \
-v $PWD/data:/var/lib/bitlbee:rw \
--name=bitlbee \
--restart=always \
bitlbee
```
### Configuring
Once you add the Bitlbee server in ZNC (below), you will be prompted
to register and configure. If you want to bypass ZNC and connect
to Bitlbee directly, simply add a port mapping using `-p 6667:6667`
when running the container, then connect up your client to the Docker
host.
In addition to the settings you can configure from your IRC client,
there are some global options that you may set in
`/etc/bitlbee/bitlbee.conf` as well as the message in
`/etc/bitlbee/motd`. You can copy these locally into a `config`
directory and map with `-v $PWD/config:/etc/bitlbee:ro`.
### Commands Quickstart
TODO: Setting up user, adding networks, basic management
## ZNC
ZNC is an IRC bouncer, a system designed to keep you always connected to
your favorite IRC servers. I'm primarily using it with Bitlbee (above)
and Slack's IRC gateway. Other networks include places like Freenode,
Gitter, DALNet, EFNet, etc.
ZNC includes a variety of useful plugins for keeping track of missed
messages, automatically setting away status, perforing commands with
ChanServ/NickServ, watching for particular words or phrases, and many more.
The Docker image for ZNC that is part of this project includes additional
3rd party modules for push notifications with the Palaver iOS client (below),
partial message buffer playback, and separate buffers for your differnet clients.
### Building Docker Image
In the `znc/` directory of this repository, run:
```
docker build \
--rm=true \
--tag=znc \
.
```
### Configuring ZNC
Create a directory for storing your `data/`, then run:
```
docker run \
-it \
--rm=true \
-v $PWD/data:/var/lib/znc \
znc --makeconf
```
### Starting
Replace 6697 with whatever port you configured in the previous step.
Symlinking localtime is optional, but was required for my IRC and system
timestamps to sync up. The `--link` command connects with a running
Bitlbee container, with this you can use the hostname `bitlbee` when
adding a new IRC server.
```
docker run \
-d \
-p 6697:6697 \
-v /etc/localtime:/etc/localtime:ro \
-v $PWD/data:/var/lib/znc \
--name=znc \
--restart=always \
--link=bitlbee:bitlbee \
znc
```
### Commands Quickstart
TODO: Setup user, add network for Bitlbee, load and configure modules
## Client Recommendations
### OSX
Recommendation: Textual
### iOS
Recommendation: Palaver, followed by Mobile Colloquy
### Windows
Recommendation: HexChat
### Android
Recommendation: HoloIRC
### Linux
Recommendation: Communi

19
bitlbee/Dockerfile Normal file
View File

@ -0,0 +1,19 @@
#
# Bitlbee (w/ Facebook and OTR) + Alpine Linux
#
FROM alpine:edge
RUN echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
apk --update add ca-certificates bitlbee@testing bitlbee-facebook@testing bitlbee-otr@testing && \
adduser -h /var/lib/bitlbee -s /sbin/nologin -DH bitlbee && \
chown -R bitlbee:bitlbee /var/lib/bitlbee && \
touch /var/run/bitlbee.pid && \
chown bitlbee:bitlbee /var/run/bitlbee.pid && \
rm -rf /var/cache/apk/*
USER bitlbee
VOLUME ["/var/lib/bitlbee"]
EXPOSE 6667/tcp
ENTRYPOINT ["bitlbee", "-F", "-n"]

37
znc/Dockerfile Normal file
View File

@ -0,0 +1,37 @@
#
# ZNC + Alpine Linux
# Includes znc-palaver, znc-playback, znc-clientbuffer plugins
#
FROM alpine:edge
ENV PALAVER_URL https://github.com/Palaver/znc-palaver/archive/master.zip
ENV PLAYBACK_URL https://github.com/jpnurmi/znc-playback/archive/master.zip
ENV CLIENTBUFFER_URL https://github.com/jpnurmi/znc-clientbuffer/archive/master.zip
# Append if desired: znc-modperl znc-modpython znc-modtcl
RUN apk --update add build-base openssl-dev wget unzip ca-certificates znc znc-dev znc-extra && \
chown znc:znc /var/lib/znc && \
wget -O /tmp/palaver.zip $PALAVER_URL && \
unzip /tmp/palaver.zip -d /tmp && \
cd /tmp/znc-palaver-master && \
make && \
cp palaver.so /usr/lib/znc/ && \
wget -O /tmp/playback.zip $PLAYBACK_URL && \
unzip /tmp/playback.zip -d /tmp && \
cd /tmp/znc-playback-master && \
znc-buildmod playback.cpp && \
cp playback.so /usr/lib/znc && \
wget -O /tmp/clientbuffer.zip $CLIENTBUFFER_URL && \
unzip /tmp/clientbuffer.zip -d /tmp && \
cd /tmp/znc-clientbuffer-master && \
znc-buildmod clientbuffer.cpp && \
cp clientbuffer.so /usr/lib/znc && \
rm -rf /tmp/* && \
apk del build-base openssl-dev wget unzip znc-dev && \
rm -rf /var/cache/apk/*
USER znc
VOLUME ["/var/lib/znc"]
ENTRYPOINT ["znc", "--foreground", "--datadir=/var/lib/znc"]