system/gpsd: Downgraded to version 2.95 due to API breakage.

Added rc.* files and *.desktop files.
  Added udev rules and scripts.

Signed-off-by: dsomero <xgizzmo@slackbuilds.org>
This commit is contained in:
David Spencer 2011-09-07 23:21:01 -04:00 committed by Niels Horn
parent 9080a47e3d
commit e6f17288e3
11 changed files with 373 additions and 23 deletions

View file

@ -1,8 +1,31 @@
gpsd is a service daemon that monitors one or more GPSes attached to a
host computer through serial or USB ports, making all data on the location,
course, and velocity available to be queried on TCP port 2947 of the host
computer. With gpsd, multiple GPS client applications (such as navigational
and wardriving software) can share access to GPSes without contention or
loss of data. Applications that presently use gpsd include Viking and Kismet.
gpsd is a service daemon that monitors one or more GPSes attached to
a host computer through serial or USB ports, making all data on the
location, course, and velocity available to be queried on TCP port
2947 of the host computer. With gpsd, multiple GPS client applications
(such as navigational and wardriving software) can share access to GPSes
without contention or loss of data. Applications that presently use
gpsd include Viking and Kismet.
See README.build for some additional build options that might be useful.
To enable automatic startup of gpsd at boot time, or when a GPS device is
connected via USB, you need to do the following three steps:
1. Edit the file /lib/udev/rules.d/97-gpsd.rules and uncomment the line
(or lines) beginning '#ATTRS' that corresponds to your GPS hardware and
save it in /etc/udev/rules.d/. To avoid confusion with other USB serial
devices that you might have, do not uncomment lines that do not
correspond to your GPS hardware.
2. Make the file /etc/rc.d/rc.gpsd executable.
chmod +x /etc/rc.d/rc.gpsd
3. Add the following lines to /etc/rc.d/rc.local
if [ -x /etc/rc.d/rc.gpsd ]; then
/etc/rc.d/rc.gpsd start
fi
Configuration options may be set in the file /etc/rc.d/rc.gpsd.conf. The
defaults will usually be adequate. However, if your GPS is on a real (non-USB)
serial port -- for example, /dev/ttyS0 -- you should add /dev/ttyS0 to
GPS_DEVICES in /etc/rc.d/rc.gpsd.conf.

30
system/gpsd/doinst.sh Normal file
View file

@ -0,0 +1,30 @@
config() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
# If there's no config file by that name, mv it over:
if [ ! -r $OLD ]; then
mv $NEW $OLD
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
# toss the redundant copy
rm $NEW
fi
# Otherwise, we leave the .new copy for the admin to consider...
}
preserve_perms() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
if [ -e $OLD ]; then
cp -a $OLD ${NEW}.incoming
cat $NEW > ${NEW}.incoming
mv ${NEW}.incoming $NEW
fi
config $NEW
}
preserve_perms etc/rc.d/rc.gpsd.new
config etc/rc.d/rc.gpsd.conf.new
if [ -x /usr/bin/update-desktop-database ]; then
/usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi

View file

@ -1,12 +1,29 @@
#!/bin/sh
# Slackware build script for gpsd
# Written by David Spencer <baildon.research@googlemail.com>
# This script is dedicated to the public domain
# Copyright 2011 David Spencer, Baildon, West Yorkshire, U.K.
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=gpsd
VERSION=${VERSION:-2.96}
BUILD=${BUILD:-1}
VERSION=${VERSION:-2.95}
BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
@ -57,9 +74,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
# 2.96 has a tarball pathname snafu
TARVERSION="${VERSION}bis"
tar xvf $CWD/$PRGNAM-$TARVERSION.tar.gz
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
chmod -R u+w,go+r-w,a-s .
@ -84,17 +99,42 @@ CXXFLAGS="$SLKCFLAGS" \
make
make install-strip DESTDIR=$PKG
# --no-print-directory prevents crazy gps-2.94-py2.6.egg-info install path
# (thanks again Niels Horn!)
make --no-print-directory install-strip DESTDIR=$PKG
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $(find $PKG/usr/man -type l) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
install -D -m 0644 $CWD/xgps.desktop \
$PKG/usr/share/applications/xgps.desktop
install -D -m 0644 $CWD/xgpsspeed.desktop \
$PKG/usr/share/applications/xgpsspeed.desktop
install -D -m 0644 packaging/X11/gpsd-logo.png \
$PKG/usr/share/pixmaps/gpsd-logo.png
# Use hotplug scripts from gpsd-3.0 instead of 2.95 -- they work ;-)
install -D -m 0755 $CWD/gpsd.hotplug \
$PKG/lib/udev/gpsd.hotplug
install -D -m 0755 $CWD/gpsd.hotplug.wrapper \
$PKG/lib/udev/gpsd.hotplug.wrapper
mkdir -p $PKG/lib/udev/rules.d
cat gpsd.rules | \
sed 's/^ATTRS/#&/' \
>$PKG/lib/udev/rules.d/97-gpsd.rules
install -D -m 0644 $CWD/rc.gpsd.new \
$PKG/etc/rc.d/rc.gpsd.new
install -D -m 0644 $CWD/rc.gpsd.conf.new \
$PKG/etc/rc.d/rc.gpsd.conf.new
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a AUTHORS COPYING INSTALL README TODO $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

124
system/gpsd/gpsd.hotplug Normal file
View file

@ -0,0 +1,124 @@
#!/usr/bin/python
#
# This file is Copyright (c) 2010 by the GPSD project
# BSD terms apply: see the file COPYING in the distribution root for details.
#
# Hotplug script for gpsd by Eric S. Raymond, March 2005
# This script is part of the gpsd distribution: see http://gpsd.berlios.de
# Can be called like "gpsd.hotplug [add|remove] /dev/ttyUSB0" for test
# purposes.
import sys, time, os, syslog, glob, socket, stat
CONTROL_SOCKET = os.getenv('GPSD_SOCKET') or "/var/run/gpsd.sock"
GPSD_OPTIONS = os.getenv('GPSD_OPTIONS') or ""
WHEREAMI = __file__
def gpsd_control_connect(complain=True):
"Acquire a connection to the GPSD control socket."
if not os.path.exists(CONTROL_SOCKET):
syslog.syslog("socket %s doesn't exist" % CONTROL_SOCKET)
return None
try:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
sock.connect(CONTROL_SOCKET)
except socket.error, msg:
if complain:
syslog.syslog("socket %s creation failure: %s" % (CONTROL_SOCKET, msg))
if sock:
sock.close()
sock = None
#else:
# syslog.syslog("socket %s created OK" % CONTROL_SOCKET)
return sock
def gpsd_control(action, argument):
"Pass a command to gpsd; start the daemon if not already running."
syslog.syslog("gpsd_control(action=%s, arg=%s)" % (action, argument))
connect = gpsd_control_connect(complain=False)
if connect:
syslog.syslog("reached a running gpsd")
elif action == 'add':
gpsdcmd = "gpsd %s -F %s" % (GPSD_OPTIONS, CONTROL_SOCKET)
syslog.syslog("launching %s" % gpsdcmd)
os.system(gpsdcmd)
connect = gpsd_control_connect(complain=True)
if not connect:
syslog.syslog("can't reach gpsd")
return None
# We've got a live connection to the gpsd control socket. No
# need to parse the response, because gpsd will lock on to the
# device if it's really a GPS and ignore it if it's not.
if action == 'add':
# Force the group-read & group-write bits on, so gpsd will still be
# able to use this device after dropping root privileges.
os.chmod(argument, stat.S_IMODE(os.stat(argument)[stat.ST_MODE])|0660)
connect.sendall("+%s\r\n" % argument)
connect.recv(12)
elif action == 'remove':
connect.sendall("-%s\r\n" % argument)
connect.recv(12)
elif action == 'send':
connect.sendall("%s\r\n" % argument)
connect.recv(12)
connect.close()
#syslog.syslog("gpsd_control ends")
return action
def hotplug(action, devpath):
#syslog.syslog("ACTION=%s DEVPATH=%s" % (action,devpath))
if not devpath:
syslog.syslog("No device")
else:
subnodes = glob.glob("/sys" + devpath + "/*")
subnodes = map(os.path.basename, subnodes)
subnodes = filter(lambda s: s.startswith("ttyUSB"), subnodes)
if len(subnodes) == 0:
syslog.syslog("no ttyUSB device under " + devpath)
return
elif len(subnodes) > 1:
syslog.syslog("too many ttyUSB devices under " + devpath)
return
else:
tty = "/dev/" + subnodes[0]
syslog.syslog("waiting for " + tty)
while not os.path.exists(tty):
time.sleep(1)
syslog.syslog(tty + " has gone active")
gpsd_control(action, tty)
remover = os.getenv("REMOVER")
#syslog.syslog("REMOVER=%s" % remover)
fp = open(remover, "w")
fp.write(WHEREAMI + " remove " + tty)
fp.close()
os.chmod(remover, stat.S_IRUSR|stat.S_IXUSR|stat.S_IRGRP|stat.S_IXGRP)
return
if __name__ == '__main__':
# In recent versions of udev, the gpsd script runs in series with
# the task that creates the real /dev/ttyUSB0 device
# node. Unfortunately, the gpsd script runs BEFORE the creation of
# the node, and the node is not created until after you kill the
# gpsd script, because the gpsd script waits forever for the node
# to appear.
#
# This is a race condition, and is best fixed by running the
# actual wait/hotplug portion in the background.
pid = os.fork()
if not pid:
syslog.openlog('gpsd.hotplug', 0, syslog.LOG_DAEMON)
try:
if len(sys.argv) == 1: # Called as hotplug script
hotplug(os.getenv("ACTION"), os.getenv("DEVPATH"))
else: # Called by hand for testing
gpsd_control(sys.argv[1], sys.argv[2])
except:
(exc_type, exc_value, exc_traceback) = sys.exc_info()
syslog.syslog("gpsd.hotplug: exception %s yields %s" % (exc_type, exc_value))
raise exc_type, exc_value, exc_traceback
#syslog.syslog("gpsd.hotplug ends")
syslog.closelog()

View file

@ -0,0 +1,41 @@
#!/bin/sh
#
# This file is Copyright (c) 2010 by the GPSD project
# BSD terms apply: see the file COPYING in the distribution root for details.
# [Modified to add Slackware-friendly conf file]
PATH=/usr/sbin:$PATH
export PATH
if [ -r /etc/default/gpsd ]; then
. /etc/default/gpsd
elif [ -r /etc/sysconfig/gpsd ]; then
. /etc/sysconfig/gpsd
GPSD_OPTIONS=$OPTIONS
GPSD_SOCKET=$CONTROL_SOCKET
elif [ -r /etc/rc.d/rc.gpsd.conf ]; then
. /etc/rc.d/rc.gpsd.conf
fi
if [ -n "$GPSD_OPTIONS" ]; then
export GPSD_OPTIONS
fi
if [ -n "$GPSD_SOCKET" ]; then
export GPSD_SOCKET
fi
if [ -n "$USBAUTO" ]; then
[ "$USBAUTO" = "true" ] || exit 0
fi
if [ "$ACTION" = "remove" ] ; then
if echo $DEVLINKS | grep -q /dev/gps; then
exec /lib/udev/gpsd.hotplug "$ACTION" "$DEVNAME"
fi
exit 0
fi
if [ -x /usr/bin/python ]; then
exec /lib/udev/gpsd.hotplug "$ACTION" "$DEVNAME"
fi

View file

@ -1,10 +1,10 @@
PRGNAM="gpsd"
VERSION="2.96"
VERSION="2.95"
HOMEPAGE="http://gpsd.berlios.de/"
DOWNLOAD="http://download.berlios.de/gpsd/gpsd-2.96bis.tar.gz"
MD5SUM="52b00cab0fb34bbf1923ae35c7ced6c4"
DOWNLOAD="http://download.berlios.de/gpsd/gpsd-2.95.tar.gz"
MD5SUM="12535a9ed9fecf9ea2c5bdc9840da5ae"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
MAINTAINER="David Spencer"
EMAIL="baildon.research@googlemail.com"
APPROVED="Niels Horn"
APPROVED="dsomero"

View file

@ -0,0 +1,14 @@
# /etc/rc.d/rc.gpsd.conf
# Configuration settings for gpsd
# If your GPS is on a real (non-USB) serial port, add /dev/ttyS<n> here,
# for example
# GPSD_DEVICES="/dev/gps* /dev/ttyS1"
GPSD_DEVICES="/dev/gps*"
# Command line options for the gpsd daemon, see 'man gpsd' for details.
# The most likely options that you might want to set include -b and -n.
GPSD_OPTIONS=""
# Control socket pathname. It's unlikely you'll want to change this.
GPSD_SOCKET="/var/run/gpsd.sock"

60
system/gpsd/rc.gpsd.new Normal file
View file

@ -0,0 +1,60 @@
#!/bin/sh
# /etc/rc.d/rc.gpsd
# Start/stop/restart gpsd
# Sebastian Arcus and David Spencer
#
# To enable automatic discovery of your GPS device by udev, uncomment the
# appropriate line of /etc/udev/rules.d/97-gpsd.rules
#
# Configuration options may be set in /etc/rc.d/rc.gpsd.conf
# but the defaults will usually be adequate.
gpsd_start() {
if [ ! -x /lib/udev/gpsd.hotplug.wrapper ]; then
echo "$(basename $0): /lib/udev/gpsd.hotplug.wrapper not found (or not executable); cannot start."
fi
if [ -r /etc/rc.d/rc.gpsd.conf ]; then
. /etc/rc.d/rc.gpsd.conf
fi
# Set config defaults in case the .conf file was absent or bogus
GPSD_DEVICES="${GPSD_DEVICES:-/dev/gps*}"
GPSD_OPTIONS="${GPSD_OPTIONS:-}"
GPSD_SOCKET="${GPSD_SOCKET:-/var/run/gpsd.sock}"
for DEVNAME in $GPSD_DEVICES; do
if [ -e $DEVNAME ]; then
echo "$(basename $0): Starting gpsd for $DEVNAME"
ACTION=add DEVNAME=$DEVNAME /lib/udev/gpsd.hotplug.wrapper
else
echo "$(basename $0): $DEVNAME not found, gpsd not started"
fi
done
}
gpsd_stop() {
echo "Stopping gpsd..."
killall gpsd >/dev/null 2>&1
return 0
}
case "$1" in
start)
gpsd_start
;;
stop)
gpsd_stop
;;
restart)
gpsd_stop
sleep 1
gpsd_start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac

View file

@ -8,11 +8,11 @@
|-----handy-ruler------------------------------------------------------|
gpsd: gpsd (GPS service daemon)
gpsd:
gpsd: gpsd is a service daemon that monitors one or more GPSes attached to
gpsd: a host computer through serial or USB ports, making all data on the
gpsd: location/course/velocity available to be queried on TCP port 2947
gpsd: of the host computer. With gpsd, multiple GPS client applications
gpsd: (such as navigational and wardriving software) can share access to
gpsd: gpsd is a service daemon that monitors one or more GPSes attached to
gpsd: a host computer through serial or USB ports, making all data on the
gpsd: location/course/velocity available to be queried on TCP port 2947
gpsd: of the host computer. With gpsd, multiple GPS client applications
gpsd: (such as navigational and wardriving software) can share access to
gpsd: GPSes without contention or loss of data.
gpsd:
gpsd: Homepage: http://gpsd.berlios.de/

9
system/gpsd/xgps.desktop Normal file
View file

@ -0,0 +1,9 @@
[Desktop Entry]
Name=xgps
GenericName=GPS information
Comment=Display GPS information from a gpsd daemon
Exec=xgps
Icon=/usr/share/pixmaps/gpsd-logo.png
Terminal=false
Type=Application
Categories=Utility;

View file

@ -0,0 +1,9 @@
[Desktop Entry]
Name=xgpsspeed
GenericName=GPS speedometer
Comment=Display GPS speed from a gpsd daemon
Exec=xgpsspeed
Icon=/usr/share/pixmaps/gpsd-logo.png
Terminal=false
Type=Application
Categories=Utility;