From 472c45385aa1ed40d7ee48c7226e2831fdfd4072 Mon Sep 17 00:00:00 2001 From: Marco Parodi Date: Tue, 25 Jun 2024 11:05:22 -0400 Subject: [PATCH] added axLicense --- .vscode/settings.json | 5 ++ aarch64/app/Makefile | 1 + aarch64/app/Tailscale_VPN | Bin 6056 -> 14344 bytes aarch64/app/Tailscale_VPN_1_63_0_LICENSE.txt | 29 ++++++++ aarch64/app/app.h | 3 +- aarch64/app/libs/axLicense/axLicense.c | 31 ++++++++ aarch64/app/libs/axLicense/axLicense.h | 4 ++ aarch64/app/libs/axLicense/axLicense.md | 70 +++++++++++++++++++ aarch64/app/libs/axLicense/makefile.info | 3 + aarch64/app/main.c | 27 ++++--- aarch64/app/manifest.json | 4 ++ aarch64/app/package.conf | 4 +- aarch64/app/package.conf.orig | 2 + aarch64/app/volume.txt | 5 ++ arm/app/Makefile | 1 + arm/app/Tailscale_VPN | Bin 5532 -> 9696 bytes arm/app/Tailscale_VPN_1_63_0_LICENSE.txt | 29 ++++++++ arm/app/app.h | 3 +- arm/app/libs/axLicense/axLicense.c | 31 ++++++++ arm/app/libs/axLicense/axLicense.h | 4 ++ arm/app/libs/axLicense/axLicense.md | 70 +++++++++++++++++++ arm/app/libs/axLicense/makefile.info | 3 + arm/app/main.c | 27 ++++--- arm/app/manifest.json | 6 +- arm/app/package.conf | 6 +- arm/app/package.conf.orig | 4 +- arm/app/volume.txt | 5 ++ 27 files changed, 348 insertions(+), 29 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 aarch64/app/Tailscale_VPN_1_63_0_LICENSE.txt create mode 100644 aarch64/app/libs/axLicense/axLicense.c create mode 100644 aarch64/app/libs/axLicense/axLicense.h create mode 100644 aarch64/app/libs/axLicense/axLicense.md create mode 100644 aarch64/app/libs/axLicense/makefile.info create mode 100644 aarch64/app/volume.txt create mode 100644 arm/app/Tailscale_VPN_1_63_0_LICENSE.txt create mode 100644 arm/app/libs/axLicense/axLicense.c create mode 100644 arm/app/libs/axLicense/axLicense.h create mode 100644 arm/app/libs/axLicense/axLicense.md create mode 100644 arm/app/libs/axLicense/makefile.info create mode 100644 arm/app/volume.txt diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ec3692e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "axlicense.h": "c" + } +} \ No newline at end of file diff --git a/aarch64/app/Makefile b/aarch64/app/Makefile index 13dca69..cdb0dc1 100644 --- a/aarch64/app/Makefile +++ b/aarch64/app/Makefile @@ -1,5 +1,6 @@ #//Version=Native AXIS_USABLE_LIBS = UCLIBC GLIBC +include libs/*/makefile.info PROG = tailscale_vpn diff --git a/aarch64/app/Tailscale_VPN b/aarch64/app/Tailscale_VPN index d0750031b5894d42a2a2715759fe7efe6721feb9..7b5649a44fbd54f4ef761281d5fecdc0de6a07b9 100755 GIT binary patch literal 14344 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 literal 6056 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 diff --git a/aarch64/app/Tailscale_VPN_1_63_0_LICENSE.txt b/aarch64/app/Tailscale_VPN_1_63_0_LICENSE.txt new file mode 100644 index 0000000..9241b06 --- /dev/null +++ b/aarch64/app/Tailscale_VPN_1_63_0_LICENSE.txt @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2020 Tailscale & AUTHORS. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. \ No newline at end of file diff --git a/aarch64/app/app.h b/aarch64/app/app.h index aa6fc52..d8390e2 100644 --- a/aarch64/app/app.h +++ b/aarch64/app/app.h @@ -1 +1,2 @@ -#define APP_NAME "tailscale_vpn" \ No newline at end of file +#define APP_NAME "tailscale_vpn" +#define APP_ID 414812 \ No newline at end of file diff --git a/aarch64/app/libs/axLicense/axLicense.c b/aarch64/app/libs/axLicense/axLicense.c new file mode 100644 index 0000000..bdd3e90 --- /dev/null +++ b/aarch64/app/libs/axLicense/axLicense.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include "../../app.h" + +gboolean axLicense_checkLicense1() +{ +//Verify license + const gchar* vmajor = NULL; + const gchar* vminor = NULL; + int version[2]; + gboolean license_ok = FALSE; + int license = 0; + + /* util-function for getting package.conf variables */ + //ax_package_get("APPID", &appid); + //ax_package_get("APPNAME", &appname); + ax_package_get("APPMAJORVERSION", &vmajor); + ax_package_get("APPMINORVERSION", &vminor); + + version[0] = atoi(vmajor); + version[1] = atoi(vminor); + + /* licensekey_verify: Return 1 on success, 0 on failure. */ + license = licensekey_verify(APP_NAME, APP_ID, version[0], version[1]); + + license_ok = (license) ? TRUE : FALSE; + + + return license_ok; +} diff --git a/aarch64/app/libs/axLicense/axLicense.h b/aarch64/app/libs/axLicense/axLicense.h new file mode 100644 index 0000000..43ae830 --- /dev/null +++ b/aarch64/app/libs/axLicense/axLicense.h @@ -0,0 +1,4 @@ +//Version=1.0 + +/*{"Name":"License Key Installed?","Show":true, "Description":"Checks if a license key has been installed and validated"}*/ +gboolean axLicense_checkLicense1(); diff --git a/aarch64/app/libs/axLicense/axLicense.md b/aarch64/app/libs/axLicense/axLicense.md new file mode 100644 index 0000000..c067cd0 --- /dev/null +++ b/aarch64/app/libs/axLicense/axLicense.md @@ -0,0 +1,70 @@ + +# axLicense +axLicense implements ACAPs licensing system but it works a little different from the original code. + +For security, `APP ID` is compiled into the ACAP rather than relying on the value in `package.conf` (you will still need to add your `APP ID` in `package.conf` for the system to accept the key upon installation) + +Remember to set your license in `package.conf` to `axis` for the licensing to work. Other values are `none` and `custom`. To get and APP ID for Axis License [create one here](https://www.axis.com/partner_pages/compatible_applications/) + +```c +/*app.h*/ +#define APP_NAME "newapp" +#define APP_ID 1 +#define APP_DEBUG 0 +``` + + +```c +#include +#include +#include +#include +#include +#include +#include +#include "app.h" +#include "./libs/axLicense/axLicense.h" +#include "./libs/axSystem/axSystem.h" + +//main function +int main() { + //Loop main (keeps the app running. without this part the app will start and stop right after) + GMainLoop *main_loop; + main_loop = g_main_loop_new(NULL, FALSE); + //LOG app name (list) + syslog(LOG_INFO, "Starting %s", APP_NAME); + + if(axLicense_checkLicense1()/*flowchartWindow44*/){ + axSystem_log1(log_info,"license ok");/*flowchartWindow45*/ + } + else{ + axSystem_log1(log_crit,"No license installed");/*flowchartWindow46*/ + } + + + //calling main loop + g_main_loop_run(main_loop); + return 0; + +} +``` + +### License Key Installed? (axLicense_checkLicense1) +Checks if a license key has been installed and validated +```c +gboolean axLicense_checkLicense1(); +``` + + +#### Usage +```c +if(axLicense_checkLicense1()){ + //license installed +} +``` + + +# Code Maintainer +Marco Parodi (mparodi@axis.com) + +Last updated 1/3/2020 \ No newline at end of file diff --git a/aarch64/app/libs/axLicense/makefile.info b/aarch64/app/libs/axLicense/makefile.info new file mode 100644 index 0000000..f15efc1 --- /dev/null +++ b/aarch64/app/libs/axLicense/makefile.info @@ -0,0 +1,3 @@ +PKGS += axpackage +SRCS += ./libs/axLicense/axLicense.c +LDLIBS += -Wl,-Bstatic,-llicensekey_stat,-Bdynamic,-llicensekey -ldl diff --git a/aarch64/app/main.c b/aarch64/app/main.c index 75e3552..2513816 100644 --- a/aarch64/app/main.c +++ b/aarch64/app/main.c @@ -6,6 +6,7 @@ #include #include #include +#include "./libs/axLicense/axLicense.h" #include "app.h" #define TAILSCALE_VPN "\ @@ -23,20 +24,26 @@ wait \n\ //****************/ /* main function */ //****************/ - int main() { /* Loop main (keeps the app running. without this part the app will start and stop right after) */ - GMainLoop *main_loop; - main_loop = g_main_loop_new(NULL, FALSE); + GMainLoop *main_loop; + main_loop = g_main_loop_new(NULL, FALSE); -/* LOG app name (appname) */ - syslog(LOG_INFO, "Starting %s", APP_NAME); - g_message("Starting %s",APP_NAME); + //check license + if (!axLicense_checkLicense1()){ + syslog(LOG_ERR,"License key not installed. Exiting"); + g_message("License key not installed. Exiting"); + return 0; + } - system(TAILSCALE_VPN); - -/* calling main loop */ - g_main_loop_run(main_loop); + /* LOG app name (appname) */ + syslog(LOG_INFO, "Starting %s", APP_NAME); + g_message("Starting %s",APP_NAME); + //run script + system(TAILSCALE_VPN); + + /* calling main loop */ + g_main_loop_run(main_loop); //exit return 0; diff --git a/aarch64/app/manifest.json b/aarch64/app/manifest.json index 32abb95..fe525c1 100644 --- a/aarch64/app/manifest.json +++ b/aarch64/app/manifest.json @@ -3,6 +3,7 @@ "acapPackageConf": { "setup": { "appName": "tailscale_vpn", + "appId":"414812", "friendlyName": "Tailscale VPN", "vendor": "Tailscale - Packaged by Mo3he", "embeddedSdkVersion": "3.0", @@ -10,6 +11,9 @@ "runMode": "once", "version": "1.63.0" }, + "copyProtection": { + "method": "axis" + }, "configuration": { "settingPage": "index.html" } diff --git a/aarch64/app/package.conf b/aarch64/app/package.conf index 3019d90..0f0e464 100644 --- a/aarch64/app/package.conf +++ b/aarch64/app/package.conf @@ -1,9 +1,9 @@ PACKAGENAME="Tailscale VPN" APPTYPE="aarch64" APPNAME="tailscale_vpn" -APPID="" +APPID="414812" LICENSENAME="Available" -LICENSEPAGE="none" +LICENSEPAGE="axis" VENDOR="Tailscale - Packaged by Mo3he" REQEMBDEVVERSION="3.0" APPMAJORVERSION="1" diff --git a/aarch64/app/package.conf.orig b/aarch64/app/package.conf.orig index 4b174ca..818dcf5 100644 --- a/aarch64/app/package.conf.orig +++ b/aarch64/app/package.conf.orig @@ -1,4 +1,5 @@ APPNAME="tailscale_vpn" +APPID="414812" PACKAGENAME="Tailscale VPN" VENDOR="Tailscale - Packaged by Mo3he" REQEMBDEVVERSION="3.0" @@ -7,4 +8,5 @@ STARTMODE="once" APPMAJORVERSION="1" APPMINORVERSION="63" APPMICROVERSION="0" +LICENSEPAGE="axis" SETTINGSPAGEFILE="index.html" diff --git a/aarch64/app/volume.txt b/aarch64/app/volume.txt new file mode 100644 index 0000000..6285ffc --- /dev/null +++ b/aarch64/app/volume.txt @@ -0,0 +1,5 @@ +#AARCH64 +sudo docker run --rm -v /mnt/c/Users/mparodi/Documents/mySharedApps/Axis_Cam_Tailscale/aarch64/app:/opt/app/Axis_Cam_Tailscale -it axisecp/acap-native-sdk:1.14-aarch64 + +#ARMV7HF +sudo docker run --rm -v /mnt/c/Users/mparodi/Documents/mySharedApps/Axis_Cam_Tailscale/arm/app:/opt/app/Axis_Cam_Tailscale -it axisecp/acap-native-sdk:1.14-armv7hf \ No newline at end of file diff --git a/arm/app/Makefile b/arm/app/Makefile index 13dca69..cdb0dc1 100644 --- a/arm/app/Makefile +++ b/arm/app/Makefile @@ -1,5 +1,6 @@ #//Version=Native AXIS_USABLE_LIBS = UCLIBC GLIBC +include libs/*/makefile.info PROG = tailscale_vpn diff --git a/arm/app/Tailscale_VPN b/arm/app/Tailscale_VPN index a5eea3a0e36d1678c0f34e84dac1a66029b74c2b..212edfc389030000353116c7fe54a2e4eb688562 100755 GIT binary patch literal 9696 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 V3P95zA=PQ7$9X(!GZRXa{U2dm30nXF delta 1829 zcmah}UuauZ82@gY#w1;`tm~hwo$c-I?5b^Q-Lf*ohcLS|b`d8O?SmNGZfwPL4Q(jO zHZo9r5Jy|i*n^BY1o1^5WECp3D-4-Kimo7T%7ic*x2l*vI6F4o_4m6sDHmTn@H^k{ z`@Y|~_nh;cb8-jHwNHnhc&b7qA|i*jpmRw@M0D{=n>0whXd>x^SH#B5zM=gC@CXb- z)2NWy0HImvM_>SO7xQJX^T^L5PgnzHR$r)c4oV=N&{Ut+UA=ZR^47s8FRXvH(A$0X z=h2;CjLUg-M$)>Y`KJ=>K>Q&!X?8zpRsga@KgNw}%8Bgx^TuM3n%fbg!)uFi?E&MpRq$-1RC@!Y;= zle;=28*DdAYqc`$kY<5Zvl%00GACJ)U{O{*GUDfEUWU)u?95rzvP_nWc^0}3e6DEk zZMJMNc%m8Ws7?b86v^D;LhYav$Uaxv89I?NUBoiArCYx)uETy<71I^Z62w zI{01(&vrSSHV4-oJmla(2ls%dKbPjf^PX5Bak9r;|FLkQr#)uG+%c`$t()sB1$uh3 zfZr&%<8MGSU+9XN>q`aE(+g6$_&p|^1HRGJ{Y`C^(*<+=QsFh9CeNs_zrlOOG=Gi5 z+pAvmH~A;QGC(U3Q78R7{RuGU?|C(es?YpQZBcw-(R3fsjN?7^Y0p9}vR9GqLXFD6 z{{sK=wk)d1)^mZ(;7Dp>crbN1Ihj5t7mey)G!@-CU9s}O%xV{xL$_VHdMC1vqfD!) zDX-DT0PP%rvI?&ysv;fGY=h-FX@KQztp|8swio@o56!Vz4CW*930?>cktO)3vRnsv zv3d4t05%*Kncu9n;uwm=fog!y6%Skxe;~gG6|Z1a{m|I7?E*a0G{-o_HQ2Y|--mUn z9F4fm! z_)04{C2F#z(YJyO5!clDmPR*=(&1K@A&h_$p>p*HGWN@^s&*Leeq6SGuX-BPe$CYo zDC;&CQ19-j=OwjEfe_zx)}Jvp{7Z0Yt!ILJj+wJ$fJhH`sZmEP10|jC1xLL(zSO8; z<8fdd-+Ng+5PBdiB`M%X*lq&k+(kC(+HGp}%n^A2A4^+7bi0G +#include +#include +#include "../../app.h" + +gboolean axLicense_checkLicense1() +{ +//Verify license + const gchar* vmajor = NULL; + const gchar* vminor = NULL; + int version[2]; + gboolean license_ok = FALSE; + int license = 0; + + /* util-function for getting package.conf variables */ + //ax_package_get("APPID", &appid); + //ax_package_get("APPNAME", &appname); + ax_package_get("APPMAJORVERSION", &vmajor); + ax_package_get("APPMINORVERSION", &vminor); + + version[0] = atoi(vmajor); + version[1] = atoi(vminor); + + /* licensekey_verify: Return 1 on success, 0 on failure. */ + license = licensekey_verify(APP_NAME, APP_ID, version[0], version[1]); + + license_ok = (license) ? TRUE : FALSE; + + + return license_ok; +} diff --git a/arm/app/libs/axLicense/axLicense.h b/arm/app/libs/axLicense/axLicense.h new file mode 100644 index 0000000..43ae830 --- /dev/null +++ b/arm/app/libs/axLicense/axLicense.h @@ -0,0 +1,4 @@ +//Version=1.0 + +/*{"Name":"License Key Installed?","Show":true, "Description":"Checks if a license key has been installed and validated"}*/ +gboolean axLicense_checkLicense1(); diff --git a/arm/app/libs/axLicense/axLicense.md b/arm/app/libs/axLicense/axLicense.md new file mode 100644 index 0000000..c067cd0 --- /dev/null +++ b/arm/app/libs/axLicense/axLicense.md @@ -0,0 +1,70 @@ + +# axLicense +axLicense implements ACAPs licensing system but it works a little different from the original code. + +For security, `APP ID` is compiled into the ACAP rather than relying on the value in `package.conf` (you will still need to add your `APP ID` in `package.conf` for the system to accept the key upon installation) + +Remember to set your license in `package.conf` to `axis` for the licensing to work. Other values are `none` and `custom`. To get and APP ID for Axis License [create one here](https://www.axis.com/partner_pages/compatible_applications/) + +```c +/*app.h*/ +#define APP_NAME "newapp" +#define APP_ID 1 +#define APP_DEBUG 0 +``` + + +```c +#include +#include +#include +#include +#include +#include +#include +#include "app.h" +#include "./libs/axLicense/axLicense.h" +#include "./libs/axSystem/axSystem.h" + +//main function +int main() { + //Loop main (keeps the app running. without this part the app will start and stop right after) + GMainLoop *main_loop; + main_loop = g_main_loop_new(NULL, FALSE); + //LOG app name (list) + syslog(LOG_INFO, "Starting %s", APP_NAME); + + if(axLicense_checkLicense1()/*flowchartWindow44*/){ + axSystem_log1(log_info,"license ok");/*flowchartWindow45*/ + } + else{ + axSystem_log1(log_crit,"No license installed");/*flowchartWindow46*/ + } + + + //calling main loop + g_main_loop_run(main_loop); + return 0; + +} +``` + +### License Key Installed? (axLicense_checkLicense1) +Checks if a license key has been installed and validated +```c +gboolean axLicense_checkLicense1(); +``` + + +#### Usage +```c +if(axLicense_checkLicense1()){ + //license installed +} +``` + + +# Code Maintainer +Marco Parodi (mparodi@axis.com) + +Last updated 1/3/2020 \ No newline at end of file diff --git a/arm/app/libs/axLicense/makefile.info b/arm/app/libs/axLicense/makefile.info new file mode 100644 index 0000000..f15efc1 --- /dev/null +++ b/arm/app/libs/axLicense/makefile.info @@ -0,0 +1,3 @@ +PKGS += axpackage +SRCS += ./libs/axLicense/axLicense.c +LDLIBS += -Wl,-Bstatic,-llicensekey_stat,-Bdynamic,-llicensekey -ldl diff --git a/arm/app/main.c b/arm/app/main.c index 75e3552..2513816 100644 --- a/arm/app/main.c +++ b/arm/app/main.c @@ -6,6 +6,7 @@ #include #include #include +#include "./libs/axLicense/axLicense.h" #include "app.h" #define TAILSCALE_VPN "\ @@ -23,20 +24,26 @@ wait \n\ //****************/ /* main function */ //****************/ - int main() { /* Loop main (keeps the app running. without this part the app will start and stop right after) */ - GMainLoop *main_loop; - main_loop = g_main_loop_new(NULL, FALSE); + GMainLoop *main_loop; + main_loop = g_main_loop_new(NULL, FALSE); -/* LOG app name (appname) */ - syslog(LOG_INFO, "Starting %s", APP_NAME); - g_message("Starting %s",APP_NAME); + //check license + if (!axLicense_checkLicense1()){ + syslog(LOG_ERR,"License key not installed. Exiting"); + g_message("License key not installed. Exiting"); + return 0; + } - system(TAILSCALE_VPN); - -/* calling main loop */ - g_main_loop_run(main_loop); + /* LOG app name (appname) */ + syslog(LOG_INFO, "Starting %s", APP_NAME); + g_message("Starting %s",APP_NAME); + //run script + system(TAILSCALE_VPN); + + /* calling main loop */ + g_main_loop_run(main_loop); //exit return 0; diff --git a/arm/app/manifest.json b/arm/app/manifest.json index 7726558..fe525c1 100644 --- a/arm/app/manifest.json +++ b/arm/app/manifest.json @@ -2,7 +2,8 @@ "schemaVersion": "1.6.0", "acapPackageConf": { "setup": { - "appName": "Tailscale_VPN", + "appName": "tailscale_vpn", + "appId":"414812", "friendlyName": "Tailscale VPN", "vendor": "Tailscale - Packaged by Mo3he", "embeddedSdkVersion": "3.0", @@ -10,6 +11,9 @@ "runMode": "once", "version": "1.63.0" }, + "copyProtection": { + "method": "axis" + }, "configuration": { "settingPage": "index.html" } diff --git a/arm/app/package.conf b/arm/app/package.conf index 3191451..efd576e 100644 --- a/arm/app/package.conf +++ b/arm/app/package.conf @@ -1,9 +1,9 @@ PACKAGENAME="Tailscale VPN" APPTYPE="armv7hf" -APPNAME="Tailscale_VPN" -APPID="" +APPNAME="tailscale_vpn" +APPID="414812" LICENSENAME="Available" -LICENSEPAGE="none" +LICENSEPAGE="axis" VENDOR="Tailscale - Packaged by Mo3he" REQEMBDEVVERSION="3.0" APPMAJORVERSION="1" diff --git a/arm/app/package.conf.orig b/arm/app/package.conf.orig index 7e083b9..818dcf5 100644 --- a/arm/app/package.conf.orig +++ b/arm/app/package.conf.orig @@ -1,4 +1,5 @@ -APPNAME="Tailscale_VPN" +APPNAME="tailscale_vpn" +APPID="414812" PACKAGENAME="Tailscale VPN" VENDOR="Tailscale - Packaged by Mo3he" REQEMBDEVVERSION="3.0" @@ -7,4 +8,5 @@ STARTMODE="once" APPMAJORVERSION="1" APPMINORVERSION="63" APPMICROVERSION="0" +LICENSEPAGE="axis" SETTINGSPAGEFILE="index.html" diff --git a/arm/app/volume.txt b/arm/app/volume.txt new file mode 100644 index 0000000..6285ffc --- /dev/null +++ b/arm/app/volume.txt @@ -0,0 +1,5 @@ +#AARCH64 +sudo docker run --rm -v /mnt/c/Users/mparodi/Documents/mySharedApps/Axis_Cam_Tailscale/aarch64/app:/opt/app/Axis_Cam_Tailscale -it axisecp/acap-native-sdk:1.14-aarch64 + +#ARMV7HF +sudo docker run --rm -v /mnt/c/Users/mparodi/Documents/mySharedApps/Axis_Cam_Tailscale/arm/app:/opt/app/Axis_Cam_Tailscale -it axisecp/acap-native-sdk:1.14-armv7hf \ No newline at end of file