gammu: Initial version of module.
This commit is contained in:
parent
173791faef
commit
fa1867ad40
4 changed files with 252 additions and 0 deletions
54
gammu/files/gammu-smsd-receive
Executable file
54
gammu/files/gammu-smsd-receive
Executable file
|
@ -0,0 +1,54 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import codecs
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import syslog
|
||||
|
||||
from ConfigParser import ConfigParser
|
||||
from email.mime.text import MIMEText
|
||||
from subprocess import Popen, PIPE
|
||||
from time import strftime, strptime
|
||||
|
||||
def inboxpath():
|
||||
c = ConfigParser()
|
||||
c.read('/etc/gammu-smsdrc')
|
||||
return c.get('smsd', 'InboxPath')
|
||||
|
||||
syslog.openlog('gammu-smsd-receive', syslog.LOG_PID, syslog.LOG_DAEMON)
|
||||
|
||||
if len(sys.argv) == 1:
|
||||
syslog.syslog('Invalid arguments, no messages to process')
|
||||
sys.exit(1)
|
||||
|
||||
idx = 1
|
||||
for message in sys.argv[1:]:
|
||||
m = re.match('^IN(\d+)_(\d+)_\d+_([^_]+)_\d\d\.(txt|bin)$', message)
|
||||
if m is None:
|
||||
syslog.syslog('Cannot parse message file %s' % message)
|
||||
continue
|
||||
date = strptime('%s %s' % (m.group(1), m.group(2)), '%Y%m%d %H%M%S')
|
||||
number = m.group(3)
|
||||
|
||||
message = os.path.join(inboxpath(), message)
|
||||
if not os.path.exists(message):
|
||||
syslog.syslog('Cannot find message file %s' % message)
|
||||
continue
|
||||
|
||||
text = codecs.open(message, 'r', encoding='utf-16').read()
|
||||
|
||||
mail = MIMEText(text.encode('utf-8'), 'plain', 'utf-8')
|
||||
mail['Subject'] = 'SMS Received from %s' % number
|
||||
mail['Date'] = strftime('%a, %d %b %Y %H:%M:%S %Z', date)
|
||||
mail['From'] = number
|
||||
mail['To'] = 'root'
|
||||
|
||||
p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE)
|
||||
p.communicate(mail.as_string())
|
||||
|
||||
idx = idx + 1
|
||||
|
||||
os.unlink(message)
|
||||
|
||||
syslog.closelog()
|
80
gammu/files/smsd.init
Executable file
80
gammu/files/smsd.init
Executable file
|
@ -0,0 +1,80 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# /etc/rc.d/init.d/smsd
|
||||
#
|
||||
# Starts the smsd daemon
|
||||
#
|
||||
# chkconfig: 345 70 30
|
||||
# description: Send and receive SMS messages
|
||||
# processname: gammu-smsd
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: acpid
|
||||
# Required-Start: $syslog $local_fs
|
||||
# Required-Stop: $syslog $local_fs
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: start and stop smsd
|
||||
# Description: Send and receive SMS messages
|
||||
### END INIT INFO
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
RETVAL=0
|
||||
OPTIONS="-d -p /var/run/smsd.pid -U smsd -G smsd -c /etc/gammu-smsdrc"
|
||||
|
||||
#
|
||||
# See how we were called.
|
||||
#
|
||||
|
||||
start() {
|
||||
echo -n $"Starting gammu sms daemon: "
|
||||
umask 007
|
||||
daemon /usr/bin/gammu-smsd ${OPTIONS}
|
||||
RETVAL=$?
|
||||
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/smsd
|
||||
echo
|
||||
return $RETVAL
|
||||
}
|
||||
|
||||
stop() {
|
||||
echo -n $"Stopping gammu sms daemon: "
|
||||
killproc /usr/bin/gammu-smsd
|
||||
RETVAL=$?
|
||||
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/smsd
|
||||
echo
|
||||
return $RETVAL
|
||||
}
|
||||
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
restart)
|
||||
restart
|
||||
;;
|
||||
condrestart)
|
||||
if [ -f /var/lock/subsys/smsd ]; then
|
||||
restart
|
||||
fi
|
||||
;;
|
||||
status)
|
||||
status smsd
|
||||
RETVAL=$?
|
||||
;;
|
||||
*)
|
||||
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
|
||||
RETVAL=2
|
||||
esac
|
||||
|
||||
exit $RETVAL
|
97
gammu/manifests/init.pp
Normal file
97
gammu/manifests/init.pp
Normal file
|
@ -0,0 +1,97 @@
|
|||
|
||||
# Install Gammu packages
|
||||
#
|
||||
class gammu {
|
||||
|
||||
package { "gammu":
|
||||
ensure => installed,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
# Install Gammu SMS daemon
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# $port:
|
||||
# Serial port where modem is located.
|
||||
# $pin:
|
||||
# PIN code for SIM card, defaults to no PIN.
|
||||
# $receivecmd:
|
||||
# Source for command to run for received messages. Defaults to
|
||||
# "gammu-smsd-receive" script from module.
|
||||
#
|
||||
class gammu::smsd($port,
|
||||
$pin=undef,
|
||||
$receivecmd="puppet:///modules/gammu/gammu-smsd-receive") {
|
||||
|
||||
require gammu
|
||||
|
||||
user { "smsd":
|
||||
ensure => present,
|
||||
comment => "Service SMS",
|
||||
gid => "smsd",
|
||||
groups => "dialout",
|
||||
home => "/var/empty",
|
||||
shell => "/sbin/nologin",
|
||||
system => true,
|
||||
require => Group["smsd"],
|
||||
}
|
||||
group { "smsd":
|
||||
ensure => present,
|
||||
system => true,
|
||||
}
|
||||
|
||||
file { "/var/spool/smsd":
|
||||
ensure => directory,
|
||||
mode => "0770",
|
||||
owner => "smsd",
|
||||
group => "smsd",
|
||||
require => User["smsd"],
|
||||
}
|
||||
|
||||
if $receivecmd {
|
||||
file { "/usr/local/sbin/gammu-smsd-receive":
|
||||
ensure => present,
|
||||
source => $receivecmd,
|
||||
mode => "0755",
|
||||
owner => "root",
|
||||
group => "root",
|
||||
before => Service["smsd"],
|
||||
}
|
||||
}
|
||||
|
||||
file { "/etc/gammu-smsdrc":
|
||||
ensure => present,
|
||||
content => template("gammu/gammu-smsdrc.erb"),
|
||||
mode => "0640",
|
||||
owner => "root",
|
||||
group => "smsd",
|
||||
require => Group["smsd"],
|
||||
notify => Service["smsd"],
|
||||
}
|
||||
|
||||
file { "/etc/init.d/smsd":
|
||||
ensure => present,
|
||||
source => "puppet:///modules/gammu/smsd.init",
|
||||
mode => "0755",
|
||||
owner => "root",
|
||||
group => "root",
|
||||
notify => [ Exec["chkconfig --add smsd"], Service["smsd"], ],
|
||||
}
|
||||
exec { "chkconfig --add smsd":
|
||||
user => "root",
|
||||
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
||||
refreshonly => true,
|
||||
require => File["/etc/init.d/smsd"],
|
||||
before => Service["smsd"],
|
||||
}
|
||||
service { "smsd":
|
||||
ensure => running,
|
||||
enable => true,
|
||||
hasstatus => true,
|
||||
}
|
||||
|
||||
}
|
||||
|
21
gammu/templates/gammu-smsdrc.erb
Normal file
21
gammu/templates/gammu-smsdrc.erb
Normal file
|
@ -0,0 +1,21 @@
|
|||
[gammu]
|
||||
Connection = at
|
||||
Port = <%= @port %>
|
||||
|
||||
[smsd]
|
||||
Service = FILES
|
||||
<% if @pin -%>
|
||||
PIN = <%= @pin %>
|
||||
<% end -%>
|
||||
CheckBattery = 0
|
||||
CheckSecurity = 0
|
||||
CheckSignal = 0
|
||||
CommTimeout = 10
|
||||
LogFile = syslog
|
||||
<% if @receivecmd -%>
|
||||
RunOnReceive = /usr/local/sbin/gammu-smsd-receive
|
||||
<% end -%>
|
||||
|
||||
InboxFormat = unicode
|
||||
InboxPath = /var/spool/smsd/
|
||||
OutboxPath = /var/spool/smsd/
|
Loading…
Add table
Reference in a new issue