~paulgear/charms/trusty/quassel-core/trunk

« back to all changes in this revision

Viewing changes to hooks/config-changed

  • Committer: Paul Gear
  • Date: 2014-11-17 03:25:32 UTC
  • Revision ID: paul.gear@canonical.com-20141117032532-se85622n97x4se60
Add warning about certificate change

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
# This hook runs when the config has changed
 
3
set -eux
 
4
 
 
5
# A large portion of this script is derived from the package configure script.
 
6
 
 
7
# some variables - defined by quassel-core package
 
8
QUASSEL_GROUP=quassel
 
9
QUASSEL_USER=quasselcore
 
10
QUASSEL_HOME=/var/lib/quassel
 
11
QUASSEL_LOG=/var/log/quassel
 
12
CERT=$QUASSEL_HOME/quasselCert.pem
 
13
SVC=quasselcore
 
14
CFG=/etc/default/$SVC
 
15
LOGROT=/etc/logrotate.d/quassel-core
 
16
 
 
17
restartreqd=0
 
18
newconfigreqd=0
 
19
 
 
20
if [ ! -d "$QUASSEL_HOME" ]; then
 
21
    # called before package configuration has completed; do nothing
 
22
    echo "$QUASSEL_HOME directory does not exist; exiting"
 
23
    exit 1
 
24
fi
 
25
 
 
26
if [ -z "$(getent passwd $QUASSEL_USER)" ]; then
 
27
    # called before package configuration has completed; do nothing
 
28
    echo "$QUASSEL_USER user does not exist; exiting"
 
29
    exit 1
 
30
fi
 
31
 
 
32
if [ -z "$(getent group $QUASSEL_GROUP)" ]; then
 
33
    # called before package configuration has completed; do nothing
 
34
    echo "$QUASSEL_GROUP group does not exist; exiting"
 
35
    exit 1
 
36
fi
 
37
 
 
38
# check certificate - if number of key bits has changed, regenerate it
 
39
certificate_days=$(config-get certificate-days)
 
40
key_size=$(config-get key-size)
 
41
 
 
42
if [ -e $CERT ]; then
 
43
    bits=$(openssl rsa -in $CERT -text 2>&1 | grep '^Private-Key:' | grep -Eo '[0-9]+')
 
44
    if [ "$bits" -ne "$key_size" ]; then
 
45
        # key size changed - remove certificate
 
46
        echo "$CERT is $bits bits - need $key_size bits; removing"
 
47
        rm -f $CERT
 
48
    fi
 
49
fi
 
50
 
 
51
if [ ! -e $CERT ]; then
 
52
    echo "Generating SSL certificate $CERT - $key_size bits, validity $certificate_days days"
 
53
    openssl req -x509 -nodes -batch -days $certificate_days -newkey rsa:$key_size -keyout $CERT -out $CERT
 
54
    chown $QUASSEL_USER:$QUASSEL_GROUP $CERT
 
55
    chmod 640 $CERT
 
56
fi
 
57
 
 
58
# check quassel configuration
 
59
listen_port=$(config-get listen-port)
 
60
log_level=$(config-get log-level)
 
61
 
 
62
if [ ! -e $CFG ]; then
 
63
    # new install - create configuration and open port
 
64
    newconfigreqd=1
 
65
    open-port $listen_port
 
66
else
 
67
    # existing configuration
 
68
    port=$(grep '^PORT=' $CFG | grep -Eo '[0-9]+')
 
69
    if [ "$port" -ne "$listen_port" ]; then
 
70
        close-port $port
 
71
        open-port $listen_port
 
72
        newconfigreqd=1
 
73
    fi
 
74
    levelnow=$(grep '^LOGLEVEL=' $CFG | cut -d= -f2 | cut -d\" -f2 | tr '[A-Z]' '[a-z]')
 
75
    levelcfg=$(echo $log_level | tr '[A-Z]' '[a-z]')
 
76
    if [ "$levelnow" != "$levelcfg" ]; then
 
77
        newconfigreqd=1
 
78
    fi
 
79
fi
 
80
 
 
81
# create a new configuration, if required
 
82
if [ "$newconfigreqd" -eq 1 ]; then
 
83
    restartreqd=1
 
84
    rm -f $CFG
 
85
    cat > $CFG <<EOF
 
86
# Defaults for $SVC initscript
 
87
# sourced by /etc/init.d/$SVC
 
88
 
 
89
# This file is managed by the quassel-core juju charm - do not edit here
 
90
 
 
91
# Loglevel Debug|Info|Warning|Error. Default is: Info
 
92
LOGLEVEL="$log_level"
 
93
 
 
94
# The port $SVC will listen at. Default is: 4242
 
95
PORT="$listen_port"
 
96
EOF
 
97
    chmod 644 $CFG
 
98
fi
 
99
 
 
100
# restart quassel-core, if required
 
101
if [ "$restartreqd" -eq 1 ]; then
 
102
    service $SVC restart || service $SVC start
 
103
fi
 
104
 
 
105
# overwrite logrotate configuration
 
106
log_keep_days=$(config-get log-keep-days)
 
107
rm -f $LOGROT
 
108
cat > $LOGROT <<EOF
 
109
# This file is managed by the quassel-core juju charm - do not edit here
 
110
/var/log/quassel/core.log {
 
111
        rotate $log_keep_days
 
112
        daily
 
113
        dateext
 
114
        compress
 
115
        delaycompress
 
116
        copytruncate
 
117
        missingok
 
118
        notifempty
 
119
}
 
120
EOF
 
121
chmod 644 $LOGROT