aboutsummaryrefslogtreecommitdiff
path: root/setup
diff options
context:
space:
mode:
Diffstat (limited to 'setup')
-rw-r--r--setup/default.xml452
-rw-r--r--setup/docker/Dockerfile6
-rwxr-xr-x[-rw-r--r--]setup/docker/build.sh12
-rw-r--r--setup/other/traccar.sh48
-rwxr-xr-xsetup/package.sh23
-rw-r--r--setup/traccar.iss7
-rw-r--r--setup/traccar.xml393
7 files changed, 539 insertions, 402 deletions
diff --git a/setup/default.xml b/setup/default.xml
new file mode 100644
index 000000000..ad23d7bd3
--- /dev/null
+++ b/setup/default.xml
@@ -0,0 +1,452 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'>
+
+<properties>
+
+ <!-- SERVER CONFIG -->
+
+ <entry key='web.enable'>true</entry>
+ <entry key='web.port'>8082</entry>
+ <entry key='web.path'>./web</entry>
+
+ <entry key='geocoder.enable'>true</entry>
+ <entry key='geocoder.type'>google</entry>
+
+ <entry key='logger.enable'>true</entry>
+ <entry key='logger.level'>all</entry>
+ <entry key='logger.file'>./logs/tracker-server.log</entry>
+
+ <entry key='event.enable'>true</entry>
+ <entry key='event.overspeedHandler'>true</entry>
+ <entry key='event.overspeed.notRepeat'>true</entry>
+ <entry key='event.motionHandler'>true</entry>
+ <entry key='event.geofenceHandler'>true</entry>
+ <entry key='event.alertHandler'>true</entry>
+ <entry key='event.ignitionHandler'>true</entry>
+ <entry key='event.statusHandler'>true</entry>
+ <entry key='event.maintenanceHandler'>true</entry>
+
+ <!-- DATABASE CONFIG -->
+
+ <entry key='database.ignoreUnknown'>true</entry>
+
+ <entry key='database.changelog'>./schema/changelog-master.xml</entry>
+
+ <entry key='database.selectServers'>
+ SELECT * FROM server
+ </entry>
+
+ <entry key='database.updateServer'>
+ UPDATE server SET
+ registration = :registration,
+ readonly = :readonly,
+ map = :map,
+ bingKey = :bingKey,
+ mapUrl = :mapUrl,
+ distanceUnit = :distanceUnit,
+ speedUnit = :speedUnit,
+ latitude = :latitude,
+ longitude = :longitude,
+ zoom = :zoom,
+ twelveHourFormat = :twelveHourFormat,
+ attributes = :attributes
+ WHERE id = :id
+ </entry>
+
+ <entry key='database.loginUser'>
+ SELECT * FROM users
+ WHERE email = :email
+ </entry>
+
+ <entry key='database.selectUsersAll'>
+ SELECT * FROM users
+ </entry>
+
+ <entry key='database.insertUser'>
+ INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, coordinateFormat, disabled, expirationTime, deviceLimit, token, attributes)
+ VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :coordinateFormat, :disabled, :expirationTime, :deviceLimit, :token, :attributes)
+ </entry>
+
+ <entry key='database.updateUser'>
+ UPDATE users SET
+ name = :name,
+ email = :email,
+ admin = :admin,
+ map = :map,
+ distanceUnit = :distanceUnit,
+ speedUnit = :speedUnit,
+ latitude = :latitude,
+ longitude = :longitude,
+ zoom = :zoom,
+ twelveHourFormat = :twelveHourFormat,
+ coordinateFormat = :coordinateFormat,
+ disabled = :disabled,
+ expirationTime = :expirationTime,
+ deviceLimit = :deviceLimit,
+ token = :token,
+ attributes = :attributes
+ WHERE id = :id
+ </entry>
+
+ <entry key='database.updateUserPassword'>
+ UPDATE users SET hashedPassword = :hashedPassword, salt = :salt WHERE id = :id
+ </entry>
+
+ <entry key='database.deleteUser'>
+ DELETE FROM users WHERE id = :id
+ </entry>
+
+ <entry key='database.selectDevicePermissions'>
+ SELECT userId, deviceId FROM user_device
+ </entry>
+
+ <entry key='database.selectGroupPermissions'>
+ SELECT userId, groupId FROM user_group
+ </entry>
+
+ <entry key='database.selectDevicesAll'>
+ SELECT * FROM devices
+ </entry>
+
+ <entry key='database.insertDevice'>
+ INSERT INTO devices (name, uniqueId, groupId, attributes, phone, model, contact, category)
+ VALUES (:name, :uniqueId, :groupId, :attributes, :phone, :model, :contact, :category)
+ </entry>
+
+ <entry key='database.updateDevice'>
+ UPDATE devices SET
+ name = :name,
+ uniqueId = :uniqueId,
+ groupId = :groupId,
+ attributes = :attributes,
+ phone = :phone,
+ model = :model,
+ contact = :contact,
+ category = :category
+ WHERE id = :id
+ </entry>
+
+ <entry key='database.updateDeviceStatus'>
+ UPDATE devices SET lastUpdate = :lastUpdate WHERE id = :id
+ </entry>
+
+ <entry key='database.deleteDevice'>
+ DELETE FROM devices WHERE id = :id
+ </entry>
+
+ <entry key='database.linkDevice'>
+ INSERT INTO user_device (userId, deviceId) VALUES (:userId, :deviceId)
+ </entry>
+
+ <entry key='database.unlinkDevice'>
+ DELETE FROM user_device WHERE userId = :userId AND deviceId = :deviceId
+ </entry>
+
+ <entry key='database.selectGroupsAll'>
+ SELECT * FROM groups
+ </entry>
+
+ <entry key='database.insertGroup'>
+ INSERT INTO groups (name, groupId, attributes) VALUES (:name, :groupId, :attributes)
+ </entry>
+
+ <entry key='database.updateGroup'>
+ UPDATE groups SET name = :name, groupId = :groupId, attributes = :attributes WHERE id = :id
+ </entry>
+
+ <entry key='database.deleteGroup'>
+ DELETE FROM groups WHERE id = :id
+ </entry>
+
+ <entry key='database.linkGroup'>
+ INSERT INTO user_group (userId, groupId) VALUES (:userId, :groupId)
+ </entry>
+
+ <entry key='database.unlinkGroup'>
+ DELETE FROM user_group WHERE userId = :userId AND groupId = :groupId
+ </entry>
+
+ <entry key='database.selectPositions'>
+ SELECT * FROM positions WHERE deviceId = :deviceId AND fixTime BETWEEN :from AND :to ORDER BY fixTime
+ </entry>
+
+ <entry key='database.selectPosition'>
+ SELECT * FROM positions WHERE id = :id
+ </entry>
+
+ <entry key='database.insertPosition'>
+ INSERT INTO positions (deviceId, protocol, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, attributes)
+ VALUES (:deviceId, :protocol, :now, :deviceTime, :fixTime, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :attributes)
+ </entry>
+
+ <entry key='database.selectLatestPositions'>
+ SELECT * FROM positions WHERE id IN (SELECT positionId FROM devices)
+ </entry>
+
+ <entry key='database.updateLatestPosition'>
+ UPDATE devices SET positionId = :id WHERE id = :deviceId
+ </entry>
+
+ <entry key='database.selectEvent'>
+ SELECT * FROM events WHERE id = :id
+ </entry>
+
+ <entry key='database.insertEvent'>
+ INSERT INTO events (type, serverTime, deviceId, positionId, geofenceId, attributes)
+ VALUES (:type, :serverTime, :deviceId, :positionId, :geofenceId, :attributes)
+ </entry>
+
+ <entry key='database.selectEvents'>
+ SELECT * FROM events WHERE deviceId = :deviceId AND serverTime BETWEEN :from AND :to ORDER BY serverTime
+ </entry>
+
+ <entry key='database.selectGeofencesAll'>
+ SELECT * FROM geofences
+ </entry>
+
+ <entry key='database.insertGeofence'>
+ INSERT INTO geofences (name, description, area, attributes)
+ VALUES (:name, :description, :area, :attributes)
+ </entry>
+
+ <entry key='database.updateGeofence'>
+ UPDATE geofences SET
+ name = :name,
+ description = :description,
+ area = :area,
+ attributes = :attributes
+ WHERE id = :id
+ </entry>
+
+ <entry key='database.deleteGeofence'>
+ DELETE FROM geofences WHERE id = :id
+ </entry>
+
+ <entry key='database.selectGeofencePermissions'>
+ SELECT userId, geofenceId FROM user_geofence
+ </entry>
+
+ <entry key='database.linkGeofence'>
+ INSERT INTO user_geofence (userId, geofenceId) VALUES (:userId, :geofenceId)
+ </entry>
+
+ <entry key='database.unlinkGeofence'>
+ DELETE FROM user_geofence WHERE userId = :userId AND geofenceId = :geofenceId
+ </entry>
+
+ <entry key='database.selectGroupGeofences'>
+ SELECT groupId, geofenceId FROM group_geofence
+ </entry>
+
+ <entry key='database.linkGroupGeofence'>
+ INSERT INTO group_geofence (groupId, geofenceId) VALUES (:groupId, :geofenceId)
+ </entry>
+
+ <entry key='database.unlinkGroupGeofence'>
+ DELETE FROM group_geofence WHERE groupId = :groupId AND geofenceId = :geofenceId
+ </entry>
+
+ <entry key='database.selectDeviceGeofences'>
+ SELECT deviceId, geofenceId FROM device_geofence
+ </entry>
+
+ <entry key='database.linkDeviceGeofence'>
+ INSERT INTO device_geofence (deviceId, geofenceId) VALUES (:deviceId, :geofenceId)
+ </entry>
+
+ <entry key='database.unlinkDeviceGeofence'>
+ DELETE FROM device_geofence WHERE deviceId = :deviceId AND geofenceId = :geofenceId
+ </entry>
+
+ <entry key='database.selectNotifications'>
+ SELECT * FROM notifications
+ </entry>
+
+ <entry key='database.insertNotification'>
+ INSERT INTO notifications (userId, type, web, mail, attributes)
+ VALUES (:userId, :type, :web, :mail, :attributes)
+ </entry>
+
+ <entry key='database.updateNotification'>
+ UPDATE notifications SET
+ userId = :userId,
+ type = :type,
+ web = :web,
+ mail = :mail,
+ attributes = :attributes
+ WHERE id = :id
+ </entry>
+
+ <entry key='database.deleteNotification'>
+ DELETE FROM notifications WHERE id = :id
+ </entry>
+
+ <entry key='database.deletePositions'>
+ DELETE FROM positions WHERE serverTime &lt; :serverTime AND id NOT IN (SELECT positionId FROM devices)
+ </entry>
+
+ <entry key='database.selectAttributeAliases'>
+ SELECT * FROM attribute_aliases
+ </entry>
+
+ <entry key='database.insertAttributeAlias'>
+ INSERT INTO attribute_aliases (deviceId, attribute, alias)
+ VALUES (:deviceId, :attribute, :alias)
+ </entry>
+
+ <entry key='database.updateAttributeAlias'>
+ UPDATE attribute_aliases SET
+ deviceId = :deviceId,
+ attribute = :attribute,
+ alias = :alias
+ WHERE id = :id
+ </entry>
+
+ <entry key='database.deleteAttributeAlias'>
+ DELETE FROM attribute_aliases WHERE id = :id
+ </entry>
+
+ <entry key='database.selectStatistics'>
+ SELECT * FROM statistics WHERE captureTime BETWEEN :from AND :to ORDER BY captureTime
+ </entry>
+
+ <entry key='database.insertStatistics'>
+ INSERT INTO statistics (captureTime, activeUsers, activeDevices, requests, messagesReceived, messagesStored, attributes)
+ VALUES (:captureTime, :activeUsers, :activeDevices, :requests, :messagesReceived, :messagesStored, :attributes)
+ </entry>
+
+ <!-- PROTOCOL CONFIG -->
+
+ <entry key='gps103.port'>5001</entry>
+ <entry key='tk103.port'>5002</entry>
+ <entry key='gl100.port'>5003</entry>
+ <entry key='gl200.port'>5004</entry>
+ <entry key='t55.port'>5005</entry>
+ <entry key='xexun.port'>5006</entry>
+ <entry key='xexun.extended'>false</entry>
+ <entry key='totem.port'>5007</entry>
+ <entry key='enfora.port'>5008</entry>
+ <entry key='meiligao.port'>5009</entry>
+ <entry key='trv.port'>5010</entry>
+ <entry key='suntech.port'>5011</entry>
+ <entry key='progress.port'>5012</entry>
+ <entry key='h02.port'>5013</entry>
+ <entry key='jt600.port'>5014</entry>
+ <entry key='huabao.port'>5015</entry>
+ <entry key='v680.port'>5016</entry>
+ <entry key='pt502.port'>5017</entry>
+ <entry key='tr20.port'>5018</entry>
+ <entry key='navis.port'>5019</entry>
+ <entry key='meitrack.port'>5020</entry>
+ <entry key='skypatrol.port'>5021</entry>
+ <entry key='gt02.port'>5022</entry>
+ <entry key='gt06.port'>5023</entry>
+ <entry key='megastek.port'>5024</entry>
+ <entry key='navigil.port'>5025</entry>
+ <entry key='gpsgate.port'>5026</entry>
+ <entry key='teltonika.port'>5027</entry>
+ <entry key='mta6.port'>5028</entry>
+ <entry key='tzone.port'>5029</entry>
+ <entry key='tlt2h.port'>5030</entry>
+ <entry key='taip.port'>5031</entry>
+ <entry key='wondex.port'>5032</entry>
+ <entry key='cellocator.port'>5033</entry>
+ <entry key='galileo.port'>5034</entry>
+ <entry key='ywt.port'>5035</entry>
+ <entry key='tk102.port'>5036</entry>
+ <entry key='intellitrac.port'>5037</entry>
+ <entry key='gpsmta.port'>5038</entry>
+ <entry key='wialon.port'>5039</entry>
+ <entry key='carscop.port'>5040</entry>
+ <entry key='apel.port'>5041</entry>
+ <entry key='manpower.port'>5042</entry>
+ <entry key='globalsat.port'>5043</entry>
+ <entry key='atrack.port'>5044</entry>
+ <entry key='pt3000.port'>5045</entry>
+ <entry key='ruptela.port'>5046</entry>
+ <entry key='topflytech.port'>5047</entry>
+ <entry key='laipac.port'>5048</entry>
+ <entry key='aplicom.port'>5049</entry>
+ <entry key='gotop.port'>5050</entry>
+ <entry key='sanav.port'>5051</entry>
+ <entry key='gator.port'>5052</entry>
+ <entry key='noran.port'>5053</entry>
+ <entry key='m2m.port'>5054</entry>
+ <entry key='osmand.port'>5055</entry>
+ <entry key='easytrack.port'>5056</entry>
+ <entry key='gpsmarker.port'>5057</entry>
+ <entry key='khd.port'>5058</entry>
+ <entry key='piligrim.port'>5059</entry>
+ <entry key='stl060.port'>5060</entry>
+ <entry key='cartrack.port'>5061</entry>
+ <entry key='minifinder.port'>5062</entry>
+ <entry key='haicom.port'>5063</entry>
+ <entry key='eelink.port'>5064</entry>
+ <entry key='box.port'>5065</entry>
+ <entry key='freedom.port'>5066</entry>
+ <entry key='telic.port'>5067</entry>
+ <entry key='trackbox.port'>5068</entry>
+ <entry key='visiontek.port'>5069</entry>
+ <entry key='orion.port'>5070</entry>
+ <entry key='riti.port'>5071</entry>
+ <entry key='ulbotech.port'>5072</entry>
+ <entry key='tramigo.port'>5073</entry>
+ <entry key='tr900.port'>5074</entry>
+ <entry key='ardi01.port'>5075</entry>
+ <entry key='xt013.port'>5076</entry>
+ <entry key='autofon.port'>5077</entry>
+ <entry key='gosafe.port'>5078</entry>
+ <entry key='tt8850.port'>5079</entry>
+ <entry key='bce.port'>5080</entry>
+ <entry key='xirgo.port'>5081</entry>
+ <entry key='calamp.port'>5082</entry>
+ <entry key='mtx.port'>5083</entry>
+ <entry key='tytan.port'>5084</entry>
+ <entry key='avl301.port'>5085</entry>
+ <entry key='castel.port'>5086</entry>
+ <entry key='mxt.port'>5087</entry>
+ <entry key='cityeasy.port'>5088</entry>
+ <entry key='aquila.port'>5089</entry>
+ <entry key='flextrack.port'>5090</entry>
+ <entry key='blackkite.port'>5091</entry>
+ <entry key='adm.port'>5092</entry>
+ <entry key='watch.port'>5093</entry>
+ <entry key='t800x.port'>5094</entry>
+ <entry key='upro.port'>5095</entry>
+ <entry key='auro.port'>5096</entry>
+ <entry key='disha.port'>5097</entry>
+ <entry key='thinkrace.port'>5098</entry>
+ <entry key='pathaway.port'>5099</entry>
+ <entry key='arnavi.port'>5100</entry>
+ <entry key='nvs.port'>5101</entry>
+ <entry key='kenji.port'>5102</entry>
+ <entry key='astra.port'>5103</entry>
+ <entry key='homtecs.port'>5104</entry>
+ <entry key='fox.port'>5105</entry>
+ <entry key='gnx.port'>5106</entry>
+ <entry key='arknav.port'>5107</entry>
+ <entry key='supermate.port'>5108</entry>
+ <entry key='appello.port'>5109</entry>
+ <entry key='idpl.port'>5110</entry>
+ <entry key='huasheng.port'>5111</entry>
+ <entry key='l100.port'>5112</entry>
+ <entry key='granit.port'>5113</entry>
+ <entry key='carcell.port'>5114</entry>
+ <entry key='obddongle.port'>5115</entry>
+ <entry key='hunterpro.port'>5116</entry>
+ <entry key='raveon.port'>5117</entry>
+ <entry key='cradlepoint.port'>5118</entry>
+ <entry key='arknavx8.port'>5119</entry>
+ <entry key='autograde.port'>5120</entry>
+ <entry key='oigo.port'>5121</entry>
+ <entry key='jpkorjar.port'>5122</entry>
+ <entry key='cguard.port'>5123</entry>
+ <entry key='fifotrack.port'>5124</entry>
+ <entry key='smokey.port'>5125</entry>
+ <entry key='extremtrac.port'>5126</entry>
+ <entry key='trakmate.port'>5127</entry>
+ <entry key='at2000.port'>5128</entry>
+ <entry key='maestro.port'>5129</entry>
+
+</properties>
diff --git a/setup/docker/Dockerfile b/setup/docker/Dockerfile
index a39cad79c..d86b078c1 100644
--- a/setup/docker/Dockerfile
+++ b/setup/docker/Dockerfile
@@ -2,6 +2,8 @@ FROM java:8-alpine
MAINTAINER Danilo Recchia <danilo.recchia@vortus.solutions>
+USER root
+
RUN apk upgrade --update && \
apk add --update curl bash && \
rm -rf /var/cache/apk/* && \
@@ -11,7 +13,9 @@ RUN apk upgrade --update && \
ENV JAVA_OPTS -Xms256m -Xmx1024m
COPY ./tmp/traccar.xml /opt/traccar/traccar.xml
+COPY ./tmp/default.xml /opt/traccar/conf/default.xml
COPY ./tmp/schema /opt/traccar/schema
+COPY ./tmp/templates /opt/traccar/templates
COPY ./tmp/web /opt/traccar/web
COPY ./tmp/lib /opt/traccar/lib
COPY ./tmp/traccar-server.jar /opt/traccar/traccar-server.jar
@@ -21,4 +25,4 @@ EXPOSE 5000-5150
WORKDIR /opt/traccar
-ENTRYPOINT ["java","-jar","traccar-server.jar","traccar.xml"] \ No newline at end of file
+ENTRYPOINT ["java","-jar","traccar-server.jar","traccar.xml"]
diff --git a/setup/docker/build.sh b/setup/docker/build.sh
index 31ee60a03..eedc633bc 100644..100755
--- a/setup/docker/build.sh
+++ b/setup/docker/build.sh
@@ -13,12 +13,18 @@ tmp="./setup/docker/tmp"
mkdir -p ${tmp}
-cat ./setup/unix/traccar.xml | awk '/web.path/ && !modif { printf(" <entry key=\"web.debug\">true</entry>\n"); modif=1 } {print}' > ${tmp}/traccar.xml
+cat ./setup/traccar.xml | awk '/config.default/ && !modif { print;printf(" <entry key=\"web.debug\">true</entry>\n");next; modif=1 } {print}' > ${tmp}/traccar.xml
+cp -rf ./setup/default.xml ${tmp}
cp -rf ./schema ${tmp}/schema
+cp -rf ./templates ${tmp}/templates
cp -rf ./target/tracker-server.jar ${tmp}/traccar-server.jar
cp -rf ./target/lib ${tmp}/lib
-cp -rf ./web ${tmp}/web
+if [ -d ./traccar-web/web ]; then
+ cp -rf ./traccar-web/web ${tmp}/web
+else
+ mkdir ${tmp}/web
+fi
docker build -t ${company}/${software}:${version} ./setup/docker/
-rm -rf ${tmp} \ No newline at end of file
+rm -rf ${tmp}
diff --git a/setup/other/traccar.sh b/setup/other/traccar.sh
new file mode 100644
index 000000000..fdf1b78e4
--- /dev/null
+++ b/setup/other/traccar.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+#service traccar server for universal version
+#e.g. ./traccar.sh start
+#e.g. ./traccar.sh stop
+#e.g. ./traccar.sh restart
+
+SERVICE_NAME=traccar
+PATH_TO_JAR=tracker-server.jar
+PATH_TO_CONF=conf/traccar.xml
+PID_PATH_NAME=/tmp/traccar-pid
+case $1 in
+ start)
+ echo "Starting $SERVICE_NAME ..."
+ if [ ! -f $PID_PATH_NAME ]; then
+ nohup java -jar $PATH_TO_JAR $PATH_TO_CONF /tmp 2>> /dev/null >> /dev/null &
+ echo $! > $PID_PATH_NAME
+ echo "$SERVICE_NAME started ..."
+ else
+ echo "$SERVICE_NAME is already running ..."
+ fi
+ ;;
+ stop)
+ if [ -f $PID_PATH_NAME ]; then
+ PID=$(cat $PID_PATH_NAME);
+ echo "$SERVICE_NAME stoping ..."
+ kill $PID;
+ echo "$SERVICE_NAME stopped ..."
+ rm $PID_PATH_NAME
+ else
+ echo "$SERVICE_NAME is not running ..."
+ fi
+ ;;
+ restart)
+ if [ -f $PID_PATH_NAME ]; then
+ PID=$(cat $PID_PATH_NAME);
+ echo "$SERVICE_NAME stopping ...";
+ kill $PID;
+ echo "$SERVICE_NAME stopped ...";
+ rm $PID_PATH_NAME
+ echo "$SERVICE_NAME starting ..."
+ nohup java -jar $PATH_TO_JAR $PATH_TO_CONF /tmp 2>> /dev/null >> /dev/null &
+ echo $! > $PID_PATH_NAME
+ echo "$SERVICE_NAME started ..."
+ else
+ echo "$SERVICE_NAME is not running ..."
+ fi
+ ;;
+esac
diff --git a/setup/package.sh b/setup/package.sh
index acbac434b..a6b54717d 100755
--- a/setup/package.sh
+++ b/setup/package.sh
@@ -23,18 +23,19 @@ check_requirement () {
}
check_requirement "ls ../../ext-6.0.1" "Missing ../../ext-6.0.1 (https://www.sencha.com/legal/GPL/)"
-check_requirement "ls yajsw-*.zip" "Missing yajsw-*.zip (http://yajsw.sourceforge.net/)"
+check_requirement "ls yajsw-*.zip" "Missing yajsw-*.zip (https://sourceforge.net/projects/yajsw/files/)"
check_requirement "ls innosetup-*.exe" "Missing isetup-*.exe (http://www.jrsoftware.org/isdl.php)"
check_requirement "which sencha" "Missing sencha cmd package (https://www.sencha.com/products/extjs/cmd-download/)"
check_requirement "which wine" "Missing wine package"
check_requirement "which innoextract" "Missing innoextract package"
check_requirement "which makeself" "Missing makeself package"
+check_requirement "which dos2unix" "Missing dos2unix package"
prepare () {
unzip yajsw-*.zip
mv yajsw-*/ yajsw/
- ../web/../tools/minify.sh
+ ../traccar-web/tools/minify.sh
innoextract innosetup-*.exe
echo "If you got any errors here try isetup version 5.5.5 (or check supported versions using 'innoextract -v')"
@@ -43,7 +44,7 @@ prepare () {
cleanup () {
rm -r yajsw/
- rm ../web/app.min.js
+ rm ../traccar-web/web/app.min.js
rm -r app/
}
@@ -70,12 +71,10 @@ copy_wrapper () {
echo "wrapper.ntservice.name=traccar" >> out/conf/wrapper.conf
echo "wrapper.ntservice.displayname=Traccar" >> out/conf/wrapper.conf
echo "wrapper.ntservice.description=Traccar" >> out/conf/wrapper.conf
+ echo "wrapper.daemon.run_level_dir=\${if (new File('/etc/rc0.d').exists()) return '/etc/rcX.d' else return '/etc/init.d/rcX.d'}" >> out/conf/wrapper.conf
- cp -r yajsw/lib/core out/lib
- rm out/lib/core/ReadMe.txt
-
- cp -r yajsw/lib/extended out/lib
- rm out/lib/extended/ReadMe.txt
+ cp -r yajsw/lib/* out/lib
+ find out/lib -type f -name ReadMe.txt -exec rm -f {} \;
cp yajsw/templates/* out/templates
@@ -91,7 +90,9 @@ copy_files () {
cp ../target/tracker-server.jar out
cp ../target/lib/* out/lib
cp ../schema/* out/schema
- cp -r ../web/* out/web
+ cp -r ../templates/* out/templates
+ cp -r ../traccar-web/web/* out/web
+ cp default.xml out/conf
cp traccar.xml out/conf
}
@@ -114,6 +115,7 @@ package_unix () {
mkdir -p out/{bin,conf,data,lib,logs,web,schema,templates}
copy_wrapper "bin"
+ find out -type f \( -name \*.sh -o -name \*.vm \) -print0 | xargs -0 dos2unix
copy_files
makeself out traccar.run "traccar" "\
@@ -145,7 +147,8 @@ package_universal () {
copy_files
cp README.txt out
-
+ cp other/traccar.sh out
+
cd out
zip -r ../traccar-other-$VERSION.zip *
cd ..
diff --git a/setup/traccar.iss b/setup/traccar.iss
index 6858a1152..87c2e2fba 100644
--- a/setup/traccar.iss
+++ b/setup/traccar.iss
@@ -1,9 +1,10 @@
[Setup]
AppName=Traccar
-AppVersion=3.7
+AppVersion=3.8
DefaultDirName={pf}\Traccar
AlwaysRestart=yes
OutputBaseFilename=traccar-setup
+ArchitecturesInstallIn64BitMode=x64
[Dirs]
Name: "{app}\bat"
@@ -19,10 +20,10 @@ Name: "{app}\templates"
Source: "out\*"; DestDir: "{app}"; Flags: recursesubdirs
[Run]
-Filename: "{app}\bat\installService.bat"
+Filename: "{app}\bat\installService.bat"; Parameters: ">%TEMP%\installService.log 2>&1"; Flags: runhidden
[UninstallRun]
-Filename: "{app}\bat\uninstallService.bat"
+Filename: "{app}\bat\uninstallService.bat"; Parameters: ">%TEMP%\uninstallService.log 2>&1"; Flags: runhidden
[Code]
function GetLocalMachine(): Integer;
diff --git a/setup/traccar.xml b/setup/traccar.xml
index ccdc5b745..61e23a066 100644
--- a/setup/traccar.xml
+++ b/setup/traccar.xml
@@ -4,400 +4,23 @@
<properties>
- <!-- SERVER CONFIG -->
+ <!--
- <entry key='web.enable'>true</entry>
- <entry key='web.port'>8082</entry>
- <entry key='web.path'>./web</entry>
+ This is the main configuration file. All your configuration parameters should be placed in this file.
- <entry key='geocoder.enable'>true</entry>
- <entry key='geocoder.type'>google</entry>
+ Default configuration parameters are located in the "default.xml" file. You should not modify it to avoid issues
+ with upgrading to a new version. Parameters in the main config file override values in the default file. Do not
+ remove "config.default" parameter from this file unless you know what you are doing.
- <entry key='logger.enable'>true</entry>
- <entry key='logger.level'>all</entry>
- <entry key='logger.file'>./logs/tracker-server.log</entry>
+ For list of available parameters see following page: https://www.traccar.org/configuration-file/
- <entry key='event.enable'>true</entry>
- <entry key='event.overspeedHandler'>true</entry>
- <entry key='event.overspeed.notRepeat'>true</entry>
- <entry key='event.motionHandler'>true</entry>
- <entry key='event.geofenceHandler'>true</entry>
- <entry key='event.alertHandler'>true</entry>
- <entry key='event.ignitionHandler'>true</entry>
+ -->
- <!-- DATABASE CONFIG -->
+ <entry key="config.default">./conf/default.xml</entry>
<entry key='database.driver'>org.h2.Driver</entry>
<entry key='database.url'>jdbc:h2:./data/database</entry>
<entry key='database.user'>sa</entry>
<entry key='database.password'></entry>
- <entry key='database.ignoreUnknown'>true</entry>
-
- <entry key='database.changelog'>./schema/changelog-master.xml</entry>
-
- <entry key='database.selectServers'>
- SELECT * FROM server;
- </entry>
-
- <entry key='database.updateServer'>
- UPDATE server SET
- registration = :registration,
- readonly = :readonly,
- map = :map,
- bingKey = :bingKey,
- mapUrl = :mapUrl,
- distanceUnit = :distanceUnit,
- speedUnit = :speedUnit,
- latitude = :latitude,
- longitude = :longitude,
- zoom = :zoom,
- twelveHourFormat = :twelveHourFormat,
- attributes = :attributes
- WHERE id = :id;
- </entry>
-
- <entry key='database.loginUser'>
- SELECT * FROM users
- WHERE email = :email;
- </entry>
-
- <entry key='database.selectUser'>
- SELECT * FROM users
- WHERE id = :id;
- </entry>
-
- <entry key='database.selectUsersAll'>
- SELECT * FROM users;
- </entry>
-
- <entry key='database.insertUser'>
- INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, attributes)
- VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :attributes);
- </entry>
-
- <entry key='database.updateUser'>
- UPDATE users SET
- name = :name,
- email = :email,
- admin = :admin,
- map = :map,
- distanceUnit = :distanceUnit,
- speedUnit = :speedUnit,
- latitude = :latitude,
- longitude = :longitude,
- zoom = :zoom,
- twelveHourFormat = :twelveHourFormat,
- attributes = :attributes
- WHERE id = :id;
- </entry>
-
- <entry key='database.updateUserPassword'>
- UPDATE users SET hashedPassword = :hashedPassword, salt = :salt WHERE id = :id;
- </entry>
-
- <entry key='database.deleteUser'>
- DELETE FROM users WHERE id = :id;
- </entry>
-
- <entry key='database.selectDevicePermissions'>
- SELECT userId, deviceId FROM user_device;
- </entry>
-
- <entry key='database.selectGroupPermissions'>
- SELECT userId, groupId FROM user_group;
- </entry>
-
- <entry key='database.selectDevicesAll'>
- SELECT * FROM devices;
- </entry>
-
- <entry key='database.insertDevice'>
- INSERT INTO devices (name, uniqueId, groupId, attributes) VALUES (:name, :uniqueId, :groupId, :attributes);
- </entry>
-
- <entry key='database.updateDevice'>
- UPDATE devices SET name = :name, uniqueId = :uniqueId, groupId = :groupId, attributes = :attributes WHERE id = :id;
- </entry>
-
- <entry key='database.updateDeviceStatus'>
- UPDATE devices SET lastUpdate = :lastUpdate WHERE id = :id;
- </entry>
-
- <entry key='database.deleteDevice'>
- DELETE FROM devices WHERE id = :id;
- </entry>
-
- <entry key='database.linkDevice'>
- INSERT INTO user_device (userId, deviceId) VALUES (:userId, :deviceId);
- </entry>
-
- <entry key='database.unlinkDevice'>
- DELETE FROM user_device WHERE userId = :userId AND deviceId = :deviceId;
- </entry>
-
- <entry key='database.selectGroupsAll'>
- SELECT * FROM groups;
- </entry>
-
- <entry key='database.insertGroup'>
- INSERT INTO groups (name, groupId, attributes) VALUES (:name, :groupId, :attributes);
- </entry>
-
- <entry key='database.updateGroup'>
- UPDATE groups SET name = :name, groupId = :groupId, attributes = :attributes WHERE id = :id;
- </entry>
-
- <entry key='database.deleteGroup'>
- DELETE FROM groups WHERE id = :id;
- </entry>
-
- <entry key='database.linkGroup'>
- INSERT INTO user_group (userId, groupId) VALUES (:userId, :groupId);
- </entry>
-
- <entry key='database.unlinkGroup'>
- DELETE FROM user_group WHERE userId = :userId AND groupId = :groupId;
- </entry>
-
- <entry key='database.selectPositions'>
- SELECT * FROM positions WHERE deviceId = :deviceId AND fixTime BETWEEN :from AND :to ORDER BY fixTime;
- </entry>
-
- <entry key='database.insertPosition'>
- INSERT INTO positions (deviceId, protocol, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, attributes)
- VALUES (:deviceId, :protocol, :now, :deviceTime, :fixTime, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :attributes);
- </entry>
-
- <entry key='database.selectLatestPositions'>
- SELECT * FROM positions WHERE id IN (SELECT positionId FROM devices);
- </entry>
-
- <entry key='database.updateLatestPosition'>
- UPDATE devices SET positionId = :id WHERE id = :deviceId;
- </entry>
-
- <entry key='database.selectEvent'>
- SELECT * FROM events WHERE id = :id;
- </entry>
-
- <entry key='database.insertEvent'>
- INSERT INTO events (type, serverTime, deviceId, positionId, geofenceId, attributes)
- VALUES (:type, :serverTime, :deviceId, :positionId, :geofenceId, :attributes);
- </entry>
-
- <entry key='database.selectEvents'>
- SELECT * FROM events WHERE deviceId = :deviceId AND type LIKE :type AND serverTime BETWEEN :from AND :to ORDER BY serverTime DESC;
- </entry>
-
- <entry key='database.selectGeofence'>
- SELECT * FROM geofences
- WHERE id = :id;
- </entry>
-
- <entry key='database.selectGeofencesAll'>
- SELECT * FROM geofences;
- </entry>
-
- <entry key='database.insertGeofence'>
- INSERT INTO geofences (name, description, area, attributes)
- VALUES (:name, :description, :area, :attributes);
- </entry>
-
- <entry key='database.updateGeofence'>
- UPDATE geofences SET
- name = :name,
- description = :description,
- area = :area,
- attributes = :attributes
- WHERE id = :id;
- </entry>
-
- <entry key='database.deleteGeofence'>
- DELETE FROM geofences WHERE id = :id;
- </entry>
-
- <entry key='database.selectGeofencePermissions'>
- SELECT userId, geofenceId FROM user_geofence;
- </entry>
-
- <entry key='database.linkGeofence'>
- INSERT INTO user_geofence (userId, geofenceId) VALUES (:userId, :geofenceId);
- </entry>
-
- <entry key='database.unlinkGeofence'>
- DELETE FROM user_geofence WHERE userId = :userId AND geofenceId = :geofenceId;
- </entry>
-
- <entry key='database.selectGroupGeofences'>
- SELECT groupId, geofenceId FROM group_geofence;
- </entry>
-
- <entry key='database.linkGroupGeofence'>
- INSERT INTO group_geofence (groupId, geofenceId) VALUES (:groupId, :geofenceId);
- </entry>
-
- <entry key='database.unlinkGroupGeofence'>
- DELETE FROM group_geofence WHERE groupId = :groupId AND geofenceId = :geofenceId;
- </entry>
-
- <entry key='database.selectDeviceGeofences'>
- SELECT deviceId, geofenceId FROM device_geofence;
- </entry>
-
- <entry key='database.linkDeviceGeofence'>
- INSERT INTO device_geofence (deviceId, geofenceId) VALUES (:deviceId, :geofenceId);
- </entry>
-
- <entry key='database.unlinkDeviceGeofence'>
- DELETE FROM device_geofence WHERE deviceId = :deviceId AND geofenceId = :geofenceId;
- </entry>
-
- <entry key='database.selectNotifications'>
- SELECT * FROM notifications;
- </entry>
-
- <entry key='database.insertNotification'>
- INSERT INTO notifications (userId, type, attributes)
- VALUES (:userId, :type, :attributes);
- </entry>
-
- <entry key='database.updateNotification'>
- UPDATE notifications SET
- userId = :userId,
- type = :type,
- attributes = :attributes
- WHERE id = :id;
- </entry>
-
- <entry key='database.deleteNotification'>
- DELETE FROM notifications WHERE id = :id;
- </entry>
-
- <entry key='database.deletePositions'>
- DELETE FROM positions WHERE serverTime &lt; :serverTime AND id NOT IN (SELECT positionId FROM devices);
- </entry>
-
- <!-- PROTOCOL CONFIG -->
-
- <entry key='gps103.port'>5001</entry>
- <entry key='tk103.port'>5002</entry>
- <entry key='gl100.port'>5003</entry>
- <entry key='gl200.port'>5004</entry>
- <entry key='t55.port'>5005</entry>
- <entry key='xexun.port'>5006</entry>
- <entry key='xexun.extended'>false</entry>
- <entry key='totem.port'>5007</entry>
- <entry key='enfora.port'>5008</entry>
- <entry key='meiligao.port'>5009</entry>
- <entry key='trv.port'>5010</entry>
- <entry key='suntech.port'>5011</entry>
- <entry key='progress.port'>5012</entry>
- <entry key='h02.port'>5013</entry>
- <entry key='jt600.port'>5014</entry>
- <entry key='huabao.port'>5015</entry>
- <entry key='v680.port'>5016</entry>
- <entry key='pt502.port'>5017</entry>
- <entry key='tr20.port'>5018</entry>
- <entry key='navis.port'>5019</entry>
- <entry key='meitrack.port'>5020</entry>
- <entry key='skypatrol.port'>5021</entry>
- <entry key='gt02.port'>5022</entry>
- <entry key='gt06.port'>5023</entry>
- <entry key='megastek.port'>5024</entry>
- <entry key='navigil.port'>5025</entry>
- <entry key='gpsgate.port'>5026</entry>
- <entry key='teltonika.port'>5027</entry>
- <entry key='mta6.port'>5028</entry>
- <entry key='tzone.port'>5029</entry>
- <entry key='tlt2h.port'>5030</entry>
- <entry key='taip.port'>5031</entry>
- <entry key='wondex.port'>5032</entry>
- <entry key='cellocator.port'>5033</entry>
- <entry key='galileo.port'>5034</entry>
- <entry key='ywt.port'>5035</entry>
- <entry key='tk102.port'>5036</entry>
- <entry key='intellitrac.port'>5037</entry>
- <entry key='gpsmta.port'>5038</entry>
- <entry key='wialon.port'>5039</entry>
- <entry key='carscop.port'>5040</entry>
- <entry key='apel.port'>5041</entry>
- <entry key='manpower.port'>5042</entry>
- <entry key='globalsat.port'>5043</entry>
- <entry key='atrack.port'>5044</entry>
- <entry key='pt3000.port'>5045</entry>
- <entry key='ruptela.port'>5046</entry>
- <entry key='topflytech.port'>5047</entry>
- <entry key='laipac.port'>5048</entry>
- <entry key='aplicom.port'>5049</entry>
- <entry key='gotop.port'>5050</entry>
- <entry key='sanav.port'>5051</entry>
- <entry key='gator.port'>5052</entry>
- <entry key='noran.port'>5053</entry>
- <entry key='m2m.port'>5054</entry>
- <entry key='osmand.port'>5055</entry>
- <entry key='easytrack.port'>5056</entry>
- <entry key='gpsmarker.port'>5057</entry>
- <entry key='khd.port'>5058</entry>
- <entry key='piligrim.port'>5059</entry>
- <entry key='stl060.port'>5060</entry>
- <entry key='cartrack.port'>5061</entry>
- <entry key='minifinder.port'>5062</entry>
- <entry key='haicom.port'>5063</entry>
- <entry key='eelink.port'>5064</entry>
- <entry key='box.port'>5065</entry>
- <entry key='freedom.port'>5066</entry>
- <entry key='telic.port'>5067</entry>
- <entry key='trackbox.port'>5068</entry>
- <entry key='visiontek.port'>5069</entry>
- <entry key='orion.port'>5070</entry>
- <entry key='riti.port'>5071</entry>
- <entry key='ulbotech.port'>5072</entry>
- <entry key='tramigo.port'>5073</entry>
- <entry key='tr900.port'>5074</entry>
- <entry key='ardi01.port'>5075</entry>
- <entry key='xt013.port'>5076</entry>
- <entry key='autofon.port'>5077</entry>
- <entry key='gosafe.port'>5078</entry>
- <entry key='tt8850.port'>5079</entry>
- <entry key='bce.port'>5080</entry>
- <entry key='xirgo.port'>5081</entry>
- <entry key='calamp.port'>5082</entry>
- <entry key='mtx.port'>5083</entry>
- <entry key='tytan.port'>5084</entry>
- <entry key='avl301.port'>5085</entry>
- <entry key='castel.port'>5086</entry>
- <entry key='mxt.port'>5087</entry>
- <entry key='cityeasy.port'>5088</entry>
- <entry key='aquila.port'>5089</entry>
- <entry key='flextrack.port'>5090</entry>
- <entry key='blackkite.port'>5091</entry>
- <entry key='adm.port'>5092</entry>
- <entry key='watch.port'>5093</entry>
- <entry key='t800x.port'>5094</entry>
- <entry key='upro.port'>5095</entry>
- <entry key='auro.port'>5096</entry>
- <entry key='disha.port'>5097</entry>
- <entry key='thinkrace.port'>5098</entry>
- <entry key='pathaway.port'>5099</entry>
- <entry key='arnavi.port'>5100</entry>
- <entry key='nvs.port'>5101</entry>
- <entry key='kenji.port'>5102</entry>
- <entry key='astra.port'>5103</entry>
- <entry key='homtecs.port'>5104</entry>
- <entry key='fox.port'>5105</entry>
- <entry key='gnx.port'>5106</entry>
- <entry key='arknav.port'>5107</entry>
- <entry key='supermate.port'>5108</entry>
- <entry key='appello.port'>5109</entry>
- <entry key='idpl.port'>5110</entry>
- <entry key='huasheng.port'>5111</entry>
- <entry key='l100.port'>5112</entry>
- <entry key='granit.port'>5113</entry>
- <entry key='carcell.port'>5114</entry>
- <entry key='obddongle.port'>5115</entry>
- <entry key='hunterpro.port'>5116</entry>
- <entry key='raveon.port'>5117</entry>
- <entry key='cradlepoint.port'>5118</entry>
-
</properties>