Documentation for Simulation added

This commit is contained in:
2025-05-30 18:06:32 +01:00
parent 0e260cf8e4
commit 99c9c41528
2 changed files with 221 additions and 98 deletions

View File

@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2025-04-28 Mon 23:14 -->
<!-- 2025-05-30 Fri 18:05 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>&lrm;</title>
@@ -26,12 +26,12 @@
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org3cfeea9">1. Guide through video</a>
<li><a href="#orga8d6384">1. Guide through video</a>
<ul>
<li>
<ul>
<li><a href="#org4256417">1.0.1. The video below shows the setup and usage of P2PRC.</a></li>
<li><a href="#orgecee0c3">1.0.2. Source code: https://github.com/Akilan1999/p2p-rendering-computation</a></li>
<li><a href="#org1df53fe">1.0.1. The video below shows the setup and usage of P2PRC.</a></li>
<li><a href="#orgd08f572">1.0.2. Source code: https://github.com/Akilan1999/p2p-rendering-computation</a></li>
</ul>
</li>
</ul>
@@ -78,8 +78,8 @@
<li><a href="#pulling-plugin-from-a-remote-repo">4.0.17. Pulling plugin from a remote repo</a></li>
<li><a href="#deleting-plugin-from-the-plugin-directory">4.0.18. Deleting plugin from the plugin directory</a></li>
<li><a href="#added-custom-metadata-about-the-current-node">4.0.19. Added custom metadata about the current node</a></li>
<li><a href="#org899f210">4.0.20. MapPort and link to domain name</a></li>
<li><a href="#orge681470">4.0.21. Add root node</a></li>
<li><a href="#org966244c">4.0.20. MapPort and link to domain name</a></li>
<li><a href="#org2f19c06">4.0.21. Add root node</a></li>
</ul>
</li>
</ul>
@@ -109,8 +109,8 @@
</li>
<li><a href="#current-languages-supported">6.3. Current languages supported</a>
<ul>
<li><a href="#org92a1e8c">6.3.1. Python</a></li>
<li><a href="#org780e43b">6.3.2. Haskell</a></li>
<li><a href="#orgf65d6f6">6.3.1. Python</a></li>
<li><a href="#org40fe543">6.3.2. Haskell</a></li>
</ul>
</li>
</ul>
@@ -127,22 +127,28 @@
</ul>
</li>
<li><a href="#client-mode">10. Client mode</a></li>
<li><a href="#org1b92827">11. Blog posts</a>
<li><a href="#orgfe7fc3c">11. Simulation</a>
<ul>
<li><a href="#orgec8979c">11.1. Self host within 5 minutes any program</a>
<li><a href="#org22226ea">11.1. Command</a></li>
<li><a href="#orga514f52">11.2. Sample bash instructions</a></li>
</ul>
</li>
<li><a href="#orga046d58">12. Blog posts</a>
<ul>
<li><a href="#orgd03815a">11.1.1. 1. Find a program you want to run</a></li>
<li><a href="#orgec88f20">12.1. Self host within 5 minutes any program</a>
<ul>
<li><a href="#org07ee6bd">12.1.1. 1. Find a program you want to run</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#orgb32e475">12. Ideas for future potencial features</a>
<li><a href="#orgf31160d">13. Ideas for future potencial features</a>
<ul>
<li><a href="#org2666d00">12.1. To support hetrogenous set of Nodes that cannot run P2PRC</a>
<li><a href="#org1a8a88e">13.1. To support hetrogenous set of Nodes that cannot run P2PRC</a>
<ul>
<li><a href="#org332fcc8">12.1.1. Assumptions:</a></li>
<li><a href="#org21a29ac">12.1.2. Set of interesting possible:</a></li>
<li><a href="#org4947494">12.1.3. Implementation</a></li>
<li><a href="#org5d2c045">13.1.1. Assumptions:</a></li>
<li><a href="#orgb55e814">13.1.2. Set of interesting possible:</a></li>
<li><a href="#org7855189">13.1.3. Implementation</a></li>
</ul>
</li>
</ul>
@@ -151,26 +157,26 @@
</div>
</div>
<div id="orgefb6d6c" class="figure">
<div id="org628b85a" class="figure">
<p><img src="./Colored-On-Light-Image.png" alt="Colored-On-Light-Image.png" width="300px" />
</p>
</div>
<div id="outline-container-org3cfeea9" class="outline-2">
<h2 id="org3cfeea9"><span class="section-number-2">1.</span> Guide through video</h2>
<div id="outline-container-orga8d6384" class="outline-2">
<h2 id="orga8d6384"><span class="section-number-2">1.</span> Guide through video</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-org4256417" class="outline-4">
<h4 id="org4256417"><span class="section-number-4">1.0.1.</span> The video below shows the setup and usage of P2PRC.</h4>
<div id="outline-container-org1df53fe" class="outline-4">
<h4 id="org1df53fe"><span class="section-number-4">1.0.1.</span> The video below shows the setup and usage of P2PRC.</h4>
<div class="outline-text-4" id="text-1-0-1">
<div id="org863dfc7" class="figure">
<div id="orgaf620b9" class="figure">
<p><a href="https://www.youtube.com/watch?v=OMwCpedu5cs" class="video"><img src="https://i3.ytimg.com/vi/OMwCpedu5cs/maxresdefault.jpg" alt="maxresdefault.jpg" class="video" /></a>
</p>
</div>
</div>
</div>
<div id="outline-container-orgecee0c3" class="outline-4">
<h4 id="orgecee0c3"><span class="section-number-4">1.0.2.</span> Source code: <a href="https://github.com/Akilan1999/p2p-rendering-computation">https://github.com/Akilan1999/p2p-rendering-computation</a></h4>
<div id="outline-container-orgd08f572" class="outline-4">
<h4 id="orgd08f572"><span class="section-number-4">1.0.2.</span> Source code: <a href="https://github.com/Akilan1999/p2p-rendering-computation">https://github.com/Akilan1999/p2p-rendering-computation</a></h4>
</div>
</div>
<div id="outline-container-chapter1-introduction" class="outline-2">
@@ -259,7 +265,7 @@ Go API to create and interact with the containers.
to install docker GPU</a>
</p>
<pre class="example" id="orgfc326ea">
<pre class="example" id="orge229820">
// Do ensure that the docker command does not need sudo to run
sudo chmod 666 /var/run/docker.sock
</pre>
@@ -273,7 +279,7 @@ To set up the internal dependencies and build the entire go code into a
single binary
</p>
<pre class="example" id="org9abf859">
<pre class="example" id="orge6efab3">
make
</pre>
</div>
@@ -285,7 +291,7 @@ To set up P2PRC on Windows, simply run this batch file. <b>Make sure you
are not in admin mode when running this.</b>
</p>
<pre class="example" id="org754bc46">
<pre class="example" id="org503a4ba">
.\install.bat
</pre>
</div>
@@ -295,7 +301,7 @@ are not in admin mode when running this.</b>
<div id="outline-container-add-appropriate-paths-to-.bashrc" class="outline-4">
<h4 id="add-appropriate-paths-to-.bashrc"><span class="section-number-4">3.2.4.</span> Add appropriate paths to <code>.bashrc</code></h4>
<div class="outline-text-4" id="text-add-appropriate-paths-to-.bashrc">
<pre class="example" id="org06344db">
<pre class="example" id="org3da98df">
export P2PRC=/&lt;PATH&gt;/p2p-rendering-computation
export PATH=/&lt;PATH&gt;/p2p-rendering-computation:${PATH}
</pre>
@@ -304,14 +310,14 @@ export PATH=/&lt;PATH&gt;/p2p-rendering-computation:${PATH}
<div id="outline-container-test-if-binary-works" class="outline-4">
<h4 id="test-if-binary-works"><span class="section-number-4">3.2.5.</span> Test if binary works</h4>
<div class="outline-text-4" id="text-test-if-binary-works">
<pre class="example" id="org189a0e9">
<pre class="example" id="org842f745">
p2prc --help
</pre>
</div>
<ol class="org-ol">
<li><a id="output"></a>Output:<br />
<div class="outline-text-5" id="text-output">
<pre class="example" id="org705fb25">
<pre class="example" id="org2d62e91">
NAME:
p2p-rendering-computation - p2p cli application to create and access VMs in other servers
@@ -373,7 +379,7 @@ GLOBAL OPTIONS:
<div id="outline-container-start-as-a-server" class="outline-4">
<h4 id="start-as-a-server"><span class="section-number-4">4.0.1.</span> Start as a server</h4>
<div class="outline-text-4" id="text-start-as-a-server">
<pre class="example" id="org1be9ce7">
<pre class="example" id="org41f3e1c">
p2prc -s
</pre>
</div>
@@ -381,7 +387,7 @@ p2prc -s
<div id="outline-container-view-server-specification" class="outline-4">
<h4 id="view-server-specification"><span class="section-number-4">4.0.2.</span> View server Specification</h4>
<div class="outline-text-4" id="text-view-server-specification">
<pre class="example" id="org7c6080c">
<pre class="example" id="orgc305043">
p2prc --specs=&lt;ip address&gt;
</pre>
</div>
@@ -393,7 +399,7 @@ p2prc --specs=&lt;ip address&gt;
use the <code>--gpu</code> if you know the other machine has a gpu.
</p>
<pre class="example" id="org96ebc97">
<pre class="example" id="orgc7648f7">
p2prc --touch=&lt;server ip address&gt; -p &lt;number of ports&gt; --gpu
</pre>
</div>
@@ -405,7 +411,7 @@ p2prc --touch=&lt;server ip address&gt; -p &lt;number of ports&gt; --gpu
The docker id is present in the output where you create a container
</p>
<pre class="example" id="org3a50a5b">
<pre class="example" id="org9aca1f2">
p2prc --rm=&lt;server ip address&gt; --id=&lt;docker container id&gt;
</pre>
</div>
@@ -413,7 +419,7 @@ p2prc --rm=&lt;server ip address&gt; --id=&lt;docker container id&gt;
<div id="outline-container-adding-servers-to-ip-table" class="outline-4">
<h4 id="adding-servers-to-ip-table"><span class="section-number-4">4.0.5.</span> Adding servers to ip table</h4>
<div class="outline-text-4" id="text-adding-servers-to-ip-table">
<pre class="example" id="orgd0b12dc">
<pre class="example" id="orgb518ed0">
p2prc --as=&lt;server ip address you want to add&gt;
</pre>
</div>
@@ -421,7 +427,7 @@ p2prc --as=&lt;server ip address you want to add&gt;
<div id="outline-container-update-ip-table" class="outline-4">
<h4 id="update-ip-table"><span class="section-number-4">4.0.6.</span> Update ip table</h4>
<div class="outline-text-4" id="text-update-ip-table">
<pre class="example" id="org2b52762">
<pre class="example" id="org26ead4a">
p2prc --us
</pre>
</div>
@@ -429,7 +435,7 @@ p2prc --us
<div id="outline-container-list-servers" class="outline-4">
<h4 id="list-servers"><span class="section-number-4">4.0.7.</span> List Servers</h4>
<div class="outline-text-4" id="text-list-servers">
<pre class="example" id="org9a40c4a">
<pre class="example" id="orgc098d33">
p2prc --ls
</pre>
</div>
@@ -437,7 +443,7 @@ p2prc --ls
<div id="outline-container-view-network-interfaces" class="outline-4">
<h4 id="view-network-interfaces"><span class="section-number-4">4.0.8.</span> View Network interfaces</h4>
<div class="outline-text-4" id="text-view-network-interfaces">
<pre class="example" id="orge766dd3">
<pre class="example" id="org68a2716">
p2prc --ni
</pre>
</div>
@@ -445,7 +451,7 @@ p2prc --ni
<div id="outline-container-viewing-containers-created-client-side" class="outline-4">
<h4 id="viewing-containers-created-client-side"><span class="section-number-4">4.0.9.</span> Viewing Containers created Client side</h4>
<div class="outline-text-4" id="text-viewing-containers-created-client-side">
<pre class="example" id="org9787c64">
<pre class="example" id="orgc3b9a5e">
p2prc --tc
</pre>
</div>
@@ -453,7 +459,7 @@ p2prc --tc
<div id="outline-container-running-plugin" class="outline-4">
<h4 id="running-plugin"><span class="section-number-4">4.0.10.</span> Running plugin</h4>
<div class="outline-text-4" id="text-running-plugin">
<pre class="example" id="org94b7a90">
<pre class="example" id="org0f205e5">
p2prc --plugin &lt;plugin name&gt; --id &lt;container id or group id&gt;
</pre>
</div>
@@ -461,7 +467,7 @@ p2prc --plugin &lt;plugin name&gt; --id &lt;container id or group id&gt;
<div id="outline-container-create-group" class="outline-4">
<h4 id="create-group"><span class="section-number-4">4.0.11.</span> Create group</h4>
<div class="outline-text-4" id="text-create-group">
<pre class="example" id="orge008a6c">
<pre class="example" id="org3dc07ae">
p2prc --cgroup
</pre>
</div>
@@ -469,7 +475,7 @@ p2prc --cgroup
<div id="outline-container-add-container-to-group" class="outline-4">
<h4 id="add-container-to-group"><span class="section-number-4">4.0.12.</span> Add container to group</h4>
<div class="outline-text-4" id="text-add-container-to-group">
<pre class="example" id="org8598b18">
<pre class="example" id="orgc7ac7ea">
p2prc --group &lt;group id&gt; --id &lt;container id&gt;
</pre>
</div>
@@ -477,7 +483,7 @@ p2prc --group &lt;group id&gt; --id &lt;container id&gt;
<div id="outline-container-view-groups" class="outline-4">
<h4 id="view-groups"><span class="section-number-4">4.0.13.</span> View groups</h4>
<div class="outline-text-4" id="text-view-groups">
<pre class="example" id="org5425a07">
<pre class="example" id="org147a736">
p2prc --groups
</pre>
</div>
@@ -485,7 +491,7 @@ p2prc --groups
<div id="outline-container-view-specific-group" class="outline-4">
<h4 id="view-specific-group"><span class="section-number-4">4.0.14.</span> View specific group</h4>
<div class="outline-text-4" id="text-view-specific-group">
<pre class="example" id="org187af36">
<pre class="example" id="orgd045744">
p2prc --group &lt;group id&gt;
</pre>
</div>
@@ -493,7 +499,7 @@ p2prc --group &lt;group id&gt;
<div id="outline-container-delete-container-from-group" class="outline-4">
<h4 id="delete-container-from-group"><span class="section-number-4">4.0.15.</span> Delete container from group</h4>
<div class="outline-text-4" id="text-delete-container-from-group">
<pre class="example" id="orga4687ab">
<pre class="example" id="org9fc6938">
p2prc --rmcgroup --group &lt;group id&gt; --id &lt;container id&gt;
</pre>
</div>
@@ -501,7 +507,7 @@ p2prc --rmcgroup --group &lt;group id&gt; --id &lt;container id&gt;
<div id="outline-container-delete-entire-group" class="outline-4">
<h4 id="delete-entire-group"><span class="section-number-4">4.0.16.</span> Delete entire group</h4>
<div class="outline-text-4" id="text-delete-entire-group">
<pre class="example" id="orgf60b3a8">
<pre class="example" id="org752e829">
p2prc --rmgroup &lt;group id&gt;
</pre>
</div>
@@ -509,7 +515,7 @@ p2prc --rmgroup &lt;group id&gt;
<div id="outline-container-pulling-plugin-from-a-remote-repo" class="outline-4">
<h4 id="pulling-plugin-from-a-remote-repo"><span class="section-number-4">4.0.17.</span> Pulling plugin from a remote repo</h4>
<div class="outline-text-4" id="text-pulling-plugin-from-a-remote-repo">
<pre class="example" id="orgb9bee77">
<pre class="example" id="orga6511bc">
p2prc --pp &lt;repo link&gt;
</pre>
</div>
@@ -517,7 +523,7 @@ p2prc --pp &lt;repo link&gt;
<div id="outline-container-deleting-plugin-from-the-plugin-directory" class="outline-4">
<h4 id="deleting-plugin-from-the-plugin-directory"><span class="section-number-4">4.0.18.</span> Deleting plugin from the plugin directory</h4>
<div class="outline-text-4" id="text-deleting-plugin-from-the-plugin-directory">
<pre class="example" id="org2979ba1">
<pre class="example" id="orgbff120f">
p2prc --rp &lt;plugin name&gt;
</pre>
</div>
@@ -525,28 +531,28 @@ p2prc --rp &lt;plugin name&gt;
<div id="outline-container-added-custom-metadata-about-the-current-node" class="outline-4">
<h4 id="added-custom-metadata-about-the-current-node"><span class="section-number-4">4.0.19.</span> Added custom metadata about the current node</h4>
<div class="outline-text-4" id="text-added-custom-metadata-about-the-current-node">
<pre class="example" id="org3c1dba9">
<pre class="example" id="org93cf0f5">
p2prc --amd "custom metadata"
</pre>
</div>
</div>
<div id="outline-container-org899f210" class="outline-4">
<h4 id="org899f210"><span class="section-number-4">4.0.20.</span> MapPort and link to domain name</h4>
<div id="outline-container-org966244c" class="outline-4">
<h4 id="org966244c"><span class="section-number-4">4.0.20.</span> MapPort and link to domain name</h4>
<div class="outline-text-4" id="text-4-0-20">
<p>
Allows to expose remote ports from a machine in the P2P network.
</p>
<pre class="example" id="org9d628c6">
<pre class="example" id="org583d4c1">
p2prc --mp &lt;port no to map&gt; --dn &lt;domain name to link Mapped port against&gt;
</pre>
</div>
<ol class="org-ol">
<li><a id="org29021b1"></a>MapPort in remote machine<br />
<li><a id="orgf707bff"></a>MapPort in remote machine<br />
<div class="outline-text-5" id="text-4-0-20-1">
<p>
This is to ensure ports on remote machines on the P2PRC can be easily opened.
</p>
<pre class="example" id="orga1ff65e">
<pre class="example" id="org72eef4d">
p2prc --mp &lt;port no to map&gt; --dn &lt;domain name to link Mapped port against&gt; --ra &lt;remote server address&gt;
</pre>
@@ -555,15 +561,15 @@ p2prc --mp &lt;port no to map&gt; --dn &lt;domain name to link Mapped port again
</li>
</ol>
</div>
<div id="outline-container-orge681470" class="outline-4">
<h4 id="orge681470"><span class="section-number-4">4.0.21.</span> Add root node</h4>
<div id="outline-container-org2f19c06" class="outline-4">
<h4 id="org2f19c06"><span class="section-number-4">4.0.21.</span> Add root node</h4>
<div class="outline-text-4" id="text-4-0-21">
<p>
Adds a root node to P2RRC and overwrites all other nodes in the ip table.
To be only added before the network is started and with
the intention of a fresh instance.
</p>
<pre class="example" id="org79b869e">
<pre class="example" id="org202dc68">
p2prc --arn --ip &lt;root node ip address&gt; -p &lt;root node port no&gt;
</pre>
</div>
@@ -674,7 +680,7 @@ from the TURN server. The flow below describes the workflow.
<li>Call <code>/FRPPort</code></li>
</ul>
<pre class="example" id="org90a2001">
<pre class="example" id="org2bea991">
http://&lt;turn server ip&gt;:&lt;server port no&gt;/FRPport
</pre>
@@ -763,7 +769,7 @@ p2prc.h p2prc.so
Below are a sample set of commands to open the bindings implementation.
</p>
<pre class="example" id="orgb8690e2">
<pre class="example" id="orgdd81071">
# run
cd Bindings/
# list files
@@ -851,7 +857,7 @@ that convert a go object to JSON string initially and converts it to
</li>
<li><a id="a-pseudo-code-to-refer-to-the-common-function-implementation-shape-could-be-represented-as"></a>A Pseudo code to refer to the common function implementation shape could be represented as:<br />
<div class="outline-text-5" id="text-a-pseudo-code-to-refer-to-the-common-function-implementation-shape-could-be-represented-as">
<pre class="example" id="orgd0da451">
<pre class="example" id="orge44168c">
func &lt;Function name&gt; (output *C.char) {
&lt;response&gt;,&lt;error&gt; := &lt;P2PRC function name&gt;(&lt;parameters if needed&gt;)
if &lt;error&gt; != nil {
@@ -869,8 +875,8 @@ func &lt;Function name&gt; (output *C.char) {
<h3 id="current-languages-supported"><span class="section-number-3">6.3.</span> Current languages supported</h3>
<div class="outline-text-3" id="text-current-languages-supported">
</div>
<div id="outline-container-org92a1e8c" class="outline-4">
<h4 id="org92a1e8c"><span class="section-number-4">6.3.1.</span> Python</h4>
<div id="outline-container-orgf65d6f6" class="outline-4">
<h4 id="orgf65d6f6"><span class="section-number-4">6.3.1.</span> Python</h4>
<div class="outline-text-4" id="text-6-3-1">
</div>
<ol class="org-ol">
@@ -907,8 +913,8 @@ called from other programming languages.
</li>
</ol>
</div>
<div id="outline-container-org780e43b" class="outline-4">
<h4 id="org780e43b"><span class="section-number-4">6.3.2.</span> Haskell</h4>
<div id="outline-container-org40fe543" class="outline-4">
<h4 id="org40fe543"><span class="section-number-4">6.3.2.</span> Haskell</h4>
<div class="outline-text-4" id="text-6-3-2">
<p>
P2PRC officially supports Haskell bindings and will further support
@@ -943,18 +949,28 @@ configuration file was generated using JSON format.
<div class="org-src-container">
<pre class="src src-json">{
"MachineName": "pc-74-120.customer.ask4.lan",
"MachineName": "Akilans-MacBook-Pro.local-975261X",
"IPTable": "/Users/akilan/Documents/p2p-rendering-computation/p2p/iptable/ip_table.json",
"DockerContainers": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/",
"DefaultDockerFile": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/docker-ubuntu-sshd/",
"DockerRunLogs": "/tmp/",
"SpeedTestFile": "/Users/akilan/Documents/p2p-rendering-computation/p2p/50.bin",
"IPV6Address": "",
"PluginPath": "/Users/akilan/Documents/p2p-rendering-computation/plugin/deploy",
"TrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/trackcontainers.json",
"ServerPort": "8088",
"ProxyPort": "",
"GroupTrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/grouptrackcontainers.json",
"FRPServerPort": "True",
"BehindNAT": "True",
"FRPServerPort": true,
"BehindNAT": true,
"IPTableKey": "QH3yQrGRe2X4",
"PublicKeyFile": "/Users/akilan/Documents/p2p-rendering-computation/p2prc.publicKey",
"PrivateKeyFile": "/Users/akilan/Documents/p2p-rendering-computation/p2prc.privateKey",
"PemFile": "/Users/akilan/Documents/p2p-rendering-computation/cert.pem",
"KeyFile": "/Users/akilan/Documents/p2p-rendering-computation/key.pem",
"BareMetal": false,
"UnsafeMode": false,
"Test": false,
"CustomConfig": null
}
</pre>
@@ -1020,7 +1036,7 @@ from the TURN server. The flow below describes the workflow.
<li>Call <code>/FRPPort</code></li>
</ul>
<pre class="example" id="org910dfb2">
<pre class="example" id="org60a83ac">
http://&lt;turn server ip&gt;:&lt;server port no&gt;/FRPport
</pre>
@@ -1051,14 +1067,73 @@ func main() {
</div>
</div>
</div>
<div id="outline-container-org1b92827" class="outline-2">
<h2 id="org1b92827"><span class="section-number-2">11.</span> Blog posts</h2>
<div id="outline-container-orgfe7fc3c" class="outline-2">
<h2 id="orgfe7fc3c"><span class="section-number-2">11.</span> Simulation</h2>
<div class="outline-text-2" id="text-11">
<p>
The simulation library is a really simple library to locally
run serveral instances of P2PRC to test the functionality
of sending information through the network and particularly
the Node discovery mechanism. There are current 5 commands
which can be used as shown below:
</p>
</div>
<div id="outline-container-orgec8979c" class="outline-3">
<h3 id="orgec8979c"><span class="section-number-3">11.1.</span> Self host within 5 minutes any program</h3>
<div id="outline-container-org22226ea" class="outline-3">
<h3 id="org22226ea"><span class="section-number-3">11.1.</span> Command</h3>
<div class="outline-text-3" id="text-11-1">
<ul class="org-ul">
<li><b><b><b>P2PRC instances "number of instances"</b></b></b> : Starts p2prc processes
based on the number of number instances provided. This includes
creating temporary folders with independent IPTables.</li>
<li><b><b><b>Start all instances "number of instances"</b></b></b>: Starts the P2PRC instances
created. This function enters into the instance directory and runs
```p2prc -s &amp;``` with a delay for approximately 3 seconds. This allows
each independent created node to learn about each other.</li>
<li><b><b><b>IP Tables after Started number of instances"</b></b></b>: Prints the IPTable of
each independant node.</li>
<li><b><b><b>Remove all test files</b></b></b>: Removes all test files created which needed for
testing the generated P2PRC instances.</li>
<li><b><b><b>Kill all instances</b></b></b>: Kills all the background P2PRC instances created.</li>
</ul>
</div>
</div>
<div id="outline-container-orga514f52" class="outline-3">
<h3 id="orga514f52"><span class="section-number-3">11.2.</span> Sample bash instructions</h3>
<div class="outline-text-3" id="text-11-2">
<div class="org-src-container">
<pre class="src src-bash"># Unset default P2PRC env path
unset P2PRC
# Run with 2 nodes
P2PRC_instances 3
# Start instances
Start_all_instances 3
# List ip tables of nodes started
IP_Tables_after_Started 3
# Remove test files created
Remove_all_test_files
# Kill all instances
Kill_all_instances
</pre>
</div>
<p>
Source code: <a href="https://github.com/Akilan1999/p2p-rendering-computation/blob/master/Simulation/simulation.sh">https://github.com/Akilan1999/p2p-rendering-computation/blob/master/Simulation/simulation.sh</a>
</p>
</div>
</div>
</div>
<div id="outline-container-orga046d58" class="outline-2">
<h2 id="orga046d58"><span class="section-number-2">12.</span> Blog posts</h2>
<div class="outline-text-2" id="text-12">
</div>
<div id="outline-container-orgec88f20" class="outline-3">
<h3 id="orgec88f20"><span class="section-number-3">12.1.</span> Self host within 5 minutes any program</h3>
<div class="outline-text-3" id="text-12-1">
<ul class="org-ul">
<li>Author: <a href="http://akilan.io/">Akilan Selvacoumar</a></li>
<li>Date: 28-01-2025</li>
</ul>
@@ -1068,7 +1143,7 @@ func main() {
<li>Video tutorial:</li>
</ul>
<div id="org756aa28" class="figure">
<div id="org01fbebe" class="figure">
<p><a href="https://youtu.be/rN4SiVowg5E" class="video"><img src="https://i3.ytimg.com/vi/rN4SiVowg5E/maxresdefault.jpg" alt="maxresdefault.jpg" class="video" /></a>
</p>
</div>
@@ -1078,9 +1153,9 @@ This is a fun expirement for anyone to try to quickly run a server and
quickly do a map port and domain name mapping in a single command.
</p>
</div>
<div id="outline-container-orgd03815a" class="outline-4">
<h4 id="orgd03815a"><span class="section-number-4">11.1.1.</span> 1. Find a program you want to run</h4>
<div class="outline-text-4" id="text-11-1-1">
<div id="outline-container-org07ee6bd" class="outline-4">
<h4 id="org07ee6bd"><span class="section-number-4">12.1.1.</span> 1. Find a program you want to run</h4>
<div class="outline-text-4" id="text-12-1-1">
<p>
Let's try to setup a really easy program (Let's do with Linkwarden
with docker compose :) ). This is under the assumption you have docker
@@ -1088,8 +1163,8 @@ compose installed on your local machine.
</p>
</div>
<ol class="org-ol">
<li><a id="orgc05f730"></a>Let's run Linkwarden using docker compose and P2PRC<br />
<div class="outline-text-5" id="text-11-1-1-1">
<li><a id="org2b6a10c"></a>Let's run Linkwarden using docker compose and P2PRC<br />
<div class="outline-text-5" id="text-12-1-1-1">
<p>
<a href="https://docs.linkwarden.app/self-hosting/installation">Installation instructions</a>:
</p>
@@ -1177,17 +1252,17 @@ ex: <a href="https://linkwarden.akilan.io">https://linkwarden.akilan.io</a>
</div>
</div>
</div>
<div id="outline-container-orgb32e475" class="outline-2">
<h2 id="orgb32e475"><span class="section-number-2">12.</span> Ideas for future potencial features</h2>
<div class="outline-text-2" id="text-12">
<div id="outline-container-orgf31160d" class="outline-2">
<h2 id="orgf31160d"><span class="section-number-2">13.</span> Ideas for future potencial features</h2>
<div class="outline-text-2" id="text-13">
<p>
Consists of personal loideas for the future of P2PRC.
At moment only has main contributors writiing to this.
</p>
</div>
<div id="outline-container-org2666d00" class="outline-3">
<h3 id="org2666d00"><span class="section-number-3">12.1.</span> To support hetrogenous set of Nodes that cannot run P2PRC</h3>
<div class="outline-text-3" id="text-12-1">
<div id="outline-container-org1a8a88e" class="outline-3">
<h3 id="org1a8a88e"><span class="section-number-3">13.1.</span> To support hetrogenous set of Nodes that cannot run P2PRC</h3>
<div class="outline-text-3" id="text-13-1">
<p>
This stems from a personal issue I have when doing research
on <a href="https://github.com/CTSRD-CHERI/cheribsd">CheriBSD</a> kernel. For my research I am using the ARM morello
@@ -1202,9 +1277,9 @@ and would introduce a new layer fault tolerance within a local
network nodes.
</p>
</div>
<div id="outline-container-org332fcc8" class="outline-4">
<h4 id="org332fcc8"><span class="section-number-4">12.1.1.</span> Assumptions:</h4>
<div class="outline-text-4" id="text-12-1-1">
<div id="outline-container-org5d2c045" class="outline-4">
<h4 id="org5d2c045"><span class="section-number-4">13.1.1.</span> Assumptions:</h4>
<div class="outline-text-4" id="text-13-1-1">
<ul class="org-ul">
<li>I have a Morello board that cannot run P2PRC</li>
<li>The Morello has a local IP address (ex: 192.168.0.10)</li>
@@ -1216,9 +1291,9 @@ as well look into custom tasks into the hetrogenous hardware.</li>
</ul>
</div>
</div>
<div id="outline-container-org21a29ac" class="outline-4">
<h4 id="org21a29ac"><span class="section-number-4">12.1.2.</span> Set of interesting possible:</h4>
<div class="outline-text-4" id="text-12-1-2">
<div id="outline-container-orgb55e814" class="outline-4">
<h4 id="orgb55e814"><span class="section-number-4">13.1.2.</span> Set of interesting possible:</h4>
<div class="outline-text-4" id="text-13-1-2">
<p>
We build a cool set possibilities before and use this to build up the implementation
plan.
@@ -1234,9 +1309,9 @@ weight hypervisors.</li>
</ul>
</div>
</div>
<div id="outline-container-org4947494" class="outline-4">
<h4 id="org4947494"><span class="section-number-4">12.1.3.</span> Implementation</h4>
<div class="outline-text-4" id="text-12-1-3">
<div id="outline-container-org7855189" class="outline-4">
<h4 id="org7855189"><span class="section-number-4">13.1.3.</span> Implementation</h4>
<div class="outline-text-4" id="text-13-1-3">
<ul class="org-ul">
<li>To use implementations similar to <a href="https://linux.die.net/man/1/socat">socat</a> to ensure we can bind address of local
nodes to a node running P2PRC and the node running P2PRC can do a local map port.</li>
@@ -1249,7 +1324,7 @@ other nodes can access the Morello board who have permission access.</li>
</ul>
<div id="orgf818690" class="figure">
<div id="orgd955246" class="figure">
<p><img src="./images/P2PRCRemoteNodes.png" alt="P2PRCRemoteNodes.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Implementation idea (To be improved upon)</p>
@@ -1261,7 +1336,7 @@ other nodes can access the Morello board who have permission access.</li>
</div>
<div id="postamble" class="status">
<p class="author">Author: Akilan</p>
<p class="date">Created: 2025-04-28 Mon 23:14</p>
<p class="date">Created: 2025-05-30 Fri 18:05</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>

View File

@@ -690,18 +690,28 @@ configuration file was generated using JSON format.
#+begin_src json
{
"MachineName": "pc-74-120.customer.ask4.lan",
"MachineName": "Akilans-MacBook-Pro.local-975261X",
"IPTable": "/Users/akilan/Documents/p2p-rendering-computation/p2p/iptable/ip_table.json",
"DockerContainers": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/",
"DefaultDockerFile": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/docker-ubuntu-sshd/",
"DockerRunLogs": "/tmp/",
"SpeedTestFile": "/Users/akilan/Documents/p2p-rendering-computation/p2p/50.bin",
"IPV6Address": "",
"PluginPath": "/Users/akilan/Documents/p2p-rendering-computation/plugin/deploy",
"TrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/trackcontainers.json",
"ServerPort": "8088",
"ProxyPort": "",
"GroupTrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/grouptrackcontainers.json",
"FRPServerPort": "True",
"BehindNAT": "True",
"FRPServerPort": true,
"BehindNAT": true,
"IPTableKey": "QH3yQrGRe2X4",
"PublicKeyFile": "/Users/akilan/Documents/p2p-rendering-computation/p2prc.publicKey",
"PrivateKeyFile": "/Users/akilan/Documents/p2p-rendering-computation/p2prc.privateKey",
"PemFile": "/Users/akilan/Documents/p2p-rendering-computation/cert.pem",
"KeyFile": "/Users/akilan/Documents/p2p-rendering-computation/key.pem",
"BareMetal": false,
"UnsafeMode": false,
"Test": false,
"CustomConfig": null
}
#+end_src
@@ -783,10 +793,48 @@ func main() {
}
}
#+end_src
* Simulation
The simulation library is a really simple library to locally
run serveral instances of P2PRC to test the functionality
of sending information through the network and particularly
the Node discovery mechanism. There are current 5 commands
which can be used as shown below:
** Command
- ***P2PRC instances "number of instances"*** : Starts p2prc processes
based on the number of number instances provided. This includes
creating temporary folders with independent IPTables.
- ***Start all instances "number of instances"***: Starts the P2PRC instances
created. This function enters into the instance directory and runs
```p2prc -s &``` with a delay for approximately 3 seconds. This allows
each independent created node to learn about each other.
- ***IP Tables after Started number of instances"***: Prints the IPTable of
each independant node.
- ***Remove all test files***: Removes all test files created which needed for
testing the generated P2PRC instances.
- ***Kill all instances***: Kills all the background P2PRC instances created.
** Sample bash instructions
#+begin_src bash
# Unset default P2PRC env path
unset P2PRC
# Run with 2 nodes
P2PRC_instances 3
# Start instances
Start_all_instances 3
# List ip tables of nodes started
IP_Tables_after_Started 3
# Remove test files created
Remove_all_test_files
# Kill all instances
Kill_all_instances
#+end_src
Source code: https://github.com/Akilan1999/p2p-rendering-computation/blob/master/Simulation/simulation.sh
* Blog posts
** Self host within 5 minutes any program