78 Commits

Author SHA1 Message Date
ac2c5f8a83 test changes 2025-06-02 18:25:05 +01:00
22c5d61082 finished mvp for nix templating 2025-06-02 00:43:50 +01:00
a1bf13cac3 finishing automated setup 2025-06-02 00:37:28 +01:00
616bf76bda finishing automated setup 2025-06-02 00:31:29 +01:00
539bceee7d finishing automated setup 2025-06-02 00:31:04 +01:00
69b9ea3527 finishing automated setup 2025-06-02 00:11:59 +01:00
27f4615cd1 finishing automated setup 2025-06-02 00:07:53 +01:00
01e19d9a8c adding git actions 2025-06-02 00:03:24 +01:00
aafc0ebdd7 adding git actions 2025-06-01 23:54:25 +01:00
9de0b1b985 adding git actions 2025-06-01 23:52:00 +01:00
4c12d74789 adding git actions 2025-06-01 23:50:41 +01:00
f06df58a8a adding git actions 2025-06-01 23:47:11 +01:00
30004d59c6 adding git actions 2025-06-01 23:44:57 +01:00
4c8cde8857 adding git actions 2025-06-01 23:34:01 +01:00
994c52faf0 adding git actions 2025-06-01 23:25:41 +01:00
5e65381377 adding git actions 2025-06-01 20:57:38 +01:00
ff66d55153 adding git actions 2025-06-01 20:54:38 +01:00
50983dbb19 adding git actions 2025-06-01 20:50:49 +01:00
189edd73b1 adding git actions 2025-06-01 20:48:59 +01:00
27670f2408 adding git actions 2025-06-01 19:55:00 +01:00
b301a54fba adding git actions 2025-06-01 19:53:33 +01:00
05e29aab0d adding git actions 2025-06-01 19:47:17 +01:00
b883feb825 adding git actions 2025-06-01 19:44:43 +01:00
5059444d26 adding git actions 2025-06-01 19:42:23 +01:00
be3be96987 adding git actions 2025-06-01 19:39:32 +01:00
682424074f adding git actions 2025-06-01 19:36:41 +01:00
9d0ec3eba4 adding git actions 2025-06-01 19:34:32 +01:00
bf87217b9a adding git actions 2025-06-01 19:27:52 +01:00
e4638232d3 adding git actions 2025-06-01 19:24:56 +01:00
fb6c3ab091 adding new version for p2prc-hs bootstrapping 2025-06-01 15:12:16 +01:00
a59657a93b removing wasm file 2025-05-31 15:18:27 +01:00
30ea1f810a Merge remote-tracking branch 'refs/remotes/principal/master' 2025-05-31 11:11:00 +01:00
fe72625266 removed erroneous commands 2025-05-31 10:44:10 +01:00
d2030b7d74 updating lock versions 2025-05-31 00:17:59 +01:00
73a283a545 another attempt to test bootstrapping 2025-05-31 00:07:50 +01:00
623cfffb6a another attempt to test bootstrapping 2025-05-31 00:05:04 +01:00
3669fdfad2 adding initHaskellProject to bootstrap project 2025-05-30 23:56:03 +01:00
f39fab04ce adding initHaskellProject to bootstrap project 2025-05-30 23:41:34 +01:00
12ff0ceb37 adding initHaskellProject to bootstrap project 2025-05-30 23:36:27 +01:00
99c62a8dca adding initHaskellProject to bootstrap project 2025-05-30 23:32:49 +01:00
ce5c80a10e adding initHaskellProject to bootstrap project 2025-05-30 23:31:40 +01:00
46ef4e1db9 adding initHaskellProject to bootstrap project 2025-05-30 23:29:28 +01:00
14743f7f9b adding initHaskellProject to bootstrap project 2025-05-30 23:27:10 +01:00
a461c2da64 adding initHaskellProject to bootstrap project 2025-05-30 23:02:06 +01:00
99c9c41528 Documentation for Simulation added 2025-05-30 18:06:32 +01:00
0e260cf8e4 Made simulation simple 2025-05-30 17:10:54 +01:00
02e58493f5 added working version of simulator 2025-05-30 17:09:36 +01:00
a46ec3575c Simulation base code 2025-05-30 16:23:39 +01:00
2d55643dd9 removed heavy WASM binary 2025-05-30 11:59:32 +01:00
1ac0647d46 refactoring nix flake template 2025-05-30 00:04:43 +01:00
a07a412c72 temporary fix to test remote flake init 2025-05-29 23:52:14 +01:00
e04e918328 fixed haskell template 2025-05-29 23:36:11 +01:00
0bb949a1e2 fixed overlay and templates 2025-05-29 23:34:08 +01:00
cf6611087a adding haskell template providing dev/prod environments 2025-05-29 23:29:55 +01:00
b1a69189d3 adding haskell template providing dev/prod environments 2025-05-29 23:20:21 +01:00
ad76773111 adding haskell template providing dev/prod environments 2025-05-29 23:13:11 +01:00
ec46f74c4e adding haskell template providing dev/prod environments 2025-05-29 23:10:12 +01:00
3fb225676f fixed devshell environment 2025-05-29 00:23:42 +01:00
0e86459122 fixed p2prc-hs issue 2025-05-28 22:25:09 +01:00
77ebb76838 updating flake 2025-05-28 00:04:49 +01:00
85806ab035 refactoring flake code 2025-05-27 23:49:08 +01:00
9d92ecb202 working on template for haskell 2025-05-27 23:22:47 +01:00
5fa625160e improving overlays 2025-05-26 21:26:40 +01:00
403ad72ddb fixing environment 2025-05-26 21:08:11 +01:00
6446681719 renaming overlay file 2025-05-26 01:16:03 +01:00
d50534e270 improving executable exposure 2025-05-26 01:06:42 +01:00
8a2dfb7b5b fixed haskell development environment 2025-05-26 00:15:36 +01:00
0f4f52cb8b working on haskell development shell 2025-05-26 00:06:11 +01:00
cd8bb2df8c removed redundant code from flake 2025-05-25 23:45:44 +01:00
fa5b7a27d5 fixed overlays typo 2025-05-25 23:17:03 +01:00
21f0fc79c1 removed executable from haskell project 2025-05-25 22:07:26 +01:00
bebe2a02a0 improving nix flake for haskell library bootstrapping 2025-05-25 19:09:41 +01:00
7b0b2404b2 improving overlay 2025-05-24 17:59:16 +01:00
724daf5eda preparing overlays for build system 2025-05-24 16:58:08 +01:00
c262e612e1 preparing overlays for build system 2025-05-24 16:53:01 +01:00
257d91a432 fixing nix development and build environments 2025-05-21 23:11:56 +01:00
42cf9bd028 fixing nix env 2025-05-20 23:51:33 +01:00
7c34c5385a fix abstraction 2025-05-17 23:30:58 +01:00
22 changed files with 1027 additions and 406 deletions

View File

@@ -18,23 +18,41 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gomod2nix": { "gomod2nix": {
"inputs": { "inputs": {
"flake-utils": [ "flake-utils": [
"p2prc", "p2prc-main",
"flake-utils" "flake-utils"
], ],
"nixpkgs": [ "nixpkgs": [
"p2prc", "p2prc-main",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1733668782, "lastModified": 1745875161,
"narHash": "sha256-tPsqU00FhgdFr0JiQUiBMgPVbl1jbPCY5gbFiJycL3I=", "narHash": "sha256-0YkWCS13jpoo3+sX/3kcgdxBNt1VZTmvF+FhZb4rFKI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "gomod2nix", "repo": "gomod2nix",
"rev": "514283ec89c39ad0079ff2f3b1437404e4cba608", "rev": "2cbd7fdd6eeab65c494cc426e18f4e4d2a5e35c0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -57,11 +75,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1735834308, "lastModified": 1748026106,
"narHash": "sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk=", "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6df24922a1400241dae323af55f30e4318a6ca65", "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -71,28 +89,28 @@
"type": "github" "type": "github"
} }
}, },
"p2prc": { "p2prc-main": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils_2",
"gomod2nix": "gomod2nix", "gomod2nix": "gomod2nix",
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 0, "lastModified": 0,
"narHash": "sha256-f4e4JcQzBS+R+8HqJbQVeecInm2ggInJuSSymj6gtQo=", "narHash": "sha256-5qbaxawuLsg8iu9076zlAbLtTFSNJaTz7WERS5rWRxU=",
"path": "/nix/store/hmk8v0lxifsscll054qsdnzxqfql1998-source", "path": "/nix/store/lg694r23fzc6v5ai3qqcszq1fp44djg2-source",
"type": "path" "type": "path"
}, },
"original": { "original": {
"path": "/nix/store/hmk8v0lxifsscll054qsdnzxqfql1998-source", "path": "/nix/store/lg694r23fzc6v5ai3qqcszq1fp44djg2-source",
"type": "path" "type": "path"
} }
}, },
"root": { "root": {
"inputs": { "inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"p2prc": "p2prc", "p2prc-main": "p2prc-main"
"utils": "utils"
} }
}, },
"systems": { "systems": {
@@ -124,24 +142,6 @@
"repo": "default", "repo": "default",
"type": "github" "type": "github"
} }
},
"utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

View File

@@ -1,22 +1,26 @@
{ {
description = "Nix flake for P2PRC Haskell library"; description = "Nix flake for P2PRC Haskell library";
inputs = { inputs = {
p2prc.url = "../../"; flake-utils.url = "github:numtide/flake-utils";
utils.url = "github:numtide/flake-utils"; p2prc-main.url = "../../";
}; };
outputs = { self, nixpkgs, utils, p2prc }: utils.lib.eachDefaultSystem (system: outputs = { nixpkgs, flake-utils, p2prc-main, ... }:
flake-utils.lib.eachDefaultSystem (system:
let let
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
in in
{ {
packages.default = pkgs.haskellPackages.callPackage ./project.nix {};
devShell = pkgs.mkShell { devShell = pkgs.mkShell {
buildInputs = with pkgs; [ buildInputs = with pkgs; [
cabal2nix
cabal-install cabal-install
haskell.compiler.ghc96 ghc
zlib.dev zlib.dev
p2prc.outputs.packages.${system}.default p2prc-main.packages.${system}.default
]; ];
}; };
} }

View File

@@ -116,5 +116,5 @@ eitherErrorDecode esa =
-- assumes the program is ran inside the haskell module in p2prc's repo -- assumes the program is ran inside the haskell module in p2prc's repo
-- assumes that last path segment is "haskell" and that p2prc binary's name is "p2p-rendering-computation" -- assumes that last path segment is "haskell" and that p2prc binary's name is "p2p-rendering-computation"
p2prcCmdName :: String p2prcCmdName :: String
p2prcCmdName = "p2prc" p2prcCmdName = "p2p-rendering-computation"

View File

@@ -0,0 +1,13 @@
{ mkDerivation, aeson, base, bytestring, directory, lib, process
, text
}:
mkDerivation {
pname = "p2prc";
version = "0.1.0.0";
src = ./.;
libraryHaskellDepends = [
aeson base bytestring directory process text
];
description = "P2PRC haskell library";
license = "unknown";
}

View File

@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <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 http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>&lrm;</title> <title>&lrm;</title>
@@ -26,12 +26,12 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc"> <div id="text-table-of-contents" role="doc-toc">
<ul> <ul>
<li><a href="#org3cfeea9">1. Guide through video</a> <li><a href="#orga8d6384">1. Guide through video</a>
<ul> <ul>
<li> <li>
<ul> <ul>
<li><a href="#org4256417">1.0.1. The video below shows the setup and usage of P2PRC.</a></li> <li><a href="#org1df53fe">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="#orgd08f572">1.0.2. Source code: https://github.com/Akilan1999/p2p-rendering-computation</a></li>
</ul> </ul>
</li> </li>
</ul> </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="#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="#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="#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="#org966244c">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="#org2f19c06">4.0.21. Add root node</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@@ -109,8 +109,8 @@
</li> </li>
<li><a href="#current-languages-supported">6.3. Current languages supported</a> <li><a href="#current-languages-supported">6.3. Current languages supported</a>
<ul> <ul>
<li><a href="#org92a1e8c">6.3.1. Python</a></li> <li><a href="#orgf65d6f6">6.3.1. Python</a></li>
<li><a href="#org780e43b">6.3.2. Haskell</a></li> <li><a href="#org40fe543">6.3.2. Haskell</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@@ -127,22 +127,28 @@
</ul> </ul>
</li> </li>
<li><a href="#client-mode">10. Client mode</a></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> <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> <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> </ul>
</li> </li>
</ul> </ul>
</li> </li>
<li><a href="#orgb32e475">12. Ideas for future potencial features</a> <li><a href="#orgf31160d">13. Ideas for future potencial features</a>
<ul> <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> <ul>
<li><a href="#org332fcc8">12.1.1. Assumptions:</a></li> <li><a href="#org5d2c045">13.1.1. Assumptions:</a></li>
<li><a href="#org21a29ac">12.1.2. Set of interesting possible:</a></li> <li><a href="#orgb55e814">13.1.2. Set of interesting possible:</a></li>
<li><a href="#org4947494">12.1.3. Implementation</a></li> <li><a href="#org7855189">13.1.3. Implementation</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@@ -151,26 +157,26 @@
</div> </div>
</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><img src="./Colored-On-Light-Image.png" alt="Colored-On-Light-Image.png" width="300px" />
</p> </p>
</div> </div>
<div id="outline-container-org3cfeea9" class="outline-2"> <div id="outline-container-orga8d6384" class="outline-2">
<h2 id="org3cfeea9"><span class="section-number-2">1.</span> Guide through video</h2> <h2 id="orga8d6384"><span class="section-number-2">1.</span> Guide through video</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
</div> </div>
<div id="outline-container-org4256417" class="outline-4"> <div id="outline-container-org1df53fe" 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> <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 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><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> </p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgecee0c3" class="outline-4"> <div id="outline-container-orgd08f572" 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> <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> </div>
<div id="outline-container-chapter1-introduction" class="outline-2"> <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> to install docker GPU</a>
</p> </p>
<pre class="example" id="orgfc326ea"> <pre class="example" id="orge229820">
// Do ensure that the docker command does not need sudo to run // Do ensure that the docker command does not need sudo to run
sudo chmod 666 /var/run/docker.sock sudo chmod 666 /var/run/docker.sock
</pre> </pre>
@@ -273,7 +279,7 @@ To set up the internal dependencies and build the entire go code into a
single binary single binary
</p> </p>
<pre class="example" id="org9abf859"> <pre class="example" id="orge6efab3">
make make
</pre> </pre>
</div> </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> are not in admin mode when running this.</b>
</p> </p>
<pre class="example" id="org754bc46"> <pre class="example" id="org503a4ba">
.\install.bat .\install.bat
</pre> </pre>
</div> </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"> <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> <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"> <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 P2PRC=/&lt;PATH&gt;/p2p-rendering-computation
export PATH=/&lt;PATH&gt;/p2p-rendering-computation:${PATH} export PATH=/&lt;PATH&gt;/p2p-rendering-computation:${PATH}
</pre> </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"> <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> <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"> <div class="outline-text-4" id="text-test-if-binary-works">
<pre class="example" id="org189a0e9"> <pre class="example" id="org842f745">
p2prc --help p2prc --help
</pre> </pre>
</div> </div>
<ol class="org-ol"> <ol class="org-ol">
<li><a id="output"></a>Output:<br /> <li><a id="output"></a>Output:<br />
<div class="outline-text-5" id="text-output"> <div class="outline-text-5" id="text-output">
<pre class="example" id="org705fb25"> <pre class="example" id="org2d62e91">
NAME: NAME:
p2p-rendering-computation - p2p cli application to create and access VMs in other servers 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"> <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> <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"> <div class="outline-text-4" id="text-start-as-a-server">
<pre class="example" id="org1be9ce7"> <pre class="example" id="org41f3e1c">
p2prc -s p2prc -s
</pre> </pre>
</div> </div>
@@ -381,7 +387,7 @@ p2prc -s
<div id="outline-container-view-server-specification" class="outline-4"> <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> <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"> <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; p2prc --specs=&lt;ip address&gt;
</pre> </pre>
</div> </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. use the <code>--gpu</code> if you know the other machine has a gpu.
</p> </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 p2prc --touch=&lt;server ip address&gt; -p &lt;number of ports&gt; --gpu
</pre> </pre>
</div> </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 The docker id is present in the output where you create a container
</p> </p>
<pre class="example" id="org3a50a5b"> <pre class="example" id="org9aca1f2">
p2prc --rm=&lt;server ip address&gt; --id=&lt;docker container id&gt; p2prc --rm=&lt;server ip address&gt; --id=&lt;docker container id&gt;
</pre> </pre>
</div> </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"> <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> <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"> <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; p2prc --as=&lt;server ip address you want to add&gt;
</pre> </pre>
</div> </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"> <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> <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"> <div class="outline-text-4" id="text-update-ip-table">
<pre class="example" id="org2b52762"> <pre class="example" id="org26ead4a">
p2prc --us p2prc --us
</pre> </pre>
</div> </div>
@@ -429,7 +435,7 @@ p2prc --us
<div id="outline-container-list-servers" class="outline-4"> <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> <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"> <div class="outline-text-4" id="text-list-servers">
<pre class="example" id="org9a40c4a"> <pre class="example" id="orgc098d33">
p2prc --ls p2prc --ls
</pre> </pre>
</div> </div>
@@ -437,7 +443,7 @@ p2prc --ls
<div id="outline-container-view-network-interfaces" class="outline-4"> <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> <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"> <div class="outline-text-4" id="text-view-network-interfaces">
<pre class="example" id="orge766dd3"> <pre class="example" id="org68a2716">
p2prc --ni p2prc --ni
</pre> </pre>
</div> </div>
@@ -445,7 +451,7 @@ p2prc --ni
<div id="outline-container-viewing-containers-created-client-side" class="outline-4"> <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> <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"> <div class="outline-text-4" id="text-viewing-containers-created-client-side">
<pre class="example" id="org9787c64"> <pre class="example" id="orgc3b9a5e">
p2prc --tc p2prc --tc
</pre> </pre>
</div> </div>
@@ -453,7 +459,7 @@ p2prc --tc
<div id="outline-container-running-plugin" class="outline-4"> <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> <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"> <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; p2prc --plugin &lt;plugin name&gt; --id &lt;container id or group id&gt;
</pre> </pre>
</div> </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"> <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> <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"> <div class="outline-text-4" id="text-create-group">
<pre class="example" id="orge008a6c"> <pre class="example" id="org3dc07ae">
p2prc --cgroup p2prc --cgroup
</pre> </pre>
</div> </div>
@@ -469,7 +475,7 @@ p2prc --cgroup
<div id="outline-container-add-container-to-group" class="outline-4"> <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> <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"> <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; p2prc --group &lt;group id&gt; --id &lt;container id&gt;
</pre> </pre>
</div> </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"> <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> <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"> <div class="outline-text-4" id="text-view-groups">
<pre class="example" id="org5425a07"> <pre class="example" id="org147a736">
p2prc --groups p2prc --groups
</pre> </pre>
</div> </div>
@@ -485,7 +491,7 @@ p2prc --groups
<div id="outline-container-view-specific-group" class="outline-4"> <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> <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"> <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; p2prc --group &lt;group id&gt;
</pre> </pre>
</div> </div>
@@ -493,7 +499,7 @@ p2prc --group &lt;group id&gt;
<div id="outline-container-delete-container-from-group" class="outline-4"> <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> <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"> <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; p2prc --rmcgroup --group &lt;group id&gt; --id &lt;container id&gt;
</pre> </pre>
</div> </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"> <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> <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"> <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; p2prc --rmgroup &lt;group id&gt;
</pre> </pre>
</div> </div>
@@ -509,7 +515,7 @@ p2prc --rmgroup &lt;group id&gt;
<div id="outline-container-pulling-plugin-from-a-remote-repo" class="outline-4"> <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> <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"> <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; p2prc --pp &lt;repo link&gt;
</pre> </pre>
</div> </div>
@@ -517,7 +523,7 @@ p2prc --pp &lt;repo link&gt;
<div id="outline-container-deleting-plugin-from-the-plugin-directory" class="outline-4"> <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> <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"> <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; p2prc --rp &lt;plugin name&gt;
</pre> </pre>
</div> </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"> <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> <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"> <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" p2prc --amd "custom metadata"
</pre> </pre>
</div> </div>
</div> </div>
<div id="outline-container-org899f210" class="outline-4"> <div id="outline-container-org966244c" class="outline-4">
<h4 id="org899f210"><span class="section-number-4">4.0.20.</span> MapPort and link to domain name</h4> <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"> <div class="outline-text-4" id="text-4-0-20">
<p> <p>
Allows to expose remote ports from a machine in the P2P network. Allows to expose remote ports from a machine in the P2P network.
</p> </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; p2prc --mp &lt;port no to map&gt; --dn &lt;domain name to link Mapped port against&gt;
</pre> </pre>
</div> </div>
<ol class="org-ol"> <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"> <div class="outline-text-5" id="text-4-0-20-1">
<p> <p>
This is to ensure ports on remote machines on the P2PRC can be easily opened. This is to ensure ports on remote machines on the P2PRC can be easily opened.
</p> </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; 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> </pre>
@@ -555,15 +561,15 @@ p2prc --mp &lt;port no to map&gt; --dn &lt;domain name to link Mapped port again
</li> </li>
</ol> </ol>
</div> </div>
<div id="outline-container-orge681470" class="outline-4"> <div id="outline-container-org2f19c06" class="outline-4">
<h4 id="orge681470"><span class="section-number-4">4.0.21.</span> Add root node</h4> <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"> <div class="outline-text-4" id="text-4-0-21">
<p> <p>
Adds a root node to P2RRC and overwrites all other nodes in the ip table. 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 To be only added before the network is started and with
the intention of a fresh instance. the intention of a fresh instance.
</p> </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; p2prc --arn --ip &lt;root node ip address&gt; -p &lt;root node port no&gt;
</pre> </pre>
</div> </div>
@@ -674,7 +680,7 @@ from the TURN server. The flow below describes the workflow.
<li>Call <code>/FRPPort</code></li> <li>Call <code>/FRPPort</code></li>
</ul> </ul>
<pre class="example" id="org90a2001"> <pre class="example" id="org2bea991">
http://&lt;turn server ip&gt;:&lt;server port no&gt;/FRPport http://&lt;turn server ip&gt;:&lt;server port no&gt;/FRPport
</pre> </pre>
@@ -763,7 +769,7 @@ p2prc.h p2prc.so
Below are a sample set of commands to open the bindings implementation. Below are a sample set of commands to open the bindings implementation.
</p> </p>
<pre class="example" id="orgb8690e2"> <pre class="example" id="orgdd81071">
# run # run
cd Bindings/ cd Bindings/
# list files # list files
@@ -851,7 +857,7 @@ that convert a go object to JSON string initially and converts it to
</li> </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 /> <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"> <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) { func &lt;Function name&gt; (output *C.char) {
&lt;response&gt;,&lt;error&gt; := &lt;P2PRC function name&gt;(&lt;parameters if needed&gt;) &lt;response&gt;,&lt;error&gt; := &lt;P2PRC function name&gt;(&lt;parameters if needed&gt;)
if &lt;error&gt; != nil { 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> <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 class="outline-text-3" id="text-current-languages-supported">
</div> </div>
<div id="outline-container-org92a1e8c" class="outline-4"> <div id="outline-container-orgf65d6f6" class="outline-4">
<h4 id="org92a1e8c"><span class="section-number-4">6.3.1.</span> Python</h4> <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 class="outline-text-4" id="text-6-3-1">
</div> </div>
<ol class="org-ol"> <ol class="org-ol">
@@ -907,8 +913,8 @@ called from other programming languages.
</li> </li>
</ol> </ol>
</div> </div>
<div id="outline-container-org780e43b" class="outline-4"> <div id="outline-container-org40fe543" class="outline-4">
<h4 id="org780e43b"><span class="section-number-4">6.3.2.</span> Haskell</h4> <h4 id="org40fe543"><span class="section-number-4">6.3.2.</span> Haskell</h4>
<div class="outline-text-4" id="text-6-3-2"> <div class="outline-text-4" id="text-6-3-2">
<p> <p>
P2PRC officially supports Haskell bindings and will further support 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"> <div class="org-src-container">
<pre class="src src-json">{ <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", "IPTable": "/Users/akilan/Documents/p2p-rendering-computation/p2p/iptable/ip_table.json",
"DockerContainers": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/", "DockerContainers": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/",
"DefaultDockerFile": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/docker-ubuntu-sshd/", "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", "SpeedTestFile": "/Users/akilan/Documents/p2p-rendering-computation/p2p/50.bin",
"IPV6Address": "", "IPV6Address": "",
"PluginPath": "/Users/akilan/Documents/p2p-rendering-computation/plugin/deploy", "PluginPath": "/Users/akilan/Documents/p2p-rendering-computation/plugin/deploy",
"TrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/trackcontainers.json", "TrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/trackcontainers.json",
"ServerPort": "8088", "ServerPort": "8088",
"ProxyPort": "",
"GroupTrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/grouptrackcontainers.json", "GroupTrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/grouptrackcontainers.json",
"FRPServerPort": "True", "FRPServerPort": true,
"BehindNAT": "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 "CustomConfig": null
} }
</pre> </pre>
@@ -1020,7 +1036,7 @@ from the TURN server. The flow below describes the workflow.
<li>Call <code>/FRPPort</code></li> <li>Call <code>/FRPPort</code></li>
</ul> </ul>
<pre class="example" id="org910dfb2"> <pre class="example" id="org60a83ac">
http://&lt;turn server ip&gt;:&lt;server port no&gt;/FRPport http://&lt;turn server ip&gt;:&lt;server port no&gt;/FRPport
</pre> </pre>
@@ -1051,14 +1067,73 @@ func main() {
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-org1b92827" class="outline-2"> <div id="outline-container-orgfe7fc3c" class="outline-2">
<h2 id="org1b92827"><span class="section-number-2">11.</span> Blog posts</h2> <h2 id="orgfe7fc3c"><span class="section-number-2">11.</span> Simulation</h2>
<div class="outline-text-2" id="text-11"> <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>
<div id="outline-container-orgec8979c" class="outline-3"> <div id="outline-container-org22226ea" class="outline-3">
<h3 id="orgec8979c"><span class="section-number-3">11.1.</span> Self host within 5 minutes any program</h3> <h3 id="org22226ea"><span class="section-number-3">11.1.</span> Command</h3>
<div class="outline-text-3" id="text-11-1"> <div class="outline-text-3" id="text-11-1">
<ul class="org-ul"> <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>Author: <a href="http://akilan.io/">Akilan Selvacoumar</a></li>
<li>Date: 28-01-2025</li> <li>Date: 28-01-2025</li>
</ul> </ul>
@@ -1068,7 +1143,7 @@ func main() {
<li>Video tutorial:</li> <li>Video tutorial:</li>
</ul> </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><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> </p>
</div> </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. quickly do a map port and domain name mapping in a single command.
</p> </p>
</div> </div>
<div id="outline-container-orgd03815a" class="outline-4"> <div id="outline-container-org07ee6bd" class="outline-4">
<h4 id="orgd03815a"><span class="section-number-4">11.1.1.</span> 1. Find a program you want to run</h4> <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-11-1-1"> <div class="outline-text-4" id="text-12-1-1">
<p> <p>
Let's try to setup a really easy program (Let's do with Linkwarden 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 with docker compose :) ). This is under the assumption you have docker
@@ -1088,8 +1163,8 @@ compose installed on your local machine.
</p> </p>
</div> </div>
<ol class="org-ol"> <ol class="org-ol">
<li><a id="orgc05f730"></a>Let's run Linkwarden using docker compose and P2PRC<br /> <li><a id="org2b6a10c"></a>Let's run Linkwarden using docker compose and P2PRC<br />
<div class="outline-text-5" id="text-11-1-1-1"> <div class="outline-text-5" id="text-12-1-1-1">
<p> <p>
<a href="https://docs.linkwarden.app/self-hosting/installation">Installation instructions</a>: <a href="https://docs.linkwarden.app/self-hosting/installation">Installation instructions</a>:
</p> </p>
@@ -1177,17 +1252,17 @@ ex: <a href="https://linkwarden.akilan.io">https://linkwarden.akilan.io</a>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgb32e475" class="outline-2"> <div id="outline-container-orgf31160d" class="outline-2">
<h2 id="orgb32e475"><span class="section-number-2">12.</span> Ideas for future potencial features</h2> <h2 id="orgf31160d"><span class="section-number-2">13.</span> Ideas for future potencial features</h2>
<div class="outline-text-2" id="text-12"> <div class="outline-text-2" id="text-13">
<p> <p>
Consists of personal loideas for the future of P2PRC. Consists of personal loideas for the future of P2PRC.
At moment only has main contributors writiing to this. At moment only has main contributors writiing to this.
</p> </p>
</div> </div>
<div id="outline-container-org2666d00" class="outline-3"> <div id="outline-container-org1a8a88e" 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> <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-12-1"> <div class="outline-text-3" id="text-13-1">
<p> <p>
This stems from a personal issue I have when doing research 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 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. network nodes.
</p> </p>
</div> </div>
<div id="outline-container-org332fcc8" class="outline-4"> <div id="outline-container-org5d2c045" class="outline-4">
<h4 id="org332fcc8"><span class="section-number-4">12.1.1.</span> Assumptions:</h4> <h4 id="org5d2c045"><span class="section-number-4">13.1.1.</span> Assumptions:</h4>
<div class="outline-text-4" id="text-12-1-1"> <div class="outline-text-4" id="text-13-1-1">
<ul class="org-ul"> <ul class="org-ul">
<li>I have a Morello board that cannot run P2PRC</li> <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> <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> </ul>
</div> </div>
</div> </div>
<div id="outline-container-org21a29ac" class="outline-4"> <div id="outline-container-orgb55e814" class="outline-4">
<h4 id="org21a29ac"><span class="section-number-4">12.1.2.</span> Set of interesting possible:</h4> <h4 id="orgb55e814"><span class="section-number-4">13.1.2.</span> Set of interesting possible:</h4>
<div class="outline-text-4" id="text-12-1-2"> <div class="outline-text-4" id="text-13-1-2">
<p> <p>
We build a cool set possibilities before and use this to build up the implementation We build a cool set possibilities before and use this to build up the implementation
plan. plan.
@@ -1234,9 +1309,9 @@ weight hypervisors.</li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-org4947494" class="outline-4"> <div id="outline-container-org7855189" class="outline-4">
<h4 id="org4947494"><span class="section-number-4">12.1.3.</span> Implementation</h4> <h4 id="org7855189"><span class="section-number-4">13.1.3.</span> Implementation</h4>
<div class="outline-text-4" id="text-12-1-3"> <div class="outline-text-4" id="text-13-1-3">
<ul class="org-ul"> <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 <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> 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> </ul>
<div id="orgf818690" class="figure"> <div id="orgd955246" class="figure">
<p><img src="./images/P2PRCRemoteNodes.png" alt="P2PRCRemoteNodes.png" /> <p><img src="./images/P2PRCRemoteNodes.png" alt="P2PRCRemoteNodes.png" />
</p> </p>
<p><span class="figure-number">Figure 1: </span>Implementation idea (To be improved upon)</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>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Akilan</p> <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> <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div> </div>
</body> </body>

View File

@@ -690,18 +690,28 @@ configuration file was generated using JSON format.
#+begin_src json #+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", "IPTable": "/Users/akilan/Documents/p2p-rendering-computation/p2p/iptable/ip_table.json",
"DockerContainers": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/", "DockerContainers": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/",
"DefaultDockerFile": "/Users/akilan/Documents/p2p-rendering-computation/server/docker/containers/docker-ubuntu-sshd/", "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", "SpeedTestFile": "/Users/akilan/Documents/p2p-rendering-computation/p2p/50.bin",
"IPV6Address": "", "IPV6Address": "",
"PluginPath": "/Users/akilan/Documents/p2p-rendering-computation/plugin/deploy", "PluginPath": "/Users/akilan/Documents/p2p-rendering-computation/plugin/deploy",
"TrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/trackcontainers.json", "TrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/trackcontainers.json",
"ServerPort": "8088", "ServerPort": "8088",
"ProxyPort": "",
"GroupTrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/grouptrackcontainers.json", "GroupTrackContainersPath": "/Users/akilan/Documents/p2p-rendering-computation/client/trackcontainers/grouptrackcontainers.json",
"FRPServerPort": "True", "FRPServerPort": true,
"BehindNAT": "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 "CustomConfig": null
} }
#+end_src #+end_src
@@ -783,10 +793,48 @@ func main() {
} }
} }
#+end_src #+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 * Blog posts
** Self host within 5 minutes any program ** Self host within 5 minutes any program

114
Simulation/simulation.sh Normal file
View File

@@ -0,0 +1,114 @@
# Unset P2PRC
unset P2PRC
# Create P2PRC instances
# Parameters:
# 1. Number of nodes
P2PRC_instances() {
local rootPort=""
for (( counter=0; counter<$1; counter++ )); do
mkdir test-$counter/
cd test-$counter/
# Generate a new random port
NEW_PORT=$(shuf -i 2000-65000 -n 1)
# Initialize node
p2prc --dc
# Save rootPort from the first node
if [[ $counter -eq 0 ]]; then
rootPort=$NEW_PORT
fi
echo "Root port: $rootPort"
echo "This node's port: $NEW_PORT"
# Set root port
p2prc --arn --ip 0.0.0.0 -p "$rootPort"
# add current node
p2prc --as 0.0.0.0 -p "$NEW_PORT"
# Replace the ServerPort in config
sed -i.bak "s/\"ServerPort\": \"[0-9]*\"/\"ServerPort\": \"$NEW_PORT\"/" "./config.json"
sed -i.bak "s/\"Test\": false/\"Test\": true/" "./config.json"
sed -i.bak "s/\"BehindNAT\": true/\"BehindNAT\": false/" "./config.json"
cat config.json
# List services
p2prc --ls
cd ..
done
# remove all instances after testing (optional — might want to comment this during testing)
# rm -rf test-*
}
# Arrays of process IDs
pids=()
# Calls all the P2PRC instances created for testing
Start_all_instances() {
for (( counter=0; counter<$1; counter++ )); do
cd test-$counter/
# Start P2PRC as background process
p2prc -s &
pids+=($!)
sleep 3
cd ..
done
}
# Kills all P2PRC instances
Kill_all_instances() {
for pid in "${pids[@]}"; do
kill "$pid"
echo "Killed process $pid"
done
}
# Removes all test files created
Remove_all_test_files() {
rm -rf test-*
}
# List ip tables of all nodes started
IP_Tables_after_Started() {
for (( counter=0; counter<$1; counter++ )); do
cd test-$counter/
p2prc --ls
cd ..
done
}
Update_All_IP_Tables() {
for (( counter=0; counter<$1; counter++ )); do
cd test-$counter/
p2prc --us
cd ..
done
}
# ---------------- Work flow test ---------------
# 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

View File

@@ -1,6 +1,5 @@
package abstractions package abstractions
import "C"
import ( import (
"github.com/Akilan1999/p2p-rendering-computation/client" "github.com/Akilan1999/p2p-rendering-computation/client"
"github.com/Akilan1999/p2p-rendering-computation/client/clientIPTable" "github.com/Akilan1999/p2p-rendering-computation/client/clientIPTable"

View File

@@ -118,7 +118,7 @@ func UpdateIpTableListClient() error {
Exists := false Exists := false
// If the address is local then add to the local list // If the address is local then add to the local list
if currentIPV4 == Addresses.IpAddress[j].Ipv4 && Addresses.IpAddress[j].ServerPort == Config.ServerPort { if (currentIPV4 == Addresses.IpAddress[j].Ipv4 && !Config.Test) && Addresses.IpAddress[j].ServerPort == Config.ServerPort {
Exists = true Exists = true
} }
@@ -136,11 +136,12 @@ func UpdateIpTableListClient() error {
} }
w.Add(1) w.Add(1)
if Addresses.IpAddress[j].Ipv6 != "" { //if Addresses.IpAddress[j].Ipv6 != "" {
go UpdateIpTable(Addresses.IpAddress[j].Ipv6, Addresses.IpAddress[j].ServerPort, &w) // go UpdateIpTable(Addresses.IpAddress[j].Ipv6, Addresses.IpAddress[j].ServerPort, &w)
} else if Addresses.IpAddress[j].Ipv4 != currentIPV4 { //} else if Addresses.IpAddress[j].Ipv4 != currentIPV4 {
// //go UpdateIpTable(Addresses.IpAddress[j].Ipv4, Addresses.IpAddress[j].ServerPort, &w)
//}
go UpdateIpTable(Addresses.IpAddress[j].Ipv4, Addresses.IpAddress[j].ServerPort, &w) go UpdateIpTable(Addresses.IpAddress[j].Ipv4, Addresses.IpAddress[j].ServerPort, &w)
}
w.Wait() w.Wait()
//Appends server1 IP address to variable DoNotRead //Appends server1 IP address to variable DoNotRead

View File

@@ -38,6 +38,7 @@ type Config struct {
KeyFile string KeyFile string
BareMetal bool BareMetal bool
UnsafeMode bool UnsafeMode bool
Test bool
CustomConfig interface{} CustomConfig interface{}
//NetworkInterface string //NetworkInterface string
//NetworkInterfaceIPV6Index int //NetworkInterfaceIPV6Index int

View File

@@ -95,6 +95,7 @@ func SetDefaults(envName string, forceDefault bool, CustomConfig interface{}, No
Defaults.PrivateKeyFile = defaultPath + "p2prc.privateKey" Defaults.PrivateKeyFile = defaultPath + "p2prc.privateKey"
Defaults.BareMetal = false Defaults.BareMetal = false
Defaults.UnsafeMode = false Defaults.UnsafeMode = false
Defaults.Test = false
// Generate certificate files for SSL // Generate certificate files for SSL
err = GenerateCertificate() err = GenerateCertificate()

View File

@@ -16,7 +16,6 @@ import (
"crypto/x509" "crypto/x509"
"crypto/x509/pkix" "crypto/x509/pkix"
"encoding/pem" "encoding/pem"
"github.com/Akilan1999/p2p-rendering-computation/p2p"
"log" "log"
"math/big" "math/big"
"net" "net"
@@ -54,7 +53,8 @@ func GenerateCertificate() error {
//flag.Parse() //flag.Parse()
host, err = p2p.CurrentPublicIP() //host, err = p2p.CurrentPublicIP()
host = "0.0.0.0"
if err != nil { if err != nil {
return err return err

12
flake.lock generated
View File

@@ -28,11 +28,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1733668782, "lastModified": 1745875161,
"narHash": "sha256-tPsqU00FhgdFr0JiQUiBMgPVbl1jbPCY5gbFiJycL3I=", "narHash": "sha256-0YkWCS13jpoo3+sX/3kcgdxBNt1VZTmvF+FhZb4rFKI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "gomod2nix", "repo": "gomod2nix",
"rev": "514283ec89c39ad0079ff2f3b1437404e4cba608", "rev": "2cbd7fdd6eeab65c494cc426e18f4e4d2a5e35c0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -43,11 +43,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1735834308, "lastModified": 1748460289,
"narHash": "sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk=", "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6df24922a1400241dae323af55f30e4318a6ca65", "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102",
"type": "github" "type": "github"
}, },
"original": { "original": {

140
flake.nix
View File

@@ -1,30 +1,58 @@
{ {
description = "P2PRC nix flake"; description = "P2PRC nix flake";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; inputs = {
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.gomod2nix.url = "github:nix-community/gomod2nix";
inputs.gomod2nix.inputs.nixpkgs.follows = "nixpkgs";
inputs.gomod2nix.inputs.flake-utils.follows = "flake-utils";
outputs = { self, nixpkgs, flake-utils, gomod2nix }: nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
(flake-utils.lib.eachDefaultSystem
(system: flake-utils = {
let url = "github:numtide/flake-utils";
pkgs = import nixpkgs {
inherit system;
overlays = [ gomod2nix.overlays.default ];
}; };
# pkgs = nixpkgs.legacyPackages.${system}; gomod2nix = {
url = "github:nix-community/gomod2nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
};
outputs =
{
nixpkgs,
flake-utils,
gomod2nix,
...
}:
let
bindingsOverlay = import ./nix/overlays/bindings.nix;
coreOverlay = (final: prev: {
p2prc = final.callPackage ./. { };
});
in
(flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [
gomod2nix.overlays.default
coreOverlay
bindingsOverlay
];
};
# The current default sdk for macOS fails to compile go projects, so we use a newer one for now. # The current default sdk for macOS fails to compile go projects, so we use a newer one for now.
# This has no effect on other platforms. # This has no effect on other platforms.
callPackage = pkgs.darwin.apple_sdk_11_0.callPackage or pkgs.callPackage; callPackage = pkgs.darwin.apple_sdk_11_0.callPackage or pkgs.callPackage;
p2prcDefault = callPackage ./. { };
in in
{ {
packages.default = p2prcDefault;
packages.default = callPackage ./. { };
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [ buildInputs = with pkgs; [
@@ -36,6 +64,84 @@
sqlite-interactive sqlite-interactive
]; ];
}; };
})
); packages.initHaskellProject = pkgs.writeShellApplication {
name = "initHaskellProject";
runtimeInputs = with pkgs; [
ghc
cabal2nix
cabal-install
git
p2prcDefault
];
text =
let
# TODO: add the content for the main file
# p2prcMainContent = availablePort: availableUrl:
# ''
# module Main where
#
# import P2PRC
# ( runP2PRC
# , MapPortRequest(MkMapPortRequest)
# )
#
# main :: IO ()
# main =
# runP2PRC
# ( MkMapPortRequest ${availablePort} "${availableUrl}.akilan.io"
# )
# '';
#
# mainFileContent = p2prcMainContent (builtins.toString 8080) "haskell";
in
''
clear
if [ "$#" -eq 0 ]; then
echo "No arguments provided."
echo "Please provide the name of your project"
echo "nix run github:akilan1999/p2p-rendering-computation#initHaskellProject -- <NAME-PROJECT>"
exit 1;
fi
PROJECT_DIR="$1"
mkdir "$PROJECT_DIR"
cd "$PROJECT_DIR"
git init .
clear
cabal init --exe --simple
sed -i 's/base.*$/base, p2prc/' "$PROJECT_DIR".cabal
cabal2nix . > ./cabal.nix;
cabal2nix . --shell > shell.nix
git add .
clear
echo -e "run the following commands to finish nix development and production environment:\n\n"
echo -e "cd $PROJECT_DIR"
echo -e "nix flake init -t github:akilan1999/p2p-rendering-computation#haskell"
echo -e "nix develop"
echo -e "nix run"
'';
};
}
)) //
{
overlays = {
default = coreOverlay;
bindings = bindingsOverlay;
};
templates.haskell = {
path = ./nix/templates/haskell;
description = "Haskell Bindings to p2prc protocol";
};
};
} }

View File

@@ -0,0 +1,7 @@
final: prev: {
haskellPackages = prev.haskellPackages.override {
overrides = hfinal: hprev: {
p2prc = hfinal.callPackage ../../Bindings/Haskell/project.nix { };
};
};
}

190
nix/templates/haskell/flake.lock generated Normal file
View File

@@ -0,0 +1,190 @@
{
"nodes": {
"flake-util": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"id": "flake-utils",
"type": "indirect"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_3"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gomod2nix": {
"inputs": {
"flake-utils": [
"p2prc-flake",
"flake-utils"
],
"nixpkgs": [
"p2prc-flake",
"nixpkgs"
]
},
"locked": {
"lastModified": 1745875161,
"narHash": "sha256-0YkWCS13jpoo3+sX/3kcgdxBNt1VZTmvF+FhZb4rFKI=",
"owner": "nix-community",
"repo": "gomod2nix",
"rev": "2cbd7fdd6eeab65c494cc426e18f4e4d2a5e35c0",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "gomod2nix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1748460289,
"narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1748370509,
"narHash": "sha256-QlL8slIgc16W5UaI3w7xHQEP+Qmv/6vSNTpoZrrSlbk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "4faa5f5321320e49a78ae7848582f684d64783e9",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"p2prc-flake": {
"inputs": {
"flake-utils": "flake-utils_2",
"gomod2nix": "gomod2nix",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1748646470,
"narHash": "sha256-7aZQQ+jHdlxUzFPXzEEYfH1oU3isSZlZnMC7HWUDHCk=",
"owner": "xecarlox94",
"repo": "p2p-rendering-computation",
"rev": "73a283a545d61754a0fe821287541c2cd412bc0e",
"type": "github"
},
"original": {
"owner": "xecarlox94",
"ref": "nix",
"repo": "p2p-rendering-computation",
"type": "github"
}
},
"root": {
"inputs": {
"flake-util": "flake-util",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"p2prc-flake": "p2prc-flake"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View File

@@ -0,0 +1,49 @@
{
description = "Start of Haskell P2PRC flake";
inputs =
{
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-util.url = "github:numtide/flake-utils";
p2prc-flake.url = "github:xecarlox94/p2p-rendering-computation?ref=nix";
};
outputs = { nixpkgs, p2prc-flake, flake-utils, ... }:
(flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [
p2prc-flake.overlays.default
p2prc-flake.overlays.bindings
];
};
in {
packages.default = pkgs.haskellPackages.callPackage ./cabal.nix { };
devShells.default = pkgs.haskellPackages.shellFor {
packages = p: [
(p.callPackage ./cabal.nix { })
];
buildInputs = with pkgs; [
p2prc-flake.packages.${system}.default
ghc
cabal2nix
cabal-install
];
# TODO: add cabal2nix shell command
# cabal2nix . --shell > ./shell.nix
shellHook = ''
cabal2nix . > ./cabal.nix
'';
};
}
));
}

View File

@@ -42,6 +42,8 @@ type IP struct {
Query string Query string
} }
var Test = false
// ReadIpTable Read data from Ip tables from json file // ReadIpTable Read data from Ip tables from json file
func ReadIpTable() (*IpAddresses, error) { func ReadIpTable() (*IpAddresses, error) {
// Get Path from config // Get Path from config
@@ -178,6 +180,16 @@ func (table *IpAddresses) RemoveDuplicates() error {
// CurrentPublicIP Get Current Public IP address // CurrentPublicIP Get Current Public IP address
func CurrentPublicIP() (string, error) { func CurrentPublicIP() (string, error) {
// Get configs
Config, err := config.ConfigInit(nil, nil)
if err != nil {
return "", err
}
// If test mode is on then return local address
if Config.Test {
return "0.0.0.0", nil
}
req, err := http.Get("http://ip-api.com/json/") req, err := http.Get("http://ip-api.com/json/")
if err != nil { if err != nil {
return "", err return "", err

View File

@@ -312,6 +312,7 @@ func Server() (*gin.Engine, error) {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
ProxyIpAddr.ServerPort = config.ServerPort ProxyIpAddr.ServerPort = config.ServerPort
ProxyIpAddr.Name = config.MachineName ProxyIpAddr.Name = config.MachineName
ProxyIpAddr.NAT = false ProxyIpAddr.NAT = false

BIN
wasm/p2prc.wasm Executable file

Binary file not shown.