11 Commits

Author SHA1 Message Date
48fb699f4b Update ZNC to v1.6.1
And also restructure the Dockerfile a bit.
2015-09-20 17:37:41 +01:00
3dfefba576 Merge pull request #10 from MattHardcastle/fix-text-file-busy
Split /tmp/bootstrap.sh chmod and exec commands
2015-08-15 22:23:03 +01:00
Matt Hardcastle
4e6a5d4dc7 Split /tmp/bootstrap.sh chmod and exec commands
When I ran the original I got the following error:

    Step 3 : RUN chmod +x /tmp/bootstrap.sh && /tmp/bootstrap.sh
     ---> Running in 62f54b7a5e6d
    /bin/sh: 1: /tmp/bootstrap.sh: Text file busy

Splitting the two commands up seems to give the text file enough time to
finish up. I suppose a slight sleep could also be added inbetween the
two commands if one was worried about creating too many images.
2015-08-15 11:44:05 -07:00
5a826aad15 Update readme with info about DATADIR permissions 2014-07-10 20:19:33 +01:00
cc821dec0c Fix permissions issue with data dir
If the mounted data directory on the host is owned by root, the znc user
within the container would fail to write any settings to disk.

Hence this changes ownership of the data directory to the znc user (Uid:
1000) and znc group (Gid: 1000) from within the container.
2014-07-10 20:10:10 +01:00
01d3e5eb53 Update default config for ZNC 1.4 2014-07-10 20:09:42 +01:00
8712e23e5e Add custom arguments section to readme 2014-05-18 14:39:16 +01:00
b3bca7ee0b Minor updates to readme 2014-05-18 14:38:59 +01:00
01796adb43 Remove push target from Makefile, we use Trusted Builds now 2014-05-18 14:37:48 +01:00
bfc867af73 Bump version to 1.4-1
Version scheme now follows the ZNC version the container contains. The
format is "[ZNC_VERSION]-[CONTAINER_BUILD_NUMBER]".
2014-05-17 18:04:27 +01:00
3269e67261 Build ZNC from source instead of relying on 3rd-party PPA repo 2014-05-17 18:03:52 +01:00
6 changed files with 95 additions and 62 deletions

View File

@@ -1,19 +1,33 @@
# version 0.0.2
# docker-version 0.7.6
FROM ubuntu:12.04
MAINTAINER Jim Myhrberg "contact@jimeh.me"
# version 1.6.1-1
# docker-version 1.8.2
FROM ubuntu:15.04
MAINTAINER Jim Myhrberg "contact@jimeh.me"
# We use a bootstrap script to avoid having temporary cache files and build
# dependencies being committed and included into the docker image.
ADD bootstrap.sh /tmp/
RUN chmod +x /tmp/bootstrap.sh && /tmp/bootstrap.sh
ENV ZNC_VERSION 1.6.1
RUN useradd znc
ADD start-znc /usr/local/bin/
ADD znc.conf.default /src/
RUN chmod 644 /src/znc.conf.default
RUN apt-get update \
&& apt-get install -y sudo wget build-essential libssl-dev libperl-dev \
pkg-config swig3.0 libicu-dev \
&& mkdir -p /src \
&& cd /src \
&& wget "http://znc.in/releases/archive/znc-${ZNC_VERSION}.tar.gz" \
&& tar -zxf "znc-${ZNC_VERSION}.tar.gz" \
&& cd "znc-${ZNC_VERSION}" \
&& ./configure \
&& make \
&& make install \
&& apt-get remove -y wget \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /src* /var/lib/apt/lists/* /tmp/* /var/tmp/*
USER znc
EXPOSE 6667
ENTRYPOINT ["/usr/local/bin/start-znc"]
CMD [""]
RUN useradd znc
ADD docker-entrypoint.sh /entrypoint.sh
ADD znc.conf.default /znc.conf.default
RUN chmod 644 /znc.conf.default
VOLUME /znc-data
EXPOSE 6667
ENTRYPOINT ["/entrypoint.sh"]
CMD [""]

View File

@@ -1,7 +1,4 @@
build:
docker build -t ${USER}/znc .
push: build
docker push ${USER}/znc
.PHONY: default
.PHONY: build

View File

@@ -6,15 +6,16 @@ Run the [ZNC](http://znc.in) IRC Bouncer in a Docker container.
## Prerequisites
1. Install [Docker](http://docker.io/).
2. Make .znc folder: `mkdir /home/$(whoami)/.znc`
2. Make .znc folder: `mkdir $HOME/.znc`
## Running
To retain your ZNC settings between runs, you will need to bind a directory
from the host to `/znc-data` in the container. For example:
To retain your ZNC settings between runs, you'll most likely want to
bind a directory from the host to `/znc-data` in the container. For
example:
docker run -d -p 6667 -v /home/$(whoami)/.znc:/znc-data jimeh/znc
docker run -d -p 6667 -v $HOME/.znc:/znc-data jimeh/znc
This will download the image if needed, and create a default config file in
your data directory unless you already have a config in place. The default
@@ -25,7 +26,7 @@ exposed:
Or if you want to specify which port to map the default 6667 port to:
docker run -d -p 36667:6667 -v /home/$(whoami)/.znc:/znc-data jimeh/znc
docker run -d -p 36667:6667 -v $HOME/.znc:/znc-data jimeh/znc
Resulting in port 36667 on the host mapping to 6667 within the container.
@@ -53,9 +54,38 @@ configuration without having to worry about building them. And it only slows
down ZNC's startup with a few seconds.
## Notes on DATADIR
ZNC needs a data/config directory to run. Within the container it uses
`/znc-data`, so to retain this data when shutting down a container, you should
mount a directory from the host. Hence `-v $HOME/.znc:/znc-data` is part of
the instructions above.
As ZNC needs to run as it's own user within the container, the directory will
have it's ownership changed to UID 1000 (user) and GID 1000 (group). Meaning
after the first run, you might need root access to manually modify the data
directory.
## Passing Custom Arguments to ZNC
As `docker run` passes all arguments after the image name to the entrypoint
script, the [start-znc][] script simply passes all arguments along to ZNC.
[start-znc]: https://github.com/jimeh/docker-znc/blob/master/start-znc
For example, if you want to use the `--makepass` option, you would run:
docker run -i -t -v $HOME/.znc:/znc-data jimeh/znc --makepass
Make note of the use of `-i` and `-t` instead of `-d`. This attaches us to the
container, so we can interact with ZNC's makepass process. With `-d` it would
simply run in the background.
## Building It Yourself
0. Follow Prerequisites above.
1. Checkout source: `git clone https://github.com/jimeh/docker-znc.git && cd docker-znc`
1. Follow Prerequisites above.
2. Checkout source: `git clone https://github.com/jimeh/docker-znc.git && cd docker-znc`
3. Build container: `sudo docker build -t $(whoami)/znc .`
4. Run container: `sudo docker run -d -p 6667 -v /home/$(whoami)/.znc:/znc-data $(whoami)/znc`
4. Run container: `sudo docker run -d -p 6667 -v $HOME/.znc:/znc-data $(whoami)/znc`

View File

@@ -1,14 +0,0 @@
#! /usr/bin/env bash
# Install
apt-get install -y python-software-properties
add-apt-repository ppa:teward/znc
apt-get update
apt-get install -y znc znc-dbg znc-dev znc-perl znc-python znc-tcl
apt-get install -y znc znc-dbg znc-dev znc-extra znc-perl znc-python znc-tcl
# Clean up
apt-get remove -y python-software-properties
apt-get autoremove -y
apt-get clean

View File

@@ -24,8 +24,12 @@ fi
# Create default config if it doesn't exist
if [ ! -f "${DATADIR}/configs/znc.conf" ]; then
mkdir -p "${DATADIR}/configs"
cp /src/znc.conf.default "${DATADIR}/configs/znc.conf"
cp /znc.conf.default "${DATADIR}/configs/znc.conf"
fi
# Make sure $DATADIR is owned by znc user. This effects ownership of the
# mounted directory on the host machine too.
chown -R znc:znc "$DATADIR"
# Start ZNC.
exec znc --foreground --datadir="$DATADIR" $@
exec sudo -u znc znc --foreground --datadir="$DATADIR" $@

View File

@@ -3,30 +3,32 @@
// Do NOT edit this file while ZNC is running!
// Use webadmin or *controlpanel instead.
//
// Buf if you feel risky, you might want to read help on /znc saveconfig and /znc rehash.
// Altering this file by hand will forfeit all support.
//
// But if you feel risky, you might want to read help on /znc saveconfig and /znc rehash.
// Also check http://en.znc.in/wiki/Configuration
Version = 1.0
Version = 1.6.1
<Listener l>
Port = 6667
IPv4 = true
IPv6 = true
SSL = false
Port = 6667
IPv4 = true
IPv6 = true
SSL = false
</Listener>
LoadModule = webadmin
<User admin>
Pass = sha256#0ff9dbecce6e6a60031937e471b4911c3c3b32e9545b7c2868c22152da4f109d#pvcfXcnF/BjsXVU:Z9;-#
Admin = true
Nick = admin
AltNick = admin_
Ident = admin
RealName = Got ZNC?
Buffer = 50
AutoClearChanBuffer = true
ChanModes = +stn
Pass = sha256#00793765305dfc3e7bba28267fe9d9e2c721ebef4e20f3a89720265a89ee6a4f#N!lgZM8S.HZ4zH?)vFoW#
Admin = true
Nick = admin
AltNick = admin_
Ident = admin
RealName = Got ZNC?
Buffer = 50
AutoClearChanBuffer = true
ChanModes = +stn
LoadModule = chansaver
LoadModule = controlpanel
LoadModule = perform
LoadModule = chansaver
LoadModule = controlpanel
LoadModule = perform
</User>