This is the server component of owntracks, an application to record locations and routes from a mobile client. See: https://owntracks.org/
This is my first port submission, please let me know if anything is off. I've bundled a patch with OpenBSD support. I've submitted the same patch upstream, so it should eventually disappear from the ports tree. Cheers, -- Hugo
diff --git infrastructure/db/user.list infrastructure/db/user.list index 7b25c24d7a7..44b14157f3f 100644 --- infrastructure/db/user.list +++ infrastructure/db/user.list @@ -410,3 +410,4 @@ id user group port 899 _openhab _openhab misc/openhab 900 _z2m _z2m comms/zigbee2mqtt 901 _ergo _ergo net/ergo +902 _ot-recorder _ot-recorder sysutils/owntracks-recorder diff --git sysutils/owntracks-recorder/Makefile sysutils/owntracks-recorder/Makefile new file mode 100644 index 00000000000..3b9ff7d065c --- /dev/null +++ sysutils/owntracks-recorder/Makefile @@ -0,0 +1,36 @@ +# Use /usr/ports/infrastructure/bin/portcheck + +COMMENT = Store and access data published by OwnTracks apps +DISTNAME = recorder-0.9.9 +PKGNAME= owntracks-recorder-0.9.9 +DIST_TUPLE += github owntracks recorder 0.9.9 . +CATEGORIES = sysutils +HOMEPAGE = https://github.com/owntracks/recorder +MAINTAINER = Hugo Osvaldo Barrera <h...@whynothugo.nl> + +# GPLv2+ +PERMIT_PACKAGE = Yes +PERMIT_DISTFILES = Yes + +WANTLIB = c m pthread config curl lmdb mosquitto +BUILD_DEPENDS = databases/lmdb misc/findutils +LIB_DEPENDS = devel/libconfig net/curl +LIB_DEPENDS += databases/lmdb net/mosquitto + +USE_GMAKE = Yes + +pre-build: + sed \ + -e 's@OPENBSD ?= no@OPENBSD = yes@' \ + -e 's@CONFIGFILE = .*@CONFIGFILE = /etc/owntracks-recorder.conf@' \ + -e 's@DOCROOT = .*@DOCROOT = /var/www/owntracks-recorder@' \ + -e 's@STORAGEDEFAULT = .*@STORAGEDEFAULT = /var/db/owntracks-recorder@' \ + ${WRKDIST}/config.mk.in \ + > ${WRKDIST}/config.mk + ln -sf /usr/local/bin/gfind ${WRKDIR}/bin/find + +post-install: + install -D ${WRKINST}/etc/owntracks-recorder.conf \ + ${PREFIX}/share/examples/owntracks-recorder/owntracks-recorder.conf + +.include <bsd.port.mk> diff --git sysutils/owntracks-recorder/distinfo sysutils/owntracks-recorder/distinfo new file mode 100644 index 00000000000..0d9b4f9c214 --- /dev/null +++ sysutils/owntracks-recorder/distinfo @@ -0,0 +1,2 @@ +SHA256 (owntracks-recorder-0.9.9.tar.gz) = Zuatxx4BFUjzkCZkxfZD7bRWZbAf7esMXYiSQWo4CKI= +SIZE (owntracks-recorder-0.9.9.tar.gz) = 4493953 diff --git sysutils/owntracks-recorder/patches/patch-openbsd-support sysutils/owntracks-recorder/patches/patch-openbsd-support new file mode 100644 index 00000000000..77584610e8c --- /dev/null +++ sysutils/owntracks-recorder/patches/patch-openbsd-support @@ -0,0 +1,88 @@ +From 515463957742bbdc302327ff214a11ead809d975 Mon Sep 17 00:00:00 2001 +From: Hugo Osvaldo Barrera <h...@whynothugo.nl> +Date: Sat, 1 Mar 2025 14:19:41 +0000 +Subject: [PATCH] Add support for OpenBSD +Patch-Source: https://github.com/owntracks/recorder/pull/523/ + +--- + Makefile | 4 ++++ + config.mk.in | 3 +++ + util.c | 26 ++++++++++++++++++++++++-- + 3 files changed, 31 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index 3cdc8f8..300e357 100644 +--- Makefile ++++ Makefile +@@ -61,6 +61,10 @@ ifeq ($(WITH_HTTP),yes) + OTR_EXTRA_OBJS += mongoose.o http.o + endif + ++ifeq ($(OPENBSD),yes) ++ CFLAGS += -DOPENBSD ++endif ++ + ifeq ($(WITH_TOURS),yes) + CFLAGS += -DWITH_TOURS + OTR_EXTRA_OBJS += +diff --git a/config.mk.in b/config.mk.in +index ec0394e..2eb2c98 100644 +--- config.mk.in ++++ config.mk.in +@@ -33,6 +33,9 @@ FREEBSD ?= no + # + # -- end FreeBSD + ++# Replace "no" with "yes" for OpenBSD ++OPENBSD ?= no ++ + INSTALLDIR = /usr/local + + # Do you want support for MQTT? +diff --git a/util.c b/util.c +index 5429048..323eb21 100644 +--- util.c ++++ util.c +@@ -33,8 +33,12 @@ + #include <stdarg.h> + #include <math.h> + #ifdef WITH_TOURS ++#ifdef OPENBSD ++# include <uuid.h> ++#else + # include <uuid/uuid.h> + #endif ++#endif + #include "udata.h" + + #ifndef LINESIZE +@@ -672,9 +676,27 @@ char *uuid4() + { + static char uustr[37]; + uuid_t uu; ++#ifdef OPENBSD ++ uint32_t status; ++ char *temp_uustr; ++ ++ uuid_create(&uu, &status); ++ if (status != uuid_s_ok) { ++ printf("could not create uuid\n"); ++ return (uustr); ++ } + +- uuid_generate(uu); +- uuid_unparse_lower(uu, uustr); ++ uuid_to_string(&uu, &temp_uustr, &status); ++ if (status != uuid_s_ok) { ++ printf("could not stringify uuid\n"); ++ return (uustr); ++ } ++ strlcpy(uustr, temp_uustr, 37); ++ free(temp_uustr); ++#else ++ uuid_generate(uu); ++ uuid_unparse_lower(uu, uustr); ++#endif + + return (uustr); + } diff --git sysutils/owntracks-recorder/pkg/DESCR sysutils/owntracks-recorder/pkg/DESCR new file mode 100644 index 00000000000..8de246332d6 --- /dev/null +++ sysutils/owntracks-recorder/pkg/DESCR @@ -0,0 +1,2 @@ +Interactive Unix filter for command-line that can be used with any list; files, +command history, processes, hostnames, bookmarks, git commits, etc. diff --git sysutils/owntracks-recorder/pkg/PLIST sysutils/owntracks-recorder/pkg/PLIST new file mode 100644 index 00000000000..305d63a0f5d --- /dev/null +++ sysutils/owntracks-recorder/pkg/PLIST @@ -0,0 +1,326 @@ +@newgroup _ot-recorder:902 +@newuser _ot-recorder:902:_ot-recorder::Owntracks Recorder:/nonexistent:/sbin/nologin +@rcscript ${RCDIR}/ot_recorder +@bin bin/ocat +@bin sbin/ot-recorder +share/examples/owntracks-recorder/ +share/examples/owntracks-recorder/owntracks-recorder.conf +@sample ${SYSCONFDIR}/owntracks-recorder.conf +@cwd /usr/share +owntracks/ +owntracks/recorder/ +owntracks/recorder/timezone16.bin +@cwd /var/db +@mode 770 +@owner _ot-recorder +@group _ot-recorder +owntracks-recorder/ +@cwd /var/www +@mode 440 +@owner www +@group www +owntracks-recorder/ +owntracks-recorder/index.html +owntracks-recorder/last/ +owntracks-recorder/last/index.html +owntracks-recorder/last/last.html +owntracks-recorder/last/manifest.json +owntracks-recorder/last/map_google.js +owntracks-recorder/last/map_leaflet.js +owntracks-recorder/last/websock.js +owntracks-recorder/map/ +owntracks-recorder/map/index.html +owntracks-recorder/map/map_google.js +owntracks-recorder/map/map_leaflet.js +owntracks-recorder/owntracks.xsl +owntracks-recorder/static/ +owntracks-recorder/static/datatables/ +owntracks-recorder/static/datatables/css/ +owntracks-recorder/static/datatables/css/jquery.dataTables.min.css +owntracks-recorder/static/datatables/images/ +owntracks-recorder/static/datatables/images/sort_asc.png +owntracks-recorder/static/datatables/images/sort_asc_disabled.png +owntracks-recorder/static/datatables/images/sort_both.png +owntracks-recorder/static/datatables/images/sort_desc.png +owntracks-recorder/static/datatables/images/sort_desc_disabled.png +owntracks-recorder/static/datatables/js/ +owntracks-recorder/static/datatables/js/jquery.dataTables.min.js +owntracks-recorder/static/datatables/js/jquery.min.js +owntracks-recorder/static/defaultface.svg +owntracks-recorder/static/flags/ +owntracks-recorder/static/flags/AD.png +owntracks-recorder/static/flags/AE.png +owntracks-recorder/static/flags/AF.png +owntracks-recorder/static/flags/AG.png +owntracks-recorder/static/flags/AI.png +owntracks-recorder/static/flags/AL.png +owntracks-recorder/static/flags/AM.png +owntracks-recorder/static/flags/AN.png +owntracks-recorder/static/flags/AO.png +owntracks-recorder/static/flags/AQ.png +owntracks-recorder/static/flags/AR.png +owntracks-recorder/static/flags/AS.png +owntracks-recorder/static/flags/AT.png +owntracks-recorder/static/flags/AU.png +owntracks-recorder/static/flags/AW.png +owntracks-recorder/static/flags/AX.png +owntracks-recorder/static/flags/AZ.png +owntracks-recorder/static/flags/BA.png +owntracks-recorder/static/flags/BB.png +owntracks-recorder/static/flags/BD.png +owntracks-recorder/static/flags/BE.png +owntracks-recorder/static/flags/BF.png +owntracks-recorder/static/flags/BG.png +owntracks-recorder/static/flags/BH.png +owntracks-recorder/static/flags/BI.png +owntracks-recorder/static/flags/BJ.png +owntracks-recorder/static/flags/BL.png +owntracks-recorder/static/flags/BM.png +owntracks-recorder/static/flags/BN.png +owntracks-recorder/static/flags/BO.png +owntracks-recorder/static/flags/BR.png +owntracks-recorder/static/flags/BS.png +owntracks-recorder/static/flags/BT.png +owntracks-recorder/static/flags/BW.png +owntracks-recorder/static/flags/BY.png +owntracks-recorder/static/flags/BZ.png +owntracks-recorder/static/flags/CA.png +owntracks-recorder/static/flags/CC.png +owntracks-recorder/static/flags/CD.png +owntracks-recorder/static/flags/CF.png +owntracks-recorder/static/flags/CG.png +owntracks-recorder/static/flags/CH.png +owntracks-recorder/static/flags/CI.png +owntracks-recorder/static/flags/CK.png +owntracks-recorder/static/flags/CL.png +owntracks-recorder/static/flags/CM.png +owntracks-recorder/static/flags/CN.png +owntracks-recorder/static/flags/CO.png +owntracks-recorder/static/flags/CR.png +owntracks-recorder/static/flags/CU.png +owntracks-recorder/static/flags/CV.png +owntracks-recorder/static/flags/CW.png +owntracks-recorder/static/flags/CX.png +owntracks-recorder/static/flags/CY.png +owntracks-recorder/static/flags/CZ.png +owntracks-recorder/static/flags/DE.png +owntracks-recorder/static/flags/DJ.png +owntracks-recorder/static/flags/DK.png +owntracks-recorder/static/flags/DM.png +owntracks-recorder/static/flags/DO.png +owntracks-recorder/static/flags/DZ.png +owntracks-recorder/static/flags/EC.png +owntracks-recorder/static/flags/EE.png +owntracks-recorder/static/flags/EG.png +owntracks-recorder/static/flags/EH.png +owntracks-recorder/static/flags/ER.png +owntracks-recorder/static/flags/ES.png +owntracks-recorder/static/flags/ET.png +owntracks-recorder/static/flags/EU.png +owntracks-recorder/static/flags/FI.png +owntracks-recorder/static/flags/FJ.png +owntracks-recorder/static/flags/FK.png +owntracks-recorder/static/flags/FM.png +owntracks-recorder/static/flags/FO.png +owntracks-recorder/static/flags/FR.png +owntracks-recorder/static/flags/GA.png +owntracks-recorder/static/flags/GB.png +owntracks-recorder/static/flags/GD.png +owntracks-recorder/static/flags/GE.png +owntracks-recorder/static/flags/GG.png +owntracks-recorder/static/flags/GH.png +owntracks-recorder/static/flags/GI.png +owntracks-recorder/static/flags/GL.png +owntracks-recorder/static/flags/GM.png +owntracks-recorder/static/flags/GN.png +owntracks-recorder/static/flags/GQ.png +owntracks-recorder/static/flags/GR.png +owntracks-recorder/static/flags/GS.png +owntracks-recorder/static/flags/GT.png +owntracks-recorder/static/flags/GU.png +owntracks-recorder/static/flags/GW.png +owntracks-recorder/static/flags/GY.png +owntracks-recorder/static/flags/HK.png +owntracks-recorder/static/flags/HN.png +owntracks-recorder/static/flags/HR.png +owntracks-recorder/static/flags/HT.png +owntracks-recorder/static/flags/HU.png +owntracks-recorder/static/flags/Hello.txt +owntracks-recorder/static/flags/IC.png +owntracks-recorder/static/flags/ID.png +owntracks-recorder/static/flags/IE.png +owntracks-recorder/static/flags/IL.png +owntracks-recorder/static/flags/IM.png +owntracks-recorder/static/flags/IN.png +owntracks-recorder/static/flags/IQ.png +owntracks-recorder/static/flags/IR.png +owntracks-recorder/static/flags/IS.png +owntracks-recorder/static/flags/IT.png +owntracks-recorder/static/flags/JE.png +owntracks-recorder/static/flags/JM.png +owntracks-recorder/static/flags/JO.png +owntracks-recorder/static/flags/JP.png +owntracks-recorder/static/flags/KE.png +owntracks-recorder/static/flags/KG.png +owntracks-recorder/static/flags/KH.png +owntracks-recorder/static/flags/KI.png +owntracks-recorder/static/flags/KM.png +owntracks-recorder/static/flags/KN.png +owntracks-recorder/static/flags/KP.png +owntracks-recorder/static/flags/KR.png +owntracks-recorder/static/flags/KW.png +owntracks-recorder/static/flags/KY.png +owntracks-recorder/static/flags/KZ.png +owntracks-recorder/static/flags/LA.png +owntracks-recorder/static/flags/LB.png +owntracks-recorder/static/flags/LC.png +owntracks-recorder/static/flags/LI.png +owntracks-recorder/static/flags/LICENSE.txt +owntracks-recorder/static/flags/LK.png +owntracks-recorder/static/flags/LR.png +owntracks-recorder/static/flags/LS.png +owntracks-recorder/static/flags/LT.png +owntracks-recorder/static/flags/LU.png +owntracks-recorder/static/flags/LV.png +owntracks-recorder/static/flags/LY.png +owntracks-recorder/static/flags/MA.png +owntracks-recorder/static/flags/MC.png +owntracks-recorder/static/flags/MD.png +owntracks-recorder/static/flags/ME.png +owntracks-recorder/static/flags/MF.png +owntracks-recorder/static/flags/MG.png +owntracks-recorder/static/flags/MH.png +owntracks-recorder/static/flags/MK.png +owntracks-recorder/static/flags/ML.png +owntracks-recorder/static/flags/MM.png +owntracks-recorder/static/flags/MN.png +owntracks-recorder/static/flags/MO.png +owntracks-recorder/static/flags/MP.png +owntracks-recorder/static/flags/MQ.png +owntracks-recorder/static/flags/MR.png +owntracks-recorder/static/flags/MS.png +owntracks-recorder/static/flags/MT.png +owntracks-recorder/static/flags/MU.png +owntracks-recorder/static/flags/MV.png +owntracks-recorder/static/flags/MW.png +owntracks-recorder/static/flags/MX.png +owntracks-recorder/static/flags/MY.png +owntracks-recorder/static/flags/MZ.png +owntracks-recorder/static/flags/NA.png +owntracks-recorder/static/flags/NC.png +owntracks-recorder/static/flags/NE.png +owntracks-recorder/static/flags/NF.png +owntracks-recorder/static/flags/NG.png +owntracks-recorder/static/flags/NI.png +owntracks-recorder/static/flags/NL.png +owntracks-recorder/static/flags/NO.png +owntracks-recorder/static/flags/NP.png +owntracks-recorder/static/flags/NR.png +owntracks-recorder/static/flags/NU.png +owntracks-recorder/static/flags/NZ.png +owntracks-recorder/static/flags/OM.png +owntracks-recorder/static/flags/PA.png +owntracks-recorder/static/flags/PE.png +owntracks-recorder/static/flags/PF.png +owntracks-recorder/static/flags/PG.png +owntracks-recorder/static/flags/PH.png +owntracks-recorder/static/flags/PK.png +owntracks-recorder/static/flags/PL.png +owntracks-recorder/static/flags/PN.png +owntracks-recorder/static/flags/PR.png +owntracks-recorder/static/flags/PS.png +owntracks-recorder/static/flags/PT.png +owntracks-recorder/static/flags/PW.png +owntracks-recorder/static/flags/PY.png +owntracks-recorder/static/flags/QA.png +owntracks-recorder/static/flags/RO.png +owntracks-recorder/static/flags/RS.png +owntracks-recorder/static/flags/RU.png +owntracks-recorder/static/flags/RW.png +owntracks-recorder/static/flags/SA.png +owntracks-recorder/static/flags/SB.png +owntracks-recorder/static/flags/SC.png +owntracks-recorder/static/flags/SD.png +owntracks-recorder/static/flags/SE.png +owntracks-recorder/static/flags/SG.png +owntracks-recorder/static/flags/SH.png +owntracks-recorder/static/flags/SI.png +owntracks-recorder/static/flags/SK.png +owntracks-recorder/static/flags/SL.png +owntracks-recorder/static/flags/SM.png +owntracks-recorder/static/flags/SN.png +owntracks-recorder/static/flags/SO.png +owntracks-recorder/static/flags/SR.png +owntracks-recorder/static/flags/SS.png +owntracks-recorder/static/flags/ST.png +owntracks-recorder/static/flags/SV.png +owntracks-recorder/static/flags/SY.png +owntracks-recorder/static/flags/SZ.png +owntracks-recorder/static/flags/TC.png +owntracks-recorder/static/flags/TD.png +owntracks-recorder/static/flags/TF.png +owntracks-recorder/static/flags/TG.png +owntracks-recorder/static/flags/TH.png +owntracks-recorder/static/flags/TJ.png +owntracks-recorder/static/flags/TK.png +owntracks-recorder/static/flags/TL.png +owntracks-recorder/static/flags/TM.png +owntracks-recorder/static/flags/TN.png +owntracks-recorder/static/flags/TO.png +owntracks-recorder/static/flags/TR.png +owntracks-recorder/static/flags/TT.png +owntracks-recorder/static/flags/TV.png +owntracks-recorder/static/flags/TW.png +owntracks-recorder/static/flags/TZ.png +owntracks-recorder/static/flags/UA.png +owntracks-recorder/static/flags/UG.png +owntracks-recorder/static/flags/US.png +owntracks-recorder/static/flags/UY.png +owntracks-recorder/static/flags/UZ.png +owntracks-recorder/static/flags/VA.png +owntracks-recorder/static/flags/VC.png +owntracks-recorder/static/flags/VE.png +owntracks-recorder/static/flags/VG.png +owntracks-recorder/static/flags/VI.png +owntracks-recorder/static/flags/VN.png +owntracks-recorder/static/flags/VU.png +owntracks-recorder/static/flags/WF.png +owntracks-recorder/static/flags/WS.png +owntracks-recorder/static/flags/YE.png +owntracks-recorder/static/flags/YT.png +owntracks-recorder/static/flags/ZA.png +owntracks-recorder/static/flags/ZM.png +owntracks-recorder/static/flags/ZW.png +owntracks-recorder/static/flags/__.png +owntracks-recorder/static/index.html +owntracks-recorder/static/leaflet/ +owntracks-recorder/static/leaflet/images/ +owntracks-recorder/static/leaflet/images/layers-2x.png +owntracks-recorder/static/leaflet/images/layers.png +owntracks-recorder/static/leaflet/images/marker-icon-2x.png +owntracks-recorder/static/leaflet/images/marker-icon.png +owntracks-recorder/static/leaflet/images/marker-shadow.png +owntracks-recorder/static/leaflet/leaflet.css +owntracks-recorder/static/leaflet/leaflet.js +owntracks-recorder/static/leaflet/leaflet.js.map +owntracks-recorder/static/recorder.png +owntracks-recorder/table/ +owntracks-recorder/table/config.js +owntracks-recorder/table/index.html +owntracks-recorder/table/otable.css +owntracks-recorder/test-ws.html +owntracks-recorder/test.txt +owntracks-recorder/utils/ +owntracks-recorder/utils/config.js +owntracks-recorder/utils/debug.js +owntracks-recorder/utils/index.html +owntracks-recorder/utils/map.css +owntracks-recorder/utils/map.js +owntracks-recorder/utils/map_google.js +owntracks-recorder/utils/map_leaflet.js +owntracks-recorder/utils/misc.js +owntracks-recorder/utils/network.js +owntracks-recorder/views/ +owntracks-recorder/views/jane.json.sample +owntracks-recorder/views/leafletmap.html +owntracks-recorder/views/vmap.html diff --git sysutils/owntracks-recorder/pkg/ot_recorder.rc sysutils/owntracks-recorder/pkg/ot_recorder.rc new file mode 100644 index 00000000000..8e460df29cd --- /dev/null +++ sysutils/owntracks-recorder/pkg/ot_recorder.rc @@ -0,0 +1,12 @@ +#!/bin/ksh + +daemon="${TRUEPREFIX}/sbin/ot-recorder" +daemon_flags="" +daemon_user="_ot-recorder" + +. /etc/rc.d/rc.subr + +rc_bg=YES +rc_reload=NO + +rc_cmd $1