https://wiki.innovaphone.com/api.php?action=feedcontributions&user=Hna&feedformat=atominnovaphone wiki - User contributions [en]2024-03-29T10:22:03ZUser contributionsMediaWiki 1.39.1https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70328Reference14r1:Concept App Platform2023-12-15T13:17:23Z<p>Hna: /* Requirements */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or above<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Let's Encrypt ==<br />
<br />
Configure the certificate creation by Let's Encrypt here.<br />
<br />
* ''Enable'': turns the automatic creation on or off<br />
* ''Let's Encrypt App URL'': the URL of your Connector for Let's Encrypt App Service. You can copy&paste this URL from your Connector for Let's Encrypt PBX Manager Plugin<br />
* ''Let's Encrypt App Password'': the client password of your Connector for Let's Encrypt App Service. You can copy&paste this password from your Connector for Let's Encrypt PBX Manager Plugin<br />
* ''Key length'': 2048, 3072 or 4096 (keep in mind, that [[{{NAMESPACE}}:Certificate_management#Certificate_Key_Length_and_CPU_Usage|a higher value provides higher security but also lower performance!]])<br />
* ''DNS Name'': the external DNS names of your device (up to 100 possible)<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Replication ==<br />
App Platform [[#App_Platform_replication|replication settings]]<br />
<br />
== Registered Access Domains ==<br />
<br />
== Update ==<br />
Updates the App Platform to the latest image available on the App Store.<br />
<br />
== Restart ==<br />
Restarts the App Platform.<br />
<br />
== Shutdown ==<br />
Shuts down the App Platform.<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 or above on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and above<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started.<br><br />
This further enables the configuration of the instance through its respective PBX Manager plugin. <br><br />
Uninstalling the app will remove the app service and the corresponding instance.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed. <br><br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled. <br><br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70326Reference14r1:Concept App Platform2023-12-15T13:17:03Z<p>Hna: /* Requirements */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Let's Encrypt ==<br />
<br />
Configure the certificate creation by Let's Encrypt here.<br />
<br />
* ''Enable'': turns the automatic creation on or off<br />
* ''Let's Encrypt App URL'': the URL of your Connector for Let's Encrypt App Service. You can copy&paste this URL from your Connector for Let's Encrypt PBX Manager Plugin<br />
* ''Let's Encrypt App Password'': the client password of your Connector for Let's Encrypt App Service. You can copy&paste this password from your Connector for Let's Encrypt PBX Manager Plugin<br />
* ''Key length'': 2048, 3072 or 4096 (keep in mind, that [[{{NAMESPACE}}:Certificate_management#Certificate_Key_Length_and_CPU_Usage|a higher value provides higher security but also lower performance!]])<br />
* ''DNS Name'': the external DNS names of your device (up to 100 possible)<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Replication ==<br />
App Platform [[#App_Platform_replication|replication settings]]<br />
<br />
== Registered Access Domains ==<br />
<br />
== Update ==<br />
Updates the App Platform to the latest image available on the App Store.<br />
<br />
== Restart ==<br />
Restarts the App Platform.<br />
<br />
== Shutdown ==<br />
Shuts down the App Platform.<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 or above on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and above<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started.<br><br />
This further enables the configuration of the instance through its respective PBX Manager plugin. <br><br />
Uninstalling the app will remove the app service and the corresponding instance.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed. <br><br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled. <br><br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Howto14r1:Firmware_Upgrade_V13r3_V14r1&diff=70319Howto14r1:Firmware Upgrade V13r3 V14r12023-12-15T11:24:36Z<p>Hna: /* AP Manager */</p>
<hr />
<div>{{FIXME|reason=Preliminary working draft}}<br />
== Applies To ==<br />
This information applies to:<br />
<br />
* All 14r1 capable innovaphone devices<br />
: For a general overview of the upgrade process and a list of supported devices with 14r1, see [[Howto:Firmware Upgrade]]<br />
<br />
== Changes visible to the end customers ==<br />
Listed here are changes that should be communicated by resellers to end users prior to a 14r1 upgrade, as the change will be visible/audible in the behaviour of the application/device.<br />
=== Softphone/Phone App UI changes === <br />
* Dial-pad is now a new tab in the navigation.<br />
* On Smartphones, the Navigation is in the bottom.<br />
* Call button is removed from the searchbar. Calling only via the search results.<br />
=== Configuration of Logo URI ===<br />
* In 13r3 this configuration was done in the advanced UI on the page PBX / Config / myPBX / Logo URI.<br />
* But in 14r1 it can be found on the page PBX / Config / General / Logo URL.<br />
=== Voicemail App ===<br />
Extra features for the users:<br />
* Call the voicemailbox directly from the app.<br />
* PIN-code is visible and can be changed or set back to default.<br />
* Call Forwards to the Voicemailbox can be activated/removed (CFU/CFB/CFNR).<br />
* Number Resolution via the Search Provider.<br />
=== Fax App ===<br />
* While sending an outgoing fax via the fax app, you now can select and configure a fax cover page before sending.<br />
* While configuring a fax app or groupfax via the PBX Manager plugin, you can customize the header line of fax pages and select a language.<br />
===AP Manager===<br />
* The AP Manager UI has been reworked. It is now responsive design, improved view of all app services and instance. Rework of statistic of CPU/RAM/used disk. This change is for the IT administrator, not relevant for end users<br />
<br />
== Changed Apps ==<br />
If the installer is not used for a new installation, some new default settings are not set. Please evaluate per app whether you want to configure the new default settings manually.<br />
<br />
=== Devices App ===<br />
New Device Configurations option to roll out certificates to the trust list of your devices. [[Reference14r1:Concept_App_Service_Devices#Certificates_configuration]]<br />
<br />
=== Recordings App ===<br />
New option to add WebDav credentials in RecordingsAdmin. [[Howto14r1:RecordingsApp#Configuring_WebDav_credentials_in_RecordingsAdmin]]<br />
<br />
=== Voicemail App ===<br />
* New Setting to configure the automatic deletion of old(er) voicemail-messages per app. [[Reference14r1:Concept_App_Service_Voicemail#Settings]]<br />
* New Option to configure the default PIN per voicemail system. [[Reference14r1:Concept_App_Service_Voicemail#add_voicemail]]<br />
<br />
== New Apps ==<br />
New Apps will not be installed automatically by the 13r3 to 14r1 upgrade. The installation description of new 14r1 apps is usually in the concept article. Please rate per app whether you want to install/use the new app and configure it manually.<br />
<br />
=== Search App ===<br />
* The app is immediately available on the PBX (no configuration is needed). In a new V14r1 configuration the Install provides all Users with this Search App via the "Config User"-Template. If the same configuration is required on an upgraded config, the Search App ("search") can be ticked in the "Config User" template. For details refer to [[Reference14r1:Concept_App_Search | the concept article]].<br />
=== TechAssist ===<br />
* Application for quality assurance and improvement of systems by collecting static and runtime information. For details refer to [[Reference14r1:Concept_App_Service_TechAssist | the concept article]].<br />
=== Connect ===<br />
* A microblogging tool. This app is explained in [[Reference14r1:Concept_App_Service_Messages | the concept article]] and [[Howto14r1:Set_up_Connect| the how to article]].<br />
=== Calculator ===<br />
*Although already released in 13r3 sr11, this app is now part of the 14r1 install. This app is explained in [[Reference13r3:Concept_App_Service_Calculator_App | the concept article]] and [[Howto14r1:Set_up_the_calculator_app| the how to article]].<br />
<br />
=== Connector for Let's Encrypt ===<br />
* Automatically creates & renews Let's Encrypt certificates, the App is included in the Install process - however when doing an upgrade it needs to be [[Reference14r1:Concept_Let%27s_Encrypt#Configuration | setup manually]].<br />
<br />
===PBX Manager - AP app installer===<br />
*in the PBX manager you will find a new coloured plugin. this new plugin give access to the App store in order to ease the installation of an App service and its instance. You basically do not need to go to the AP platform when you want to install a new application. Idea is to have the further installed app done by this plugin, this also ease the way to discover new applications. More infos available in the [[Reference14r1:Concept_App_Platform#App_Installer_PBX_Manager_Plugin | Reference article]]<br />
<br />
== Needed configuration changes ==<br />
<br />
=== Fax Object ===<br />
After updating from 13r3 or setting up your device with 14r1, the Fax object has 4 new options, which are enabled by default.<br />
* Modem capability: the supported modem class can be changed if necessary.<br />
* Append user number: if checked, the user number will be appended to the object number.<br />
* ECM: that allows the T.30 connection to use error correction mode.<br />
* Receiving with 400dpi allowed: which allows you to receive 400*400dpi documents.<br />
<!--<br />
=== EchoCanceller of myApps Client for Windows ===<br />
In 14r1 the Windows client uses by default a Windows provided EchoCanceller. To switch back to the default Echocanceller used in 13r3, create a Windows registry entry in Computer\HKEY_CURRENT_USER\Software\innovaphone\myApps with the following values:<br />
Type: DWORD (REG_DWORD)<br />
Name: webrtcEchoCanceller<br />
Value: 1<br />
<br />
If the 13r3 echo-canceller is used, the myApps trace of a call will contain a line ''[AC] echo canceller is WebRTC aec3''<br />
--><br />
<br />
=== Virtual Appliance on VMWare ===<br />
After deploying the new firmware modify the guest configuration file (stemming from ipva.vmx) as such:<br />
Modify e.g. <code>ethernet0.virtualDev = "vlance"</code> to become <code>ethernet0.virtualDev = "vmxnet3"</code><br />
<br />
== IPVA certificates ==<br />
IPVA certificates are no longer signed by '''innovaphone Device Certification Authority 2'''.<br />
Instead they will be now signed by '''innovaphone Unverified Device CA''', as innovaphone cannot control the serial numbers and thus the certificate creation of IPVAs.<br/><br />
<br />
In a 14r1 install you'll be asked whether you want to always trust this new CA or not. If you decide not to trust this CA, you have to manually trust newly created IPVA certificates.<br/><br />
Note that this is not neccessary for local registrations inside the IPVA itself and doesn't affect hardware phone registrations.<br />
<br />
You can download the innovaphone Unverified Device CA here: https://download.innovaphone.com/certificates/ca-unverified.pem <br/><br />
If you want to trust this new CA or your own IPVA certificates, you can use the Devices App to roll out certificates to the trust list of your devices.<br />
<br />
== Removed in 14r1 ==<br />
The following software is no longer included in 14r1.<br />
=== myPBX ===<br />
This includes the following components<br />
* myPBX webclient<br />
* myPBX for Windows<br />
* myPBX for iOS<br />
* myPBX for Android<br />
Please migrate to '''innovaphone myApps'''.<br />
<br />
===Widgets===<br />
The Widgets were based on the myPBX interfaces that have been removed. Please migrate to the '''Contacts Widget App'''.<br />
===WebRTC toolkit===<br />
The WebRTC toolkit was based on the myPBX interfaces that have been removed.<br />
Please use the current interfaces and libraries described in the '''[https://sdk.innovaphone.com innovaphone SDK]'''.<br />
=== Windows Softwarephone ===<br />
Please migrate to '''innovaphone myApps for Windows''' and the '''Softphone App'''.<br />
===PBX Object Settings ===<br />
The object provided the PBX Settings App that was used to configure dynamic group memberships in myPBX.<br />
Please use the '''Profile App''' instead.<br />
<br />
===PBX Object ICP ===<br />
Please use the integrated presence features of the '''innovaphone PBX''' instead.<br />
<br />
===Service Call-Lists ===<br />
This service implemented call lists for myPBX on the local CF card.<br />
Please use the '''Reports App''' instead.<br />
<br />
== Deprecated in 14r1 ==<br />
The following software is based on legacy technology with no further development and limited maintenance and support.<br />
We strongly recommend migrating to our successor products that are fully compatible with 14r1 and myApps technology.<br />
<br />
=== Linux Application Platform (v10) ===<br />
Please migrate to the '''innovaphone App Platform''' for 14r1 installations.<br />
<br />
=== innovaphone Faxserver (v10) ===<br />
Please migrate to the '''Fax App''' for 14r1 installations.<br />
=== innovaphone Reporting (v10) ===<br />
Please migrate to the '''Reports App''' for 14r1 installations.<br />
=== innovaphone Exchange (v10) ===<br />
Please migrate to the '''Calendar App''' for 14r1 installations.<br />
=== Operator (v9) ===<br />
Please migrate to the '''Switchboard App''' for 14r1 installations.<br />
=== innovaphone Voice Recording 2014 ===<br />
Please migrate to the '''Recordings App''' for 14r1 installations.<br />
=== PBX Object External UC ===<br />
Existing configurations still work. But new configurations can't be done using the advanced UI anymore.<br />
<br />
Please use the integrated '''UC''' and '''federation''' features of the '''innovaphone PBX'''.<br />
<br />
For presence synchronization with other systems we recommend using<br />
* '''innovaphone myApps Connector for Microsoft 365'''<br />
* '''Connector for kuando®'''<br />
* '''Calendar App'''<br />
==Known Problems==<br />
===Long Update-duration===<br />
When you update, it can be up to 10 minutes before you have access to your app platform again.<br />
===Fax from 14r1 to 13r3 App===<br />
14r1 faxes are sent with 400dpi by default, which the 13r3 app doesn't support and you will see a [[Reference14r1:Concept_App_Service_Fax#Known_Issues|non working incoming fax]]. The second try with lower resolution will work.<br />
<br />
== Resources Considerations ==<br />
New firmware always has more features which in turn requires more resources. Growing firmware will thus consume both more flash and RAM for sure. A given system configuration will run flawlessly after a firmware largely only if there is still enough memory left after boot.<br />
<br />
Standard configurations which are according the specs will run on all supported hardware. However, unusual configurations may not. It is a good idea to examine both flash and RAM memory left on high load situations in your existing configuration to see if there is enough resources left for an upgrade. Please find details in Reference:Device Health Check.<br />
<br />
=== RAM ===<br />
As a rough rule of thumb, a 14r1 release will consume the same amount of RAM compared to a v13r3 firmware.<br />
<br />
=== Flash Memory ===<br />
As a rough rule of thumb, a v14r1 release will consume ~ 1.8 MB more flash memory compared to a v13r3 firmware.<br />
New firmware comes with new code for new features which consumes more flash memory for the firmware image. For this reason, devices may run out of flash memory during upgrade to v14r1. Here is the recommended procedure for upgrade on such devices:<br />
<br />
* save entire configuration<br />
* reset to factory defaults<br />
* load saved configuration (this will reorganize the flash memory usage)<br />
* upgrade to new firmware<br />
<br />
When there is still not enough flash memory available to store the new firmware (Web GUI ends up in a ''Firmwareupdate failed:no space'' / Update client end in a ''Error 0x00130001 Major FLASHMAN0 no space'' event) please open a support case with your current configuration file.<br />
<br />
<!--<br />
== Applies To ==<br />
This information applies to:<br />
<br />
* All 13r3 capable innovaphone devices<br />
: For a general overview of the upgrade process and a list of supported devices with 13r3, see [[Howto:Firmware Upgrade]]<br />
<br />
== Migration Policy ==<br />
Here is how you upgrade a system to 13r3 from 13r2. For hints on upgrading a system to 13r2 see [[Howto:V13_Firmware_Upgrade_V13r1_V13r2]].<br />
<br />
=== Single AP/Single PBX===<br />
* Create a new update job in devices and select 13r3 as major version<br />
<br />
===Shared AP/Several PBX'es===<br />
We generally recommend to upgrade the entire system (endpoints, PBXs, AP) in ''one shot''.<br />
<br />
If this is not possible for any reason, the recommended sequence is:<br />
# update the master PBX<br />
# update the slave PBX and all its endpoints location by location<br />
# update the App Platform to the latest build<br />
# update all Apps<br />
# perform the configuration changes described below<br />
<br />
Note that during the update time frame, some App data such as Reporting and Recording may be incomplete.<br />
<br />
We recommend to review all the configuration changes described below before you begin the update.<br />
<br />
== Configuration Changes ==<br />
In 13r3 we have introduced some new features which are automatically configured if you use the installer to setup your new 13r3 from scratch. If you upgrade an existing installation, you have to configure the following settings manually.<br />
<br />
=== Default SRTP key exchange value in device configuration of Phones/Interfaces ===<br />
Before v13r3, the default value for SRTP key exchange was SDES-DTLS - with v13r3 it changes to the more secure DTLS-SDES. Therefore innovaphone devices now use DTLS instead - if the called endpoint has this preference. To make sure the more secure key exchange is used, we recommend adjusting the ''SRTP key exchange setting'' in the Devices App, ''Device Configuration'' for ''[Phone]'' and ''[Analog phone/fax]''. An exception to this recommendation is if you are using old phone models (IP110A, IP240A) or gateway models (IP24, IP22) in your setup - as these may have CPU performance issues in the connection setup phase. In that case, use '''SDES-DTLS''' as value for the ''SRTP key exchange'' for all devices, not only for the old phone models.<br />
<br />
===Group Fax===<br />
The fax object has to be configured as external resource of a group fax object in 13r3. It is therefore '''mandatory''' to assign the fax object as an external resource to all group fax objects after the upgrade - via PBX Manager .<br />
<br />
In the Advanced UI, you have to enter the h323/sip name of the fax object in the field '''External Resource Destination'''.<br />
<br />
Also, with 13r3, group faxes can have their own international fax number and company name, so you should fill in these fields, or else the fax header will be empty.<br />
<br />
===Contacts App | User drop-down menu for sharing address books===<br />
With 13r3, personal address books can be created and shared with users/groups. To have a search and drop-down menu in the sharing step, you have to activate the "Admin" option at the "ContactsApi" app object (tab "App") over the Advanced UI. Otherwise, no results will be shown, and you have to enter the correct h323 name of a user.<br />
<br />
===Improved Conference Rooms===<br />
* The ''Web Access allowed'' checkbox in the conference app has to be set in order to access the Conference Web Access UI.<br />
: To be able create HTTP links for external participants, the conferencing App is required.<br />
* Update the [[Reference13r3:PBX/Objects/Conference/Announcement_types#Sample_Announcement_Files | announcements]] for your conference rooms, to include also the ''Web Access announcements''. <br />
* it is recommended to use a second Turn-Server listening on TCP port 443 as a fallback option for external conference participants, with local firewalls not allowing access to your standard Turn-server. Configure this second Turn-Server in [[Reference13r3:IP4/General/STUN#TURN_Extern | IP4/General/STUN -> Turn Extern]] [[User:Sga|Sga]] TBD: info zu inno Turn Fallback server<br />
* 13r3 adds a search-API for the Conference Rooms, allowing users to search for Conference room names from their Phone, Softphone or RCC App. Each conference object provides its own search API which is named like ''<Name-of-conference-object>.search'' and access to it can be granted using the App-Section of a PBX-object. The PBX-Manager Plugin for Conferences offers also an option to add the rights for all conference rooms and their search-APIs to the Config-User and/or Config-Admin template.<br />
<br />
=== NTLM/OAuth===<br />
13r3 introduces OAuth2 Windows Authentication for myApps. If your are currently using NTLM/Netlogon for authentication, you might want to consider upgrading it OAuth2, since this authentication mechanisms is more secure. See [[Reference13r3:Concept OAuth2 Windows Authentication]] for details. <br />
In 13r3 only Microsoft AD FS is supported as OpenID Server.<br />
<br />
===HTTP-Proxy===<br />
13r3 introduces [[Reference13r3:Concept_myApps_platform_services#HTTP_proxy_support | HTTP-Proxy]] support for myApps. Now, myApps follows by default the OS-settings regarding HTTP-Proxy. This might affect existing setups when updating from 13r2 to 13r3. We recommend to check before a 13r3 update if an HTTP-Proxy is used and if so, test before the update for interop problems between myApps and the used HTTP-Proxy.<br />
<br />
===Physical Location===<br />
The Softphone App supports in 13r3 the determination of the Physical Location. Similar to an IP-Phone, this is determined automatically based on HTTP-Redirects of the myApps PBX-login process. If you use PBX-objects with activated "Local" option (often this is a Trunk Line object), the determined physical location might lead to a different behavior when calling these objects. If this leads to unwanted call flows, you can either adjust the initial myApps registration PBX or configure the Physical location manually at the Softphone.<br />
<br />
== Application Platform and its applications ==<br />
===App Platform image===<br />
<br />
It is not mandatory but recommended to [[Reference13r3:Concept_App_Platform#Update_of_the_App_Platform_itself | update the App Platform image]] to the latest version to receive a newer kernel and updated Linux packages.<br />
<br />
===Recordings App===<br />
Please follow the procedure described in the [[Reference13r3:Concept_App_Service_Recordings#Upgrade_from_V13r2_to_V13r3_Recordings_App | Recordings App concept article]].<br />
<br />
===Reports App===<br />
The Reports App will improve missed calls queries by adding a new database index during the first start after an update. Depending on the size of the reporting database, this database adjustment can take some minutes and results also in high CPU-load and missed CDRs during that time.<br />
<br />
=== App Service Queues, Switchboard App ===<br />
To allow monitoring of all queues by all switchboard users, configure a group (e.g. with the name ''queues'') in the PBX and assign it as '''Static''' to all Waiting Queues used by the Switchboard App and assign it also as '''Static''' and '''Active''' to all Switchboard Users.<br />
<br />
<br />
===Apps new in 13r3===<br />
New Apps will not be installed automatically by the 13r2 to 13r3 upgrade. The installation description of new 13r3 apps is usually in the concept article. New apps are:<br />
* [[Reference13r3:Concept_App_Service_Connector_for_kuando®#Configuration | Connector for kuando®]]<br />
* [[Reference13r3:Concept_App_Service_Connector_for_Microsoft_365 | innovaphone myApps Connector for Microsoft 365]]<br />
<br />
== Changes visible to end customers ==<br />
Listed here are changes that should be communicated by resellers to end users prior to a 13r3 upgrade, as the change will be visible/audible in the behaviour of the application/device.<br />
===Rework of Phone & Softphone UI===<br />
Several feature and UI improvements, see 'Features' in [[Reference13r3:Concept_App_SoftphoneApp#Features | Reference13r3:Concept App SoftphoneApp ]] and [[Reference13r3:Concept Multi-Video-Conference]].<br />
<br />
===CallForwarding in Profile App===<br />
Added configuration option on call diversions: call forwardings depending on ''myApps online'' and ''Presence'' state. This can be switched on or off by the user in the Profile App.<br />
<br />
===Focus App===<br />
The "App focus" can be used to define a default app for the user. It is started and shown automatically when myApps is loaded. When closing other apps, the app is shown instead of the home screen. Users can activate (default) or deactivate the Focus function in their myApps Client settings (hamburger menu). See 'Features' in [[Reference13r3:Concept_myApps#Features | Reference13r3:Concept myApps]]<br />
<br />
===Pin Apps===<br />
Apps can be pinned to the main window. Pinned apps are always running and can't be closed. They are also started automatically when the myApps client is loaded. This setting is locally stored per-client. So you can pin different apps on your computer and your smartphone. See 'Features' in [[Reference13r3:Concept_myApps#Features | Reference13r3:Concept myApps]]<br />
<br />
=== Fax App ===<br />
The [[Reference13r3:Concept_App_Service_Fax#Mail_Configuration | Mail Configuration]] section of the Fax App offers in 13r3 additional options:<br />
* Transmission confirmations<br />
* Transmission reports for outgoing fax jobs as PDF<br />
* Error notifications for outgoing fax jobs<br />
<br />
==Hardware Restrictions==<br />
For a list of devices with no/restricted support in 13r3, see the [[Howto:Firmware_Upgrade#Version_13r3 | Firmware Upgrade article]].<br />
<br />
==Known Problems==<br />
<br />
===Boolean App===<br />
Following the update to 13r3, it is not possible to edit Boolean Apps using the myApps client (except when using the myApps client in a web browser). To resolve this issue, you will need to delete the approxy folder for all users who use the boolean app. You can locate this folder in the following directory: %USERPROFILE%\AppData\Local\innovaphone\myApps.<br />
Reload or restart myApps afterwards.<br />
<br />
This behavior can also occur under Mac OS. Here the problem can be solved by uninstalling the app and then reinstalling it again.<br />
<br />
===Current major issues that will be fixed with upcoming 13r3SR1 release===<br />
* [[Support:PBX_13r3_final_trap_with_Unknown_Registrations | PBX 13r3 Final trap with Unknown Registrations]]<br />
* [[Support:13r3final_App_Platform_-_SMTP_delivery_may_fail_due_to_IPv6_DNS_results | 13r3final App Platform - SMTP delivery may fail due to IPv6 DNS results]]<br />
* [[Support:13r3final PBX randomly does not execute CFU | 13r3final PBX randomly does not execute CFU]]<br />
<br />
More info on other 13r3 SR1 changes can be found in the [[Reference13r3:Release_Notes_Firmware#13r3_Service_Release_1 | Release Notes]].<br />
<br />
===Regex Expression===<br />
We updated the regular expression syntax which is used for the AD replication. A '\' followed by a non-special character is no longer allowed.<br />
<br />
== Resources Considerations ==<br />
New firmware always has more features which in turn requires more resources. Growing firmware will thus consume both more flash and RAM for sure. A given system configuration will run flawlessly after a firmware largely only if there is still enough memory left after boot.<br />
<br />
Standard configurations which are according [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported | the specs ]] will run on all supported hardware. However, unusual configurations may not. It is a good idea to examine both flash and RAM memory left on high load situations in your existing configuration to see if there is enough resources left for an upgrade. Please find details in [[Reference:Device Health Check]].<br />
<br />
=== RAM ===<br />
As a rough rule of thumb, a 13r3 release will consume the same amount of RAM compared to a v13r2 firmware.<br />
<br />
=== Flash Memory ===<br />
As a rough rule of thumb, a v13r3 release will consume ~ 0.5 MB flash more compared to a v13r2 firmware.<br />
<br />
New firmware comes with new code for new features which consumes more flash memory for the firmware image. For this reason, devices may run out of flash memory during upgrade to v13r3. Here is the recommended procedure for upgrade on such devices:<br />
<br />
* save entire configuration<br />
* reset to factory defaults<br />
* load saved configuration (this will reorganize the flash memory usage)<br />
* upgrade to new firmware<br />
<br />
When there is still not enough flash memory available to store the new firmware (Web GUI ends up in a ''Firmwareupdate failed:no space'' / Update client end in a ''Error 0x00130001 Major FLASHMAN0 no space'' event) please open a support case with your current configuration file.<br />
<br />
=== Conferences ===<br />
Since Conferences now use [[Reference13r3:Concept_Multi-Video-Conference | multiple video streams]] to display each conference participant (in 13r1 & 13r2 only the video stream of the speaker was shown), the number of concurrent video streams used in a single conference increased. Please review this [[Reference13r3:Concept_Multi-Video-Conference#Bandwidth_Consideration | bandwidth considerations]]. As a result, a device hosting a multivideo conference on its CONF or SCNF interface has a higher CPU load in 13r3 than in 13r2.<br />
<br />
[[Image:13r3_conference_bandwidth.png|700px|Estimated Conference bandwidth requirements]]<br />
<br />
The graph shows the bandwidth needed for a device running the CONF interface to participate in a conference. The values shown are for when all participants are in gallery mode (which is the worst case scenario) and in fullscreen presentation mode (which is the best case scenario). In general, the actual bandwidth needed will fall somewhere between these two extremes. <br />
<br />
To calculate the CPU requirements for the device, you can use the following formula: <code>CPU% = Bandwidth (in Mbps) / x</code>, where x is<br />
* 0.42 for a xx10 device <br />
* 0.18 for IP311 and IP411 devices<br />
* 0.56 for a xx11 device<br />
* 3.6 for a xx13 device <br />
<br />
For example, if you are hosting a conference with 10 participants on a xx11 device in gallery mode, the upstream and downstream bandwidth would be 25 Mbps. Using the formula, you can calculate the CPU requirements as follows: CPU% = 25 Mbps / 0.56 = 44.64%. This means that the device should have at least 45% free CPU capacity to handle the conference.<br />
<br />
From the client's perspective, the worst case values for upstream bandwidth (when presenting) would be 1 Mbps, and for downstream bandwidth (when in a gallery mode conference with 20 participants) would be 5 Mbps.<br />
<br />
== Related Articles ==<br />
*[[Howto:Firmware_Upgrade]]<br />
* [[Howto:Firmware Upgrade V11r2 V12r1]]<br />
* [[Howto:Firmware Upgrade V12r1 V12r2]]<br />
* [[Howto:Firmware Upgrade V12r2 V13r1]]<br />
<br />
*[[Support:PBX_V13r3_Final_trap_with_Unkown_Registrations]]<br />
<br />
[[Category:Howto|{{PAGENAME}}]]<br />
--></div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70315Reference14r1:Concept App Platform2023-12-15T10:57:46Z<p>Hna: /* AP Manager settings */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Let's Encrypt ==<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Repliaction ==<br />
App Platform [[#App_Platform_replication|replication settings]] <br />
<br />
== Registered Access Domains ==<br />
<br />
== Update ==<br />
Updates the App Platform to the latest image available on the App Store.<br />
<br />
== Restart ==<br />
Restarts the App Platform.<br />
<br />
== Shutdown ==<br />
Shuts down the App Platform.<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and up<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started.<br><br />
This further enables the configuration of the instance through its respective PBX Manager plugin. <br><br />
Uninstalling the app will remove the app service and the corresponding instance.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed. <br><br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled. <br><br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70313Reference14r1:Concept App Platform2023-12-15T10:40:30Z<p>Hna: /* Dedicated AP for each user */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Let's Encrypt ==<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Registered Access Domains ==<br />
<br />
== Update ==<br />
Updates the App Platform to the latest image available on the App Store.<br />
<br />
== Restart ==<br />
Restarts the App Platform.<br />
<br />
== Shutdown ==<br />
Shuts down the App Platform.<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and up<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started.<br><br />
This further enables the configuration of the instance through its respective PBX Manager plugin. <br><br />
Uninstalling the app will remove the app service and the corresponding instance.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed. <br><br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled. <br><br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70312Reference14r1:Concept App Platform2023-12-15T10:38:29Z<p>Hna: /* Shared AP between users */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Let's Encrypt ==<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Registered Access Domains ==<br />
<br />
== Update ==<br />
Updates the App Platform to the latest image available on the App Store.<br />
<br />
== Restart ==<br />
Restarts the App Platform.<br />
<br />
== Shutdown ==<br />
Shuts down the App Platform.<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and up<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started.<br><br />
This further enables the configuration of the instance through its respective PBX Manager plugin.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed. <br><br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled. <br><br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70311Reference14r1:Concept App Platform2023-12-15T10:38:00Z<p>Hna: /* Dedicated AP for each user */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Let's Encrypt ==<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Registered Access Domains ==<br />
<br />
== Update ==<br />
Updates the App Platform to the latest image available on the App Store.<br />
<br />
== Restart ==<br />
Restarts the App Platform.<br />
<br />
== Shutdown ==<br />
Shuts down the App Platform.<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and up<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started.<br><br />
This further enables the configuration of the instance through its respective PBX Manager plugin.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed.<br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled.<br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70310Reference14r1:Concept App Platform2023-12-15T10:36:18Z<p>Hna: /* AP Manager settings */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Let's Encrypt ==<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Registered Access Domains ==<br />
<br />
== Update ==<br />
Updates the App Platform to the latest image available on the App Store.<br />
<br />
== Restart ==<br />
Restarts the App Platform.<br />
<br />
== Shutdown ==<br />
Shuts down the App Platform.<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and up<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started. <br />
This further enables the configuration of the instance through its respective PBX Manager plugin.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed.<br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled.<br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70305Reference14r1:Concept App Platform2023-12-15T10:29:28Z<p>Hna: /* AP Manager settings */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Let's Encrypt ==<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Registered Access Domains ==<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and up<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started. <br />
This further enables the configuration of the instance through its respective PBX Manager plugin.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed.<br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled.<br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70303Reference14r1:Concept App Platform2023-12-15T10:28:37Z<p>Hna: /* Security */</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Current Webserver certificates'': shows the current certificates with the ability to download them. <br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Registered Access Domains ==<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and up<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started. <br />
This further enables the configuration of the instance through its respective PBX Manager plugin.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed.<br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled.<br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_App_Platform&diff=70300Reference14r1:Concept App Platform2023-12-15T10:24:21Z<p>Hna: Created page with "= General = * V13 uses [https://buildroot.org/ buildroot] * this is an own (innovaphone) collection of packages * For further information see: [https://buildroot.org/docs.html Buildroot Documentations] == Requirements == * V13 or up * Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) * Gateway (arm64): IPx13 (with m2 SSD) * Virtual (x86_64) ** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine..."</p>
<hr />
<div>= General =<br />
* V13 uses [https://buildroot.org/ buildroot]<br />
* this is an own (innovaphone) collection of packages<br />
* For further information see: [https://buildroot.org/docs.html Buildroot Documentations]<br />
<br />
== Requirements ==<br />
<br />
* V13 or up<br />
* Gateway (arm): IPx10 (with CF card) or IPx11 (with mSATA SSD) <br />
* Gateway (arm64): IPx13 (with m2 SSD)<br />
* Virtual (x86_64)<br />
** HyperV with [https://docs.microsoft.com/de-de/windows-server/virtualization/hyper-v/deploy/upgrade-virtual-machine-version-in-hyper-v-on-windows-or-windows-server#supported-virtual-machine-configuration-versions VM-configuration Version] 6.2 (minimum: Windows 10 or Windows Server 2016)<br />
** VMWare<br />
<br />
== Default credentials ==<br />
<br />
'''During INSTALL, the default passwords are replaced with the global Admin PW!'''<br />
* SSH-Login with '''admin''' and '''ipapps'''<br />
* root login with '''root''' and '''iplinux''' (the root login is not directly possible, you have to login as admin first and use the command ''su root'')<br />
* manager App (web login) '''pwd'''<br />
<br />
= App Platform - arm/arm64 (Gateway)=<br />
<br />
* The installation image has a size of ~50MB. During installation, the following partitions are created<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 fat32: 200MB (contains ramdisk, rootfs and kernel)<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
<br />
When comparing potential performance of the IPxx11 platform compared to the IPxx10 platform, there are some major differences:<br />
* SSDs found in the xx11 are faster and more reliable than the CF found in the xx10<br />
* the available RAM for the App Platform (as specified in column ''RAM for LAP (GB) out of RAM'' in chapter ''Technical data and recommended number of users supported'' of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|How to implement large PBXs]]) is factor 6 larger on the xx11 (1,536 GB) than on the xx10 (0,256 GB))<br />
* the xx11 has gigabit Ethernet while the xx10 has 100Mbps Ethernet. The xx10 is therefore not well suited for Apps with larger network traffic, such as Recordings<br />
* the CPU of the xx11 (although it runs on the same frequency) is roughly 20% faster than the xx10<br />
<br />
While it is hard to predict the performance of the App Platform in a specific scenario, we see that in a real life environment an App Platform running on an xx11 platform can well support 150 users. The xx10 platform is estimated to support 120 users. Because CPU performance is the limiting factor, larger setups can be built based on the virtual machine platform (see [[#App_services_and_multi-threading|App services and multi-threading]] below).<br />
<br />
<references/><br />
<br />
= App Platform - x86-64 (Virtual Machine 64bit) =<br />
<br />
* The default disk size is 16GB. It should be increased '''before''' the first start if needed!<br />
* Multiple CPUs are supported, default is one CPU<br />
* default RAM: 512MB<br />
* static IP address, DNS, Gateway can be configured with the command '''setip''' on the console. Run '''setip --help''' to get a list of parameters. (Example: setip --addr=x.x.x.x --mask=x.x.x.x --gateway=x.x.x.x --dns1=x.x.x.x) <br />
* If you have permission problems change to su user (Password is iplinux or your new admin password) <br />
* To figure out your ip address you can use the command: ''ip address'' on the console.<br />
* '''loadkeys de''' can be used to change to german keyboard layout (etc.)<br />
* partitions<ref name="partition-size">Maximum partition sizes are given. The real sizes are returned by the linux 'df -h'-command. These real values will be lower, but can grow in the future with new releases.</ref>:<br />
** /dev/sda1 ext2: 350MB (contains ramdisk, rootfs and kernel)<br />
*** the real partition format size is smaller but there is no need to monitor sda1 as sda1 won't grow during usage of the App Platform<br />
*** sda1 is completely exchanged during an image update and its size might have changed but will never exceed these 350MB<br />
** /dev/sda2 ext4: depends on disk size (contains databases, log files and apps)<br />
** /dev/sda3 ext4: 500MB (contains the rootfs)<br />
** /dev/sda4 swap: 512MB<br />
* VMWare Tools: Open VM Tools<br />
* Qemu Guest Agent: installed since 110032<br />
** The qemu guest agent can be configured in Proxmox with ''Virtio'' or ''ISA''. You '''must''' use '''ISA''', as Virtio is currently not supported.<br />
<br />
<references/><br />
<br />
= Installation =<br />
==ARM Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-armel.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==ARM64 Gateway==<br />
<br />
If you setup a Gateway with the install procedure, the App Platform is installed automatically (Https Download has to be allowed and shouldn't be blocked by any firewall.)<br><br><br />
You can also install it manually:<br />
* Open App Platform -> General and '''Enable Linux Support'''. Restart the gateway.<br />
* You need to enable Proxy-ARP on [[{{NAMESPACE}}:IP4/ETH/IP|ETH0]] or [[{{NAMESPACE}}:IP4/ETH/IP|ETH1]], so your Gateway and the Linux Appliance will share the same physical interface.<br />
* Open App Platform -> IP and configure the IP settings of the App Platform. Restart the Gateway.<br />
* Open App Platform -> Installation and select the given version or enter an own path to the ''app-platform-arm64.img'' image file.<br />
* The installation runs without any further required step.<br />
<br />
==Virtual machine==<br />
<br />
* Import the image into your server environment.<br />
* Edit the disk size, if needed.<br />
* Start the machine and wait until it reboots and starts again.<br />
* Note: If you need to access an IP addresses available through a VPN connection from from inside the virtual machine, it could be that you need to set the network of your VM to NAT (and also add the URL for an IP to /etc/hosts)<br />
<br />
[https://wiki.innovaphone.com/index.php?title={{NAMESPACE}}:Concept_Innovaphone_Virtual_Appliance#Configuration More Configuration Hints regarding VM Ware]<br />
<br />
== Backup of the Apps ==<br />
<br />
Each App Service can have multiple instances and each instance has its own database. The manager app itself also has its own database.<br><br />
There are no other files which need to be backuped.<br><br />
The standard way to backup the databases is through the Devices App [[{{NAMESPACE}}:Concept_App_Service_Devices#Backups]].<br><br />
<br><br />
An alternate way is to use a command file which is similar to the command files from the firmware.<br />
<br />
===Commands===<br />
* '''times''' 0,12 # backup only at 0 or 12 o'clock<br />
* '''backup-instances''' http://user:pw@ip/path/#I-#D.dump PUT<br />
** PUT and POST are supported, all instances including the manager itself are saved<br />
* '''backup-instance''' http://user:pw@ip/path/#I-#D.dump apidemo example.com PUT<br />
** backup a single instance with instance name and instance domain<br />
* '''backup-manager''' http://user:pw@ip/path/#I-#D.dump<br />
<br />
===Hash parameters===<br />
* #L App Platform label (neu), e.g. 10024<br />
* #A App label (neu), e.g. 130004<br />
* #I instance name (neu), e.g. reporting1<br />
* #D instance domain (neu), e.g. innovaphone.com<br />
* #m MAC address of the LAP, e.g. 00ab11eeff<br />
* #d Current date and time (plain UTC without daylight saving and timezone adjustments) 20051010-170130<br />
* #bn rolling backup index<br />
* ## escapes a hash mark<br />
<br />
= App Platform Infrastructure and Concept =<br />
== Webserver ==<br />
The app platform includes a webserver that is highly optimized for handling many Websocket connections at a low memory footprint.<br />
All apps use that webserver by registering for specific HTTP subpath. So they can all use the same HTTP/HTTPS ports - typically the standard ports.<br />
<br />
=== Import Custom SSL Certificate ===<br />
You have to upload a PEM Certificate with the following chain structure and without password encoding.<br />
<br />
-----BEGIN CERTIFICATE-----<br />
(certificate: your_domain_name.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Intermediate certificate: DigiCertCA.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN CERTIFICATE-----<br />
(Root certificate: TrustedRoot.crt)<br />
-----END CERTIFICATE-----<br />
-----BEGIN RSA PRIVATE KEY-----<br />
(certificate Key: your_domain_name.key)<br />
-----END RSA PRIVATE KEY-----<br />
<br />
If you have problems generating the complete and correct certificate chain, you can use tools such as https://whatsmychaincert.com/ as an aid.<br />
'''Please keep in mind that you never give away the private part of your key.'''<br />
<br />
=== Known issues ===<br />
*The app platform webserver can use only the default http/https ports 80/443.<br />
*By design, there is no possibility to restore the default webserver certificate on the App Platform, if another certificate was once uploaded.<br /><br />
**If nevertheless needed, you must login with Putty (see [[#How_to_retrieve_files_from_the_AP | Retrieve files]]) and execute these commands as root:<br />
**''psql -d manager -c "DELETE FROM config WHERE name='webserverCertificate'"''<br />
**''/etc/init.d/S92manager restart''<br />
*The app platform webserver interprets URLs case-sensitive. In other words, <nowiki>http://<addr>/file.txt</nowiki> is not the same as <nowiki>http://<addr>/FILE.TXT</nowiki><br />
<br />
== Database ==<br />
The app platform creates a database for each app instance with a given password. In the installer there will be used randomly generated passwords. You can set a new database password for every instance in the Application Platform.<br />
<br />
The apps should store all data in that database. That makes sure that a consistent backup and restore of app instances can be done by the app platform manager.<br />
In hosted scenarios, having separate databases for each instance also makes sure that the data of different customers are clearly separated and can easily be moved from one physical platform to another.<br />
<br />
The default configuration decline database request from extern. If you need external access you can change the PGSQL configuration (as root) in the file ''/mnt/sda2/pgsql/pg_hba.conf''.<br />
After editing pg_hba.conf, the database-service has to be restarted with the command <code>/etc/init.d/S50postgresql restart</code><br />
(Please think about it before you do it, because a better way is to create your own local app with local database access.)<br />
<br />
You can find the official documentation for the pg_hba.conf here: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html<br />
<br />
Please note that you do this on your own responsibility, that it makes sense to create a backup of the original pg_hba.conf <br />
and that you may break your database server if you do not know exactly what you do!<br />
<br />
Sometimes the Apps are not proper working after this. You can wait a while until everything is working again or you go the hard way:<br />
* stop the manager<br />
** <code>/etc/init.d/S92manager stop</code><br />
* restart the database-service (maybe not really necessary, but makes a good feeling)<br />
**<code>/etc/init.d/S50postgresql restart</code><br />
* start the manager<br />
** <code>/etc/init.d/S92manager start</code><br />
<br />
== App Platform Manager ==<br />
The App Platform Manager is the central component of the App Platform. It does the following:<br />
* Installing app services by downloading the binaries from an app store.<br />
* Running and monitoring app services. If an app service crashes it is restarted, automatically.<br />
* Management of app instances and providing them with the environment they need:<br />
** A database<br />
** A webserver path<br />
** A password for authentication<br />
* Backup and restore of app instances.<br />
* Collecting debug information like tracing and crash dumps.<br />
* System monitoring (CPU usage, memory usage, etc).<br />
<br />
== App Services ==<br />
App services are runned by the App Platform Manager. They implement an interface that is used by the manager to start, stop and configure app instances. Each service runs in a separate child process of the manager.<br />
<br />
== App Instances ==<br />
The actual functionality of an app service is provided by app instances. They run in the same process as the app service but have a distinct webserver path and their own database. There can be 0..n instances of an app service. Instances can optionally host (web) apps that can be opened in the myApps client.<br />
<br />
Each instance of an App service has two passwords. The instance password itself and a database password. If you want to change it you must update the password on both sides.<br><br />
The instance password must match to the password in the corresponding PBX App objects, while one instance can have different App objects.<br><br />
The database password must be just known to the manager and not outside of the App Platform.<br />
<br />
The ''Database name'' and ''Database user'' are both limited to a length of 63 characters. By default, the App Manager would create ''<domain>''_''<instance-name>'' as value for both. This is why it is recommended to use instance names so that length(name) + length(domain) is less than 63 characters. However, if this is not possible, you can manually shorten the suggested values (both must still be unique on your App Platform).<br />
<br />
=== Cleanup database ===<br />
You can cleanup the instance database inside the instance settings. This starts the vacuumdb process for the instance database which frees disk space of deleted rows.<br />
Note that this process locks the database and that sufficient disk space is needed to complete it!<br />
<br />
=== External database host ===<br />
You can optionally configure an external database host, if the database shall be hosted on an external host.<br/><br />
Note that the App Platform Manager still creates a local database, which is then not used as long as the external host is configured.<br />
<br />
What are external databases useful for?:<br />
* User data is too large (files are stored as BLOB in the database)<br />
* Other (non-innovaphone) database servers are to be used due to other regulations<br />
* There is already an external database cluster with its own backup/restore processes which should be used<br />
* More performance is required (please note that a local UNIX socket provides much faster results than a remote database server). Depending on the app and the task of the app, it can still be useful to use a separate server if it is faster.<br />
<br />
==== Supported database types ====<br />
In principle, ''PostgreSQL'' and ''MySQL'' are supported. However, please note that the respective app must be designed for the target database server type. If an app has been developed for PostgreSQL, it cannot be operated on a MySQL server.<br />
<br />
'''Please note:''' All innovaphone apps are developed exclusively as PostgreSQL apps.<br />
<br />
MySQL therefore only makes sense if own apps are developed and MySQL or certain MySQL features are to be used. For such apps, it is very important to deactivate the automatic Application Platform APP-Backup.<br />
The database backup process of the App Platform uses PostgreSQL backup commands, which is why the backup would fail, so the app must be excluded from the backup, and you must take care of the backup yourself.<br />
<br />
==== Database creation ====<br />
If you use an external database, you have to create the database itself.<br />
The App Platform Manager itself creates a PostgreSQL database like this (you may respect this on your database host to be compatible with the database implementation inside the Apps):<br />
* CREATE DATABASE "dbname" ENCODING 'UTF8';<br />
* CREATE USER "dbuser";<br />
* ALTER USER "dbuser" WITH PASSWORD 'dbpassword';<br />
* GRANT ALL PRIVILEGES ON DATABASE "dbname" TO "dbuser";<br />
* ALTER DATABASE "dbname" OWNER TO "dbuser";<br />
* REVOKE CONNECT ON DATABASE "dbname" FROM public;<br />
<br />
==== Database connection ====<br />
There are different possibilities to specify the host. You can use a DNS-Name, IPv4 or IPv6. A port can be optionally added with a colon.<br />
<br />
Our PostgreSQL implementation sets sslmode=prefer, so SSL is used by default if enabled on the server.<br />
<br />
==== Backup/Restore ====<br />
External databases are still backuped as normal, but you can't restore such a database with the App Platform Manager on the external host! You must restore such a dump manually on your database host.<br />
<br />
==== Database redundancy ====<br />
In principle, it is possible to create redundancies for failure scenarios through this function.<br />
<br />
However, there are different scenarios that need to be evaluated on a case-by-case basis:<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''offline''') where multiple apps access the same database.<br />
** This mode of operation is legal as long as you can really ensure that only one App Platform is active at a time.<br />
<br />
* One database, multiple App Platforms (primary online / secondary '''online''') with multiple apps accessing the same database.<br />
** This operating mode cannot be used for innovaphone apps, as the app itself would have to be developed for such a mode, which it is not.<br />
<br />
However, we advise great caution here! The use of the same databases from different nodes may only be used if you can ensure that the databases or runtime environments of apps cannot get into a ''split-brain'' mode.<br />
<br />
== Relationship between app instances and app objects in the PBX ==<br />
Typically an app instance is connected to one or more app objects in a customer PBX. This is done by configuring the same parameters on both sides:<br />
* URL<br />
* Password<br />
The password is used by the PBX for authenticating itself, users and services against the app instance.<br />
<br />
Some apps need a websocket connection with the PBX. When "websocket" is activated at the app object, the PBX establishes a websocket connection to the app instance and provides the APIs that are configured at the app object.<br />
<br />
=== Supported scenarios ===<br />
It is important to understand that the concept does not do any assumptions on how PBXes and APs are correlated. So you can have<br />
* One App Platform for one customer<br />
* One App Platform for many customers<br />
* Many App Platforms for one customer<br />
* Many App Platforms for many customers<br />
<br />
Attention: The V13 installer can only configure the scenario "''One App Platform for one customer''". If you want to have a different scenario, you have to configure it manually.<br />
<br />
For hosting or cloud scenarios you need special scenarios. Please refer our [[Howto:V13_Hosting| V13 Hosting]] instructions.<br />
<br />
=== Restrictions ===<br />
Currently we don't have redundancy for app instances or App Platforms.<br />
<br />
== Update of the App Platform itself ==<br />
The App Platform is build on top of buildroot and will receive updates and fixes from time to time.<br/><br />
You can update the used build inside the Manager App by using the '''Update''' button at the top.<br/><br />
<br />
It is strongly advised to make a full backup (VM) or at least backup all apps (Gateway) before you run such an update!<br />
<br />
== App services and multi-threading ==<br />
Each App Service runs in a single process with no multi-threading, independent of the instances of the App Service. However, each instance maintains its own database connection and the database responds to this connect with the creation of a new process. Each app service therefore uses 1+''n'' threads (where ''n'' is the number of instances). All communication between app service instances and their clients must pass the single-threaded web server. On platforms with multi-threading support (i.e. VMware or Hyper-V), up to 1 + ''m'' + ''m'' * ''n'' (with ''m'' being the number of Apps and ''n'' the number of instances per App) threads can be utilized.<br />
<br />
= AP Manager settings =<br />
<br />
== General ==<br />
* ''Enable Developer mode'': in developer mode, apps can be manually uploaded without an App Store<br />
* ''Disable App security'': each App has an own unix user and if this flag is set, the user can login with SSH for debugging<br />
* ''App Store URL'': the URL to the App Store where Apps are searched and also an update of the AP image itself<br />
* ''Devices app URL'': the URL to the Devices App to manage the AP through Devices<br />
* ''Devices app URL 2'': don't use!<br />
* ''App Platform DNS name'': currently not used<br />
* ''NTP server 1/2'': NTP servers for this AP (in addition to NTP servers retrieved by DHCP)<br />
* ''Timezone string'': <br />
* ''DNS server 1/2'': DNS servers for this AP (in addition to DNS servers retrieved by DHCP)<br />
* ''Database optimization time'': The database optimization process will be started at this hour (local time), with a random offset of up to 7 hours<br />
* ''Command file'': obsolete, use the Devices App for backups!<br />
<br />
== Security ==<br />
* ''Webserver certificate'': upload a webserver certificate in PEM format<br />
* ''AP Manager password'': the password to the web interface of the AP Manager (normally set through Devices)<br />
* ''Linux root user'': password of the root user (normally set through Devices)<br />
* ''Linux admin user'': password of the admin user (normally set through Devices)<br />
<br />
== Alarms and events ==<br />
* ''URL'': URL to the Events app<br />
* ''Username/Password'': HTTP credentials of the Events app<br />
* ''Email address'': an email address which will get emails on full disk alarms/warnings<br />
* ''Threshold'': All Apps will be stopped and an hourly email sent on reaching this threshold. An alarm is generated 10% before reaching this threshold and an email is sent every 24 hours.<br />
<br />
== SMTP ==<br />
SMTP server settings for sending emails from within the AP Manager.<br />
<br />
== Registered Access Domains ==<br />
<br />
= App Platform replication =<br />
<br />
== Requirements ==<br />
<br />
* 13r3 on both standby servers and the primary server<br />
* at least an App Platform image starting with version 110002 (otherwise postgresql is too old)<br />
* standby and primary servers must have the same system architecture<br />
** arm gateways (IPx11) just with arm gateways (IPx11)<br />
** arm64 gateways (IPx13) just with arm64 gateways (IPx13)<br />
** x86_64 virtual machines just with x86_64 virtual machines<br />
* the disk size on standby servers must be at least equal as the disk size on the primary server<br />
<br />
== General ==<br />
The configuration is done within the App Platform Manager next to the settings button under "Replication".<br />
<br />
=== Off ===<br />
No replication is done at all.<br />
<br />
=== Primary ===<br />
The App Platform acts as primary server for one or multiple standby servers.<br/><br />
Max 8 standby servers can be configured.<br/><br />
<br/><br />
Every standby server must get a unique name on the primary server which is then also configured on the standby server itself. This is due to the fact, that the primary server preserves data for every standby server while it's not reachable.<br/><br />
A standby server name must be a valid domain name, although this name is currently not used as DNS name (but might be used in the future).<br/><br />
<br/><br />
The password is randomly pregenerated and must be used as handed by the App Platform Manager.<br />
<br />
==== PostgreSQL port ====<br />
The default PostgreSQL port is 5432 and can't be changed on the primary. It must be reachable through your firewall or at least forwarded on a different port towards this App Platform on port 5432.<br />
<br />
=== Standby ===<br />
Configure the password from the primary and one of the not yet used standby server names.<br/><br />
The host and port must be reachable through the network. You can specify a non default port which then must be forwarded somewhere else to port 5432 on your primary.<br />
<br />
*Note: Do '''not''' configure the same standby name on different standby servers, as this will break the replication on at least one standby!<br><br />
*Note: On a standby, all '''locally installed apps are removed''' during installation<br />
<br />
== Failure detection ==<br />
<br />
The replication state on both primary and standby servers are continuously monitored.<br/><br />
In case of a broken connection, an alarm is triggered at once and just cleared if the failure goes away.<br/><br />
<br/><br />
If such an alarm lasts for 5 minutes an email is send. The recipient address must be configured in the App Platform Manager settings under "Alarms and Events" and you must also provide a valid SMTP configuration.<br />
<br />
== Failover ==<br />
<br />
There is no automatic failover procedure. If you detect the failure state, you must get active yourself.<br />
<br />
=== Standby down ===<br />
<br />
Fix the standby server and see if the replication comes up again. If not, setup a new standby server which will replicate the whole database cluster from scratch.<br />
<br />
=== Primary down ===<br />
<br />
If the primary is down and cannot be brought into life again, you must take the following steps, depending on your configuration:<br />
<br />
==== One standby server ====<br />
<br />
* Disable the replication in the replication configuration. You will then have a standalone App Platform afterwards.<br />
<br />
==== Multiple standby servers ====<br />
<br />
* Change the replication type on one of the standby servers from standby to primary. Please note that the other standby entries must still exist here (they are automatically offered)!<br />
* Change the host entry on the other standby servers to the new standby server. The standby server will sync the whole database cluster again, which will take time.<br />
<br />
==== Configuration changes ====<br />
<br />
You must also tell the PBXes and other tools to use the new primary server.<br />
<br />
* You may simply change the IP address behind the DNS of your primary server to point to the new primary server.<br />
* Without DNS, you must currently modify the configuration by replacing the IP address of the old primary with the new address. <br />
** This must be done in every master PBX configuration.<br />
** This must be done in every App configuration which may use this IP address, e.g. Devices which rolls out an alarm server configuration<br />
<br />
== Technical backgrounds ==<br />
<br />
=== Streaming replication ===<br />
<br />
We use the asynchronous [https://www.postgresql.org/docs/9.3/warm-standby.html#STREAMING-REPLICATION streaming replication of PostgreSQL]. A transaction thus just waits for a commit on the primary server. Standby servers will receive the transaction asynchronously afterwards to avoid a reduced writing performance.<br/><br />
A primary server keeps the neccessary WAL files for every standby server until the standby fetched the neccessary information.<br/><br />
This fact can lead to higher disk space usage on the primary if one or multiple standby servers are offline for a while.<br />
<br />
Take care to fix broken replications as soon as possible to avoid a full disk on the primary server!<br />
<br />
=== What is replicated ===<br />
The whole database cluster of an app platform is replicated. This includes every database of every instance and the database of the App Platform Manager itself.<br/><br />
<br />
=== App Services on standbys ===<br />
The database of the App Platform Manager itself also contains the App service binaries to be able to restore applications in a failover case.<br/><br />
You do not have to install App services on the standby if you install them on the primary.<br/><br />
App Platform Manager and Webserver can be updated as usual through the App Store or the Devices App if the standby is connected to Devices.<br />
<br />
=== App Platform Manager configuration of the standby server ===<br />
The App Platform Manager configuration of the standby server cannot be stored inside the database, as the database is readonly. So it is stored inside a configuration JSON file under ''/home/root/standby.conf''.<br/><br />
This configuration is backed up as usual by a Devices backup job and can be also manually restored on a standby (not on a primary though!).<br />
<br />
Configuration options from the primary are not synced to the standby server, as the standby server has its own configuration (as it could be in a different network etc.)!<br />
<br />
=== No automatic failover ===<br />
<br />
There is currently no automatic failover mechanism. PostgreSQL doesn't offer multi master replication, so writing is just possible on the primary itself. Standby servers have a readonly database.<br/><br/><br />
Let's consider the following use case if we would implement an automatic failover with the current technical possibilities:<br/><br />
* The primary server is connected to a master PBX.<br />
* A slave PBX is also connected to the primary server in another location.<br />
* A standby server is in this location and replicates from the primary.<br />
* The internet connection between primary and standby fails.<br />
* The standby promotes itself to primary, so that the master PBX now writes to the old primary and the slave PBX now writes to the "new" primary.<br />
* The internet connection comes up again and both primary and standby servers now have databases which are out of sync and which cannot be merged.<br />
<br />
=== Security ===<br />
<br />
* port 5432 must be reachable on the App Platform <br />
* For every standby a PostgreSQL user is created with the REPLICATION role on the primary. Just this user has access to the database server from non localhost connections.<br />
* You cannot establish a standard connection with such a user and modify/read from tables.<br />
* The replication connection is established over TLS by default.<br />
<br />
= App Installer PBX Manager Plugin =<br />
== Requirements ==<br />
<br />
* V14 and up<br />
<br />
== General ==<br />
<br />
The app installer plugin allows IT administrator (with access to the PBX Manager) to install/update/delete new apps from the innovaphone app store including Partners apps. It is automatically available with existing app platforms or after adding a new one in the PBX Manager.<br />
It offers a view to the App Platform Manager‘s App Store with all the available functionalities and simplifies the install, update and uninstall of apps.<br />
<br />
== Dedicated AP for each user ==<br />
<br />
Installing a new app will install the app service and add a new instance with the user’s domain. The instance is automatically started. <br />
This further enables the configuration of the instance through its respective PBX Manager plugin.<br />
<br />
== Shared AP between users ==<br />
<br />
Installing a new app works in a similar way to that of the dedicated AP. However, each time a new user installs the app, only a new instance is created if the app service is already installed.<br />
A user can uninstall the app, in this case the corresponding instance is deleted. If no more instances exist, then the app service is uninstalled.<br />
The administrator can only update the app service in such scenario.<br />
<br />
= Known Issues =<br />
<br />
== Reboot after an image update hangs (ARM gateway) ==<br />
<br />
If it happens, that the App Platform doesn't recover after the reboot, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
If '''Kernel command line''' is set to '''/dev/ram0''', the App Platform booted the ramdisk.<br><br />
<br><br />
Try to fetch the upgrade log file:<br />
https://[APP-PLATFROM-IP/DNS]/manager/ramdisk.log<br />
<br><br />
If this doesn't work, try to login with putty in this case (default credentials admin/ipapps and root/iplinux) and issue this command:<br><br />
''cat /apps/install_step1.log''<br><br />
<br><br />
If this file contains '''finished''' at the end, you can reconfigure the settings under App Platform -> General:<br><br />
* press '''Stop'''<br />
* Initrd file: empty<br />
* Kernel command line: '''root=/dev/sda3'''<br />
* Ramdisk size: empty<br />
* press '''Start'''<br />
<br />
The App Platform should boot and run the already updated image.<br />
<br />
<pre style="color: red; font-size:150%;">---WARNING---<br />
If the file doesn't contain "finished" at the end, you may still need to wait, as an upgrade may take some time!<br />
Do not reconfigure without being sure that the upgrade has finished, otherwise your system may won't run!</pre><br />
<br />
== Reboot after an image update boots always into rescue mode (virtual machine) ==<br />
<br />
This most likely means that the image installation didn't finish the first time and was interrupted before the bootloader settings could be changed back to the default partition.<br/><br />
<br/><br />
If your App Platform doesn't boot or isn't normally accessible after manual selection of the standard entry in the boot menu, you need to '''revert''' to a '''snapshot/backup''' prior to the update.<br/><br />
If your App Platform runs normally though, you can follow this instruction to change the default boot entry:<br/><br />
<br/><br />
* boot into the '''rescue''' partition<br />
* login with root/iplinux<br />
* edit the file /boot/grub/grub.cfg<br />
** search the line with '''set default=0''' and change it to '''set default=1'''<br />
** reboot<br />
<br />
== Reboot after an image update doesn't start as update is already running ==<br />
<br />
If it happens, that the App Platform doesn't want to start an update because one is already running, please open the Admin UI of the corresponding gateway and take a look at App Platform -> General.<br><br />
* '''Shutdown''' the App Platform and '''Stop''' it.<br><br />
* Set '''Kernel command line''' to '''/dev/ram0'''.<br><br />
* Set '''Initrd file''' to '''ramdisk.ext2.xz'''.<br><br />
* Set '''Ramdisk size''' to '''100000'''.<br><br />
* '''Start''' the App Platform now.<br><br />
<br />
The App Platform now either applies the image update or it reboots into the old image. Try the image update afterwards again.<br />
<br />
== Webserver doesn't respond after an image update ==<br />
<br />
If you can't reach the web UI after an image update, please try to connect with SSH as admin user and delete old coredumps, which may prevent the App Platform Manager from starting correctly:<br />
* su root (become root)<br />
* rm -f /mnt/sda2/log/core_dumps/*/*<br />
* /etc/init.d/S92manager restart<br />
<br />
Check if you can now reach the App Platform again.<br />
<br />
= Tracing =<br />
Each App Service has its own log file, which can be accessed through the Manager App. You can configure a log file size for each App Service.<br><br />
Each App Intance has its own trace flags. The following trace flags can be set:<br><br />
<br />
* Alarm client: used by the manager to send alarms to an alarm server<br />
* App: logs from the App Service itself<br />
* App WebSocket: logs app websocket connections (e.g. from PBX objects to an App Service or from the UI to the App Service)<br />
* AppSharing: just native clients<br />
* AppProxy: just native clients, logs requests which are proxied between the local webserver and the remote server<br />
* Audio: just native clients<br />
* Browser: just native clients<br />
* Command: the command interface is used to execute shell commands, e.g. used by the manager App<br />
* Config: logs config changes of an App<br />
* Database: database logs<br />
* DB files: database file logs<br />
* DNS: DNS request logging<br />
* DTLS: just native clients, DTLS request logging<br />
* Ethernet: interface to get ethernet adapater infos, just manager App<br />
* File: logs for file system access (synchronous), e.g. manager App<br />
* Files: logs for file system access (asynchronous)<br />
* HTTP client: http client logs<br />
* HTTP file: logs for static HTTP files<br />
* ICE: just native clients<br />
* LDS: local domain sockets <br />
* Media: just native clients<br />
* Media channel: just native clients<br />
* Process: IProcess interface logs which is used for spawning, killing processes etc.<br />
* SMTP: SMTP client logs<br />
* TCP: TCP logs<br />
* Time: ITime interface logs<br />
* TLS: TLS logs<br />
* TURN: just native clients<br />
* UDP: UDP logs<br />
* Video: just native clients<br />
* WebSocket client: logs outgoing websocket connections<br />
* Webserver traffic: logs incoming HTTP traffic, which is forwarded from the webserver to the App<br />
* WebDAV service: logs WebDAV requests to the App<br />
* Webserver: enables webserver specific logs<br />
<br />
== RPCAP ==<br />
<br />
If you open the Manager App, click on the Manager in the left list and then on the Diagnostics button, you can enable RPCAP.<br><br />
You can add the interface in wireshark with the string:<br />
rpcap://<APP-Platform-IP>/eth0<br />
<br />
'''Please don't forget to disable RPCAP after your testing!'''<br />
<br />
= How-Tos =<br />
<br />
== How to retrieve files from the App Platform ==<br />
To retrieve files from the App Platform which can not be retrieved via the App Platform manager UI, you can connect to the App Platform using the SCP protocol on port 22.<br/><br />
<br/><br />
First copy files to /home/admin as root with Putty or another SSH client:<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''su root'' to be root (''iplinux'' as default password)<br />
<br/><br />
You can now copy files to ''/home/admin'' (e.g. from /var/log/apps/manager/...).<br/><br />
<br/><br />
You can create a tar archive with all logs like this:<br />
* cd /home/admin<br />
* tar -cf - /var/log/* | xz -z - > log.tar.xz<br />
** you may want to exclude coredumps (due to their size):<br />
** tar -cf - --exclude=/var/log/core_dumps/* /var/log/* | xz -z - > log.tar.xz<br />
* chown admin:admin /home/admin/log.tar.xz<br />
<br/><br />
Then copy the files to your local system, e.g. with WinSCP<br/><br />
* use ''SCP'' as protocol (NB: WebDAV is not supported on most of the directories on the App Platform )<br />
* use the ''DNS'' name or IP address of your App Platform (not the PBX)<br />
* use user ''admin'' and the appropriate password (''ipapps'' by default)<br />
* use ''/home/admin'' as start directory<br />
* copy the needed files<br />
<br />
== App Platform disk space warning ==<br />
<br />
If the configured threshold is reached, all Apps are stopped inside the App Platform . You must then free disk space somehow.<br />
<br />
=== Find large instances ===<br />
Click through your apps in the tree on the left side and take a look at the database size of each instance.<br />
<br />
=== Delete data inside an instance ===<br />
It depends on the type of app if you can delete data or not. E.g. you can start the Files app and delete files inside this app.<br><br />
This won't reclaim disk space though due to the way how PostgreSQL databases work, so you need to follow this guide to reclaim the disk space:<br />
<br />
* start the corresponding App<br />
* delete data inside the App<br />
* optimize disk usage of the database by cliking on the button "Clean up database" under Edit instance. If this does not help, continue with the following steps. <br />
* stop the corresponding App again<br />
* download a backup of the instance (backup button at the top), this backup contains the whole instance data, also the password of the instance<br />
* delete this specific instance<br />
* restore the downloaded backup (restore button at the top)<br />
<br />
Depending on the hardware and the size of the instance, this process may take hours to complete!<br />
<br />
=== Resize the disk ===<br />
The resizing of a disk is just possible for virtual machines, see [[#Resizing the disk of a Virtual machine|Resizing the disk of a Virtual machine]].<br />
<br />
=== Delete the whole instance ===<br />
If there is no other possibility, you can delete the whole instance. Afterwards you recreate the instance with the same values and a new random password. Don't forget to set this password in the corresponding PBX App objects though!<br />
<br />
=== Restart the Apps or the App Platform ===<br />
If you have enough disk space again, you must either restart the whole App Platform or you manually start all Apps again.<br />
<br />
== App Platform/Apps app not online anymore due to full disk ==<br />
If the apps app is not online anymore and you can't access any apps anymore, try to login with an SSH client to see if your disk is full.<br />
Login as admin and afterwards as root (su root).<br><br />
<br><br />
* issue '''df -h''' and see the disk usage of /dev/sda2, if this is 100%, your disk is too full<br />
* stop the manager<br />
** /etc/init.d/S92manager stop<br />
* empty the 500 MB file, which is exactly for this case here (manager must be 13r1 SR9 or higher to have this file)<br />
** echo "" > /mnt/sda2/empty_if_no_space<br />
* delete log files to recover some space<br />
** rm /var/log/apps/*/*<br />
** rm /var/log/core_dumps/*/*<br />
* restart the postgresql server (see the output if this worked or not)<br />
** /etc/init.d/S50postgresql restart<br />
* restart the manager<br />
** /etc/init.d/S92manager restart<br />
* wait until everything is online again<br />
* open the Apps app and try to find the instance which uses the most disk space and try to delete files/content from it<br />
** you may want to stop all app services first to prevent more writes to the database<br />
** if not possible, you can delete this instance, but you'll loose all data from this instance then!<br />
* after that you can try [[{{NAMESPACE}}:Concept_App_Platform#Shrink_the_physically_size_of_PostgreSQL_database_files]] to free up space<br />
** If this does not work you can create a backup from the database, delete the database and import the database again.<br />
* free up at least 500 MB so that the manager can create the file again<br />
* delete /mnt/sda2/empty_if_no_space if you are done and restart the manager:<br />
** rm /mnt/sda2/empty_if_no_space<br />
** /etc/init.d/S92manager restart<br />
** the manager restart automatically recreates the empty_if_no_space file if this file doesn't exist<br />
<br />
Make sure, that you do '''not''' have backups configured to a local files instance while this files instance is not excluded from backups.<br />
An instance can be excluded from backups in the instance settings in the App Platform Manager.<br />
<br />
If all of this doesn't help, you can resize the file system on a VM:<br />
* proceed with [[{{NAMESPACE}}:Concept_App_Platform#Resizing_the_disk_of_a_Virtual_machine]]<br />
<br />
== Resizing the disk of a Virtual machine ==<br />
<br />
Do '''NOT''' resize if you're running an App Platform version higher than '''110000''' and lower than '''110027''' or your data will be lost!<br />
Please update your App Platform to version 110027 or higher before you start resizing your disk.<br />
<br />
* stop the VM<br />
* expand the disk using your VM utilities<br />
* start the VM and boot from the first boot entry '''rescue/setup'''<br />
* login with '''root''' and '''iplinux'''<br />
* execute this command: '''/home/root/install_step1.sh log.txt resize'''<br />
* the VM reboots automatically after a successful resize<br />
<br />
== Shrink the physically size of PostgreSQL database files ==<br />
Tuples that are deleted in your database are not physically removed from the database-file. So the claimed space on the harddisk is still in use after the delete operation. <br />
If you need to free up some disk space you can force to reorganize the physically database-file on your harddisk.<br />
<br />
You can also start this process through the instance settings as long as the App Platform Manager is still running.<br />
<br />
'''Important: You are operating on the Database, you have to make a Backup of your Database before you do this!'''<br />
<br />
Login via SSH to the APPlatform with the ''admin'' User<br />
su root<br />
/etc/init.d/S92manager stop # not always needed, but in case of database errors recommended, of course no app is online then<br />
sudo -u postgres reindexdb -a<br />
sudo -u postgres vacuumdb -a -f<br />
/etc/init.d/S92manager restart # just execute if the manager has been stopped above<br />
<br />
sudo -u postgres reindexdb -d dbname # for a single database with dbname<br />
sudo -u postgres vacuumdb -d dbname -f # for a single database with dbname<br />
<br />
Note: This may take some time and CDRs (or other data written to a DB) won't be received during this time. <br />
<br />
After the process you can check the free dispace via <code>df -h</code>. You can check the claimed space from the database file with the command <code>du -sh /mnt/sda2/pgsql/</code>.<br />
<br />
== Change IP Addresses / DNS Names / System Name ==<br />
<br />
If you want to change the System Name or the DNS Name of the PBX and/or App Platform Platform you must change records manually '''in the described order'''!<br />
You have to know the Admin password to directly Login to the App Platform .<br />
<br />
=== App Platform ===<br />
; Settings - General<br />
* ''Devices app URL''<br />
* ''App platform DNS name''<br />
<br />
; Settings - Alarms and Events<br />
* ''URL''<br />
<br />
; All Instances<br />
* ''Domain''<br />
* ''Webserver path''<br />
<br />
=== PBX ===<br />
Download the configuration and ''search/replace'' in the config file. Upload the config file and reboot.<br />
<br />
Manual:<br />
* ''URL'' in all PBX Object (Apps, Voicemail ...)<br />
* [[{{NAMESPACE}}:Gateway/CDR|CDRx]]<br />
* [[{{NAMESPACE}}:PBX/Config/General|IP address for App Platform]] <br />
* [[{{NAMESPACE}}:PBX/Config/myApps|Reset Password Page]]<br />
* [[{{NAMESPACE}}:PBX/Config/Authentication|Verification link]]<br />
<br />
Depending on your change you have to activate/deactivate the Setting [[{{NAMESPACE}}:PBX/Config/General|Operation without DNS]]<br />
<br />
=== Additional Devices / Steps ===<br />
* ''Devices Registration URL''<br />
** There is no automatism to change the URL on all devices in your setup.<br />
** If you have the option to use DHCP, you can temporarily overwrite the [[{{NAMESPACE}}:Services/Update|Update URL]] and execute a [[{{NAMESPACE}}:Concept_Update_Server|custom update script]] to change the ''Device Registration URL''<br />
* ''Alarm server''<br />
* Reverse Proxy configuration<br />
* Change ''Domain Name'' in Devices if you have also changed the system name<br />
<br />
== How to recover from a broken File System ==<br />
Sometimes you may find messages in the ''messages'' log file (in ''var/log'') like<br />
<br />
initial error at 1500329378: ext4_journal_start_sb:328<br />
last error at 1500329378: ext4_journal_start_sb:328<br />
<br />
Or you get events like "Broken file system" from your App Platform .<br />
<br />
This indicates a file system failure on the Linux Installation.<br />
<br />
When the Linux file system is broken, you can try to repair it using some command line Linux tools.<br />
<br />
If this doesn't fix your issue, you need to replace the SSD with a new one, re-install the App Platform and any applications and restore your backups.<br />
<br />
=== Gateway ===<br />
<br />
* Open the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the Kernel command line from root=/dev/sda3 to root=/dev/ram0<br />
** modify the Initrd file to ramdisk.ext2.xz<br />
** modify the ramdisk size to 100000<br />
** start Linux again<br />
:: This will run Linux on another (hopefully sane) partition.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
<br />
* go back to the WebGUI of the gateway running your LAP and proceed to ''App Platform/General''<br />
** terminate Linux (''Status/Stop'')<br />
** modify the ''Kernel command line'' from ''root=/dev/ram0'' to <code>root=/dev/sda3</code><br />
** clear the Initrd file field<br />
** clear the ramdisk size field<br />
** start Linux again<br />
:: This will run Linux on the original partition.<br />
<br />
=== VM ===<br />
<br />
Restart the VM and select the first entry in the boot menu from grub.<br />
<br />
* use [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html putty] to log in to the LAP's command line ( try either user: root, pw: iplinux '''OR''' user: admin, pw: ipapps)<br />
** use this to be root <code>su - root</code> (password iplinux)<br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda2</code><br />
** on the command prompt, use <code>e2fsck -p -f /dev/sda3</code><br />
:: this should fix any issue on the file system<br />
* Reboot your VM<br />
[[Category:Concept]]<br />
<br />
== How to create a memory dump of a running process ==<br />
<br />
Sometimes it's usefull to have a memory dump of a running process to investigate certain issues.<br />
<br />
* login with SSH and become root<br />
* find out the PID of the relevant process, e.g. with ''ps aux | grep /apps/manager/manager | grep -v grep''<br />
* gdb --pid PID -ex gcore --batch<br />
* this creates a core file core.PID<br />
* download this core file with WinSCP or similar tools</div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=69759Main Page2023-11-17T13:34:06Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
== Remote Support ==<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have Google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales@innovaphone.com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] ([[User talk:Hna|talk]]) 14:34, 17 November 2023 (CET)</p><br />
[[Support:Firmware V13r3 product/13r3/firmware 137919 (sr 11) available | Version 13r3 Service Release 11]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Hna|Hna]] ([[User talk:Hna|talk]]) 14:34, 17 November 2023 (CET)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136444 (sr 29) available | Version 13r2 Service Release 29]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Msc|Msc]] ([[User talk:Msc|talk]]) 14:21, 13 November 2023 (CET)</p><br />
[[Support:Firmware_V14r1_product/14r1/firmware_1410421_(beta3)_available | Version 14r1 Beta3]] is now available from the [http://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Cam|Cam]] 16:22, 18 September 2023 (CEST)</p><br />
[[App Calculator beta1 available]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Sga|Sga]] ([[User talk:Sga|talk]]) 17:43, 15 September 2023 (CEST)</p><br />
[[Support:Wireless Handset Firmware IP73 1011 (5.0.1) released | Wireless Handset Firmware IP73 1011 (5.0.1)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Gal|Gal]] ([[User talk:Gal|talk]]) 13:39, 31 July 2023 (CEST)</p><br />
[[Support:Wireless Handset Firmware IP64 10314 (3.0.13)/IP65 10119 (3.0.13) released | Wireless Handset Firmware IP64 10314 (3.0.13)/IP65 10119 (3.0.13)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Cam|Cam]] 12:03, 31 July 2023 (CEST)</p><br />
[[App Working final available]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:38, 6 February 2023 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040621_(6.2.7)_released | Wireless Handset Firmware IP62 3040621 (6.2.7)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 13:13, 6 February 2023 (CET)</p><br />
[[Support:WinPDM_Software_3130113_%284.1.8%29_released | WinPDM Software 3130113 (4.1.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<br />
== New Articles ==<br />
<!-- https://www.mediawiki.org/wiki/Extension:Newest_Pages --><br />
{{Special:Newestpages/all/20}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=66629Main Page2023-03-23T13:17:49Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] 14:17, 23 March 2023 (CET)</p><br />
[[Support:Firmware V13r3 product/13r3/firmware 137803 (sr 3) available | Version 13r3 Service Release 3]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Hna|Hna]] 14:17, 23 March 2023 (CET)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136409 (sr 21) available | Version 13r2 Service Release 21]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Hna|Hna]] 14:17, 23 March 2023 (CET)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125869 (sr 61) available | Version 12r2 Service Release 61]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Vgs|Vgs]] 16:49, 3 March 2023 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1007_(4.0.0)_released | Wireless Handset Firmware IP73 1007 (4.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:38, 6 February 2023 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040621_(6.2.7)_released | Wireless Handset Firmware IP62 3040621 (6.2.7)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 13:13, 6 February 2023 (CET)</p><br />
[[Support:WinPDM_Software_3130113_%284.1.8%29_released | WinPDM Software 3130113 (4.1.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 17:40, 14 February 2022 (CET)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121355(sr 46) available | Version 12r1 Service Release 46]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=66310Main Page2023-02-15T08:49:19Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] 09:49, 15 February 2023 (CET)</p><br />
[[Support:Firmware V13r3 product/13r3/firmware 137786 (sr 2) available | Version 13r3 Service Release 2]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Hna|Hna]] 09:49, 15 February 2023 (CET)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136401 (sr 20) available | Version 13r2 Service Release 20]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Hna|Hna]] 09:49, 15 February 2023 (CET)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125867 (sr 60) available | Version 12r2 Service Release 60]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:38, 6 February 2023 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040621_(6.2.7)_released | Wireless Handset Firmware IP62 3040621 (6.2.7)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 13:13, 6 February 2023 (CET)</p><br />
[[Support:WinPDM_Software_3130113_%284.1.8%29_released | WinPDM Software 3130113 (4.1.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:49, 6 February 2023 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1006_(3.1.7)_released | Wireless Handset Firmware IP73 1006 (3.1.7)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 17:40, 14 February 2022 (CET)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121355(sr 46) available | Version 12r1 Service Release 46]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=64608Main Page2022-12-20T08:08:42Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<br />
<p align="right">[[User:Hna|Hna]] 09:08, 20 December 2022 (CET)</p><br />
[[Support:Firmware V13r3 product/13r3/firmware 137758 (final) available | Version 13r3 final]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136390 (sr 18) available | Version 13r2 Service Release 18]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 133132 (sr 44) available | Version 13r1 Service Release 44]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113806 (sr 64) available | Version 11r2 Service Release 64]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Msm|Msm]] 16:57, 10 October 2022 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125860 (sr 58) available | Version 12r2 Service Release 58]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:42, 11 May 2022 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1005_(3.1.6)_released | Wireless Handset Firmware IP73 1005 (3.1.6)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 17:40, 14 February 2022 (CET)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121355(sr 46) available | Version 12r1 Service Release 46]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:38, 21 January 2021 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040620_(6.2.3)_released | Wireless Handset Firmware IP62 3040620 (6.2.3)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:27, 21 January 2021 (CET)</p><br />
[[Support:WinPDM_Software_3130111_%284.0.0%29_released | WinPDM Software 3130111 (4.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=64560Main Page2022-12-13T09:23:49Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<br />
<p align="right">[[User:Hna|Hna]] 10:23, 13 December 2022 (CET)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137751_(beta6)_available | Version 13r3 Beta 6]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136390 (sr 18) available | Version 13r2 Service Release 18]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 133132 (sr 44) available | Version 13r1 Service Release 44]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113806 (sr 64) available | Version 11r2 Service Release 64]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Msm|Msm]] 16:57, 10 October 2022 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125860 (sr 58) available | Version 12r2 Service Release 58]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:42, 11 May 2022 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1005_(3.1.6)_released | Wireless Handset Firmware IP73 1005 (3.1.6)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 17:40, 14 February 2022 (CET)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121355(sr 46) available | Version 12r1 Service Release 46]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:38, 21 January 2021 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040620_(6.2.3)_released | Wireless Handset Firmware IP62 3040620 (6.2.3)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:27, 21 January 2021 (CET)</p><br />
[[Support:WinPDM_Software_3130111_%284.0.0%29_released | WinPDM Software 3130111 (4.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=64377Main Page2022-11-24T11:32:11Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<br />
<p align="right">[[User:Hna|Hna]] 12:32, 24 November 2022 (CET)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137733_(beta5)_available | Version 13r3 Beta 5]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136390 (sr 18) available | Version 13r2 Service Release 18]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 133132 (sr 44) available | Version 13r1 Service Release 44]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Jfr|Jfr]] 12:27, 11 November 2022 (CET)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113806 (sr 64) available | Version 11r2 Service Release 64]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<p align="right">[[User:Msm|Msm]] 16:57, 10 October 2022 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125860 (sr 58) available | Version 12r2 Service Release 58]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:42, 11 May 2022 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1005_(3.1.6)_released | Wireless Handset Firmware IP73 1005 (3.1.6)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 17:40, 14 February 2022 (CET)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121355(sr 46) available | Version 12r1 Service Release 46]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:38, 21 January 2021 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040620_(6.2.3)_released | Wireless Handset Firmware IP62 3040620 (6.2.3)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:27, 21 January 2021 (CET)</p><br />
[[Support:WinPDM_Software_3130111_%284.0.0%29_released | WinPDM Software 3130111 (4.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=63748Main Page2022-10-18T08:48:31Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] 10:48, 18 October 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137688_(beta4)_available | Version 13r3 Beta 4]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Msm|Msm]] 16:57, 10 October 2022 (CEST)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136386 (sr 17) available | Version 13r2 Service Release 17]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Msm|Msm]] 16:57, 10 October 2022 (CEST)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 133128 (sr 43) available | Version 13r1 Service Release 43]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Msm|Msm]] 16:57, 10 October 2022 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125860 (sr 58) available | Version 12r2 Service Release 58]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Msm|Msm]] 16:57, 10 October 2022 (CEST)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113805 (sr 63) available | Version 11r2 Service Release 63]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Msm|Msm]] 14:41, 19 September 2022 (CEST)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136383 (sr 16) available | Version 13r2 Service Release 16]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Msm|Msm]] 14:41, 19 September 2022 (CEST)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 133125 (sr 42) available | Version 13r1 Service Release 42]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Msm|Msm]] 14:41, 19 September 2022 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125857 (sr 57) available | Version 12r2 Service Release 57]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Msm|Msm]] 14:41, 19 September 2022 (CEST)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113803 (sr 62) available | Version 11r2 Service Release 62]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 13:57, 13 September 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137656_(beta3)_available | Version 13r3 Beta 3]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 15:41, 18 July 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137623_(beta2)_available | Version 13r3 Beta 2]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Msc|Msc]] 15:53, 1 June 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137584_(beta1)_available | Version 13r3 Beta 1]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:42, 11 May 2022 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1005_(3.1.6)_released | Wireless Handset Firmware IP73 1005 (3.1.6)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 17:40, 14 February 2022 (CET)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121355(sr 46) available | Version 12r1 Service Release 46]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:38, 21 January 2021 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040620_(6.2.3)_released | Wireless Handset Firmware IP62 3040620 (6.2.3)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:27, 21 January 2021 (CET)</p><br />
[[Support:WinPDM_Software_3130111_%284.0.0%29_released | WinPDM Software 3130111 (4.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=63340Main Page2022-09-13T11:57:22Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] 13:57, 13 September 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137656_(beta3)_available | Version 13r3 Beta 3]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Lmi|Lmi]] 20:28, 9 August 2022 (CEST)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136377 (sr 15) available | Version 13r2 Service Release 15]] is now available from the [http://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Tmo|Tmo]] 17:09, 1 August 2022 (CEST)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 133121 (sr 41) available | Version 13r1 Service Release 41]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Tmo|Tmo]] 17:09, 1 August 2022 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125857 (sr 56) available | Version 12r2 Service Release 56]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Tmo|Tmo]] 17:09, 1 August 2022 (CEST)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113803 (sr 61) available | Version 11r2 Service Release 61]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 15:41, 18 July 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137623_(beta2)_available | Version 13r3 Beta 2]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Msc|Msc]] 15:53, 1 June 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137584_(beta1)_available | Version 13r3 Beta 1]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:42, 11 May 2022 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1005_(3.1.6)_released | Wireless Handset Firmware IP73 1005 (3.1.6)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 17:40, 14 February 2022 (CET)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121355(sr 46) available | Version 12r1 Service Release 46]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:38, 21 January 2021 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040620_(6.2.3)_released | Wireless Handset Firmware IP62 3040620 (6.2.3)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:27, 21 January 2021 (CET)</p><br />
[[Support:WinPDM_Software_3130111_%284.0.0%29_released | WinPDM Software 3130111 (4.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=62770Main Page2022-07-18T13:41:51Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] 15:41, 18 July 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137623_(beta2)_available | Version 13r3 Beta 2]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:49, 4 July 2022 (CEST)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136357 (sr 13) available | Version 13r2 Service Release 13]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:49, 4 July 2022 (CEST)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 133116(sr 40) available | Version 13r1 Service Release 40]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Msc|Msc]] 15:53, 1 June 2022 (CEST)</p><br />
[[Support:Firmware_V13r3_product/13r3/firmware_137584_(beta1)_available | Version 13r3 Beta 1]] is now available from the [https://store.innovaphone.com/beta/download.htm beta store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:42, 11 May 2022 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1005_(3.1.6)_released | Wireless Handset Firmware IP73 1005 (3.1.6)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Teh|teh]] 07:40, 9 May 2022 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125850(sr 55) available | Version 12r2 Service Release 55]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 17:40, 14 February 2022 (CET)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121355(sr 46) available | Version 12r1 Service Release 46]] is now available from the [https://store.innovaphone.com/release/download.htm download page].<br />
<br />
<p align="right">[[User:Lmi|Lmi]] 12:34, 13 April 2022 (CEST)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113800 (sr 60) available | Version 11r2 Service Release 60]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 11:22, 14 April 2022 (CEST)</p><br />
[[Support:Operator9 90246 (hotfix24) available | Operator9 hotfix24]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 15:05, 11 February 2022 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10313_(2.12.10)/IP65_10118_(2.12.10)_released | Wireless Handset Firmware IP64 10313 (2.12.10)/IP65 10118 (2.12.10)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:38, 21 January 2021 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040620_(6.2.3)_released | Wireless Handset Firmware IP62 3040620 (6.2.3)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:27, 21 January 2021 (CET)</p><br />
[[Support:WinPDM_Software_3130111_%284.0.0%29_released | WinPDM Software 3130111 (4.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=60343Main Page2021-10-22T08:00:48Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] 10:00, 22 October 2021 (CEST)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113791 (sr 57) available | Version 11r2 Service Release 57]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 10:00, 22 October 2021 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125838 (sr 49) available | Version 12r2 Service Release 49]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 10:00, 22 October 2021 (CEST)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 133058 (sr 32) available | Version 13r1 Service Release 32]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 10:00, 22 October 2021 (CEST)</p><br />
[[Support:Firmware V13r2 product/13r2/firmware 136185 (sr 5) available | Version 13r2 Service Release 5]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 16 June 2021 (CEST)</p><br />
[[Support:iQM_Build_8029100_available | IQM Build 8029100 Hotfix34]] is now available from the [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))</p><br />
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 08:32, 4 June 2021 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP73_1002_(3.0.0)_released | Wireless Handset Firmware IP73 1002 (3.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Inno-mst|Inno-mst]] 10:35, 18 February 2021 (CET)</p><br />
[[Support:Operator9 90244 (hotfix23) available | Operator9 hotfix23]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:38, 21 January 2021 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP62_3040620_(6.2.3)_released | Wireless Handset Firmware IP62 3040620 (6.2.3)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:27, 21 January 2021 (CET)</p><br />
[[Support:WinPDM_Software_3130111_%284.0.0%29_released | WinPDM Software 3130111 (4.0.0)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:04, 21 January 2021 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_IP64_10311_(2.11.4)/IP65_10117_(2.11.4)_released | Wireless Handset Firmware IP64 10311 (2.11.4)/IP65 10117 (2.11.4)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 09 December 2020 (CEST)</p><br />
[[Support:IQM_Build_8028700_available | IQM Build 8028700 Hotfix33]] is now available from the [http://download.innovaphone.com/ice/8.00/#iqm V8 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100271_(sr64)_available | Linux Application Platform V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100271_(sr64)_available | innovaphone Reporting V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100271_(sr64)_available | innovaphone Fax V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Dde|Dde]] 13:17, 2 November 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100271_(sr64)_available | innovaphone Exchange Calendar Connector V10 100271 sr64]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)</p><br />
[[Support:Wireless_Handset_Firmware_IP61_3022811_(4.7.8)/IP63_3022912_(4.7.8)_released | Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference13r2:Concept_App_Service_App_Store&diff=58999Reference13r2:Concept App Service App Store2021-05-07T09:08:06Z<p>Hna: </p>
<hr />
<div>[[Category:Concept|Apps]]<br />
The Appstore is a part of the AP Manager and the place to go to install, update or uninstall apps. It provides three main views related to the app manufacturer, already installed apps and app categories.<br />
Additional app information are available as well. These include app license type, available versions, app description, supported langauges, category, support contact and terms and conditions.<br />
All apps can be filtered accroding to their manufacturer, category and license type.<br />
== Applies To == <br />
<br />
* innovaphone PBX from version 13r2<br />
==Requirements==<br />
* innovaphone PBX<br />
* innovaphone Application Platform<br />
* Firmware V13r2<br />
* AP Manager V13r2<br />
* App Store app V13r2<br />
<br />
==Appstore==<br />
===Configuration===<br />
Set the appstore URL in the AP Manager under Settings --> App-Store URL.<br><br />
The appstore URL points to the apps.json file on the App Store app and is constructed as follows: https://[app-platform-address]/[appstore-app-webserverPath]/'''download/apps.json'''<br />
<br />
[[Image:Configuration.jpg|thumb|upright=1.0|none|configuration]]<br />
<br />
===Working principle===<br />
<br />
The AP Manager sends a HTTP Get request to retrieve the ''apps.json'' file, which contains all the available apps, from the App Store app.<br />
The AP Manager then:<br />
<br />
* Sorts out individual apps and their corresponding app information, manufacturer, available languages and categories.<br />
* Gets the apps' versions and checks whethers an app is installed or if an update is available.<br />
* Checks if the App Platform architecture matches that of each of the available apps.<br />
* In case of an error while retrieving an app (e.g missing some critical app information), the AP Manager does not display the app in question on the AppStore.<br />
<br />
To install or update an app, a HTTP Get request is sent to the App Store app to download all the files relative to that app on the App Platform. The AP Manager then sets up the app environment and starts the app.<br />
<br />
An ''apps.json'' file looks like [http://sdk.innovaphone.com/doc/howto/AppStore.htm#json_apps this.]<br />
<br />
===Third Party Apps Configuration===<br />
It is also possible to install 3rd party apps from different manufacturers on the App Platform. That is accomplished by linking or cascading the 3rd party App Store app to our main App Store app.<br />
<br />
[[Image:3rdpartyappstore.jpeg|thumb|upright=1.0|right|App Store cascading]]<br />
* <div>On the Main App Store, a source is added with a path pointing to the 3rd party App Store app.</div><br />
<br />
* When the connection is established, the adminstrator then selects which 3rd party apps are to be included in the Main App Store and uploads them.<br />
<br />
* The 3rd party apps are now available on the Main App Store and can be installed from the App Store of the AP Manager.<br />
<br />
* For security reasons, the adminstrator always approves any new updates of 3rd party apps.<br />
<br />
For further information and details, please refer to the sdk http://sdk.innovaphone.com/doc/howto/AppStore.htm#sources_add.<br />
<br />
==Apps==<br />
===App Information===<br />
<br />
Each available app on the App Store is characterised by a set of additional information. These information fields are specified beforehand when publishing new apps on the AppStore App (further info: http://sdk.innovaphone.com/doc/howto/AppStore.htm).<br />
<br />
App information are summarised as follows:<br />
<br />
* <div>App title</div><br />
<br />
* <div>App logo</div><br />
<br />
* <div>App manufacturer / publishing company</div><br />
<br />
* <div>Type of license needed: ''free of cost'', ''innovaphone license'' or ''license through partner''</div><br />
<br />
* <div>License information: a link pointing to the license information if the licensing is done by the partner</div><br />
<br />
* <div>App version (normally constructed as [id label buildNumber])</div><br />
<br />
* <div>App description: a short description showing the main purpose of the app. A link could be included for a more detailed information about the app and its requirements.</div><br />
<br />
* <div>App language: the available languages of the app displayed as an ISO 639-1 Code </div><br />
<br />
* <div>App category: Each app can belong to one or multiple categories. The available categories are: <br />
** <div>Administration</div> <br />
** <div>Books</div><br />
** <div>Business</div><br />
** <div>Call Center</div><br />
** <div>Collaboration</div><br />
** <div>Communication</div><br />
** <div>Developer Tools</div><br />
** <div>Education</div><br />
** <div>Entertainment</div><br />
** <div>Finances</div><br />
** <div>Food & Drink</div><br />
** <div>Games</div><br />
** <div>Graphics & Design</div><br />
** <div>Health & Fitness</div><br />
** <div>Lifestyle</div><br />
** <div>Magazines & Newspapers</div><br />
** <div>Medical</div><br />
** <div>Messaging</div><br />
** <div>Music & Audio</div><br />
** <div>Maps & Navigation</div><br />
** <div>News</div><br />
** <div>Photo & Video</div><br />
** <div>Productivity</div><br />
** <div>Reference</div><br />
** <div>Shopping</div><br />
** <div>Social Networking</div><br />
** <div>Sports</div><br />
** <div>Telephony</div><br />
** <div>Travel</div><br />
** <div>Tools</div><br />
** <div>Weather</div><br />
<br />
* <div>App support contact: usually an email address, website or forum.</div><br />
<br />
* <div>Imprint (Impressum): a legally mandated statement of the ownership of the app (usually the imprint of the manufacturer)</div><br />
<br />
* <div>App terms and conditions: a link pointing to the legal terms and conditions</div><br />
<br />
[[Image:app-info.jpg|thumb|upright=1.0|none|App Information]]<br />
<br />
===Install an App===<br />
To install a new app:<br />
<br />
* <div>Select the desired company under '''All Apps''' or a category under '''Categories'''. </div><br />
<br />
* <div>Choose the app from the list and click on it to reveal additional information.</div><br />
<br />
* <div>Select a desired version from the dropdown and click install.</div><br />
<br />
* <div>A popup showing the terms and conditions is present. Accept the terms and click install.</div><br />
<br />
* <div>The installation might take a few moments. After it is finished, a short message indicates whether the installation was successful or not.</div><br />
<br />
* <div>After a successful installation, the new app can be found under '''Installed Apps''' > Major release id (example: 13r2)</div><br />
<br />
===Update an App===<br />
It is recommended to update the apps on the App Platform through an update job using Devices App. However, this can also be achieved using the App Store in the AP Manager.<br />
<br />
A new update is available whenever a new app version is available on the App Store. This is indicated by a yellow dot next to an app title.<br />
<br />
To update an app:<br />
<br />
* <div>Select the desired app from the list. </div><br />
<br />
* <div>Select the app version from the version dropdown. </div><br />
<br />
* <div>Start the update. The update process might take some time. After it is finished, a short message indicates whether the update was successful or not.</div><br />
<br />
* <div>After a successful update, the newly updated app can be found within the corresponding release under '''Installed Apps'''</div><br />
<br />
<br /> It is also possible to update all installed app or a select few. To do that:<br />
* <div>Go to the '''Installed Apps'''. </div><br />
<br />
* <div>Click on '''select''' to select the desired apps or all of them.</div><br />
<br />
* <div>Select the available version you wish to update the apps to, from the version dropdown menu.</div><br />
<br />
* <div>A list of the eligible apps for an update will be shown. You can reselect apps and refresh the list</div><br />
<br />
* <div>The update process will take some time. It is recommended not to interrupt the process at this stage.</div><br />
<br />
* <div>After a successful update, the newly updated apps are found within the corresponding release under '''Installed Apps'''</div><br />
<br />
===Uninstall an App===<br />
<br />
Uninstalling an app will remove all app associated data from the App Platform which include:<br />
<br />
* All apps files including binaries, logo, log files and coredumps.<br />
<br />
* All app instances and related data.<br />
* App database.<br />
<br />
* App user.</div>Hnahttps://wiki.innovaphone.com/index.php?title=File:App-info.jpg&diff=58998File:App-info.jpg2021-05-07T09:05:05Z<p>Hna: </p>
<hr />
<div></div>Hnahttps://wiki.innovaphone.com/index.php?title=File:3rdpartyappstore.jpeg&diff=58996File:3rdpartyappstore.jpeg2021-05-07T09:04:23Z<p>Hna: </p>
<hr />
<div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Reference13r2:Concept_App_Service_App_Store&diff=58994Reference13r2:Concept App Service App Store2021-05-07T09:03:21Z<p>Hna: New page: The Appstore is a part of the AP Manager and the place to go to install, update or uninstall apps. It provides three main views related to the app manufacturer, already installed apps and ...</p>
<hr />
<div>The Appstore is a part of the AP Manager and the place to go to install, update or uninstall apps. It provides three main views related to the app manufacturer, already installed apps and app categories.<br />
Additional app information are available as well. These include app license type, available versions, app description, supported langauges, category, support contact and terms and conditions.<br />
All apps can be filtered accroding to their manufacturer, category and license type.<br />
== Applies To == <br />
<br />
* innovaphone PBX from version 13r2<br />
==Requirements==<br />
* innovaphone PBX<br />
* innovaphone Application Platform<br />
* Firmware V13r2<br />
* AP Manager V13r2<br />
* App Store app V13r2<br />
<br />
==Appstore==<br />
===Configuration===<br />
Set the appstore URL in the AP Manager under Settings --> App-Store URL.<br><br />
The appstore URL points to the apps.json file on the App Store app and is constructed as follows: https://[app-platform-address]/[appstore-app-webserverPath]/'''download/apps.json'''<br />
<br />
[[Image:Configuration.jpg|thumb|upright=1.0|none|configuration]]<br />
<br />
===Working principle===<br />
<br />
The AP Manager sends a HTTP Get request to retrieve the ''apps.json'' file, which contains all the available apps, from the App Store app.<br />
The AP Manager then:<br />
<br />
* Sorts out individual apps and their corresponding app information, manufacturer, available languages and categories.<br />
* Gets the apps' versions and checks whethers an app is installed or if an update is available.<br />
* Checks if the App Platform architecture matches that of each of the available apps.<br />
* In case of an error while retrieving an app (e.g missing some critical app information), the AP Manager does not display the app in question on the AppStore.<br />
<br />
To install or update an app, a HTTP Get request is sent to the App Store app to download all the files relative to that app on the App Platform. The AP Manager then sets up the app environment and starts the app.<br />
<br />
An ''apps.json'' file looks like [http://sdk.innovaphone.com/doc/howto/AppStore.htm#json_apps this.]<br />
<br />
===Third Party Apps Configuration===<br />
It is also possible to install 3rd party apps from different manufacturers on the App Platform. That is accomplished by linking or cascading the 3rd party App Store app to our main App Store app.<br />
<br />
[[Image:3rdpartyappstore.jpeg|thumb|upright=1.0|right|App Store cascading]]<br />
* <div>On the Main App Store, a source is added with a path pointing to the 3rd party App Store app.</div><br />
<br />
* When the connection is established, the adminstrator then selects which 3rd party apps are to be included in the Main App Store and uploads them.<br />
<br />
* The 3rd party apps are now available on the Main App Store and can be installed from the App Store of the AP Manager.<br />
<br />
* For security reasons, the adminstrator always approves any new updates of 3rd party apps.<br />
<br />
For further information and details, please refer to the sdk http://sdk.innovaphone.com/doc/howto/AppStore.htm#sources_add.<br />
<br />
==Apps==<br />
===App Information===<br />
<br />
Each available app on the App Store is characterised by a set of additional information. These information fields are specified beforehand when publishing new apps on the AppStore App (further info: http://sdk.innovaphone.com/doc/howto/AppStore.htm).<br />
<br />
App information are summarised as follows:<br />
<br />
* <div>App title</div><br />
<br />
* <div>App logo</div><br />
<br />
* <div>App manufacturer / publishing company</div><br />
<br />
* <div>Type of license needed: ''free of cost'', ''innovaphone license'' or ''license through partner''</div><br />
<br />
* <div>License information: a link pointing to the license information if the licensing is done by the partner</div><br />
<br />
* <div>App version (normally constructed as [id label buildNumber])</div><br />
<br />
* <div>App description: a short description showing the main purpose of the app. A link could be included for a more detailed information about the app and its requirements.</div><br />
<br />
* <div>App language: the available languages of the app displayed as an ISO 639-1 Code </div><br />
<br />
* <div>App category: Each app can belong to one or multiple categories. The available categories are: <br />
** <div>Administration</div> <br />
** <div>Books</div><br />
** <div>Business</div><br />
** <div>Call Center</div><br />
** <div>Collaboration</div><br />
** <div>Communication</div><br />
** <div>Developer Tools</div><br />
** <div>Education</div><br />
** <div>Entertainment</div><br />
** <div>Finances</div><br />
** <div>Food & Drink</div><br />
** <div>Games</div><br />
** <div>Graphics & Design</div><br />
** <div>Health & Fitness</div><br />
** <div>Lifestyle</div><br />
** <div>Magazines & Newspapers</div><br />
** <div>Medical</div><br />
** <div>Messaging</div><br />
** <div>Music & Audio</div><br />
** <div>Maps & Navigation</div><br />
** <div>News</div><br />
** <div>Photo & Video</div><br />
** <div>Productivity</div><br />
** <div>Reference</div><br />
** <div>Shopping</div><br />
** <div>Social Networking</div><br />
** <div>Sports</div><br />
** <div>Telephony</div><br />
** <div>Travel</div><br />
** <div>Tools</div><br />
** <div>Weather</div><br />
<br />
* <div>App support contact: usually an email address, website or forum.</div><br />
<br />
* <div>Imprint (Impressum): a legally mandated statement of the ownership of the app (usually the imprint of the manufacturer)</div><br />
<br />
* <div>App terms and conditions: a link pointing to the legal terms and conditions</div><br />
<br />
[[Image:app-info.jpg|thumb|upright=1.0|none|App Information]]<br />
<br />
===Install an App===<br />
To install a new app:<br />
<br />
* <div>Select the desired company under '''All Apps''' or a category under '''Categories'''. </div><br />
<br />
* <div>Choose the app from the list and click on it to reveal additional information.</div><br />
<br />
* <div>Select a desired version from the dropdown and click install.</div><br />
<br />
* <div>A popup showing the terms and conditions is present. Accept the terms and click install.</div><br />
<br />
* <div>The installation might take a few moments. After it is finished, a short message indicates whether the installation was successful or not.</div><br />
<br />
* <div>After a successful installation, the new app can be found under '''Installed Apps''' > Major release id (example: 13r2)</div><br />
<br />
===Update an App===<br />
It is recommended to update the apps on the App Platform through an update job using Devices App. However, this can also be achieved using the App Store in the AP Manager.<br />
<br />
A new update is available whenever a new app version is available on the App Store. This is indicated by a yellow dot next to an app title.<br />
<br />
To update an app:<br />
<br />
* <div>Select the desired app from the list. </div><br />
<br />
* <div>Select the app version from the version dropdown. </div><br />
<br />
* <div>Start the update. The update process might take some time. After it is finished, a short message indicates whether the update was successful or not.</div><br />
<br />
* <div>After a successful update, the newly updated app can be found within the corresponding release under '''Installed Apps'''</div><br />
<br />
<br /> It is also possible to update all installed app or a select few. To do that:<br />
* <div>Go to the '''Installed Apps'''. </div><br />
<br />
* <div>Click on '''select''' to select the desired apps or all of them.</div><br />
<br />
* <div>Select the available version you wish to update the apps to, from the version dropdown menu.</div><br />
<br />
* <div>A list of the eligible apps for an update will be shown. You can reselect apps and refresh the list</div><br />
<br />
* <div>The update process will take some time. It is recommended not to interrupt the process at this stage.</div><br />
<br />
* <div>After a successful update, the newly updated apps are found within the corresponding release under '''Installed Apps'''</div><br />
<br />
===Uninstall an App===<br />
<br />
Uninstalling an app will remove all app associated data from the App Platform which include:<br />
<br />
* All apps files including binaries, logo, log files and coredumps.<br />
<br />
* All app instances and related data.<br />
* App database.<br />
<br />
* App user.</div>Hnahttps://wiki.innovaphone.com/index.php?title=File:Configuration.jpg&diff=58993File:Configuration.jpg2021-05-07T09:03:03Z<p>Hna: </p>
<hr />
<div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=56405Main Page2020-06-16T13:42:44Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] 15:39, 16 June 2020 (CEST)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 132425 (sr 14) available | Version 13r1 Service Release 14]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 15:39, 16 June 2020 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125716 (sr 35) available | Version 12r2 Service Release 35]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 15:39, 16 June 2020 (CEST)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121295 (sr 37) available | Version 12r1 Service Release 37]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Tmo|Tmo]] 17:56, 20 May 2020 (CEST)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113758 (sr 50) available | Version 11r2 Service Release 50]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 16:00, 6 May 2020 (CEST)</p><br />
[[Support:IQM_Build_8027000_available | IQM Build 8027000 Hotfix32]] is now available from the [http://download.innovaphone.com/ice/8.00/#iqm V8 download area].<br />
<br />
<p align="right">[[User:Ckl|ckl]] 17:05, 5 May 2020 (CEST)</p><br />
[[Support:V8 only applications product/8.00/apps 8000064 (hotfix25) available|V8 applications hotfix25]] is now available from the [http://download.innovaphone.com/ice/8.00/#apps V8 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:36, 24 April 2020 (CEST)</p><br />
App Reports Version 13r1 Service Release 12a is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
<p align="right">[[User:kwa|kwa]] 16:00, 28 February 2020 (CEST)</p><br />
[[Support:IQM_Build_8026900_available | IQM Build 8026902 Hotfix31]] is now available from the [http://download.innovaphone.com/ice/8.00/#iqm V8 download area].<br />
<br />
<p align="right">[[User:Smayoral|sma]] 15:37, 11 February 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100268_(sr61)_available | Linux Application Platform V10 100268 sr61]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Smayoral|sma]] 15:37, 11 February 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100268_(sr61)_available | innovaphone Reporting V10 100268 sr61]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Smayoral|sma]] 15:37, 11 February 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100268_(sr61)_available | innovaphone Fax V10 100268 sr61]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Smayoral|sma]] 15:37, 11 February 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100268_(sr61)_available | innovaphone Exchange Calendar Connector V10 100268 sr61]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:05, 10 October 2019 (CEST)</p><br />
[[Support:V6_only_applications_product/6.00/apps_6000062_available|V6 applications version 6000062]] is now available from the [http://download.innovaphone.com/ice/6.00/#apps V6 download area].<br />
<br />
<p align="right">[[User:Hna|Hna]] 10:16, 8 July 2019 (CEST)</p><br />
[[Support:Firmware V10.00/10.00/firmware 101417 (sr 51) available | Version 10.00 Service Release 51]] is now available from the new [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hnahttps://wiki.innovaphone.com/index.php?title=Main_Page&diff=56401Main Page2020-06-16T13:39:23Z<p>Hna: /* Latest News */</p>
<hr />
<div>__NOTOC__<br />
<!-- Message of the day --><br />
<div style="margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;"><br />
<br />
== Remote Support ==<br />
<br />
<br />
[https://get.anydesk.com/PK8coqHH/AnyDesk.exe Download Anydesk]<br />
<br />
== Before you try to use this wiki ==<br />
To get access '''[[Account_Creation|READ THIS FIRST]]''', make sure you [[Special:Userlogin|log in]] and have [[Account_Creation|your account authorized]].<br />
<br />
You may then modify most of the articles and even add new ones. We hope for a rich and useful platform for professional innovaphone users to emerge this way.<br />
<br />
To make sure you understand the terms of use, have a quick look at the [[innovaphone-wiki:About | legal stuff]]. But do not waste too much time there! Instead, rather browse through the information provided. There are various hopefully useful links in the sidebar on the left.<br />
<br />
== Searching ==<br />
Searching in wiki works, but is sometimes cumbersome. However, you can have google do the job for you. Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation <code>site:innovaphone.com your search terms</code>] to search the innovaphone sites for matches!<br />
<br />
If you still don't find what you are looking for, [mailto:presales-at-innovaphone-dot-com drop us a message]<br />
</div><br />
<br />
<!-- latest news commented out, may be reactivated once there are new really --><br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;"><br />
<!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --><br />
<!-- <nowiki> ~~~~ is replaced by your name and date automatically </nowiki> --><br />
<br />
== Latest News ==<br />
<p align="right">[[User:Hna|Hna]] 15:39, 16 June 2020 (CEST)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 132425 (sr 14) available | Version 13r1 Service Release 14]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 15:39, 16 June 2020 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125716 (sr 35) available | Version 12r2 Service Release 35]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Hna|Hna]] 15:39, 16 June 2020 (CEST)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121295 (sr 37) available | Version 12r1 Service Release 37]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Tmo|Tmo]] 08:21, 22 May 2020 (CEST)</p><br />
[[Support:Firmware V13r1 product/13r1/firmware 132394 (sr 13) available | Version 13r1 Service Release 13]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Tmo|Tmo]] 17:56, 20 May 2020 (CEST)</p><br />
[[Support:Firmware V12r2 product/12r2/firmware 125713 (sr 34) available | Version 12r2 Service Release 34]] is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Tmo|Tmo]] 17:56, 20 May 2020 (CEST)</p><br />
[[Support:Firmware V12r1 product/12r1/firmware 121294 (sr 36) available | Version 12r1 Service Release 36]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Tmo|Tmo]] 17:56, 20 May 2020 (CEST)</p><br />
[[Support:Firmware V11r2 product/11r2/firmware 113758 (sr 50) available | Version 11r2 Service Release 50]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 16:00, 6 May 2020 (CEST)</p><br />
[[Support:IQM_Build_8027000_available | IQM Build 8027000 Hotfix32]] is now available from the [http://download.innovaphone.com/ice/8.00/#iqm V8 download area].<br />
<br />
<p align="right">[[User:Ckl|ckl]] 17:05, 5 May 2020 (CEST)</p><br />
[[Support:V8 only applications product/8.00/apps 8000064 (hotfix25) available|V8 applications hotfix25]] is now available from the [http://download.innovaphone.com/ice/8.00/#apps V8 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:36, 24 April 2020 (CEST)</p><br />
App Reports Version 13r1 Service Release 12a is now available from the [https://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)</p><br />
[[Support:Wireless_Handset_Firmware_and_Management_Software_product/9.00/wireless_100037_%28hotfix19%29_available | Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].<br />
<br />
<p align="right">[[User:Dde|Dde]] 07:56, 9 March 2020 (CET)</p><br />
[[Support:App_Platform_build_90007_available | App Platform build 90007]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:kwa|kwa]] 14:00, 02 March 2020 (CET)</p><br />
[[Support:Recording_Build_121100_available | innovaphone Recording SR29 build 121100]] is now available from the [http://download.innovaphone.com/ice/10.00/#recording V10 download area].<br />
<br />
<p align="right">[[User:kwa|kwa]] 16:00, 28 February 2020 (CEST)</p><br />
[[Support:IQM_Build_8026900_available | IQM Build 8026902 Hotfix31]] is now available from the [http://download.innovaphone.com/ice/8.00/#iqm V8 download area].<br />
<br />
<p align="right">[[User:Smayoral|sma]] 15:37, 11 February 2020 (CET)</p><br />
[[Support:Linux_Application_Platform_100268_(sr61)_available | Linux Application Platform V10 100268 sr61]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Smayoral|sma]] 15:37, 11 February 2020 (CET)</p><br />
[[Support:Innovaphone_Reporting_100268_(sr61)_available | innovaphone Reporting V10 100268 sr61]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Smayoral|sma]] 15:37, 11 February 2020 (CET)</p><br />
[[Support:Innovaphone_Fax_100268_(sr61)_available | innovaphone Fax V10 100268 sr61]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Smayoral|sma]] 15:37, 11 February 2020 (CET)</p><br />
[[Support:Innovaphone_Exchange_Calendar_Connector_100268_(sr61)_available | innovaphone Exchange Calendar Connector V10 100268 sr61]] is now available from the [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
<p align="right">[[User:Afi|Afi]] 17:05, 10 October 2019 (CEST)</p><br />
[[Support:V6_only_applications_product/6.00/apps_6000062_available|V6 applications version 6000062]] is now available from the [http://download.innovaphone.com/ice/6.00/#apps V6 download area].<br />
<br />
<p align="right">[[User:Hna|Hna]] 10:16, 8 July 2019 (CEST)</p><br />
[[Support:Firmware V10.00/10.00/firmware 101417 (sr 51) available | Version 10.00 Service Release 51]] is now available from the new [http://store.innovaphone.com/release/download.htm App store].<br />
<br />
== New Articles ==<br />
{{Special:Newpages/8,namespace=Howto,namespace=Support,namespace=Reference,namespace=Reference7,namespace=Reference8}}<br />
</div><br />
<br />
<div style="margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1"><br />
<br />
== More innovaphone Ressources ==<br />
* [http://www.innovaphone.com Home Page]<br />
<br />
* [http://download.innovaphone.com Download Site ]<br />
* [http://my.innovaphone.com my.innovaphone ]<br />
* [http://mantis.innovaphone.com/ Ticketing System ]<br />
* [[Support:What are the Roadmap Documents? | Roadmaps ]]<br />
</div></div>Hna