Commit d525a9d7 authored by Alain Takoudjou's avatar Alain Takoudjou

OSTV documentation

parent e333c0a5
<h1>Introduction</h1>
${WebPage_insertTableOfReferences}
<h2>Goal&nbsp;and scope</h2>
<p>The goal of this document is to introduce the architecture of OSTV NMS so that an engineer can understand its purpose, the different &nbsp;components and the reference&nbsp;documents that explain its installation and operation. OSTV NMS is designed to operate 4G/5G networks based on Amarisoft stack. It derives from SlapOS [<a href="https://slapos.nexedi.com" title="SlapOS">RD</a>], a general purpose framework designed as an overlay for POSIX systems that automates the management of any times of services (VRAN, CDN, etc.) on a distributed infrastructure. This document is not a manual.</p>
<h1>Executive Summary</h1>
<p>The purpose of a Network Management System (NMS) is to automate all aspects of the management of a telecommunication network, from the initial deployment of base stations with eNodeB VRAN software till&nbsp;the management of user subscriptions. A&nbsp;Network Management System (NMS) should thus automate&nbsp;deployment of telecommunication software,&nbsp;&nbsp;provisioning of telecommunication services, provisioning of user accounts, monitoring of telecommunication services, accounting, billing, etc. A&nbsp;Network Management System should be able to detect and - ideally - predict that a&nbsp;telecommunication service is failing or that a user is complaining of service quality.&nbsp;</p>
<p>A Network Management System (NMS) is a fairly large and complex application software.</p>
<p>It is the central tool for a telecommunication operator to automate&nbsp;the enforcement&nbsp;of common service level&nbsp;policies&nbsp;to all services of the telecommunication network. It is the central tool to manage the quality of service provided to users by knowing what happens, where and when before even being told by users.</p>
<h2>OSTV NMS</h2>
<p>The pictures bellow demonstrate&nbsp;OSTV NMS in action.</p>
<p style="text-align: center;"><img alt="Base Station Geographic Heat Map" src="https://slapos.nexedi.com/P-OSTV-NMS.Front.Page.ScreenShot?format=" /></p>
<p>The main screen displays a geographical map which shows&nbsp;in green base stations that are running fine, in red those that are down and in orange those that might become down. It differentiates two cases: the base station hardware ("Computer") and the base station services ("Partitions", ex. Amarisoft enb) running on the base station hardware. Whenever a base station is down, the left side of the rectangle become red. Whenever a service running on the base station encounters an exception, the right side of the rectangle becomes red. In both cases, a ticket is generated to notify administrators of the network of the existence of an issue that they should solve.</p>
<p style="text-align: center;"><img alt="List of Base Stations running eNodeB service" src="https://slapos.nexedi.com/P-OSTV-NMS-eNodeB.List?format=" /></p>
<p>The main screen can also be displayed as a list of servers, each of them running various services (emb, CDN, etc) that can be filtered or sorted. Each base stations provides display of its monitoring health using the same color conventions as the heat map and&nbsp;direct access to monitoring tool.</p>
<p style="text-align: center;"><img alt="VRAN Service Monitoring" src="https://slapos.nexedi.com/P-OSTV-NMS.Monitor.Chart.List?format=" /></p>
<p style="text-align: center;"><img alt="List of Running Process for a VRAN service" src="https://slapos.nexedi.com/P-OSTV-NMS.Monitor.Process.List?format=" /></p>
<p>In order to fix an issue, administrators of the network can access logs on the base station through a graphical user interface. This interface displays the usage of resources (memory, CPU, etc.) as well as the state&nbsp;of so-called &quot;promises&quot; that are configured to enforce the network service quality policy. A simple promise defines for example that &quot;LTE network should be available&quot;. A more complex promise should be that &quot;LTE network should provide at least 5 Mbps to each SIM card more than 95% of the time&quot;.&nbsp;The notion of &quot;promise&quot; is essential to manage service quality and must be configured or adapted for each telecommunication company.</p>
<p>By configuring promises step by step in response to the resolution of incidents managed by issue tracking tickets, a telecommunication company can fulfill the goal of providing the level of service that its users are expecting and to be informed of incidents before anyone tells them.</p>
<h2>NMS = CCMS</h2>
<p>The purpose of a Network Management System (NMS) is&nbsp;very similar to the purpose of Cloud Computing&nbsp;Management&nbsp;System (CCMS). The equivalence table bellow compares the two:</p>
<table align="center" border="1" cellpadding="1" cellspacing="1">
<caption>Network vs. Cloud Computing Management</caption>
<thead>
<tr>
<th scope="row">&nbsp;</th>
<th scope="col">Network Management System</th>
<th scope="col">Cloud Management System</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Geography</th>
<td>Which base station is located where?</td>
<td>Which server is located where ?</td>
</tr>
<tr>
<th scope="row">Ownership</th>
<td>Which base station belongs to who?</td>
<td>Which server belongs to who?</td>
</tr>
<tr>
<th scope="row">Hardware profile</th>
<td>Which RRH and device driver is available on which base station?</td>
<td>Which disk storage and device driver is available on which server?</td>
</tr>
<tr>
<th scope="row">Software deployment</th>
<td>Which&nbsp;version of which&nbsp;software (enb, epc) is available on which base station?</td>
<td>Which version of which software (qemu, mariadb, apache) is available on which server?</td>
</tr>
<tr>
<th scope="row">Service provisioning</th>
<td>How many enb services are running on each base station and what is their configuration?</td>
<td>How many VMs are running on each server and what is their configuration?</td>
</tr>
<tr>
<th scope="row">Token provisioning</th>
<td>Which SIM cards can access enb service on which base station?</td>
<td>Which X509 certificates are authorized by apache service on which servers?&nbsp;</td>
</tr>
<tr>
<th scope="row">User management</th>
<td>Who can request and configure a new enb service on which base station?</td>
<td>Who can request&nbsp;and configure a new VM on which server?</td>
</tr>
<tr>
<th scope="row">Project management</th>
<td>Which project&nbsp;can request and configure a new enb service on which base station?</td>
<td>Which project can request&nbsp;and configure a new VM on which server?</td>
</tr>
<tr>
<th scope="row">Organisation management</th>
<td>Which company can request and configure a new enb service on which base station?</td>
<td>Which company&nbsp;can request&nbsp;and configure a new VM on which server?</td>
</tr>
<tr>
<th scope="row">Monitoring</th>
<td>Which enb service or base station is down?</td>
<td>Which VM or base station is down?</td>
</tr>
<tr>
<th scope="row">Accounting</th>
<td>How much data has been consumed by which user or token on which enb during one month?</td>
<td>How much CPU has been consumed by which user or token on which VM during one month?</td>
</tr>
<tr>
<th scope="row">Billing</th>
<td>How much should which user or token owe to which organisation?</td>
<td>How much should which user or token owe to which organisation?</td>
</tr>
</tbody>
</table>
<p>This table demonstrates how it is possible to rely on an existing CCMS to build an NMS by replacing typical cloud computing&nbsp;software (qemu, mariadb, apache) with telecommunication software (Amarisoft), and by replacing the notion of server&nbsp;with the notion of&nbsp;base station. This equivalence makes completely sense for the deployment of VRAN on standard PC, as it is the case with Amarisoft stack. It can also make sense with traditional telecommunication hardware as long as a proxy service that can run on a standard PC provides access and remote control of&nbsp;traditional telecommunication equipment.</p>
<p>Moreover, relying on standard PC is also the best approach to deploy the kind of&nbsp;Edge Computing architecture that is increasingly adopted by telecommunication industry. It is becoming more and more frequent to deploy next to each eNodeB various types of network acceleration services: HTTPS CDN, IoT buffering gateway, media conversion service, etc. The reality of a modern telecommunication networks and decentralized cloud computing such as Edge Computing actually requires a solution that can unify both Network Management and Cloud Computing Management.</p>
<p>This is the approach we have chosen with OSTV NMS.</p>
<h2>SlapOS</h2>
<p>OSTV NMS is based on an existing Open Source / Free Software framework: SlapOS. Although the name &quot;SlapOS&quot; sounds like an operating system, it is not an operating system in the same meaning as Linux, Windows, BSD, etc. are operating systems.&nbsp;SlapOS is a general purpose overlay for distributed infrastructures based on&nbsp;POSIX operating system for&nbsp;(Linux, xBSD, etc.) with a strong focus on service management.&nbsp;</p>
<p>In other words, SlapOS provides the kind of&nbsp;service management features that are missing in Unix (but that used to exist in old mainframe operating systems or in Plan9). Those service management features can be leveraged to create a Network Management System that meets all requirements.</p>
<p>SlapOS has been deployed successfully since 2009 in many companies (Airbus, SANEF, Mitsubishi, etc.) and&nbsp;to operate two public clouds: VIFIB and Teralab.&nbsp;VIFIB is one of&nbsp;the inventors of Edge Computing [<a href="https://www.pcworld.idg.com.au/article/349884/vifib_wants_host_cloud_computing_home/" title="ViFiB wants you to host cloud computing at home">RD</a>].&nbsp;Teralab has been awarded a &quot;Silver Label&quot; [<a href="https://www.teralab-datascience.fr/fr/home/The+project/About+us/niveau-europeen-" title="TeraLab reconnue au niveau européen">RD</a>]&nbsp;by Europe&#39;s Big Data Value Association (BDVA). It is interesting to notice that Teralab has chosen SlapOS over other solutions (OpenStack, Proxmox, etc.) because it provided at much lower cost more management features, more control on hardware, more resiliency while&nbsp;consuming less resources.</p>
<p>Those characteristics (management, cost, resiliency, control of hardware, low footprint) are even more important in the case of telecommunication networks.</p>
<h1>SlapOS Architecture for VRAN</h1>
<p>SlapOS architecture is very simple. It is based on only two software components that can be installed on any GNU/Linux operating system: SlapOS Master and SlapOS Node.&nbsp;SlapOS Master is used to register each base station and define their target configuration.&nbsp;SlapOS Node is installed on each base station and ensures that its configuration matches the one defined in SlapOS Master. All other network management features derive from this simple architecture.&nbsp;</p>
<h2>SlapOS Master: Registry</h2>
<p>SlapOS Master acts as a registry of the network management system. It keeps track of the:</p>
<ul>
<li>list of base stations with metadata (geographical location, customer, project, network, etc.);</li>
<li>list of software&nbsp;and versions installed on each base station;</li>
<li>list of services running on each base station with&nbsp;configuration parameters;</li>
<li>list of issues open for each service or base station;</li>
<li>list of invoices for each&nbsp;customer;</li>
<li>list of users of SlapOS Master itself.</li>
</ul>
<p>In a traditional NMS setup, SlapOS Master users are the&nbsp;system administrators of the network, with very simple access control rules.</p>
<p>In a less traditional setup, SlapOS Master is used both by both system administrators and customers of the network. Access control rules are defined to limit access of users to services that they requested.</p>
<h2>SlapOS Node: Base Station Conductor</h2>
<p>SlapOS Node acts as the autonomous&nbsp;conductor of the base station which orchestrates the different services running inside&nbsp;the base station based on a&nbsp;target configuration defined in SlapOS Master.</p>
<p>SlapOS Node will&nbsp;thus make sure that:</p>
<ul>
<li>software and versions installed on the base station are the same as those defined on SlapOS Master for the base station;</li>
<li>services running in&nbsp;the base station&nbsp;and their configuration parameters are the same as those defined on SlapOS Master for the base station.</li>
</ul>
<p>SlapOS Node will also inform SlapOS Master of:</p>
<ul>
<li>connection parameters required to connect to&nbsp;services running on the base station;</li>
<li>health or status of running services.</li>
</ul>
<h2>Everything is a service</h2>
<p>The key motto of SlapOS is that &quot;<strong>everything is a service</strong>&quot;. Everything in SlapOS is thus achieved by defining and instantiating services. In the case of Network Management System (NMS), essential services are based on the Amarisoft LTE stack and&nbsp;implement Virtual Radio Access Network (VRAN). But other services may also be required: SIM card management service, HTTPS&nbsp;acceleration service, etc.</p>
<p>Here are a few&nbsp;examples of services that are usually deployed on a SlapOS Node to implement a complete VRAN architecture:</p>
<ul>
<li>LTE which includes nme and ims;</li>
<li>standalone LTE nme;</li>
<li>standalone LTE ims,</li>
<li>SIM database;</li>
<li>HTTPS CDN.</li>
</ul>
<p>Services in SlapOS are defined using the buildout [<a href="http://www.buildout.org" title="Buildout">RD</a>] build&nbsp;language and the Jinja2 [<a href="http://jinja.pocoo.org/">RD</a>] templating language. By using buildout and Jinja2, services in SlapOS are defined in a way that is <strong>independent of any GNU/Linux distribution</strong>. It is thus possible to deploy SlapOS Node services on virtually any version of Debian, Ubuntu, CentOS, Fedora, Red Hat, SuSE, Arch, Yocto, Gentoo, etc. without any change to the service definition in buildout. It&nbsp;does not matter if the GNU/Linux distribution is based on initd or systemd. It also does not matter whether the distribution is based on RPM, DEB, portage or pacman&nbsp;packages.</p>
<p>Services in SlapOS consists in reality of two different aspects:</p>
<ul>
<li>a buildout file,&nbsp;also called <strong>Software Release</strong>, which defines how to build the software required to run a service;</li>
<li>a service record in SlapOS Master registry, also known as <strong>Software Instance</strong>, which defines all parameters needed to run an instance of a service.</li>
</ul>
<p>An example of Software Release of Amarisoft LTE stack can be found here:&nbsp;https://lab.nexedi.com/nexedi/amarisoft/blob/master/slapos/software/lte/software.cfg [<a href="https://lab.nexedi.com/nexedi/amarisoft/blob/master/slapos/software/lte/software.cfg" title="Amarisoft Software Release">RD</a>].</p>
<p>An example of Software Release for an HTTPS accelerator can be found here:&nbsp;https://lab.nexedi.com/nexedi/slapos/blob/master/software/apache-frontend/software.cfg [<a href="https://lab.nexedi.com/nexedi/slapos/blob/master/software/apache-frontend/software.cfg" title="CDN Me">RD</a>].</p>
<p>If we compare the two aspects of a service to an object programming&nbsp;language,&nbsp;Software Release plays the role of a class and&nbsp;Software Instance plays the role of an object instance. Just like with object languages a single class of service (Software Release) can be used to create multiple service instances (Software Instance). A single base station can&nbsp;thus run multiple nme service instances with different parameters. It is even possible to run&nbsp;multiple nme service instances of multiple versions of the Amarisoft NME software on the same base station.</p>
<p>A base station can thus be shared between different projects, different customers or different networks with different service goals. Yet, it is&nbsp;managed in a simple and consistent way by SlapOS Master registry which keeps a&nbsp;shared state of the network.</p>
<h2>SLAP: Polling&nbsp;from Node to Master</h2>
<p>The Simple Language for Accounting and Provisioning (SLAP) communication protocol between SlapOS Node and SlapOS Master is a polling protocol with adaptive polling frequency. It is SlapOS Node which queries SlapOS master to collect its target state. It is SlapOS Node which notifies SlapOS Master to inform about its current state.</p>
<p>All communication is carried over HTTPS with X509 certificates allocated by SlapOS Master.&nbsp;One&nbsp;X509 certificate is allocated for each base station and for each service. Communication between SlapOS Node and SlapOS Master are thus encrypted and authenticated with a high level of detail. Also, by using HTTPS rather than a specific protocol, it is easy to deploy SlapOS Node in corporate networks which restrict most ports and protocols other than HTTP and HTTPS.</p>
<p>An interesting consequence&nbsp;of polling is that SlapOS Node can be deployed behind&nbsp;a NAT or a firewall. This means that an LTE base station could be deployed behind a standard xDSL Internet access with NAT, yet could be completely controlled remotely. It is also possible to deploy an&nbsp;LTE base station on a secure network with virtually no access from outside world, as long as it is allowed for this base station to query SlapOS Master IP address through HTTPS.</p>
<p>SlapOS polling architecture&nbsp; is thus very convenient for all kinds of applications (edge, defense, industrial, etc.) where base stations are used in a private context.</p>
<h2>Base Station Autonomous Operation</h2>
<p>SlapOS Node runs in an autonomous way. It contains all&nbsp;software and algorithms to ensure that its state converges autonomously towards the state defined in SlapOS Master. This autonomous approach goes in the opposite direction of centralized configuration systems such as Puppet,&nbsp;Chef or even Ansible that use a central server to run&nbsp;all algorithms that automate infrastructure. SlapOS Master only defines the desired target state. SlapOS Node runs algorithms that make its current state converge towards the&nbsp;desired state.</p>
<p>As a consequence, SlapOS Master / SlapOS Node architecture is much more scalable than centralized&nbsp;configuration systems. It also means that a SlapOS Node can still operate and benefit from Network Management algorithms&nbsp;whenever network access to SlapOS Master has been&nbsp;cut. It can thus provide the kind of resiliency that is expected in applications such as&nbsp;edge computing, defense, industrial IoT, etc.</p>
<h2>Zero Knowledge</h2>
<p>SlapOS Master only defines the configuration of SlapOS Nodes. It does need to not store:</p>
<ul>
<li>passwords to access SlapOS nodes;</li>
<li>passwords to access services running on SlapOS nodes;</li>
<li>logs of services running to&nbsp;SlapOS nodes.</li>
</ul>
<p>Thanks to polling, SlapOS nodes do not need to run ssh or any remote control software.</p>
<p>It is thus possible with SlapOS architecture to create a &quot;Zero Knowledge&quot; system. Even by attacking&nbsp;SlapOS Master, it is impossible to retrieve information that would help an intrusion into SlapOS nodes.</p>
<h2>Log analysis</h2>
<p>Another principle of SlapOS architecture is that &quot;<strong>everything that can be decentralized should be&nbsp;decentralized</strong>&quot;.</p>
<p>Logs of services running on SlapOS Node are thus&nbsp;by default stored on the node rather than uploaded somewhere. This saves&nbsp;network bandwidth and&nbsp;improves&nbsp;scalability&nbsp;.</p>
<p>A utility called &quot;SlapOS Monitor&quot; is provided to access logs and visualize node state. Network administrators can thus get a nice real-time overview of a collection of SlapOS Nodes: memory, CPU, health, etc. just like in a centralized system. It is even possible to visualize logs offline thanks to modern HTML5 offline technology used by&nbsp;SlapOS Monitor.</p>
<h2>IPv6</h2>
<p>SlapOS Node to SlapOS Master communication is based on IPv4 or IPv6. SlapOS Node to SlapOS Node communication is based on <u>IPv6 only</u>.&nbsp;</p>
<p>This choice was made so that it is possible to allocate a different IPv6 address to each service running on a SlapOS Node and to benefit from various improvements that IPv6 provides to TCP/IP networks. We also made this choice because it simplifies the orchestration of services on Edge networks, by removing all the problems posed by NAT in IPv4.&nbsp; It is also much easier and cheaper to purchase an IPv6 AS range than an IPv4 AS range nowadays in most regions of the world. Last, we observe that any major network operator (NTT, Google) have already migrated their administration network to IPv6.</p>
<p>In terms of IPv6 implementation we strongly recommend to deploy re6st [<a href="https://re6st.nexedi.com/" title="re6st">RD</a>] resilient network on each SlapOS Node and on SlapOS Master. Although this is not a requirement, it is the only way we are aware of today to implement a low latency resilient network based on babel routing protocol (a protocol that is being standardized by IETF as an improved alternative to OSPF).</p>
<p>For a simple trial or proof of concept, using a private IPv6 address range can be enough.</p>
<h1>Requirement Coverage</h1>
<p>We introduce in this chapter some common requirements for a Network Management System and explain how they are covered by OSTV NMS. Each requirement is defined as a paragraph title, followed by an explanation.</p>
<h2>Hardware</h2>
<h3>NMS&nbsp;software should run on any x86 PC</h3>
<p>NMS Node software can run an any x86 PC. The number of cores that is required depend on how many VRAN services are going to be deployed on a base station. A strict minimum of 2 cores is required. The performance of each core depends mainly&nbsp;. <font color="red"> The detailed information at the "NMS SYSTEM REQUIREMENTS" chapter of the learning track. </font></p>
<h3>NMS Node software should not consume more than one CPU core</h3>
<p>NMS Node software can be configured not to use more than a single process at a time so that it does not consume more than one CPU core. <font color="red">This are archived by enabling plugins to manage cgroups.</font> </p>
<h2>Architecture</h2>
<h3>Architecture should be simple enough to setup a complete system in less than one day</h3>
<p>A complete OSTV NMS system based on SlapOS can be installed in less than one day. This is possible because the architecture is based on only two components: SlapOS Master and SlapOS Node. In addition, thanks to the concept of &quot;everything is service&quot;, all actions on the system are done in the same way, which simplifies a lot the documentation and accelerates the learning curve. <font color="red">The NMS Learning Track contains all detailed informations to setup the complete system.</font></p>
<h3>Architecture should cover both base station&nbsp;operating system and server side management system</h3>
<p>OSTV NMS consists of SlapOS Node software that is deployed on base stations and SlapOS Master software that is deployed on a central server to manage all base stations. <font="red">More informations on Lecture 1, and as well Lecture 4 and Lecture 5.</font></p>
<h2>Functions</h2>
<h3>NMS should provide a geographic view of base stations with their current state (heat map)</h3>
<p>The first page of OSTV NMS displays a geaographic map of base stations with various colors that represent their current operation state and health. <font="red">More informations Lecture 5: Managing a NMS Deployment</font> </p>
<h3>NMS should provide a list of open issues with base stations or users</h3>
<p>The first page of OSTV NMS displays a list of open issues. <font="red">More informations Lecture 5: Managing a NMS Deployment</font></p>
<h3>NMS should provide a history of&nbsp; issues with base stations or users</h3>
<p>All present and past issues can be accessed in the &quot;Ticket&quot; module of OSTV NMS. <font="red">More informations Lecture 5: Managing a NMS Deployment</font></p>
<h3>NMS should provide a view to add a new base station</h3>
<p>A base station can be registered by adding a &quot;Server&quot; in the &quot;Server&quot; module of OSTV NMS. <font="red">This is explained on Lecture 4.</font></p>
<h3>NMS should provide a view to deploy VRAN software on a specified&nbsp;base station</h3>
<p>A VRAN service (ex. enb) can be created by adding an &quot;Amarisoft LTE&quot; instance&nbsp;in the &quot;Service&quot; module of OSTV NMS.<font="red">This is explained on Lecture 4.</font></p>
<h3>NMS should provide a view to change VRAN configuration on&nbsp;specified&nbsp;base station</h3>
<p>The &quot;Service&quot; module of OSTV NMS provides a list of all running services. By clicking on one service, it is possible to change its configuration, stop it or destroy it. <font="red">This is explained on Lecture 4.</font></p>
<h3>NMS should provide a view to add a new SIM card</h3>
<p>A SIM card database can created by adding a &quot;SIM Card&quot; instance in the &quot;Service&quot; module of OSTV NMS.&nbsp;</p>
<p>A SIM card can be created by adding a &quot;SIM Card&quot; so-called &quot;slave&quot; instance in the &quot;Service&quot; module of OSTV NMS.&nbsp;</p>
<font="red">This is explained at the end of Lecture 4.</font>
<h3>NMS should provide a detailed view of processes&nbsp;and resources used by specified VRAN service on&nbsp;specified base station</h3>
<p>OSTV NMS Monitoring tool provides a visual representation of all logs and health information that can be gather from the base station. <font="red">This is explained on Lecture 5.</font></p>
<h3>NMS should provide a detailed view of load and availability&nbsp;of&nbsp;specified VRAN service on&nbsp;specified base station</h3>
<p>OSTV NMS Monitoring tool provides a visual representation of all per process load&nbsp;information that can be gather from the base station.</p>
<p>OSTV NMS Monitoring tool provides a visual representation of all per service availability and history&nbsp;that can be gather from the base station.</p>
<font="red">This is explained on Lecture 5 on how to manage the NMS.</font>
<h3>NMS should provide a list of projects</h3>
<p>The &quot;Project&quot; module provides the list of projects to which a base station can be attached. <font="red">This is explained on Lecture 5, on the classification of Computers.</font></p>
<h3>NMS should provide a list of sites</h3>
<p>The &quot;Site&quot; module provides the list of sites to which a base station can be attached.<font="red">This is explained on Lecture 5, on the classification of Computers.</font></p>
<h3>NMS should provide a list of customers</h3>
<p>The &quot;Organisation&quot; module provides the list of customers or organisations to which a base station can be attached. <font="red">This is explained on Lecture 2 and Lecture 3.</font></p>
<h3>NMS should provide a list of users</h3>
<p>The list of users can be seen by the Administrator user on the underlying ERP5 UI, accessing "Person Module". <font="red">This is explained on Lecture 4.</font></p>
<h3>NMS should provide a view to add a new user</h3>
<p>A subscription system is added on Login Form. Registered users credentials can be approved automatically or require administrator approval. <font="red">This is explained on Lecture 2.</font></p>
<h3>NMS should provide a report of base station availability</h3>
<p>Availability can be measured using the list of "Tickets" on a Computer or using a the Monitoring Tool <font="red">This is explained on Lecture 4</font>, however reports can be extendend to become multiple critereas.</p>
<h3>NMS should provide text input of VRAN service configuration parameters</h3>
<p>The &quot;Service&quot; module of OSTV NMS provides a list of all running services. By clicking on one service, it is possible to input the configuration in text format (XML or JSON). <font="red">This is explained on Lecture 4.</font></p>
<h3>NMS should provide output&nbsp;input of VRAN service configuration parameters</h3>
<p>The &quot;Service&quot; module of OSTV NMS provides a list of all running services. By clicking on one service, it is possible to&nbsp;copy the configuration in text format (XML or JSON).<font="red">This is explained on Lecture 4.</font></p>
<h3>NMS should provide a command&nbsp;line interface and API to automate operations</h3>
<p>All actions in OSTV NMS user interface can also be achieved using the &quot;<strong>slapos</strong>&quot;&nbsp;command line. All actions can be triggered using the HATEAOS REST API of SlapOS Master. <font="red">This is explained on Lecture 1, by using python, REST or "slapos console"</font>.</p>
<h3>NMS should provide a notification system for all or selected issues</h3>
<p>All issues on the home page of OSTV NMS can be accessed from RSS feed which can serve for notification. <font="red">This is explained on Lecture 5.</font></p>
<h3>NMS should provide a way to define pro-active maintenance actions&nbsp;</h3>
<p>All issues on the monitoring tool&nbsp;of OSTV NMS can be accessed from RSS feed which can serve for notification. <font="red">This is explained on Lecture 5.</font></p>
<h2>Distribution</h2>
<h3>All dependencies of NMS software should be specified</h3>
<p>All OSTV NMS software is defined using a buildout file which provides explicit dependencies for all libraries&nbsp;until the&nbsp;glibc. <font="red">This is explained on Lecture 1, 2 and 3.</font></p>
<h3>NMS should run on any GNU/Linux distribution</h3>
<p>OSTV NMS software can be installed on any GNU/Linux distribution. <font="red">This is explained on Lecture 1, 2 and 3.</font></p>
<h3>NMS should run a embedded GNU/Linux, read-only system image with secure boot</h3>
<p>A Debian based read-only system image with secure boot&nbsp;is being developed using ELBE technology. SlapOS software and services will be isolated in a dedicated read-write mount point.</p>
<h2>System</h2>
<h3>NMS should provide a procedure for backup</h3>
<p>All data of OSTV NMS is stored in a single file than can be copies by rsync or ssh.</p>
<font color='red'>
<p>The SlapOS Master can be backuped by saving the folder /srv/slapgrid/*/srv/backup, /opt/slapos/proxy.db, /etc/opt/slapos/slapos.cfg</p>
</font>
<h3>NMS should&nbsp;be resilient to disaster and provide automated recovery&nbsp;</h3>
<p>NMS can be deployed using &quot;resilient WebRunner&quot; which provides automated disaster recovery and daily&nbsp;disaster recovery testing.</p>
<font color='red'><p>On the Lecture 6, you learn how to deploy Webrunner IDE, you can use the webrunner to have a resilient deployment for NMS Master.</p></font>
<h3>NMS should be provide fault tolerance</h3>
<p>As an option, NMS can be deployed using MariaDB Galera and NEO database so that it provides complete real time fault-tolerance for all components (except the load-balancer).</p>
<h1>System Requirements</h1>
<p>A SlapOS system requires at least two computers. One computer will host the SlapOS Master (COMP-ROOT). The other computer will run the first node (COMP-0). Additional nodes (COMP-1,2,3...)
will be required to build up the network and create software instances accessible to users.</p>
<h2>Requirements COMP-ROOT</h2>
<p>The COMP-ROOT computer must have public IPv4 or private IPv4 reachable from COMP-0 (and users). For running a network of 80-160 actual computers, it should at least have:</p>
<ul>
<li>4-8 CPU cores (8 vCores) - preferrably i7, XEON, AMD</li>
<li>8-16 GB RAM</li>
<li>200GB SSD harddisk (480GB preferred)</li>
</ul>
<p>The recommended configuation for this computer is Linux Distribution are Debian 8 or Debian 9 as these are distributions tested continuously on a daily basis.</p>
<h2>Requirements COMP-0</h2>
<p>The COMP-0 computer requires a valid SSL wildcard certificate as well as IPv6. At a minimum it should have:</p>
<ul>
<li>2-4 Cores</li>
<li>4-8 GB RAM</li>
<li>60-100 GB SSD harddisk (mostly needed for logs)</li>
</ul>
<p>The recommended configuation for this computer is Linux Distribution are Debian 8 or Debian 9 as these are distributions tested continuously on a daily basis.</p>
<h2>Dependencies</h2>
<p>
SlapOS is self-contained. Dependencies for Debian [<a href="https://lab.nexedi.com/nexedi/slapos.package/blob/master/obs/slapos/debian/control" title="SlapOS Dependencies - Debian">RD</a>] and RPM [<a href="https://lab.nexedi.com/nexedi/slapos.package/blob/master/obs/slapos/templates/slapos.spec.in#L62" title="SlapOS Dependencies - RPM">RD</a>] can
be found on Gitlab (SlapOS requires bridge-utils, python, gcc-c++, make, patch, wget and python-xml). When using the single line installer,
Ansible is another dependency but only of the installer itself. In general, SlapOS installer/package/buildout handle dependencies automatically.
</p>
<p>
For a SlapOS node itself, the list of software includes can be found in the slapos buildout config file [<a href="https://lab.nexedi.com/nexedi/slapos/blob/master/component/slapos/buildout.cfg#L4" title="SlapOS Buildout.cfg - list of software">RD</a>].
</p>
<font color="red"><p> The detailed informations on this topic present on "SlapOS System Requirements - Minimal Requirements to setup a SlapOS network" at Lecture 1.</p></font>
<h1>Further Readings</h1>
<p>We provide in this chapter a commented list of documents that will provide further understand of OSTV NMS design and operation.</p>
<ul>
<li><strong>SlapOS Architecture</strong> [<a href="https://www.nexedi.com/P-OSTV-DesignDocument.Understanding.Slapos.Architecture">RD</a>] contains a brief introduction of SlapOS and key concepts;</li>
<li><strong>SlapOS Production Deployment Overview</strong> [<a href="https://www.nexedi.com/P-OSTV-DesignDocument.Nms.System.Requirements" title="NMS System Requirements">RD</a>] provides a complete overview of deploying a production-grade SlapOS system such as the one that needs to be deployed for OSTV NMS;</li>
<li><strong>SlapOS Learning Track</strong> [<a href="https://www.nexedi.com/P-OSTV-Tutorial.Nms.Learning.Track" title="NMS Learning Track">RD</a>] contains a sequence of tutorials and howtos describing the necessary steps for setting up a SlapOS-based system;</li>
</ul>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/team</string>
<string>publication_section/documentation/temp_slapos</string>
<string>group/nexedi</string>
<string>follow_up/product_module/156</string>
<string>contributor/person_module/20121115-586BC0F</string>
<string>contributor/person_module/20110829-FF7377</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>P-OSTV-DesignDocument.OSTV.NMS</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>TRACK - Lectures explaining how to use an NMS system.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>P-OSTV-DesignDocument.OSTV.NMS</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Cloud Computing Provider System Requirements</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OSTV Design Document - OSTV NMS Architecture</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>004</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.28</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.24</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.19</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<!-- this should be built as a book from separate files. The book should
contain the description for the entry slide, all other slides are file whose
header is used as slide header, image as image and text wrapped in 1+ details
tags -->
<!-- replaces
-->
<section class="master">
<h1>Understanding NMS Software Release</h1>
<details open="open">
<p>
This document aims to explain how the Amarisoft LTE software release is
implemented, and the components related to it.
</p>
<p>The entire source source of the Amarisoft LTE Software release contains:</p>
<ul>
<li>Software profile with the list of dependencies to deploy the stack</li>
<li>Binaries of Amarisoft LTE stack (source code is not available - to use Amarisoft LTE software, please purchase the respective license from Amarisoft)</li>
<li>Instance profiles to define types of instantiation you want to deploy</li>
<li>JSON schemas parameter form rendering</li>
<li>Templates of configuration files for amarisoft stack</li>
</ul>
<p>
The entire software release profile is present on:</p><pre><code>$MASTER_URL/raw/master/</code></pre>
</details>
</section>
<section class="master">
<h1>Table of Content</h1>
<ul>
<li>NMS Software Release</li>
</ul>
</section>
<section class="chapter">
<h1>NMS Software Release</h1>
<details open="open">
<p>
This section will introduce the Amarifsoft stack profile, templates and
software profiles as well as input parameters.
</p>
</details>
</section>
<section>
<h1>Amarisoft Stack Profile</h1>
<img src="gitlab-Interface.Amarisoft.Buildout.Profile?display=&amp;format=png" alt="Gitlab interface - Amarisoft Buildout Profile" />
<details open="open">
<p>
The buildout profile can be found at:</p><pre><code>$MASTER_URL/blob/master/slapos/stack/amarisoft/buildout.cfg</code></pre>
<p>
and contains the entire definition of dependencies, downloads of the
configuration files and as well downloads of the basic templates to be used
on the Amarisoft stack.
</p>
<p>
The dependencies for the Software Release are:</p><pre><code>extends =
buildout.hash.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/stack/slapos.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/stack/monitor/buildout.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/component/logrotate/buildout.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/component/gzip/buildout.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/component/lxml-python/buildout.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/component/msgpack-python/buildout.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/component/cython-zstd/buildout.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/component/python-mysqlclient/buildout.cfg
https://lab.nexedi.com/nexedi/slapos/raw/07021e01b6ba9b3aee1eb7e1b4c1b68f44272
193/component/python-mysqlclient/buildout.cfg</code></pre>
</details>
<details open="open">
<p>Here is the definition version of the Amarisoft Stack to use:</p><pre><code>[unpack-to-instance]
recipe = slapos.recipe.build:download-unpacked
lte-version = 2017-10-13
url = ${:_profile_base_location_}/${:lte-version}/ \
lte${:_buildout_section_name_}-linux-${:lte-version}.tar.gz
destination = ${buildout:directory}/${:_buildout_section_name_}
strip-top-level-dir = true
ignore-existing = true
on-update = true</code></pre>
<p>
Here is an example of additional action taken by the buildout to
configure the software environment, which means copying the <i>trx_sdr.so</i>
into <i>enb</i> folder:</p><pre><code>[sdr-driver]
# move trx_sdr.so next to lteenb binary
recipe = slapos.recipe.build:download
url = ${sdr:destination}/trx_sdr.so
destination = ${enb:destination}/trx_sdr.so</code></pre>
</details>
</section>
<section>
<h1>Configuration Templates</h1>
<img src="gitlab-Interface.Amarisoft.Configuration.Template.List?display=&amp;format=png" alt="Gitlab Interface - Amarisoft Configuration Templates" />
<details open="open">
<p>
The following folder contains the configuration files that will be used by
Buildout to render the final configuration files:</p><pre><code>$MASTER_URL/tree/master/slapos/stack/amarisoft/config</code></pre>
<p>
For example <code>enb.jinja.cfg</code> which uses <a href="http://jinja.pocoo.org/">Jinja2</a>
templating to render the final configuration file includes:</p><pre><code>
{% set cell_default = slapparameter_dict.get("cell_default", {}) %}
[..]
cell_default: {
n_antenna_dl: {{ cell_default.get("n_antenna_dl", 2) }},
/* antennas for downlink */
n_antenna_ul: {{ cell_default.get("n_antenna_ul", 1) }},
/* antennas for uplink */</code></pre>
<p>
which allows to use the <a href="http://git.erp5.org/gitweb/slapos.recipe.template.git/blob/HEAD:/slapos/recipe/template/README.jinja2.txt?js=1">Jinja2</a> templating language to define variables and load values from user input parameters.
In the example, the number of antennas for download and uploade are defined
by the user, or if not provided, a default value is set.
</p>
</details>
<details open="open">
<p>
In this next example, you can notice that among other values the
<code>cell_list</code> parameter can also be defined by the user:</p><pre><code>/* list of cells */
cell_list: [
{% for cell in cell_list %}
{
/* Broadcasted PLMN identities */
plmn_list: [
"00101",
],
dl_earfcn: {{ cell.get("dl_earfcn") }},
n_id_cell: {{ cell.get("n_id_cell") }},
cell_id: {{ "0x%02x" % cell.get("n_id_cell") }},
tac: {{ "0x%04x" % cell.get("n_id_cell") }},
root_sequence_index: 204, /* PRACH root sequence index */
},
{% endfor %}</code></pre>
<p>
Every configuration file that will end up on <i>leteenb</i>, <i>lteemme</i>,
etc can have predefined default values or values provided by the user.
</p>
</details>
</section>
<section>
<h1>Software Profile</h1>
<img src="gitlab-Interface.Amarisoft.Software.Profile?display=&amp;format=png" alt="Gitlab Interface - Amarisoft Software Profile" />
<details open="open">
<p>
The software profile can be found at:</p><pre><code>$MASTER_URL/blob/master/slapos/software/lte/software.cfg</code></pre>
<p>
This file extends the stack and defines all the templates uses by
SlapOS to run the instances. Additional configurations can be included
here to differentiate eventual variations on how the stack will be used. </p><pre><code>[buildout]
extends =
buildout.hash.cfg
../../stack/amarisoft/buildout.cfg
parts +=
template
# recipe to install SDR driver into ENB's libs
sdr-driver
[..]</code></pre>
</details>
</section>
<section>
<h1>Software Types</h1>
<img src="slapos-Interface.Service.Lte.Enb.Configuration.Parameters?display=&amp;format=png" alt="SlapOS Interface - Service LTE eNB Configuration Parameters" />
<details open="open">
<p>
In the software profile (<code>software.cfg</code>), everything is
unified and enb, mme, ims, mbms binaries are deployed on the machine. You
can only decide during the instantiation (<code>instance.cfg</code> which
type of instance you want (corresponding to the <i>software-type</i> shown
on the screenshot). This way you can decide to only run mme with
appropriate configuration, for example.
</p>
<p>
The list of software types are defined in two main locations:</p><ul>
<li>
<code>software.cfg.json</code> - <a href="$MASTER_URL/blob/master/slapos/software/lte/software.cfg.json">https://lab.nexedi.com/nexedi/amarisoft/blob/master/slapos/software/lte/software.cfg.json</a></li>
<li>
<code>instance.cfg</code> - <a href="$MASTER_URL//blob/master/slapos/software/lte/instance.cfg">https://lab.nexedi.com/nexedi/amarisoft/blob/master/slapos/software/lte/instance.cfg</a>
</li>
</ul>
</details>
<details open="open">
<p>
In softwate.cfg.json, you describe as json the list of Software types that
will be displayed on the request form:</p><pre><code>{
"name": "LTE",
"description": "LTE",
"serialisation": "json-in-xml",
"software-type": {
"enb": {
"title": "eNB",
"software-type": "enb",
"description": "eNodeB Configuration",
"request": "instance-enb-input-schema.json",
"response": "instance-enb-schema.json",
"index": 0
},
[..]</code></pre>
<p>
Each entry defines a form to render to the user (as shown in the screenshot)
</p>
</details>
<details open="open">
<p>
On instance.cfg you can have find the list of types here:</p><pre><code>[switch-softwaretype]
recipe = slapos.cookbook:softwaretype
default = $${dynamic-template-lte-default:rendered}
license = $${dynamic-template-lte-license:rendered}
enb = $${dynamic-template-lte-enb:rendered}
epc = $${dynamic-template-lte-mme:rendered}
ims = $${dynamic-template-lte-ims:rendered}
mbms = $${dynamic-template-lte-mbms:rendered}</code></pre>
<p>
Each entry defines a buildout profile, that will be used to instantiate the
services.
</p>
</details>
</section>
<section>
<h1>Parameter Form Input</h1>
<img src="gitlab-Interface.Amarisoft.Form.Parameter.Input?display=&amp;format=png" alt="Gitlab Interface - Amarisoft Form Parameter Input" />
<details open="open">
<p>
The developer can define one or more json schemas for each software type.
Each json schema will be rendered as a form in order for users to enter their preferences
and configuration. Later, this input can be translated in a
multitude of values.
</p><p>
The following example illustrates the rendering:</p><pre><code>[..]
"mme_addr": {
"title": "MME address",
"description": "address of MME for S1AP connection",
"type": "string",
"default": "127.0.1.100"
},
[..]</code></pre>
<p>
This defines that a string input will be rendered for <i>mme_addr</i> resulting
in:
<img src="slapos-Interface.Amarisoft.Form.Parameter.Input?display=&format=png" alt="SlapOS Interface - MMR address rendered field" />
<p>
You can program a combination of values to deploy a desirable configuration
giving high flexibility to the model to generate thousand of
configurations with minimal amount of inputs.
</p>
</details>
</section>
<section>
<h1>Instantiation Templates and Service Deployment</h1>
<img src="gitlab-Interface.Amarisoft.Instantiation.Template?display=&format=png" alt="Gitlab Interface - Amarisoft Instantiation Template" />
<details open="open">
<p>
When requesting to deploy an eNB, the following template will be used:</p><pre><code>$MASTER_URL//blob/master/slapos/
software/lte/instance-enb.jinja2.cfg</code></pre>
<p>
This template defines which actions to take to run the service, such as
create directories, wrapper scripts with proper values to render the final templates.</p>
<h2>Creating Directories</h2>
<p>The following section creates the required directories:</p><pre><code>[directory]
recipe = slapos.cookbook:mkdirectory
home = ${buildout:directory}
etc = ${:home}/etc
var = ${:home}/var
etc = ${:home}/etc
bin = ${:home}/bin
run = ${:var}/run
script = ${:etc}/run
service = ${:etc}/service
promise = ${:etc}/promise
log = ${:var}/log</code></pre>
</details>
<details open="open">
<h2>Script to Run eNB</h2>
<p>This section defines the script to run eNB:</p><pre><code>[lte-enb-service]
recipe = slapos.cookbook:wrapper
init = ${ltelogs:rendered} ${directory:log}/enb.log; sleep 2
command-line = {{ enb }}/lteenb ${directory:etc}/enb.cfg
wrapper-path = ${directory:service}/lte-enb
mode = 0775
reserve-cpu = True
pidfile = ${directory:run}/enb.pid
{% if slapparameter_dict.get("license_key_path", None) %}
environment = AMARISOFT_PATH={{ slapparameter_dict.get("license_key_path", None) }}
{% endif %}</code></pre>
</details>
<details open="open">
<h2>Rendering of enb.cfg</h2>
<p>
The rendering of <code>enb.cfg</code> is done in this section:</p><pre><code>[config-base]
recipe = slapos.recipe.template:jinja2
mode = 0664
extensions = jinja2.ext.do
context =
section directory directory
section instance instance
key slapparameter_dict instance:configuration
import netaddr netaddr
[lte-enb-config]
&lt;= config-base
template = {{ enb_template }}
rendered = ${directory:etc}/enb.cfg</code></pre>
</details>
</section>
<section class="master">
<h1>Thank You</h1>
<div style="float:left;margin-top:9%;width:48%;">
<img alt="Image Nexedi Office"
title="Image Nexedi Office"
src="NXD-Media.Image.Office.Munich?display=large&amp;format=png"
type="image/png" />
</div>
<div>
<ul style="list-style:none;display:block;">
<li>Nexedi SA</li>
<li>147 Rue du Ballon</li>
<li>59110 La Madeleine</li>
<li>France</li>
</ul>
<ul style="list-style:none;display:block;">
<li><a href="https://www.nexedi.com/contact">nexedi.com/contact</a></li>
</ul>
</div>
<details open="open"></details>
</section>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/team</string>
<string>publication_section/documentation/temp_slapos</string>
<string>group/nexedi</string>
<string>follow_up/product_module/156</string>
<string>contributor/person_module/20121115-586BC0F</string>
<string>contributor/person_module/20110829-FF7377</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>P-OSTV-DesignDocument.Understanding.Nms.Software.Release</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>TRACK - Lectures explaining how to use an NMS system.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>P-OSTV-DesignDocument.Understanding.Nms.Software.Release</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Understanding NMS Software Release</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OSTV Design Document - Understanding NMS Software Release</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>002</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.36</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.35</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.34</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<!-- this should be built as a book from separate files. The book should
contain the description for the entry slide, all other slides are file whose
header is used as slide header, image as image and text wrapped in 1+ details
tags --><!-- replaces:
-->
<section class="master">
<h1>How To Add LTE Service</h1>
<details open="open">
<p>This document will show how to add LTE Services to an existing server. It is required to have:</p>
<ul>
<li>A NMS network setup with a <a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Master.Comp.Root">SlapOS Master</a> (<b>COMP-ROOT</b>) and <a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Node.Comp.0">first node</a> (<b>COMP-0</b>)</li>
<li>A Amarisoft LTE (or equivalent) software release <a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Node.Comp.123">installed on the COMP-123</a> (<b>COMP-123</b>)</li>
<li>A user account on the NMS system</li>
</ul>
<p>Two ways to setup an eNodeB/ePC server using Amarisoft LTE will be shown (<b>note</b>, that using Amarisoft LTE and being able to follow this howto requires to purchase the respective license from Amarisoft):</p>
<h2>Lab Version</h2>
<p>The <code>software-type</code> <i>Default</i> will provide a &quot;Lab&quot; version (for experimenting) in which the following four services are deployed on the same computer in a cluster:</p>
<ul>
<li>1 instance of LTE eNB</li>
<li>1 instance of LTE ePC (MME)</li>
<li>1 instance of LTE IMS</li>
<li>1 instance of LTE MBMS</li>
</ul>
<h2>Production Version</h2>
<p>For production services can be deployed individually which allows to create boxes with multiple LTE eNB instances. This howto only covers instantation of:</p>
<ul>
<li>1 instance of LTE ePC (MME)</li>
<li>1 instance of LTE eNB</li>
</ul>
<p>IMS and MBMS are complimentary services, so their deployment is not shown in this document. They can however be deployed similar to a LTE EPC.</p>
</details>
</section>
<section class="master">
<h1>Table of Content</h1>
<ul>
<li>Instantiating LTE - Default</li>
<li>Instantiating LTE - EPC/eNB</li>
</ul>
</section>
<section class="chapter">
<h1>Instantiating LTE - Default</h1>
<details open="open">
<p>The following steps cover setting up the &quot;Lab&quot; Version on the LTE Box with all relevant services instantiated on one instance.</p>
</details>
</section>
<section>
<h1>NMS Login</h1>
<img alt="SlapOS Interface - Login" src="slapos-Interface.Add.Service.Simcard.Id.Login?display=&amp;format=png" />
<details open="open">
<p>Start by logging into your SlapOS Master Dashboard.</p>
</details>
</section>
<section>
<h1>NMS Dashboard</h1>
<img alt="SlapOS Interface - Dashboard" src="slapos-Interface.Add.Service.Simcard.Id.Dashboard?display=&amp;format=png" />
<details open="open">
<p>Click on the <i>Services</i> button on the to see currently instantiated services.</p>
</details>
</section>
<section>
<h1>List of Instantiated Services</h1>
<img alt="SlapOS Dashboard - Add Service" src="slapos-Interface.Add.Service.Lte.Lab?display=&amp;format=png" />
<details open="open">
<p>Head to the list of services by clicking on the <i>Services</i> button on the side menu. The list will show all services currently <b>instantiated</b> (not the software currently installed!). To create an instance of an installed software, click the <i>Add</i> button in the subheader.</p>
</details>
</section>
<section>
<h1>Select LTE Service</h1>
<img alt="SlapOS Dashboard - Select Service" src="slapos-Interface.Select.Service.Lte.Lab?display=&amp;format=png" />
<details open="open">
<p>Select LTE as this is the service we want to instantiate. The differentiation for the specific service will be made in the instantiation parameters.</p>
</details>
</section>
<section>
<h1>Select LTE Service Version</h1>
<img alt="SlapOS Dashboard - Select Service Version" src="slapos-Interface.Select.Service.Lte.Lab.Version?display=&amp;format=png" />
<details open="open">
<p>As during installation, please choose the latest version.</p>
</details>
</section>
<section>
<h1>LTE Lab Service Configuration</h1>
<img alt="SlapOS Dashboard - Instance Configuration" src="slapos-Interface.Service.Lte.Lab.Configuration.Parameters?display=&amp;format=png" />
<details open="open">
<p>You will reach the service configuration menu. Give your service a recognizable name (<i>LTE_ALL_IN_ONE</i> in the example), select <code>Software-Type</code> <i>Default</i> (denoting LTE Lab), pick the Computer/Box to install the LTE Lab at the end of the form and then fill out the form parameters. If required, you can expand the form to add additional parameters. At time of writing, parameters include:</p>
<ul>
<li><b>Log Options</b>: Log options settings for enb.cfg, mme.cfg, ims.cfg and mbms.cfg (please refer to Amarisoft documentation for details)</li>
<li><b>GTP bind address</b>: IP address of the network interface connected to the core network</li>
<li><b>MME address</b>: Address of MME for S1AP connection</li>
<li><b>UE configuration path (optional)</b>: A path containing the ue_db configuration on the machine. Usefull for simple Tests</li>
<li><b>RF Parameters / Tx_gain</b>: Tx gain (in dB)</li>
<li><b>RF Parameters / Rx gain</b>: Rx gain (in dB)</li>
<li><b>License Key Path</b>: Path to the Amarisoft license files on the filesytem</li>
<li><b>Cell List</b>: Contains one or more cells configuration to be set on enb.cfg configuration</li>
<li><b>Cell List / DL EARFCN</b>: Downlink EARFCN of the cell</li>
<li><b>Cell List / Physical cell ID</b>: Physical cell ID</li>
</ul>
<p>Click <i>Proceed</i> to begin instantiation.</p>
</details>
</section>
<section>
<h1>LTE Lab Service Instantiation</h1>
<img alt="SlapOS Dashboard - Instantiate Service" src="slapos-Interface.Instantiate.Service.Lte.Lab?display=&amp;format=png" />
<details open="open">
<p>Refresh the list of current services to show the new service and status.</p>
</details>
</section>
<section>
<h1>Monitor Service Connection Parameter</h1>
<img alt="SlapOS Dashboard - Service LTE Lab Connection Parameters" src="slapos-Interface.Service.Lte.Lab.Connection.Parameters?display=&amp;format=png" />
<details open="open">
<p>If you click on the instantiated service, you can see the connection parameters. By default they are not expanded.</p>
</details>
</section>
<section>
<h1>Expand Service Connection Parameters</h1>
<img alt="SlapOS Dashboard - Service LTE Lab Connection Parameters Expanded" src="slapos-Interface.Service.Lte.Lab.Connection.Parameters.Expanded?display=&amp;format=png" />
<details open="open">
<p>By clicking on the <i>Parameter Entry</i> buttons, you can expand the drawers to show all subsequent parameters.</p>
</details>
</section>
<section>
<h1>Service LTE Lab Process List</h1>
<img alt="SlapOS Dashboard - Service LTE Lab Process List" src="slapos-Interface.Service.Lte.Lab.Process.List?display=&amp;format=png" />
<details open="open">
<p>Scroll down on the connection parameter page. Once the service has been fully instantiated you can see all running processes at the bottom of the page in the table <i>Instances</i>.</p>
</details>
</section>
<section class="chapter">
<h1>Instantiating LTE - EPC/ENB</h1>
<details open="open">
<p>The following steps cover setting the EPC/MME and eNB separately.</p>
</details>
</section>
<section>
<h1>List of Instantiated Services</h1>
<img alt="SlapOS Dashboard - Add Service" src="slapos-Interface.Add.Service.Lte.Epc?display=&amp;format=png" />
<details open="open">
<p>Head to the list of services by clicking on the <i>Services</i> button on the side menu. The list will show all services currently <b>instantiated</b> (not the software currently installed!). To create an instance of an installed software, click the <i>Add</i> button in the subheader.</p>
</details>
</section>
<section>
<h1>Select LTE Service</h1>
<img alt="SlapOS Dashboard - Select Service" src="slapos-Interface.Select.Service.Lte.Epc?display=&amp;format=png" />
<details open="open">
<p>The list of available services is the same as the list of installable software releases used earlier when installing the service. Select LTE as this is the service we want to provide (the differentiation will only be made during configuration).</p>
</details>
</section>
<section>
<h1>Select LTE Service Version</h1>
<img alt="SlapOS Dashboard - Select Service Version" src="slapos-Interface.Select.Service.Lte.Epc.Version?display=&amp;format=png" />
<details open="open">
<p>As during installation, please choose the latest version.</p>
<p><b>Note</b>, that this is an easy case, as there is only a single version installed on one node. More complex networks will likely have multiple versions of a software installed on different nodes.</p>
</details>
</section>
<section>
<h1>LTE EPC Service Configuration</h1>
<img alt="SlapOS Dashboard - Instance Configuration" src="slapos-Interface.Service.Lte.Epc.Configuration.Parameters?display=&amp;format=png" />
<details open="open">
<p>You will reach the service configuration menu. Give your service a recognizable name (<i>EPC-STANDALONE</i> in the example), select <code>Software-Type</code> <i>EPC</i> pick the Computer/Box to install the LTE EPC at the end of the form and then fill out the form parameters.</p>
<p>Click <i>Proceed</i> to begin instantiation.</p>
</details>
</section>
<section>
<h1>LTE EPC Service Instantiation</h1>
<img alt="SlapOS Dashboard - Instantiate Service" src="slapos-Interface.Instantiate.Service.Lte.Epc?display=&amp;format=png" />
<details open="open">
<p>Refresh the list of current services to show the new service and status.</p>
</details>
</section>
<section>
<h1>Monitor Service Connection Parameter</h1>
<img alt="SlapOS Dashboard - Service LTE EPC Connection Parameters" src="slapos-Interface.Service.Lte.Epc.Connection.Parameters?display=&amp;format=png" />
<details open="open">
<p>If you click on the instantiated service, you can see the connection parameters.</p>
</details>
</section>
<section>
<h1>Verify Service Instantiated</h1>
<img alt="SlapOS Dashboard - Service LTE EPC Accessability" src="slapos-Interface.Validate.Service.Lte.Epc.Instantiation?display=&amp;format=png" />
<details open="open">
<p>Once the monitoring status turns green on a page refresh, the EPC has been instantiated successfully. Then we can add the ENB. Click the <i>Add</i> button in the subheader.</p>
</details>
</section>
<section>
<h1>Select LTE Service</h1>
<img alt="SlapOS Dashboard - Select Service" src="slapos-Interface.Select.Service.Lte.Enb?display=&amp;format=png" />
<details open="open">
<p>The list of available services is the same as the list of installable software releases used earlier when installing the service. Select LTE as this is the service we want to provide (the differentiation will only be made during configuration).</p>
</details>
</section>
<section>
<h1>Select LTE Service Version</h1>
<img alt="SlapOS Dashboard - Select Service Version" src="slapos-Interface.Select.Service.Lte.Enb.Version?display=&amp;format=png" />
<details open="open">
<p>As during installation, please choose the latest version.</p>
<p><b>Note</b>, that this is an easy case, as there is only a single version installed on one node. More complex networks will likely have multiple versions of a software installed on different nodes.</p>
</details>
</section>
<section>
<h1>LTE ENB Service Configuration</h1>
<img alt="SlapOS Dashboard - Instance Configuration" src="slapos-Interface.Service.Lte.Enb.Configuration.Parameters?display=&amp;format=png" />
<details open="open">
<p>You will reach the service configuration menu. Give your service a recognizable name (<i>eNB-STANDALONE</i> in the example), select <code>Software-Type</code> <i>eNB</i> pick the Computer/Box to install the LTE eNB at the end of the form and then fill out the form parameters. <b>Note</b>, that if you have multiple boxes on your network, you can (supply and) instantiate eNB on any of the available boxes.</p>
<p>Click <i>Proceed</i> to begin instantiation.</p>
</details>
</section>
<section>
<h1>LTE EPC Service Instantiation</h1>
<img alt="SlapOS Dashboard - Instantiate Service" src="slapos-Interface.Instantiate.Service.Lte.Enb?display=&amp;format=png" />
<details open="open">
<p>Refresh the list of current services to show the new service and status.</p>
</details>
</section>
<section>
<h1>Monitor Service Connection Parameter</h1>
<img alt="SlapOS Dashboard - Service LTE eNB Connection Parameters" src="slapos-Interface.Service.Lte.Epc.Connection.Parameters?display=&amp;format=png" />
<details open="open">
<p>If you click on the instantiated service, you can see the connection parameters.</p>
</details>
</section>
<section>
<h1>Verify Service Instantiated</h1>
<img alt="SlapOS Dashboard - Service LTE eNB Accessability" src="slapos-Interface.Verify.Service.Lte.Enb.Accessability?display=&amp;format=png" />
<details open="open">
<p>Once the monitoring status turns green on a page refresh, the eNB has been instantiated successfully.</p>
</details>
</section>
<section class="master">
<h1>Thank You</h1>
<div style="float:left;margin-top:9%;width:48%;"><img alt="Image Nexedi Office" src="NXD-Media.Image.Office.Munich?display=large&amp;format=png" title="Image Nexedi Office" type="image/png" /></div>
<div>
<ul style="list-style:none;display:block;">
<li>Nexedi SA</li>
<li>147 Rue du Ballon</li>
<li>59110 La Madeleine</li>
<li>France</li>
</ul>
<ul style="list-style:none;display:block;">
<li><a href="http://nexedi.com/contact">nexedi.com/contact</a></li>
</ul>
</div>
<details open="open">&nbsp;</details>
</section>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/team</string>
<string>publication_section/documentation/temp_slapos</string>
<string>group/nexedi</string>
<string>follow_up/product_module/156</string>
<string>contributor/person_module/20121115-586BC0F</string>
<string>contributor/person_module/20110829-FF7377</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>P-OSTV-HowTo.Add.Lte.Service</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>TRACK - Lectures explaining how to use an NMS system.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>P-OSTV-HowTo.Add.Lte.Service</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Add LTE Service</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OSTV HowTo Add LTE Service</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>002</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.5</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.49</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.48</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<!-- this should be built as a book from separate files. The book should
contain the description for the entry slide, all other slides are file whose
header is used as slide header, image as image and text wrapped in 1+ details
tags -->
<!-- replaces:
-->
<section class="master">
<h1>How To Add User to SimcardDB</h1>
<details open="open">
<p>
This document will guide through the steps of adding a new user to the SimcardDB which will be queried by eNBs in regular intervals for new IDs.
For following this howto, it is required to have:
</p>
<ul>
<li>A NMS network set up with a <a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Master.Comp.Root">SlapOS Master</a> (<b>COMP-ROOT</b>) and <a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Node.Comp.0">first node</a> (<b>COMP-0</b>) and ready to use.</li>
<li>A SimcardDB software release <a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Node.Comp.0">installed on the COMP-0 or any other machine</a> (<b>COMP-123</b>)</li>
<li>A user account on the NMS system</li>
</ul>
</details>
</section>
<section class="master">
<h1>Table of Content</h1>
<ul>
<li>Add User to SimcardDB</li>
</ul>
</section>
<section class="chapter">
<h1>Add Simcard to SimcardDB</h1>
<details open="open">
<p>
The eNB will query the SimcardDB in regular intervals for new simcard ids.
In this section we will add a simcard to the SimcardDB. You could then
investigate when the simcard id becomes available on the eNB and whether it
can be used (both steps are not part of the howto).
</p>
</details>
</section>
<section>
<h1>NMS Login</h1>
<img src="slapos-Interface.Add.Service.Simcard.Id.Login?display=&amp;format=png" alt="SlapOS Interface - Login" />
<details open="open">
<p>
Start by logging into your NMS Dashboard.
</p>
</details>
</section>
<section>
<h1>NMS Dashboard</h1>
<img src="slapos-Interface.Add.Service.Simcard.Id.Dashboard?display=&amp;format=png" alt="SlapOS Interface - Dashboard" />
<details open="open">
<p>
Click on the <i>Services</i> button on the to see currently instantiated services.
</p>
</details>
</section>
<section>
<h1>List of Instantiated Services</h1>
<img src="slapos-Interface.Add.Service.Simcard.Id.Service.List?display=&amp;format=png" alt="SlapOS Dashboard - Service List" />
<details open="open">
<p>
Click <i>Add</i> in the subheader to add a new service.
</p>
</details>
</section>
<section>
<h1>Create New SimcardId Instance</h1>
<img src="slapos-Interface.Add.Service.Simcard.Id.Select.Service?display=&amp;format=png" alt="SlapOS Dashboard - Select Service" />
<details open="open">
<p>
Select SimcardDB as this is the service we want to provide.
The differentiation between instantiating a new SimcardDB and adding a Simcard
will be made using the configuration parameter <i>Software-Type</i> in the next steps.
</p>
</details>
</section>
<section>
<h1>Select SimcardId Service Version</h1>
<img src="slapos-Interface.Add.Service.Simcard.Id.Select.Version?display=&amp;format=png" alt="SlapOS Dashboard - Select Service Version" />
<details open="open">
<p>Please choose the latest version.
</p>
</details>
</section>
<section>
<h1>SimcardId Configuration</h1>
<img src="slapos-Interface.Add.Service.Simcard.Id.Configuration.Parameter.List?display=&amp;format=png" alt="SlapOS Dashboard - Service Configuration Parameters" />
<details open="open">
<p>
Select <code>Software Type</code> <i>SimCard</i>, choose the computer which supplied the SimcardDB and fill out the
configuration parameters as shown.
</p>
<p>
Click <i>Proceed</i> to continue.
</p>
</details>
</section>
<section>
<h1>SimcardId Instantiation</h1>
<img src="slapos-Interface.Add.Service.Simcard.Id.Instantiation?display=&amp;format=png" alt="SlapOS Dashboard - Service Instantiation" />
<details open="open">
<p>
Refresh the page to see the new instance. Click on it once appears.
</p>
</details>
</section>
<section>
<h1>SimcardId Connection Parameters</h1>
<img src="slapos-Interface.Add.Service.Simcard.Id.Connection.Parameter.List?display=&amp;format=png" alt="SlapOS Dashboard - Connection Parameters" />
<details open="open">
<p>
Wait and refresh the page from time to time until the status changes from <i>Start Requested</i>. Once your instance has been deployed the SimcardId
should be propagated to the eNB/EPC associated with the underlying SimcardDB.
</p>
</details>
</section>
<section class="master">
<h1>Thank You</h1>
<div style="float:left;margin-top:9%;width:48%;">
<img alt="Image Nexedi Office"
title="Image Nexedi Office"
src="NXD-Media.Image.Office.Munich?display=large&amp;format=png"
type="image/png" />
</div>
<div>
<ul style="list-style:none;display:block;">
<li>Nexedi SA</li>
<li>147 Rue du Ballon</li>
<li>59110 La Madeleine</li>
<li>France</li>
</ul>
<ul style="list-style:none;display:block;">
<li><a href="http://nexedi.com/contact">nexedi.com/contact</a></li>
</ul>
</div>
<details open="open"></details>
</section>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/team</string>
<string>publication_section/documentation/temp_slapos</string>
<string>group/nexedi</string>
<string>follow_up/product_module/156</string>
<string>contributor/person_module/20121115-586BC0F</string>
<string>contributor/person_module/20110829-FF7377</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>P-OSTV-HowTo.Add.User.To.Simcard.Db</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>TRACK - Lectures explaining how to use an NMS system.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>P-OSTV-HowTo.Add.User.To.Simcard.Db</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Add User to SimcardDB</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OSTV HowTo Add User to SimcardDB</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>002</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.61</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.59</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.58</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<!-- this should be built as a book from separate files. The book should
contain the description for the entry slide, all other slides are file whose
header is used as slide header, image as image and text wrapped in 1+ details
tags -->
<!-- replaces:
-->
<section class="master">
<h1>How To Create Software Release</h1>
<details open="open">
<p>
This document will guide through the steps of creating a new software release -
a set of files which allow to build and instantiate a software on SlapOS. The
key components of a software release are the software profile (<code>software.cfg</code>)
used to build and install the software and the instance profile (<code>instance.cfg.in</code>)
used for instantiation.
</p>
<p>
Both installations and instantiations are done using a software called
<a href="http://docs.buildout.org/en/latest/">Buildout</a>,
which utilizes the templating language <a href="http://jinja.pocoo.org/">Jinja2</a>.
This howto expects familiarity with both. It will introduce the different
sections of a profile and show how they are put together using the Amarisoft
LTE software release (<a href="https://lab.nexedi.com/nexedi/amarisoft/tree/master/slapos/software/lte">gitlab repository</a> - see <code>$your_repo_location/tree/master/slapos/software/lte</code>
for the corresponding file).
</p>
<p>
Please <b>note</b> that this howto does not cover adding a software release to
the catalogue of the NMS master or upgrading an existing software release. It
also does not cover installing a software on a node.
</p>
</details>
</section>
<section class="master">
<h1>Table of Content</h1>
<ul>
<li>Amarisoft LTE Software Release</li>
</ul>
</section>
<section class="chapter">
<h1>Amarisoft LTE Software Release</h1>
<details open="open">
<p>
While there are many simple software releases consisting only of a software and
instance profile, there are just as many more complex ones with a multitude of
different templates and configuration files. This section will explain the Amarisoft
LTE Software Release and the files it consists of to give an idea of how to write
a new release or extend this existing release.
</p>
<p>
The SlapOS repository is usually contains the following three directories (among others):</p>
<ul>
<li><b>/component</b> - pieces to include in a software profile (eg dcron, bycrpt)</li>
<li><b>/slapos/software</b> - software profiles utilizing components (eg LTE or SimcardDB)</li>
<li><b>/stack</b> - software build from multiple softwares &amp; components (eg Amarisoft, LAMP)</li>
</ul>
</details>
</section>
<section>
<h1>LTE Release</h1>
<img src="gitlab-Interface.Lte.Software.Release.Overview?display=&amp;format=png" alt="Gitlab Interface - Amarisoft LTE Software Release Overview" />
<details open="open">
<p>The <code>/slapos/software/lte/</code> repository consists of the following files:</p>
<ul>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/buildout.hash.cfg"><b>build.hash.cfg</b></a> - list of MD5 sums for templates included in the software profile</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-default.jinja2.cfg"><b>instance-default.jinja2.cfg</b></a> - template for instantiating "lab" (default) version</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-enb-input-schema.json"><b>instance-enb-input-schema.json</b></a> - parameter definition for instantiation of "enb"</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-enb.jinja2.cfg"><b>instance-enb.jinja2.cfg</b></a> - template for instantiating "enb" software instance</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-epc-input-schema.json"><b>instance-eps-input-schema.json</b></a> - parameter definiton for instantiation of "epc"</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-ims-input-schema.json"><b>instance-ims-input-schema.json</b></a> - parameter definition for instantiation of "ims"</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-ims.jinja2.cfg"><b>instance-ims.jinja2.cfg</b></a> - template for instantiating "ims" software instance</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-license-input-schema.json"><b>instance-license-input-schema.json</b></a> - parameter definition for instantiation of "licence"</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-license.jinja2.cfg"><b>instance-license.jinja2.cfg</b></a> - template for instantiating "licencse"</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-lte-input-schema.json"><b>instance-lte-input-schmema.json</b></a> - parameter definition for instantiation of "lte"</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-mbms-input-schema.json"><b>instance-mbms-input-schema.json</b></a> - parameter definition of "mbms" installation</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-mbms.jinja2.cfg"><b>instance-mbms.jinja2.cfg</b></a> - template for instantiating "mbms" software instance</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance-mme.jinja2.cfg"><b>instance-mme.jinja2.cfg</b></a> - template for instantiating "mme" software instance</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/instance.cfg"><b>instance.cfg</b></a> - instance profile (instantiation)</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/software.cfg"><b>software.cfg</b></a> - software profile (installation)</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/software.cfg.json"><b>software.cfg.json</b></a> - definition of available software types of this software</li>
<li><a href="$MASTER_URL/blob/master/slapos/software/lte/ue_db.py.in"><b>ue_db.py.in</b></a> - Simcard DB configuration and access</li>
</ul>
</details>
</section>
<section>
<h1>Software Profile</h1>
<img src="gitlab-interface.Locate.Software.Profile.Lte?display=&format=png" alt="Gitlab Interface - LTE Software Profile" />
<details open="open">
<p>
The <code>software.cfg</code> file is used for installation of the LTE software on a node. You
can see that it mostly defines required versions of included software in the <code>[versions]</code>
section.
</p>
<p>
Besides this, the templates are listed that will later provide the different <i>software-types</i> during
instantiation. Each section:</p><pre><code>[template-lte-ims]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/instance-ims.jinja2.cfg
filename = instance-ims.cfg
mode = 0644</code></pre>
<p>
defines the recipe to use (in this case the <i>download</i> recipe), the location of the template file to
use for instantiation as well as the name of the instantiation output file and its permissions.
</p>
<p>
If a section defines a <i>context</i>, like <code>[ue_db.py.in]</code>, it exposes parameters to the instance
profile (<code>instance.cfg</code>) so that they can be used there. The <code>[parts]</code> section denotes the
recipes to be excuted when Buildout runs the sofware profile, in this case the <i>template</i> and <i>sdr-driver</i>
sections/recipes whereas the <code>[buildout]</code> section extends the default buildout configuration by the
file containing the MD5 sums as well as Amarisoft's stack.
</p>
</details>
</section>
<section>
<h1>Software Profile (json)</h1>
<img src="gitlab-interface.Locate.Software.Profile.Lte.Json?display=&format=png" alt="Gitlab Interface - LTE Software Profile (JSON)"/>
<details open="open">
<p>
The JSON software profile is used to create forms for a software release. By
convention the entry point file is found by including <code>.json</code> to the url
of the software release, so <code>software.cfg.json</code>. The file is used
to list the available software-types and forms (Schemas) that
a user can choose during instantiation. A template for a form looks similar
to this:</p>
<pre><code>{
"name": "NAME OF Software",
"description": "The description",
"serialisation": "xml",
"software-type": {
"default": {
"title": "Default",
"software-type": "default",
"description": "description of default",
"request": "instance-NAME-input-schema.json",
"response": "instance-NAME-output-schema.json",
"index": 0
},
"default-slave": {
"title": "Slave",
"description": "Description for the slave",
"software-type": "default",
"request": "instance-NAME-slave-input-schema.json",
"response": "instance-NAME-output-schema.json",
"shared": true,
"index": 1
},
...
}
}</code></pre>
</details>
<details open="open">
<p>
The most important fields are:</p>
<ul>
<li><b>"title"</b> - name of the software-type displayed to the user</li>
<li><b>"software-type"</b> - defines the type of software</li>
<li><b>"shared"</b> - defines whether the instance is a slave of another instance (eg (slave-)tokens issued by a registry)</li>
<li><b>"request"</b> - the (relative) link to the file containing the json schema used to render the form</li>
</ul>
</details>
</section>
<section>
<h1>Form Input Schema</h1>
<img src="gitlab-interface.Form.Input.Schema.Json?display=&amp;format=png" alt="Gitlab Interface - Form Input Schema JSON" />
<details open="open">
<p>
The JSON input schema allows to define form fields of a software-type to
display to the user. They will be rendered live by fetching the respective
urls. For example:</p><pre><code>{
"$schema": "http://json-schema.org/draft-04/schema#",
"properties": {
"somevalue": {
"title": "Input a String",
"description": "This is an example of string parameter",
"type": "string"
},
"sonumber": {
"title": "Input a Number",
"description": "This is an example of number parameter",
"type": "number"
}
}
}</code></pre>
<p>
It is adviced to use a <b>flat approach</b> (one level, don't create unneccessary depth/complexity) and a simple structure. Keep in mind:</p>
<ul>
<li>keep it short, the larger the amount of parameters, the longer and complex is the form.</li>
<li>omit entries which are set automatically or by convention (port number, etc).</li>
<li>omit values that depend on other instances if value can be taken automatically.</li>
<li>use prefixes for different software on same hosting subscription.</li>
<li>use meaningful title and description.</li>
</ul>
</details>
</section>
<section>
<h1>Instance Profile</h1>
<img src="gitlab-interface.Instance.Profile?display=&format=png" alt="Gitlab Interface - Instance Profile" />
<details open="open">
<p>
The instance profile will be used to instantiate whichever software-type the
user selected using the parameters the user provided filling out the template-form.
</p>
<p>
In the LTE profile you can see that <code>[parts]</code> being run are <i>dynamic-template-lte-default</i> and
<i>switch-softwaretype</i> aside from the mandatory <code>[instance]</code> and <code>[jinja2-template-base]</code> sections.
The <i>dynamic-template-lte-default</i> provides instantiation instructions for the default "lab" version of LTE, which is also
one of the available software-types the user can choose from. All software types are then listed in the <i>switch-softwaretype</i> section.
</p>
<p>
Each software-type section defines <i>extra content</i>, listing the parameters and values to be exposed to the Jinja2 template:</p><pre><code>[dynamic-template-lte-ims]
&lt; = jinja2-template-base
template = ${template-lte-ims:target}
filename = instance-lte-ims.cfg
extensions = jinja2.ext.do
extra-context =
raw monitor_template ${monitor2-template:rendered}
...</code></pre>
<p>
With the above information it should possible to re-create the LTE software release,
extend or rewrite it altogether.
</p>
</details>
</section>
<section class="master">
<h1>Thank You</h1>
<div style="float:left;margin-top:9%;width:48%;">
<img alt="Image Nexedi Office"
title="Image Nexedi Office"
src="NXD-Media.Image.Office.Munich?display=large&amp;format=png"
type="image/png" />
</div>
<div>
<ul style="list-style:none;display:block;">
<li>Nexedi SA</li>
<li>147 Rue du Ballon</li>
<li>59110 La Madeleine</li>
<li>France</li>
</ul>
<ul style="list-style:none;display:block;">
<li><a href="http://nexedi.com/contact">nexedi.com/contact</a></li>
</ul>
</div>
<details open="open"></details>
</section>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/team</string>
<string>publication_section/documentation/temp_slapos</string>
<string>group/nexedi</string>
<string>follow_up/product_module/156</string>
<string>contributor/person_module/20121115-586BC0F</string>
<string>contributor/person_module/20110829-FF7377</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>P-OSTV-HowTo.Create.Software.Release</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>TRACK - Lectures explaining how to use an NMS system.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>P-OSTV-HowTo.Create.Software.Release</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Create Software Release</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OSTV HowTo Create Software Release</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>002</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.69</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.67</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.66</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<!-- this should be built as a book from separate files. The book should
contain the description for the entry slide, all other slides are file whose
header is used as slide header, image as image and text wrapped in 1+ details
tags -->
<!-- replaces:
-->
<section class="master">
<h1>How To Update eNB or EPC</h1>
<details open="open">
<p>
This document will show how to modify the parameters on an instantiated
eNB or EPC service. It is required to have:</p>
<ul>
<li>A NMS network setup with a <a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Master.Comp.Root">SlapOS Master</a> (<b>COMP-ROOT</b>) and <a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Node.Comp.0">first node</a> (<b>COMP-0</b>)</li>
<li>An Amarisoft LTE or equiavalent software release <a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Node.Comp.0">installed on a LTE Box</a> (<b>COMP-123</b>)</li>
<li>An existing instance of eNB or EPC</li>
<li>A user account to the NMS system</li>
</ul>
</details>
</section>
<section class="master">
<h1>Table of Content</h1>
<ul>
<li>Updating Instance Parameters</li>
</ul>
</section>
<section class="chapter">
<h1>Updating Instance Parameters</h1>
<details open="open">
<p>
Each software usually provides a number of configuration parameters which can
be set before instantiating a service (creating an instance). After the service
has been instantiated, all parameters are accessible and editable on the service
page of the NMS Dashboard.
</p>
<p>
<b>Note</b>, that updating an instance (for example by <b>changing a parameter</b>),
will only update this specific instance. All other instances of the same service
remain unchanged. In order to update all instances of a service (for example <b>adding
a new parameter</b>), it is required to create a new software release and trigger the
update of all instances to change to this new release.
</p>
</details>
</section>
<section>
<h1>NMS Login</h1>
<img src="slapos-Interface.Edit.Service.Enb.Login?display=&amp;format=png" alt="SlapOS Interface - Login" />
<details open="open">
<p>
Start by logging into your NMS Master Dashboard.
</p>
</details>
</section>
<section>
<h1>NMS Dashboard</h1>
<img src="slapos-Interface.Edit.Service.Enb.Dashboard?display=&amp;format=png" alt="SlapOS Interface - Dashboard" />
<details open="open">
<p>
Click on the <i>Services</i> button on the to see currently instantiated services.
</p>
</details>
</section>
<section>
<h1>Select Service ENB-EDIT</h1>
<img src="slapos-Interface.Edit.Service.Enb.Service.List?display=&amp;format=png" alt="SlapOS Interface - Service List" />
<details open="open">
<p>Select the ENB-EDIT service. As Amarisoft ENBs require a license to run, this info needs to be provided in the <code>License Key Path</code> field for proper instantiation.</p>
</details>
</section>
<section>
<h1>Edit Service ENB-EDIT</h1>
<img src="slapos-Interface.Edit.Service.Enb.Edit.Service?display=&amp;format=png" alt="SlapOS Interface - Edit Service" />
<details open="open">
<p>
Add the <code>License Key Path</code> which in this case points to <i>/etc/amarisoft/</i>.
</p>
</details>
</section>
<section>
<h1>Save Service ENB-EDIT</h1>
<img src="slapos-Interface.Edit.Service.Enb.Save.Service?display=&amp;format=png" alt="SlapOS Interface - Save Service" />
<details open="open">
<p>
Click <i>Save</i> in the subheader to update the ENB configuration parameters and trigger a rebuild of the instance.
</p>
</details>
</section>
<section>
<h1>Save Service ENB-EDIT</h1>
<img src="slapos-Interface.Edit.Service.Enb.Saved.Service?display=&amp;format=png" alt="SlapOS Interface - Saved Service" />
<details open="open">
<p>
Once saved, wait for the instance to be updated. Refresh the page from time to time, it should take a few minutes.
</p>
</details>
</section>
<section>
<h1>Updated Service ENB-EDIT</h1>
<img src="slapos-Interface.Edit.Service.Enb.Updated.Service?display=&amp;format=png" alt="SlapOS Interface - Updated Service" />
<details open="open">
<p>
After the update, the service could correctly be instantiated (green indicator).
</p>
</details>
</section>
<section>
<h1>Updated Service ENB-EDIT</h1>
<img src="slapos-Interface.Edit.Service.Enb.Updated.Service.List?display=&amp;format=png" alt="SlapOS Interface - Update Service List" />
<details open="open">
<p>
Changing other parameters works in the same way. Edit the form, save changes and
wait for the instance to be rebuild.
</p>
</details>
</section>
<section class="master">
<h1>Thank You</h1>
<div style="float:left;margin-top:9%;width:48%;">
<img alt="Image Nexedi Office"
title="Image Nexedi Office"
src="NXD-Media.Image.Office.Munich?display=large&amp;format=png"
type="image/png" />
</div>
<div>
<ul style="list-style:none;display:block;">
<li>Nexedi SA</li>
<li>147 Rue du Ballon</li>
<li>59110 La Madeleine</li>
<li>France</li>
</ul>
<ul style="list-style:none;display:block;">
<li><a href="http://nexedi.com/contact">nexedi.com/contact</a></li>
</ul>
</div>
<details open="open"></details>
</section>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/team</string>
<string>publication_section/documentation/temp_slapos</string>
<string>group/nexedi</string>
<string>follow_up/product_module/156</string>
<string>contributor/person_module/20121115-586BC0F</string>
<string>contributor/person_module/20110829-FF7377</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>P-OSTV-HowTo.Update.Enb.Or.Epc</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>TRACK - Lectures explaining how to use an NMS system.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>P-OSTV-HowTo.Update.Enb.Or.Epc</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Update eNB or EPC</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OSTV HowTo Update eNB or EPC</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>002</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.82</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.81</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.8</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<!-- this should be built as a book from separate files. The book should
contain the description for the entry slide, all other slides are file whose
header is used as slide header, image as image and text wrapped in 1+ details
tags --><!-- replaces:
-->
<section class="master">
<h1>Install SlapOS Node (COMP-123) LTE-Box</h1>
<details open="open">
<p>This document explains how to use the NMS Network Management System to install and configure the Amarisoft Stack on a Standard PC (or Server) containing a SDR Radio board in order to provide 4G/5G networks services. This tutorial can be applied to any deployment of Amarisoft stack running on a Linux Distrubution.</p>
<p>For the purpose the tutorial, this standard computer is called <b>LTE-Box</b>(<b>COMP-123</b>), and it is considered in SlapOS network, as a normal computer/server .</p>
<p>To follow the steps outlined in this section, you need to have:</p>
<ul>
<li>access to a SlapOS Master (COMP-ROOT) - <a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Master.Comp.Root">installing and accessing a SlapOS Master</a></li>
<li>a slave node (COMP-0) providing necessary software services - see <a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Node.Comp.0">installing a SlapOS node (COMP-0)</a></li>
<li>a new Debian server to register as LTE-Box</li>
</ul>
</details>
</section>
<section class="master">
<h1>Table of Content</h1>
<ul>
<li>LTE Box Introduction</li>
<li>LTE Box Installation</li>
<li>Add Amarisoft LTE to Software Catalogue</li>
<li>Supply LTE Software on LTE Box</li>
<li>Scenario 1: Instantiating LTE - Default</li>
<li>Scenario 2: Instantiating LTE - EPC/ENB</li>
<li>Add Simcard to SimcardDB</li>
</ul>
</section>
<section class="chapter">
<h1>LTE Box Introduction</h1>
<details open="open">
<p>This section will introduce the LTE Box and how to request a default eNodeB deployment. It will show the different types of deployment covered in this tutorial as well as rationale for doing so.</p>
</details>
</section>
<section>
<h1>Requesting Default eNodeB Deployment</h1>
<ul>
<li>Lab Version</li>
<li>Production Version</li>
</ul>
<details open="open">
<p>This tutorial will teach how to setup an eNodeB/ePC server with the Amarisoft stack in two different ways.</p>
<h2>Lab Version</h2>
<p>The <code>software-type</code> <i>Default</i> will provide a &quot;Lab&quot; version in which the following four services of the Amarisoft stack are deployed on the same computer in a cluster mode (<b>Scenario 1</b>):</p>
<ul>
<li>1 instance of LTE eNB</li>
<li>1 instance of LTE ePC (MME)</li>
<li>1 instance of LTE IMS</li>
<li>1 instance of LTE MBMS</li>
</ul>
<h2>Production Version</h2>
<p>For production we recommend to deploy using individual instances, which will allow to create boxes with multiple LTE eNB instances. This tutorial shows how to deploy the following as separate instances (<b>Scenario 2</b>):</p>
<ul>
<li>1 instance of LTE ePC (MME)</li>
<li>1 instance of LTE eNB</li>
</ul>
</details>
<details open="open">
<p>This tutorial doesn&#39;t cover the deploment of standalone IMS and MBMS as they are complementary services. However, the user can deploy them in a similar way as LTE EPC.</p>
</details>
</section>
<section>
<h1>Amarisoft LTE Software Release</h1>
<img alt="Gitlab - Software Release Software.cfg file" src="gitlab-interface.Locate.Software.Release.Profile.Lte?display=&amp;format=png" />
<details open="open">
<p>The Amarisoft LTE Software Release automates the deployment of Amarisoft Binaries in an orchestrated way. The Software Release contains all components (lteenb, ltemme, lteims and ltembms) provided by amarisoft stack:</p>
<ul>
<li><i>lteenb</i> - eNodeB software is the server accepting connection from UI (user interfaces)</li>
<li><i>ltemme</i> - Mobile Management Entity - the core network which handles orchestration of eNodeBs in case UI switches from one to another</li>
<li><i>lteims</i> - IP Multimedia System is another protocol such as LTE but designed for services over IP. Please read <a href="http://www.differencebetween.com/difference-between-lte-and-vs-ims-2/">http://www.differencebetween.com/difference-between-lte-and-vs-ims-2/</a></li>
<li><i>ltembmsgw</i> - Multimedia Broadcast Multicast Services (Gateway) is technology which broadcast the same multimedia content into multiple IP addresses at once to save bandwidth.</li>
</ul>
</details>
<details open="open">
<p>Those binaries are started in the foreground, originally on screen. However, it is undesireable to have binaries inside one screen because then it is not easy to control and monitor their resource usage. Thus NMS is using four on-watch services (which will take action if one process is down.)</p>
<p>The configuration file of the Amarisoft Stack is present here:</p>
<pre>
<code>$MASTER_URL/raw/master/slapos/software/lte/software.cfg</code></pre>
</details>
</section>
<section>
<h1>Glossary</h1>
<ul>
<li>MME</li>
<li>IMS</li>
<li>MBMSGW</li>
</ul>
<details open="open">
<p>Terms necessary to understand:</p>
<ul>
<li><i>MME</i> (ePC)<br />
Is the core network. This binary keep track of UEs and to which eNodeB they are currently connected. It reroutes traffic when UE switches between eNodeBs. MME also serves as a service bus thus all services must register within MME.</li>
<li><i>IMS</i><br />
Service connected into MME bus. IMS handles circuit-ish services over IP whereas LTE would have failed because it is intended as data-over-IP service. I think that VoLTE is actually using IMS.</li>
<li><i>MBMSGW</i><br />
MBMS Gateway is a standalone component connected to BMSC (Broadcast Multicast Service Centre), server supporting streaming content from providers, which is another component inside our core network not provided by Amarisoft. MBMS Gateway is connected to MME which then manages MBMS sessions. I think that MBMS itself handles data delivery by posting the data onto MME bus.</li>
</ul>
</details>
</section>
<section>
<h1>License</h1>
<pre>
<code>sudo su
# mkdir /etc/amarisoft
# # Check if you have the licenses
# ls ~/.amarisoft/lte*
# # Copy Licenses into /etc/amarisoft
# cp ~/.amarisoft/* /etc/amarisoft
# chmod ugo+rx /etc/amarisoft
# chmod -R ugo+r /etc/amarisoft</code></pre>
<details open="open">
<p>The Amarisoft Stack requires licenses to work. <b>YOU HAVE TO ENSURE YOU HAVE THE APPROPRIATE LICENSE TO RUN THE AMARISOFT STACK ON YOUR SERVER.</b> In case of doubt, please contact Amarisoft directly for the licenses.</p>
<p>Once you have the license, please place them on the following folder for the purpose of the tutorial:</p>
<pre>
<code>/etc/amarisoft/</code></pre>
.
<p>Also ensure, users can access it:</p>
<pre>
<code># chmod ugo+rx /etc/amarisoft
# chmod -R ugo+r /etc/amarisoft</code></pre>
<p>After this you can proceed with the installation of your Node.</p>
</details>
</section>
<section class="chapter">
<h1>LTE Box Installation</h1>
<details open="open">
<p>The following steps are partially covered in a generic way in <a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Node.Comp.0">installing SlapOS node (COMP-0)</a>. The main difference is for all LTE-Box servers, the services provided by COMP-0 (Frontend, IPv6, Registry, SimcardDB) are already available - so setup is somewhat easier.</p>
</details>
</section>
<section>
<h1>SlapOS Master Dashboard</h1>
<img alt="SlapOS Interface - Dashboard" src="slapos-Interface.Lte.Box.Installation.Dashboard?display=&amp;format=png" />
<details open="open">
<p>Start by logging into your SlapOS Master Dashboard with a user with administrative privileges to request a new server token. Click the <i>Services</i> menu on the side menu to open the list of existing services.</p>
</details>
</section>
<section>
<h1>List of Instantiated Services</h1>
<img alt="SlapOS Dashboard - Add Service" src="slapos-Interface.Add.Service.Re6st.Token?display=&amp;format=png" />
<details open="open">
<p>Head to the list of services by clicking on the <i>Services</i> button on the side menu. The list will show all services currently <b>instantiated</b> (not the software currently installed!). To create an instance of an installed software, click the <i>Add</i> button in the subheader.</p>
</details>
</section>
<section>
<h1>Create New Res6st Token Instance</h1>
<img alt="SlapOS Dashboard - Select Service" src="slapos-Interface.Select.Service.Re6st.Token?display=&amp;format=png" />
<details open="open">
<p>The list of available services is the same as the list of installable software releases used earlier when installing the service. Select Re6st as this is the service we want to provide. The differentiation between Registry and Token will be made via the configuration parameter <b>Software-Type</b>.</p>
</details>
</section>
<section>
<h1>Select Re6st Service Version</h1>
<img alt="SlapOS Dashboard - Select Service Version" src="slapos-Interface.Select.Service.Re6st.Token.Version?display=&amp;format=png" />
<details open="open">
<p>As during installation, please choose the latest version.</p>
</details>
</section>
<section>
<h1>Re6st Registry Configuration</h1>
<img alt="SlapOS Dashboard - Re6st Token Service Configuration Parameters" src="slapos-Interface.Service.Re6st.Token.Configuration.Parameters?display=&amp;format=png" />
<details open="open">
<p>Select <i>Software Type</i> <code>Re6st Token</code> which will load a form with instance-specific parameters. As mentioned, the token is actually a slave instance of the Registry (and in case of <b>COMP-0</b> a first gateway node).</p>
<p>Every new node will require a token, so give this token a recognizable name (<code>Re6st-LTE-Box-123</code> for example).</p>
<p>Select the <i>Computer</i> on which the Registry of your SlapOS Master was installed at the bottom of the page, then click <i>Proceed</i> to instantiate the service and be forwarded to the list of current services. Refresh the page, it may take a few minute for the node to be instantiated and the token to appear. It is a single use token to connect <b>one</b> other node to the network.</p>
</details>
</section>
<section>
<h1>Instantiate Re6st Token</h1>
<img alt="SlapOS Dashboard - Service Re6st Token Instantiation" src="slapos-Interface.Instantiate.Service.Re6st.Token?display=&amp;format=png" />
<details open="open">
<p>Click <i>Proceed</i> to instantiate a new token. Refresh the list of instantiated services to make the token appear. Click on it to access the connection parameters.</p>
</details>
</section>
<section>
<h1>Token Connection Parameters</h1>
<img alt="SlapOS Interface - Re6st Token Connection Parameters" src="slapos-Interface.Service.Re6st.Token.Connection.Parameters?display=&amp;format=png" />
<details open="open">
<p>Locate the token in the Connection Parameters. It might require a few minutes to show up. Refresh the page to see whether the token has been instantiated.</p>
<p>You can now install Re6st on this machine.</p>
</details>
</section>
<section>
<h1>Installing Re6st</h1>
<pre>
<code>sudo su
# yum install wget
(...)
# wget https://deploy.erp5.net/re6st &amp;&amp; bash re6st</code></pre>
<details open="open">
<p>ssh into the terminal of your server, switch to root and verfiy <i>wget</i> is available. Then install re6st as shown above. At some point the script will ask you:</p>
<pre>
<code>What is the Url of the Re6st registry [https://re6stnet.nexedi.com]:
Please insert your re6stnet token [notoken]:</code></pre>
<p>Provide the <i>master-url</i> you noted when setting the port forwarding for the Re6st Registry in <a href="/slapos-Tutorial.Install.Slapos.Master.Comp.Root">installing the SlapOS Master</a> (it should be <code>http://[your_IPv4_address]:9201</code>) along with the <i>token</i> created in the previous steps and continue. The setup should finish without errors:</p>
<pre>
<code>...
PLAY RECAP *********************************************************************
127.0.0.1 : ok=24 changed=7 unreachable=0 failed=0</code></pre>
</details>
</section>
<section>
<h1>Verify Files Created</h1>
<pre>
<code>sudo su
# ls /etc/re6stnet/
ca.crt cert.cert cert.key re6stnet.conf README</code></pre>
<details open="open">
<p>Verify that the configuration files were created.</p>
</details>
</section>
<section>
<h1>Verify Re6st is Running</h1>
<pre>
<code>sudo su
# service re6stnet status</code></pre>
<details open="open">
<p>You can use the above command to see whether Re6st is working. The output should be similar to:</p>
<pre>
<code>● re6stnet.service - (null)
Loaded: loaded (/etc/init.d/re6stnet)
Active: active (running) since Fri 2018-03-09 16:43:23 UTC; 6min ago
Process: 26395 ExecStop=/etc/init.d/re6stnet stop (code=exited, status=0/SUCCESS)
Process: 26423 ExecStart=/etc/init.d/re6stnet start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/re6stnet.service
├─26431 /opt/re6st/parts/python2.7/bin/python2.7 /usr/sbin/re6stnet
@re6stnet.conf
├─26437 openvpn --dev-type tap --dev re6stnet-tcp --persist-tun --p
ersist-key --script-security 2 --up /opt/re6st/eggs/re6stnet-0.485-py2.7.egg/r
e6st/ovpn-client --tls-server --mode server --clien...
├─26444 babeld -h 15 -H 15 -L /var/log/re6stnet/babeld.log -S /var
/lib/re6stnet/babeld.state -I /var/run/re6stnet/babeld.pid -s -C ipv6-subtree
s true -C default max-rtt-penalty 5000 rtt-max 500 rt...
├─26537 openvpn --dev-type tap --dev re6stnet1 --persist-tun --per
sist-key --script-security 2 --up /opt/re6st/eggs/re6stnet-0.485-py2.7.egg/re
6st/ovpn-client --nobind --client --remote 163.172.45...
└─26862 openvpn --dev-type tap --dev re6stnet2 --persist-tun --per
sist-key --script-security 2 --up /opt/re6st/eggs/re6stnet-0.485-py2.7.egg/re
6st/ovpn-client --nobind --client --remote 52.36.124....
Mar 09 16:43:23 slapostest2 systemd[1]: Started (null).</code></pre>
<p>After this step Re6st is installed and the machine is accessable over IPv6.</p>
</details>
</section>
<section>
<h1>Get SlapOS Master Token</h1>
<img alt="SlapOS Node Installation - Request Association Token" src="slapos-Interface.Server.List.Empty?display=&amp;format=png" />
<details open="open">
<p>Head to the SlapOS Dashboard at:</p>
<pre>
<code>https://master.YOUR_DOMAIN/</code> (preferred the url)</pre>
<p>Otherwise:</p>
<pre>
<code>https://[instance-IPv4]/erp5/web_site_module/hostingjs/</code></pre>
<p>and log in as a regular user (the zope username/password will not work, you should have created a user account on the SlapOS Dashboard while setting up the SlapOS Master). Click on the <i>Servers</i> link in the side to go to your list of servers.</p>
<p>When using the single line installer, you have to provide a X509 security token to identifiy your node with a SlapOS Master and enable it to manage the node within a network. To get such a token, in the subheader, click <i>Token</i>.</p>
</details>
</section>
<section>
<h1>Association Token</h1>
<img alt="SlapOS Node Installation - Association Token" src="vifib-Interface.Server.Token?display=&amp;format=png" />
<details open="open">
<p>Click <i>Proceed</i> to request a token. Once it&#39;s generated, copy the token for later. <b>Note</b>, that the token can only be used once. If the installation of SlapOS fails for whatever reason and you need to retry, you need to request a new token before. Head back to the terminal.</p>
</details>
</section>
<section>
<h1>Single Line Installer</h1>
<pre>
<code>sudo su
# wget deploy.erp5.net/slapos &amp;&amp; bash slapos
...
What is the url to the SlapOS Master API? [https://slap.vifib.com/]:
What is the url to the SlapOS Master Website? [https://slapos.vifib.com/]:
What is this computer name? [noname]:
If you have slapos token if you have? [notoken]:
</code></pre>
<details open="open">
<p>Continue and use the single line installer. You will be asked a set of questions during the installation. As you are connecting to your own master, on the first question, please point to port 5443 of your master&#39;s IPv4 adress, so enter <code>https://[your_IPv4_address]:5443</code> and on the second question, please add your SlapOS Master dashboard url. Same as you are using to get the token:</p>
<pre>
<code>https://master.YOUR_DOMAIN
OR
https://[your_IPv4_address]:443/erp5/web_site_module/hostingjs/</code> (If you used this one)</pre>
<p>Choose a name for your computer (like <i>LTE-BOX-1</i> to identity it in your network and finally enter the association token you have received earlier from your SlapOS Master. The installation can be repeated in case something goes wrong or you would like to change some of the entered parameters.</p>
<p>Once the installation has finished without errors, you should see:</p>
<pre>
<code>...
PLAY RECAP *********************************************************************
127.0.0.1 : ok=12 changed=4 unreachable=0 failed=0</code></pre>
<p>In case installation fails and you want to start over, you need to <b>request a new token</b> as mentioned above and, depending on whether already created, remove any existing configuration in <code>/etc/opt/slapos/slapos.cfg</code> before restarting.</p>
</details>
<details open="open">
<p>You can verify that SlapOS was installed by trying:</p>
<pre>
<code># slapos node
watchdog RUNNING pid 13270, uptime 0:00:03</code></pre>
<p>And (re)formatting the SlapOS node:</p>
<pre>
<code># slapos node format --now
2018-04-21 13:07:29 slapos[13279] INFO Updating Computer
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart0
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart1
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart2
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart3
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart4
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart5
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart6
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart7
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart8
2018-04-21 13:07:30 slapos.format[13279] INFO Partition resources saved to slappart9
2018-04-21 13:07:30 slapos[13279] INFO Posting information to &#39;https://54.37.31.108:5443/&#39;
2018-04-21 13:07:30 slapos[13279] INFO slapos successfully prepared the computer.</code></pre>
</details>
</section>
<section>
<h1>SlapOS Dashboard - Registered Servers</h1>
<img alt="SlapOS - Server List" src="slapos-Interface.Server.List?display=&amp;format=png" />
<details open="open">
<p>Head back to your SlapOS Dashboard and verify the list of servers now includes your SlapOS Node which was associated to your network using the token you had created. You may have to refresh the page for the server to show up.</p>
<p><b>Note</b>, the entry has three clickable areas:</p>
<ul>
<li>The line itself (click <i>server name</i> for example) points to the server configuration</li>
<li>Clicking the <i>Computer</i> button will open the monitor - the green color indicates the server is active and contacting the Master.</li>
<li>As this server does not have any computer partitions installed yet, the second button next to <i>Computer</i> is still missing.</li>
</ul>
</details>
</section>
<section class="chapter">
<h1>Add Amarisoft LTE to Software Catalogue</h1>
<details open="open">
<p>As Amarisoft LTE is NOT a standard software included in SlapOS, the software release has to be manually added to the software catalog before being able to supply and instantiate it. <b>Note, this has to be done only once</b>. However the steps are the same for <b>adding and also updating(!)</b> all software releases on SlapOS.</p>
<p>The following steps require a user with administator privileges which should have been created during installation of the SlapOS Master for adding SimcardDB to the catalog.</p>
</details>
</section>
<section>
<h1>Administrator Login to ERP5 Interface</h1>
<img alt="ERP5 Interface - Login with Administrator Account" src="erp5-Interface.Administrator.Login?display=&amp;format=png" />
<details open="open">
<p>Login to the ERP5 interface underlying the SlapOS Dashboard with the user with administrator privileges. The ERP5 interface can be accessed at <code>[your_IPv4_address]/erp5/</code>.</p>
<p>Warning: Don&#39;t login as &quot;zope&quot; user !</p>
</details>
</section>
<section>
<h1>Access Software Product Module</h1>
<img alt="ERP5 Interface - Administrator Homescreen" src="erp5-Interface.Administrator.Homescreen?display=&amp;format=" />
<details open="open">
<p>Once logged in click on <i>Software Products</i> or select <i>Software Product Module</i> from the <i>Modules</i> select field.</p>
</details>
</section>
<section>
<h1>Add Software Product</h1>
<img alt="ERP5 Interface - Administrator Add Software Product LTE" src="erp5-Interface.Add.Software.Product.Lte?display=&amp;format=png" />
<details open="open">
<p>On the software product page, select <i>Action</i> and <i>Add Software Product</i>.</p>
</details>
</section>
<section>
<h1>Define Software Product</h1>
<img alt="ERP5 Interface - Administrator Define Software Product LTE" src="erp5-Interface.Define.Software.Product.Lte?display=&amp;format=png" />
<details open="open">
<p>Set <i>Title</i> and <i>Reference</i>, then save by clicking the disk icon.</p>
</details>
</section>
<section>
<h1>Publish Software Product</h1>
<img alt="ERP5 Interface - Administrator Publish Software Product LTE" src="erp5-Interface.Publish.Software.Product.Lte?display=&amp;format=png" />
<details open="open">
<p>The final step is to publish the Software Product. Select <i>Action</i> and <i>Publish</i> to change the workflow change.</p>
</details>
</section>
<section>
<h1>Published Software Product</h1>
<img alt="ERP5 Interface - Administrator Verify Published Software Product LTE" src="erp5-Interface.Verify.Published.Software.Product.Lte?display=&amp;format=png" />
<details open="open">
<p>Confirm and once you are back on the Software Product page and the state is changed to <i>Published</i>, click on the <i>ERP5</i> breadcrumb to get back to the main homescreen.</p>
</details>
</section>
<section>
<h1>Access Software Release Module</h1>
<img alt="ERP5 Interface - Administrator Homescreen" src="erp5-Interface.Administrator.Homescreen?display=&amp;format=" />
<details open="open">
<p>Next click on <i>Software Releases</i> or select <i>Software Release Module</i> from the <i>Modules</i> select field.</p>
</details>
</section>
<section>
<h1>Add Software Release</h1>
<img alt="ERP5 Interface - Administrator Add Software Release LTE" src="erp5-Interface.Add.Software.Release.Lte?display=&amp;format=png" />
<details open="open">
<p>Repeat the steps, so once on the software release page, select <i>Action</i> and <i>Add Software Release</i>.</p>
<p><b>Note</b>, that whenever you want to upgrade a software release, you have to create a new software release entry with the difference being the version and <code>software.cfg</code> being pointed to, which can both be set in the next steps.</p>
</details>
</section>
<section>
<h1>Locate Software.Cfg Url</h1>
<img alt="Gitlab - Software Release Software.cfg file" src="gitlab-interface.Locate.Software.Release.Profile.Lte?display=&amp;format=png" />
<details open="open">
<p>Head over to the repository you are using to host software releases and locate the <code>software.cfg</code> file which contains the instructions for building your your software. Find the URL of this software release. <b>Note</b>, that you can use different releases, for example:</p>
<ul>
<li>latest development:
<pre>
<code>https://lab.node.vifib.com/nexedi/amarisoft/raw/master/slapos/software/lte/software.cfg</code></pre>
</li>
<li>latest tagged version:
<pre>
<code>https://lab.node.vifib.com/nexedi/amarisoft/raw/[TAG]/slapos/software/lte/software.cfg</code></pre>
</li>
</ul>
<p><code>[TAG]</code> can be any value listed on the published releases, found on <a href="https://lab.node.vifib.com/nexedi/amarisoft/tags">https://lab.node.vifib.com/nexedi/amarisoft/tags</a>. Continue using the latest tagged version which is <i>v0.2</i>. Note down the following url:</p>
<pre>
<code>https://lab.node.vifib.com/nexedi/amarisoft/raw/v0.2/slapos/software/lte/software.cfg</code></pre>
</details>
</section>
<section>
<h1>Define Software Release</h1>
<img alt="ERP5 Interface - Administrator Define Software Release LTE" src="erp5-Interface.Define.Software.Release.Lte?display=&amp;format=png" />
<details open="open">
<p>Fill the form as shown in the screenshot. Make sure you select <i>HTTP</i> and provide the url to your <code>software.cfg</code>. Also select the software product for which this release is made, define a version and once all fields have been filled out, click the disk icon to save.</p>
</details>
</section>
<section>
<h1>Publish Software Release Alive</h1>
<img alt="ERP5 Interface - Administrator Publish Software Release Alive LTE" src="erp5-Interface.Publish.Software.Release.Lte?display=&amp;format=png" />
<details open="open">
<p>The final step is to publish the Software Release <b>Alive</b> (publishing alive, will allow to edit the provided data in case necessary). Select <i>Action</i> and <i>Publish Alive</i> to change the workflow change.</p>
</details>
</section>
<section>
<h1>Published Software Release</h1>
<img alt="ERP5 Interface - Administrator Published Software Release LTE" src="erp5-Interface.Verify.Published.Software.Release.Lte?display=&amp;format=png" />
<details open="open">
<p>Confirm and once you are back on the Software Release page and the state is changed to <i>Published Alive</i>, click on the <i>ERP5</i> breadcrumb to get back to the main homescreen.</p>
</details>
</section>
<section>
<h1>Software Available in SlapOS Dashboard</h1>
<img alt="SlapOS Interface - Published Software Release LTE Available" src="slapos-Interface.Verify.Published.Software.Release.Lte?display=&amp;format=png" />
<details open="open">
<p>Head over to the SlapOS Dashboard. If you pick a computer and click Supply, the newly defined software will now be on the list. We can continue and install LTE on this machine.</p>
</details>
</section>
<section class="chapter">
<h1>Supply LTE Software on LTE Box</h1>
<details open="open">
<p>This section will cover the steps for installing LTE on the newly formatted server using the SlapOS Dashboard.</p>
</details>
</section>
<section>
<h1>Supply LTE Software on Box</h1>
<img alt="SlapOS Dashboard - Supply Software Release LTE" src="slapos-Interface.Supply.Software.Lte?format=png&amp;display=" />
<details open="open">
<p>Back in the SlapOS Dashboard go to <i>Servers</i> and select the LTE Box you have created. There is no software currently installed. Click <i>Supply</i> in the subheader.</p>
</details>
</section>
<section>
<h1>Select LTE Software Release</h1>
<img alt="SlapOS Dashboard - Select Software Release LTE" src="slapos-Interface.Select.Software.Lte?format=png&amp;display=" />
<details open="open">
<p>Select the <i>LTE</i> software release.</p>
</details>
</section>
<section>
<h1>Select LTE Software Release Version</h1>
<img alt="SlapOS Dashboard - Select Software Release LTE Version" src="slapos-Interface.Select.Software.Lte.Version?display=&amp;format=png" />
<details open="open">
<p>Select the latest version.</p>
</details>
</section>
<section>
<h1>Launch LTE Software Release Installation</h1>
<img alt="SlapOS Dashboard - Launch Software Release LTE Installation" src="slapos-Interface.Launch.Software.Lte.Installation?display=&amp;format=png" />
<details open="open">
<p>Click <i>Proceed</i> in the header to start installation.</p>
</details>
</section>
<section>
<h1>Wait for LTE Installation</h1>
<img alt="SlapOS Dashboard - Access Computer" src="slapos-Interface.Wait.Software.Lte.Installation?display=&amp;format=png" />
<details open="open">
<p>After clicking <i>Proceed</i> you will be forwarded to the installation status page.</p>
<p>Installation will take some time depending on the software you are installing, so either refresh the current page or check installation status directly by either going to your <i>Servers</i> list and selecting the machine you chose during installation or clicking directly on <i>Computer Reference</i>.</p>
</details>
</section>
<section>
<h1>Verify LTE Installation</h1>
<img alt="SlapOS Dashboard - Verify LTE Installation Success" src="slapos-Interface.Verify.Software.Lte.Installation?display=&amp;format=png" />
<details open="open">
<p>You can see the installed service is now available in the bottom list. The indicator will stay red until the software has finished compiling and installing. Once the installation status bar changes to green on a refresh of the page, the installation has finished.</p>
<p>You can follow the compilation by looking at the <code>slapos-node-software.log</code> using:</p>
<pre>
<code># tail opt/slapos/log/slapos-node-software.log -f</code></pre>
in your terminal.</details>
</section>
<section class="chapter">
<h1>Scenario 1: Instantiating LTE - Default</h1>
<details open="open">
<p>The following steps cover setting up the &quot;Lab&quot; Version on the LTE Box with all relevant services instantiated together.</p>
</details>
</section>
<section>
<h1>List of Instantiated Services</h1>
<img alt="SlapOS Dashboard - Add Service" src="slapos-Interface.Add.Service.Lte.Lab?display=&amp;format=png" />
<details open="open">
<p>Head to the list of services by clicking on the <i>Services</i> button on the side menu. The list will show all services currently <b>instantiated</b> (not the software currently installed!). To create an instance of an installed software, click the <i>Add</i> button in the subheader.</p>
</details>
</section>
<section>
<h1>Select LTE Service</h1>
<img alt="SlapOS Dashboard - Select Service" src="slapos-Interface.Select.Service.Lte.Lab?display=&amp;format=png" />
<details open="open">
<p>The list of available services is the same as the list of installable software releases used earlier when installing the service. Select LTE as this is the service we want to provide.</p>
</details>
</section>
<section>
<h1>Select LTE Service Version</h1>
<img alt="SlapOS Dashboard - Select Service Version" src="slapos-Interface.Select.Service.Lte.Lab.Version?display=&amp;format=png" />
<details open="open">
<p>As during installation, please choose the latest version.</p>
<p><b>Note</b>, that this is an easy case, as there is only a single version installed on one node. More complex networks will likely have multiple versions of a software installed on different nodes.</p>
</details>
</section>
<section>
<h1>LTE Lab Service Configuration</h1>
<img alt="SlapOS Dashboard - Instance Configuration" src="slapos-Interface.Service.Lte.Lab.Configuration.Parameters?display=&amp;format=png" />
<details open="open">
<p>You will reach the service configuration menu. Give your service a recognizable name (<i>LTE_ALL_IN_ONE</i> in the example), select <code>Software-Type</code> <i>Default</i> (denoting LTE Lab), pick the Computer/Box to install the LTE Lab at the end of the form and then fill out the form parameters. If required, you can expand the form to add additional parameters. Parameters include:</p>
<ul>
<li><b>Log Options</b>: Log options settings for enb.cfg, mme.cfg, ims.cfg and mbms.cfg (See Amarisoft official documentation for understand the format)</li>
<li><b>GTP bind address</b>: IP address of the network interface connected to the core network</li>
<li><b>MME address</b>: Address of MME for S1AP connection</li>
<li><b>UE configuration path (optional)</b>: A path containing the ue_db configuration on the machine. Usefull for simple Tests</li>
<li><b>RF Parameters / Tx_gain</b>: Tx gain (in dB)</li>
<li><b>RF Parameters / Rx gain</b>: Rx gain (in dB)</li>
<li><b>License Key Path</b>: Path to where the license *.key files are on the filesytem (to be used instead ~/.license or ~/.amarisoft folder</li>
<li><b>Cell List</b>: Contains one or more cells configuration to be set on enb.cfg configuration</li>
<li><b>Cell List / DL EARFCN</b>: Downlink EARFCN of the cell</li>
<li><b>Cell List / Physical cell ID</b>: Physical cell ID</li>
</ul>
<p>Click <i>Proceed</i> to begin instantiation.</p>
<p>This list of parameters are only a subset of the full amarisoft parameters, you can learn how to extend this list on the &quot;Lecture 6&quot;.</p>
</details>
</section>
<section>
<h1>LTE Lab Service Instantiation</h1>
<img alt="SlapOS Dashboard - Instantiate Service" src="slapos-Interface.Instantiate.Service.Lte.Lab?display=&amp;format=png" />
<details open="open">
<p>Refresh the list of current services to show the new service and status.</p>
<p>You can follow the compilation progress by looking at the <code>slapos-node-software.log</code> using:</p>
<pre>
<code># tail opt/slapos/log/slapos-node-software.log -f</code></pre>
<p>The LTE Lab will be installed inside a computer partition (see <a href="https://www.nexedi.com/slapos-DesignDocument.Slapos.System.Requirements">SlapOS system requirements</a>)</p>
</details>
</section>
<section>
<h1>Monitor Service Connection Parameter</h1>
<img alt="SlapOS Dashboard - Service LTE Lab Connection Parameters" src="slapos-Interface.Service.Lte.Lab.Connection.Parameters?display=&amp;format=png" />
<details open="open">
<p>If you click on the instantiated service, you can see the connection parameters. By default they are not expanded.</p>
</details>
</section>
<section>
<h1>Expand Service Connection Parameters</h1>
<img alt="SlapOS Dashboard - Service LTE Lab Connection Parameters Expanded" src="slapos-Interface.Service.Lte.Lab.Connection.Parameters.Expanded?display=&amp;format=png" />
<details open="open">
<p>By clicking on the <i>Parameter Entry</i> buttons, you can expand the drawers to show all subsequent parameters.</p>
</details>
</section>
<section>
<h1>Service LTE Lab Process List</h1>
<img alt="SlapOS Dashboard - Service LTE Lab Process List" src="slapos-Interface.Service.Lte.Lab.Process.List?display=&amp;format=png" />
<details open="open">
<p>Scroll down on the connection parameter page. Once the service has been fully instantiated you can see all running processes at the bottom of the page in the table <i>Instances</i>.</p>
</details>
</section>
<section class="chapter">
<h1>Scenario 2: Instantiating LTE - EPC/ENB</h1>
<details open="open">
<p>The following steps cover setting the EPC/MME and ENB separately.</p>
</details>
</section>
<section>
<h1>List of Instantiated Services</h1>
<img alt="SlapOS Dashboard - Add Service" src="slapos-Interface.Add.Service.Lte.Epc?display=&amp;format=png" />
<details open="open">
<p>Head to the list of services by clicking on the <i>Services</i> button on the side menu. The list will show all services currently <b>instantiated</b> (not the software currently installed!). To create an instance of an installed software, click the <i>Add</i> button in the subheader.</p>
</details>
</section>
<section>
<h1>Select LTE Service</h1>
<img alt="SlapOS Dashboard - Select Service" src="slapos-Interface.Select.Service.Lte.Epc?display=&amp;format=png" />
<details open="open">
<p>The list of available services is the same as the list of installable software releases used earlier when installing the service. Select LTE as this is the service we want to provide (the differentiation will only be made during configuration).</p>
</details>
</section>
<section>
<h1>Select LTE Service Version</h1>
<img alt="SlapOS Dashboard - Select Service Version" src="slapos-Interface.Select.Service.Lte.Epc.Version?display=&amp;format=png" />
<details open="open">
<p>As during installation, please choose the latest version.</p>
<p><b>Note</b>, that this is an easy case, as there is only a single version installed on one node. More complex networks will likely have multiple versions of a software installed on different nodes.</p>
</details>
</section>
<section>
<h1>LTE EPC Service Configuration</h1>
<img alt="SlapOS Dashboard - Instance Configuration" src="slapos-Interface.Service.Lte.Epc.Configuration.Parameters?display=&amp;format=png" />
<details open="open">
<p>You will reach the service configuration menu. Give your service a recognizable name (<i>EPC-STANDALONE</i> in the example), select <code>Software-Type</code> <i>EPC</i> pick the Computer/Box to install the LTE EPC at the end of the form and then fill out the form parameters.</p>
<p>Click <i>Proceed</i> to begin instantiation.</p>
</details>
</section>
<section>
<h1>LTE EPC Service Instantiation</h1>
<img alt="SlapOS Dashboard - Instantiate Service" src="slapos-Interface.Instantiate.Service.Lte.Epc?display=&amp;format=png" />
<details open="open">
<p>Refresh the list of current services to show the new service and status.</p>
<p>You can follow the compilation progress by looking at the <code>slapos-node-software.log</code> using:</p>
<pre>
<code># tail opt/slapos/log/slapos-node-software.log -f</code></pre>
</details>
</section>
<section>
<h1>Monitor Service Connection Parameter</h1>
<img alt="SlapOS Dashboard - Service LTE EPC Connection Parameters" src="slapos-Interface.Service.Lte.Epc.Connection.Parameters?display=&amp;format=png" />
<details open="open">
<p>If you click on the instantiated service, you can see the connection parameters.</p>
</details>
</section>
<section>
<h1>Verify Service Instantiated</h1>
<img alt="SlapOS Dashboard - Service LTE EPC Accessability" src="slapos-Interface.Validate.Service.Lte.Epc.Instantiation?display=&amp;format=png" />
<details open="open">
<p>Once the monitoring status turns green on a page refresh, the EPC has been instantiated successfully. Then we can add the ENB. Click the <i>Add</i> button in the subheader.</p>
</details>
</section>
<section>
<h1>Select LTE Service</h1>
<img alt="SlapOS Dashboard - Select Service" src="slapos-Interface.Select.Service.Lte.Enb?display=&amp;format=png" />
<details open="open">
<p>The list of available services is the same as the list of installable software releases used earlier when installing the service. Select LTE as this is the service we want to provide (the differentiation will only be made during configuration).</p>
</details>
</section>
<section>
<h1>Select LTE Service Version</h1>
<img alt="SlapOS Dashboard - Select Service Version" src="slapos-Interface.Select.Service.Lte.Enb.Version?display=&amp;format=png" />
<details open="open">
<p>As during installation, please choose the latest version.</p>
<p><b>Note</b>, that this is an easy case, as there is only a single version installed on one node. More complex networks will likely have multiple versions of a software installed on different nodes.</p>
</details>
</section>
<section>
<h1>LTE ENB Service Configuration</h1>
<img alt="SlapOS Dashboard - Instance Configuration" src="slapos-Interface.Service.Lte.Enb.Configuration.Parameters?display=&amp;format=png" />
<details open="open">
<p>You will reach the service configuration menu. Give your service a recognizable name (<i>eNB-STANDALONE</i> in the example), select <code>Software-Type</code> <i>eNB</i> pick the Computer/Box to install the LTE eNB at the end of the form and then fill out the form parameters. <b>Note</b>, that if you have multiple boxes on your network, you can (supply and) instantiate eNB on any of the available boxes.</p>
<p>Click <i>Proceed</i> to begin instantiation.</p>
</details>
</section>
<section>
<h1>LTE EPC Service Instantiation</h1>
<img alt="SlapOS Dashboard - Instantiate Service" src="slapos-Interface.Instantiate.Service.Lte.Enb?display=&amp;format=png" />
<details open="open">
<p>Refresh the list of current services to show the new service and status.</p>
<p>You can follow the compilation progress by looking at the <code>slapos-node-software.log</code> using:</p>
<pre>
<code># tail opt/slapos/log/slapos-node-software.log -f</code></pre>
</details>
</section>
<section>
<h1>Monitor Service Connection Parameter</h1>
<img alt="SlapOS Dashboard - Service LTE eNB Connection Parameters" src="slapos-Interface.Service.Lte.Epc.Connection.Parameters?display=&amp;format=png" />
<details open="open">
<p>If you click on the instantiated service, you can see the connection parameters.</p>
</details>
</section>
<section>
<h1>Verify Service Instantiated</h1>
<img alt="SlapOS Dashboard - Service LTE eNB Accessability" src="slapos-Interface.Verify.Service.Lte.Enb.Accessability?display=&amp;format=png" />
<details open="open">
<p>Once the monitoring status turns green on a page refresh, the eNB has been instantiated successfully.</p>
</details>
</section>
<section class="chapter">
<h1>Add Simcard to SimcardDB</h1>
<details open="open">
<p>Once the EPC and eNB have been setup, the system should be ready to operate. The eNB will query the SimcardDB in regular intervals for new simcard ids. In this section we will add a simcard to the SimcardDB. You could then investigate when the simcard id becomes available on the eNB and whether it can be used (both steps are not part of the tutorial).</p>
</details>
</section>
<section>
<h1>List of Instantiated Services</h1>
<img alt="SlapOS Dashboard - Add Service" src="slapos-Interface.Add.Service.Simcard.Id?display=&amp;format=png" />
<details open="open">
<p>Head to the list of services by clicking on the <i>Services</i> button on the side menu.</p>
</details>
</section>
<section>
<h1>Create New SimcardDB Instance</h1>
<img alt="SlapOS Dashboard - Select Service" src="slapos-Interface.Select.Service.Simcard.Id?display=&amp;format=png" />
<details open="open">
<p>Select SimcardDB as this is the service we want to provide. The differentiation between SimcardDB and Simcard will be made on the configuration parameter <i>Software-Type</i></p>
</details>
</section>
<section>
<h1>Select SimcardDB Service Version</h1>
<img alt="SlapOS Dashboard - Select Service Version" src="slapos-Interface.Select.Service.Simcard.Id.Version?display=&amp;format=png" />
<details open="open">
<p>As during installation, please choose the latest version.</p>
</details>
</section>
<section>
<h1>SimcardDB Configuration</h1>
<img alt="SlapOS Dashboard - Service Configuration Parameters" src="slapos-Interface.Service.Simcard.Id.Configuration.Parameters?display=&amp;format=png" />
<details open="open">
<p>Select <code>Software Type</code> <i>SimCard</i>, choose the computer which supplied the SimcardDB and fill out the configuration parameters as shown.</p>
<p>Click proceed to instantiate the new SimCard. This is the end of the tutorial for setting up an LTE Box.</p>
</details>
</section>
<section class="master">
<h1>Thank You</h1>
<div style="float:left;margin-top:9%;width:48%;"><img alt="Image Nexedi Office" src="NXD-Media.Image.Office.Munich?display=large&amp;format=png" title="Image Nexedi Office" type="image/png" /></div>
<div>
<ul style="list-style:none;display:block;">
<li>Nexedi SA</li>
<li>147 Rue du Ballon</li>
<li>59110 La Madeleine</li>
<li>France</li>
</ul>
<ul style="list-style:none;display:block;">
<li><a href="http://nexedi.com/contact">nexedi.com/contact</a></li>
</ul>
</div>
<details open="open">&nbsp;</details>
</section>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/team</string>
<string>publication_section/documentation/temp_slapos</string>
<string>group/nexedi</string>
<string>follow_up/product_module/156</string>
<string>contributor/person_module/20121115-586BC0F</string>
<string>contributor/person_module/20110829-FF7377</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>P-OSTV-Tutorial.Install.Slapos.Node.Comp.123</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>TRACK - Lectures explaining how to use an NMS system.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>P-OSTV-Tutorial.Install.Slapos.Node.Comp.123</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>Install SlapOS Node (COMP-123)</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OSTV Tutorial Install SlapOS Node (COMP-123)</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>003</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.92</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.9</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103925.89</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<!-- this should be built as a book from separate files. The book should
contain the description for the entry slide, all other slides are file whose
header is used as slide header, image as image and text wrapped in 1+ details
tags --><!-- replaces:
-->
<section class="master">
<h1>NMS Learning Track</h1>
<details open="open">
<p>This learning track contains a sequence of tutorials that will introduce SlapOS and teach the setup and use of a <b>Network Management System</b> (NMS) based on SlapOS <b>for ADMINS</b>. After finishing this learning track, you should have a ready-to-use network and be familiar with providing and extending existing software to users as well as monitoring network status.</p>
<p>The course is split into lectures introducing a certain component and showing how they are setup and fit into the overall architecture. All documents that are part of this learning track are also included in PDF and hmtl format.</p>
<p>If applicable, each lecture also provides links to additional generic SlapOS documentation such as HowTos explaining certain aspects in more detail or outlining how certain prerequisities of a component can be met.</p>
<p><b>Note</b>, that the lectures are meant to be read in the order listed. Reading material and actual tutorials to setup the will be pointed out.</p>
</details>
</section>
<section class="master">
<h1>Table of Content</h1>
<ul>
<li>Lecture 0: NMS Introduction</li>
<li>Lecture 1: SlapOS Introduction and Architecture</li>
<li>Lecture 2: Install and Configure NMS SlapOS Master</li>
<li>Lecture 3: Bootstrap Frontend, IPv6 Network and SimcardDB</li>
<li>Lecture 4: Deploy eNodeB/EPC Server</li>
<li>Lecture 5: Managing a NMS Deployment</li>
<li>Lecture 6: Extending LTE Software Release</li>
</ul>
</section>
<section class="chapter">
<h1>Lecture 0: NMS Introduction</h1>
<details open="open">
<p>This section is a global introduction to NMS and only contains reading materials. It will introduce the NMS and underlying SlapOS sytems and provide answers to key questions. The following documents should be read:</p>
<ul>
<li><a href="https://www.nexedi.com/P-OSTV-DesignDocument.OSTV.NMS">OSTV Design Document - OSVT NMS Introduction</a> (<a href="https://www.nexedi.com/P-OSTV-DesignDocument.OSTV.NMS?portal_skin=Slide">presentation</a>)</li>
</ul>
</details>
</section>
<section class="chapter">
<h1>Lecture 1: Introduction and Architecture</h1>
<details open="open">
<p>This lecture introduces SlapOS and its architecture and from this derives the requirements for an NMS Network Management System. This lecture also contains reading materials. The following documents are required to be read:</p>
<ul>
<li><a href="https://www.nexedi.com/slapos-DesignDocument.Slapos.Introduction">SlapOS Introduction</a> (<a href="https://www.nexedi.com/slapos-DesignDocument.Slapos.Introduction?portal_skin=Slide">presentation</a>)- generic introduction to SlapOS</li>
<li><a href="https://www.nexedi.com/slapos-DesignDocument.Understanding.Slapos.Architecture">SlapOS Architecture</a> - Overview of the SlapOS architecture and components (<a href="https://www.nexedi.com/slapos-DesignDocument.Understanding.Slapos.Architecture?portal_skin=Slide">presentation</a>)</li>
<li><a href="https://www.nexedi.com/slapos-DesignDocument.Slapos.System.Requirements">SlapOS System Requirements</a> - Minimal Requirements to setup a NMS network (<a href="https://www.nexedi.com/slapos-DesignDocument.Slapos.System.Requirements?portal_skin=Slide">presentation</a>)</li>
</ul>
<p>Once you understand the differences between Master and nodes, can distinguish COMP-ROOT, 0 and 123 in a network, know where software releases are added and what supplying a software on a node and instantiating it on a partition means, you can start with the next lecture of setting up the NMS.</p>
</details>
</section>
<section class="chapter">
<h1>Lecture 2: Install and Configure NMS SlapOS Master</h1>
<details open="open">
<p>This lecture will covers installing and configuring the SlapOS Master (COMP-ROOT). It is the main component of a NMS network but relatively straightforward to setup. Please do the following tutorial to get a SlapOS Master up and running:</p>
<ul>
<li><a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Master.Comp.Root">Install SlapOS Master (COMP-ROOT) (</a><a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Master.Comp.Root?portal_skin=Slide">presentation</a>)</li>
</ul>
</details>
</section>
<section class="chapter">
<h1>Lecture 3: Bootstrap Frontend, IPv6 Network and SimcardDB</h1>
<details open="open">
<p>This lecture will cover setting up the COMP-0 machine required to provide core services to the COMP-ROOT and other nodes in the network. They include IPv6, a Frontend to streamline browser-based access and the SimcardDB</p>
<p>Setting up COMP-0 is the complicated part as it requires some improvisation for simulating services to properly connect nodes before they are provided by COMP-0. Please do the following tutorials to setup COMP-0:</p>
<ul>
<li><a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Node.Comp.0">Install SlapOS Node (COMP-0) (</a><a href="https://www.nexedi.com/slapos-Tutorial.Install.Slapos.Node.Comp.0?portal_skin=Slide">presentation</a>)</li>
</ul>
<p>In case of a missing wildcard SSL certificate you can follow <a href="https://www.nexedi.com/slapos-HowTo.Request.And.Setup.A.Wildcard.Ssl.Certificate">how to request a wildcard SSL certificate</a> (<a href="https://www.nexedi.com/slapos-HowTo.Request.And.Setup.A.Wildcard.Ssl.Certificate?portal_skin=Slide">presentation</a>). After you have finished this tutorial, you will know how to add software to the network and how to deploy instances. The procedure is the same for any software provided over SlapOS.</p>
</details>
</section>
<section>
<h1>Lecture 4: Deploy eNodeB/EPC Service</h1>
<details open="open">
<p>This lecture will cover installing and deploying a eNodeB/EPC server. It will include setting up a new generic node (COMP-123), using the SlapOS Master to install EPC/eNB on this node and providing instances using several configurations available. Technically this lecture does the same as in the previous steps, only in a different order and with a different software. Please do the following to learn how to setup regular network nodes:</p>
<ul>
<li><a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Node.Comp.123">Install SlapOS Node (COMP-123)</a> - LTE Box Setup (<a href="https://www.nexedi.com/P-OSTV-Tutorial.Install.Slapos.Node.Comp.123?portal_skin=Slide">presentation</a>)</li>
</ul>
</details>
</section>
<section>
<h1>Lecture 5: Managing a NMS Deployment</h1>
<details open="open">
<p>This lecture includes material to show demonstrating how to manage the NMS system once it has been setup, including classifying network nodes, monitoring network performance and handling tickets created from anomalies or failures of deployed instances or computers. The following tutorials should be done to complete this lecture:</p>
<ul>
<li><a href="https://www.nexedi.com/slapos-Tutorial.Manage.Slapos.Network">Handling Tickets in a NMS network</a> (<a href="https://www.nexedi.com/slapos-Tutorial.Manage.Slapos.Network?portal_skin=Slide">presentation</a>)</li>
<li><a href="https://www.nexedi.com/slapos-HowTo.Classify.Node.In.A.Network">Classify Node in a NMS network</a> (<a href="https://www.nexedi.com/slapos-HowTo.Classify.Node.In.A.Network?portal_skin=Slide">presentation</a>)</li>
<li><a href="https://www.nexedi.com/slapos-Tutorial.Monitor.Slapos.Network">Monitor NMS Network</a> (<a href="https://www.nexedi.com/slapos-Tutorial.Monitor.Slapos.Network?portal_skin=Slide">presentation</a>)</li>
</ul>
</details>
</section>
<section>
<h1>Lecture 6: Extending LTE Software Release</h1>
<details open="open">
<p>The only thing necessary to be configured on a running NMS network are instantiation parameters. This lecture will teach working with the software profile underlying the software installed in the catalogue. It will introduce Buildout in more detail and show how a software release can be modified using a Webrunner. This lecture is more technical and covers the basics of creating a software release like the one used to create the NMS.</p>
<p>Read the following documents to familiarize yourself with developing in SlapOS:</p>
<ul>
<li><a href="https://www.nexedi.com/slapos-DesignDocument.Understanding.Slapos.Buildout">Understanding SlapOS Buildout</a> (<a href="https://www.nexedi.com/slapos-DesignDocument.Understanding.Slapos.Buildout?portal_skin=Slide">presentation</a>)</li>
<li><a href="https://www.nexedi.com/P-OSTV-DesignDocument.Understanding.Nms.Software.Release">Understanding the Amarisoft Software Release</a> (<a href="https://www.nexedi.com/P-OSTV-DesignDocument.Understanding.Nms.Software.Release?portal_skin=Slide">presentation</a>)</li>
</ul>
<p>Then add the Webrunner to your network, deploy an instance and inside install the helloworld software release. This will then be used as example showing how to modify a software release to add parameters, promises and components.</p>
<ul>
<li><a href="https://www.nexedi.com/slapos-HowTo.Add.Software.Release.To.Slapos.Master">Add Webrunner to SlapOS Master software catalogue</a> (<a href="www.nexedi.com/slapos-HowTo.Add.Software.Release.To.Slapos.Master?portal_skin=Slide">presentation</a>)</li>
<li><a href="https://www.nexedi.com/slapos-HowTo.Deploy.Software.On.Webrunner">Deploying the Helloworld Software Release</a> - inside the Webrunner (<a href="https://www.nexedi.com/slapos-HowTo.Deploy.Software.On.Webrunner?portal_skin=Slide">presentation</a>)</li>
<li><a href="https://www.nexedi.com/slapos-Tutorial.Extend.Software.Release">Extending the Software Release</a> - using the Webrunner (<a href="ttps://www.nexedi.com/slapos-Tutorial.Extend.Software.Release?portal_skin=Slide">presentation</a>)</li>
</ul>
</details>
</section>
<section class="master">
<h1>Thank You</h1>
<div style="float:left;margin-top:9%;width:48%;"><img alt="Image Nexedi Office" src="https://slapos.nexedi.com/NXD-Media.Image.Office.Munich?display=large&amp;format=png" title="Image Nexedi Office" type="image/png" /></div>
<div>
<ul style="list-style:none;display:block;">
<li>Nexedi SA</li>
<li>147 Rue du Ballon</li>
<li>59110 La Madeleine</li>
<li>France</li>
</ul>
<ul style="list-style:none;display:block;">
<li><a href="http://nexedi.com/contact">nexedi.com/contact</a></li>
</ul>
</div>
<details open="open">&nbsp;</details>
</section>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Page" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/team</string>
<string>publication_section/documentation/temp_slapos</string>
<string>group/nexedi</string>
<string>follow_up/product_module/156</string>
<string>contributor/person_module/20121115-586BC0F</string>
<string>contributor/person_module/20110829-FF7377</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>P-OSTV-Tutorial.Nms.Learning.Track</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>TRACK - Lectures explaining how to use an NMS system.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>P-OSTV-Tutorial.Nms.Learning.Track</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Page</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>NMS Learning Track (Admin)</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>OSTV Tutorial - NMS Learning Track (Admin)</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>003</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103926.04</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103926.03</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>alain parfait</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1558103926.02</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
Copyright 2019, Nexedi SA
\ No newline at end of file
erp5_run_my_doc
\ No newline at end of file
This bt5 contains SlapOS user documentation
\ No newline at end of file
Creative Common Attribution NonCommercial ShareAlike
\ No newline at end of file
test_page_module/P-OSTV-DesignDocument.OSTV.NMS
test_page_module/P-OSTV-DesignDocument.Understanding.Nms.Software.Release
test_page_module/P-OSTV-HowTo.Add.Lte.Service
test_page_module/P-OSTV-HowTo.Add.User.To.Simcard.Db
test_page_module/P-OSTV-HowTo.Create.Software.Release
test_page_module/P-OSTV-HowTo.Update.Enb.Or.Epc
test_page_module/P-OSTV-Tutorial.Install.Slapos.Node.Comp.123
test_page_module/P-OSTV-Tutorial.Nms.Learning.Track
\ No newline at end of file
test_page_module/P-OSTV-DesignDocument.OSTV.NMS
test_page_module/P-OSTV-DesignDocument.Understanding.Nms.Software.Release
test_page_module/P-OSTV-HowTo.Add.Lte.Service
test_page_module/P-OSTV-HowTo.Add.User.To.Simcard.Db
test_page_module/P-OSTV-HowTo.Create.Software.Release
test_page_module/P-OSTV-HowTo.Update.Enb.Or.Epc
test_page_module/P-OSTV-Tutorial.Install.Slapos.Node.Comp.123
test_page_module/P-OSTV-Tutorial.Nms.Learning.Track
\ No newline at end of file
erp5_slapos_tutorial
\ No newline at end of file
5.4.7
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment