From 8e2abf891ac828d8e19d100a880f04ac5ad2ed40 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 12:34:59 -0400 Subject: [PATCH 001/134] updated book_collections to work on dev_manual --- heroscript/manual/book_collections.md | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/heroscript/manual/book_collections.md b/heroscript/manual/book_collections.md index a67ab09..764195b 100644 --- a/heroscript/manual/book_collections.md +++ b/heroscript/manual/book_collections.md @@ -1,36 +1,36 @@ ```js !!book.generate name:'manual' title:'ThreeFold Manual' printbook:false foldlevel:1 - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/manual' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/books/manual' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/manual' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/manual' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/dashboard' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/dashboard' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/developers' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/developers' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/farmers' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/farmers' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/system_administrators' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/system_administrators' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/threefold_token' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/threefold_token' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/faq' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/faq' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/about' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/about' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/technology' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/technology' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/manual_legal' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/manual_legal' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/farming' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/farming' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/cloud' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/cloud' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/collaboration' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/collaboration' ``` From b2f68c0cc92b2b887c4fc1064659032f54b7227d Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 15:07:16 -0400 Subject: [PATCH 002/134] test dev --- collections/developers/developers.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 3877320..bc7b80a 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -6,10 +6,10 @@ For complementary information on the technology developed by ThreeFold, refer to

Table of Contents

-- [Javascript Client](./javascript/grid3_javascript_readme.md) - - [Installation](./javascript/grid3_javascript_installation.md) - - [Loading Client](./javascript/grid3_javascript_loadclient.md) - - [Deploy a VM](./javascript/grid3_javascript_vm.md) +- [Javascript Client](./grid3_javascript_readme.md) + - [Installation](grid3_javascript_installation.md) + - [Loading Client](developers/grid3_javascript_loadclient.md) + - [Deploy a VM](developers:grid3_javascript_vm.md) - [Capacity Planning](./javascript/grid3_javascript_capacity_planning.md) - [Deploy Multiple VMs](./javascript/grid3_javascript_vms.md) - [Deploy CapRover](./javascript/grid3_javascript_caprover.md) From dd4fd9bd0cba080c0896b297b01c572890fe7953 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 15:17:42 -0400 Subject: [PATCH 003/134] test dev --- collections/developers/developers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index bc7b80a..d13012a 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -10,8 +10,8 @@ For complementary information on the technology developed by ThreeFold, refer to - [Installation](grid3_javascript_installation.md) - [Loading Client](developers/grid3_javascript_loadclient.md) - [Deploy a VM](developers:grid3_javascript_vm.md) - - [Capacity Planning](./javascript/grid3_javascript_capacity_planning.md) - - [Deploy Multiple VMs](./javascript/grid3_javascript_vms.md) + - [Capacity Planning](manual:grid3_javascript_capacity_planning.md) + - [Deploy Multiple VMs](javascript/grid3_javascript_vms.md) - [Deploy CapRover](./javascript/grid3_javascript_caprover.md) - [Gateways](./javascript/grid3_javascript_vm_gateways.md) - [Deploy a Kubernetes Cluster](./javascript/grid3_javascript_kubernetes.md) From 9a7a8a436617f416a9853eae31e19466cba2ece9 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 15:27:35 -0400 Subject: [PATCH 004/134] test dev --- books/manual/SUMMARY.md | 2 +- collections/developers/developers.md | 4 +++- collections/manual/intro.md | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index 5554720..6c1103b 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -1,7 +1,7 @@ - [Introduction](manual/intro.md) - [Documentation](manual/documentation.md) - [Dashboard](dashboard/dashboard.md) - - [Wallet (Connector)](dashboard/wallet_connector.md) + - [Wallet Connector](dashboard/wallet_connector.md) - [TFGrid](dashboard/tfgrid/tfgrid.md) - [Grid Status](dashboard/tfgrid/grid_status.md) - [Node Statistics](dashboard/tfgrid/node_statistics.md) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index d13012a..7e5082f 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,7 +2,9 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](../../knowledge_base/technology/technology_toc.md) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology/technology_toc.md) section. + +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology:technology_toc.md) section.

Table of Contents

diff --git a/collections/manual/intro.md b/collections/manual/intro.md index fd927d1..110e1de 100644 --- a/collections/manual/intro.md +++ b/collections/manual/intro.md @@ -20,8 +20,8 @@ The *ThreeFold Documentation* section contains all the practical information of The ThreeFold community is very active and its members will be more than happy to discuss and help you get started. * [ThreeFold Forum](https://forum.threefold.io/) -* [ThreeFold (General Telegram Channel)](https://t.me/threefold) -* [ThreeFold (Farmer Telegram Channel)](https://t.me/threefoldfarmers) +* [ThreeFold General Telegram Channel](https://t.me/threefold) +* [ThreeFold Farmer Telegram Channel](https://t.me/threefoldfarmers) * [TFGrid Tester Telegram Channel](https://t.me/threefoldtesting) ## Questions and Feedback From 9f09eba35347d9daab3c3604bcc0359c06e6c522 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 16:22:07 -0400 Subject: [PATCH 005/134] test dev --- collections/developers/developers.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 7e5082f..3596d4c 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,18 +2,16 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology/technology_toc.md) section. - -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology:technology_toc.md) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](knowledge_base:technology_toc) section.

Table of Contents

-- [Javascript Client](./grid3_javascript_readme.md) - - [Installation](grid3_javascript_installation.md) - - [Loading Client](developers/grid3_javascript_loadclient.md) - - [Deploy a VM](developers:grid3_javascript_vm.md) - - [Capacity Planning](manual:grid3_javascript_capacity_planning.md) - - [Deploy Multiple VMs](javascript/grid3_javascript_vms.md) +- [Javascript Client](./javascript/grid3_javascript_readme.md) + - [Installation](./javascript/grid3_javascript_installation.md) + - [Loading Client](./javascript/grid3_javascript_loadclient.md) + - [Deploy a VM](./javascript/grid3_javascript_vm.md) + - [Capacity Planning](./javascript/grid3_javascript_capacity_planning.md) + - [Deploy Multiple VMs](./javascript/grid3_javascript_vms.md) - [Deploy CapRover](./javascript/grid3_javascript_caprover.md) - [Gateways](./javascript/grid3_javascript_vm_gateways.md) - [Deploy a Kubernetes Cluster](./javascript/grid3_javascript_kubernetes.md) From 24653bd1b9b98e97ad6e839cebb870d267c77cf5 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 16:23:23 -0400 Subject: [PATCH 006/134] test dev --- collections/developers/developers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 3596d4c..04c04b1 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,7 +2,7 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](knowledge_base:technology_toc) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology:technology_toc) section.

Table of Contents

From 8a49627ca572650d6663a1db72d802faf9fe1c94 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 16:38:53 -0400 Subject: [PATCH 007/134] test dev --- collections/developers/developers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 04c04b1..bcd1560 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,7 +2,7 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology:technology_toc) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology/technology_toc) section.

Table of Contents

From f502036210fcdaefe513456949ed97c416308ed2 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 16:41:44 -0400 Subject: [PATCH 008/134] updated dev --- collections/developers/developers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index bcd1560..3877320 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,7 +2,7 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology/technology_toc) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](../../knowledge_base/technology/technology_toc.md) section.

Table of Contents

From 8482cbfc4660fbc939cb1eeb9f50aa3c245101d6 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 20:15:51 -0400 Subject: [PATCH 009/134] dev test --- collections/developers/developers.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 3877320..5ff31cd 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,7 +2,9 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](../../knowledge_base/technology/technology_toc.md) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc.md) section. + +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc) section.

Table of Contents

From 7187a568352809483046537bcfaa20273f7ad770 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 21:29:41 -0400 Subject: [PATCH 010/134] dev test --- collections/developers/developers.md | 168 +++++++++++++-------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 5ff31cd..f00cfdb 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,91 +2,91 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc.md) section. - For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@tfcmd_basics) section. +

Table of Contents

-- [Javascript Client](./javascript/grid3_javascript_readme.md) - - [Installation](./javascript/grid3_javascript_installation.md) - - [Loading Client](./javascript/grid3_javascript_loadclient.md) - - [Deploy a VM](./javascript/grid3_javascript_vm.md) - - [Capacity Planning](./javascript/grid3_javascript_capacity_planning.md) - - [Deploy Multiple VMs](./javascript/grid3_javascript_vms.md) - - [Deploy CapRover](./javascript/grid3_javascript_caprover.md) - - [Gateways](./javascript/grid3_javascript_vm_gateways.md) - - [Deploy a Kubernetes Cluster](./javascript/grid3_javascript_kubernetes.md) - - [Deploy a ZDB](./javascript/grid3_javascript_zdb.md) - - [Deploy ZDBs for QSFS](./javascript/grid3_javascript_qsfs_zdbs.md) - - [QSFS](./javascript/grid3_javascript_qsfs.md) - - [Key Value Store](./javascript/grid3_javascript_kvstore.md) - - [VM with Wireguard and Gateway](./javascript/grid3_wireguard_gateway.md) - - [GPU Support](./javascript/grid3_javascript_gpu_support.md) -- [Go Client](./go/grid3_go_readme.md) - - [Installation](./go/grid3_go_installation.md) - - [Loading Client](./go/grid3_go_load_client.md) - - [Deploy a VM](./go/grid3_go_vm.md) - - [Deploy Multiple VMs](./go/grid3_go_vms.md) - - [Deploy Gateways](./go/grid3_go_gateways.md) - - [Deploy Kubernetes](./go/grid3_go_kubernetes.md) - - [Deploy a QSFS](./go/grid3_go_qsfs.md) - - [GPU Support](./go/grid3_go_gpu.md) -- [TFCMD](./tfcmd/tfcmd.md) - - [Getting Started](./tfcmd/tfcmd_basics.md) - - [Deploy a VM](./tfcmd/tfcmd_vm.md) - - [Deploy Kubernetes](./tfcmd/tfcmd_kubernetes.md) - - [Deploy ZDB](./tfcmd/tfcmd_zdbs.md) - - [Gateway FQDN](./tfcmd/tfcmd_gateway_fqdn.md) - - [Gateway Name](./tfcmd/tfcmd_gateway_name.md) - - [Contracts](./tfcmd/tfcmd_contracts.md) -- [TFROBOT](./tfrobot/tfrobot.md) - - [Installation](./tfrobot/tfrobot_installation.md) - - [Configuration File](./tfrobot/tfrobot_config.md) - - [Deployment](./tfrobot/tfrobot_deploy.md) - - [Commands and Flags](./tfrobot/tfrobot_commands_flags.md) - - [Supported Configurations](./tfrobot/tfrobot_configurations.md) -- [ThreeFold Chain](./tfchain/tfchain.md) - - [Introduction](./tfchain/introduction.md) - - [Farming Policies](./tfchain/farming_policies.md) - - [External Service Contract](./tfchain/tfchain_external_service_contract.md) - - [Solution Provider](./tfchain/tfchain_solution_provider.md) -- [Grid Proxy](./proxy/proxy_readme.md) - - [Introducing Grid Proxy](./proxy/proxy.md) - - [Setup](./proxy/setup.md) - - [DB Testing](./proxy/db_testing.md) - - [Commands](./proxy/commands.md) - - [Contributions](./proxy/contributions.md) - - [Explorer](./proxy/explorer.md) - - [Database](./proxy/database.md) - - [Production](./proxy/production.md) - - [Release](./proxy/release.md) -- [Flist](./flist/flist.md) - - [ThreeFold Hub Intro](./flist/flist_hub/zos_hub.md) - - [Generate an API Token](./flist/flist_hub/api_token.md) - - [Convert Docker Image Into Flist](./flist/flist_hub/convert_docker_image.md) - - [Supported Flists](./flist/grid3_supported_flists.md) - - [Flist Case Studies](./flist/flist_case_studies/flist_case_studies.md) - - [Case Study: Debian 12](./flist/flist_case_studies/flist_debian_case_study.md) - - [Case Study: Nextcloud AIO](./flist/flist_case_studies/flist_nextcloud_case_study.md) -- [Internals](./internals/internals.md) - - [Reliable Message Bus (RMB)](./internals/rmb/rmb_toc.md) - - [Introduction to RMB](./internals/rmb/rmb_intro.md) - - [RMB Specs](./internals/rmb/rmb_specs.md) - - [RMB Peer](./internals/rmb/uml/peer.md) - - [RMB Relay](./internals/rmb/uml/relay.md) - - [ZOS](./internals/zos/index.md) - - [Manual](./internals/zos/manual/manual.md) - - [Workload Types](./internals/zos/manual/workload_types.md) - - [Internal Modules](./internals/zos/internals/internals.md) - - [Capacity](./internals/zos/internals/capacity.md) - - [Performance Monitor Package](./internals/zos/performance/performance.md) - - [Public IPs Validation Task](./internals/zos/performance/publicips.md) - - [CPUBenchmark](./internals/zos/performance/cpubench.md) - - [IPerf](./internals/zos/performance/iperf.md) - - [Health Check](./internals/zos/performance/healthcheck.md) - - [API](./internals/zos/manual/api.md) -- [Grid Deployment](./grid_deployment/grid_deployment.md) - - [TFGrid Stacks](./grid_deployment/tfgrid_stacks.md) - - [Full VM Grid Deployment](./grid_deployment/grid_deployment_full_vm.md) - - [Grid Snapshots](./grid_deployment/snapshots.md) \ No newline at end of file +- [Javascript Client](grid3_javascript_readme.md) + - [Installation](grid3_javascript_installation.md) + - [Loading Client](grid3_javascript_loadclient.md) + - [Deploy a VM](grid3_javascript_vm.md) + - [Capacity Planning](grid3_javascript_capacity_planning.md) + - [Deploy Multiple VMs](grid3_javascript_vms.md) + - [Deploy CapRover](grid3_javascript_caprover.md) + - [Gateways](grid3_javascript_vm_gateways.md) + - [Deploy a Kubernetes Cluster](grid3_javascript_kubernetes.md) + - [Deploy a ZDB](grid3_javascript_zdb.md) + - [Deploy ZDBs for QSFS](grid3_javascript_qsfs_zdbs.md) + - [QSFS](grid3_javascript_qsfs.md) + - [Key Value Store](grid3_javascript_kvstore.md) + - [VM with Wireguard and Gateway](grid3_wireguard_gateway.md) + - [GPU Support](grid3_javascript_gpu_support.md) +- [Go Client](grid3_go_readme.md) + - [Installation](grid3_go_installation.md) + - [Loading Client](grid3_go_load_client.md) + - [Deploy a VM](grid3_go_vm.md) + - [Deploy Multiple VMs](grid3_go_vms.md) + - [Deploy Gateways](grid3_go_gateways.md) + - [Deploy Kubernetes](grid3_go_kubernetes.md) + - [Deploy a QSFS](grid3_go_qsfs.md) + - [GPU Support](grid3_go_gpu.md) +- [TFCMD](tfcmd.md) + - [Getting Started](tfcmd_basics.md) + - [Deploy a VM](tfcmd_vm.md) + - [Deploy Kubernetes](tfcmd_kubernetes.md) + - [Deploy ZDB](tfcmd_zdbs.md) + - [Gateway FQDN](tfcmd_gateway_fqdn.md) + - [Gateway Name](tfcmd_gateway_name.md) + - [Contracts](tfcmd_contracts.md) +- [TFROBOT](tfrobot.md) + - [Installation](tfrobot_installation.md) + - [Configuration File](tfrobot_config.md) + - [Deployment](tfrobot_deploy.md) + - [Commands and Flags](tfrobot_commands_flags.md) + - [Supported Configurations](tfrobot_configurations.md) +- [ThreeFold Chain](tfchain.md) + - [Introduction](introduction.md) + - [Farming Policies](farming_policies.md) + - [External Service Contract](tfchain_external_service_contract.md) + - [Solution Provider](tfchain_solution_provider.md) +- [Grid Proxy](proxy_readme.md) + - [Introducing Grid Proxy](proxy.md) + - [Setup](setup.md) + - [DB Testing](db_testing.md) + - [Commands](commands.md) + - [Contributions](contributions.md) + - [Explorer](explorer.md) + - [Database](database.md) + - [Production](production.md) + - [Release](release.md) +- [Flist](flist.md) + - [ThreeFold Hub Intro](flist_hub/zos_hub.md) + - [Generate an API Token](flist_hub/api_token.md) + - [Convert Docker Image Into Flist](flist_hub/convert_docker_image.md) + - [Supported Flists](grid3_supported_flists.md) + - [Flist Case Studies](flist_case_studies/flist_case_studies.md) + - [Case Study: Debian 12](flist_case_studies/flist_debian_case_study.md) + - [Case Study: Nextcloud AIO](flist_case_studies/flist_nextcloud_case_study.md) +- [Internals](internals.md) + - [Reliable Message Bus (RMB)](rmb_toc.md) + - [Introduction to RMB](rmb_intro.md) + - [RMB Specs](rmb_specs.md) + - [RMB Peer](peer.md) + - [RMB Relay](relay.md) + - [ZOS](index.md) + - [Manual](manual.md) + - [Workload Types](workload_types.md) + - [Internal Modules](internals.md) + - [Capacity](capacity.md) + - [Performance Monitor Package](performance.md) + - [Public IPs Validation Task](publicips.md) + - [CPUBenchmark](cpubench.md) + - [IPerf](iperf.md) + - [Health Check](healthcheck.md) + - [API](api.md) +- [Grid Deployment](grid_deployment.md) + - [TFGrid Stacks](tfgrid_stacks.md) + - [Full VM Grid Deployment](grid_deployment_full_vm.md) + - [Grid Snapshots](snapshots.md) \ No newline at end of file From 387e77b5949f7e75ea1bf230ed7d8b040db9a0fe Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 21:32:45 -0400 Subject: [PATCH 011/134] dev test --- collections/developers/developers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index f00cfdb..bd4dee0 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -4,7 +4,7 @@ This section covers all practical tutorials on how to develop and build on the T For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc) section. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@tfcmd_basics) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@zkube) section.

Table of Contents

From d6b4e34fadfafc924d7965e01bb244676fef180f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 21:40:02 -0400 Subject: [PATCH 012/134] dev test --- collections/developers/developers.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index bd4dee0..a0f2c32 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -8,9 +8,9 @@ For complementary information on the technology developed by ThreeFold, refer to

Table of Contents

-- [Javascript Client](grid3_javascript_readme.md) - - [Installation](grid3_javascript_installation.md) - - [Loading Client](grid3_javascript_loadclient.md) +- [Javascript Client](grid3_javascript_readme) + - [Installation](grid3_javascript_installation) + - [Loading Client](grid3_javascript_loadclient) - [Deploy a VM](grid3_javascript_vm.md) - [Capacity Planning](grid3_javascript_capacity_planning.md) - [Deploy Multiple VMs](grid3_javascript_vms.md) From 4bdf494607d3c95c826ba2c3d4c6ae8437bb623f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Fri, 3 May 2024 21:59:32 -0400 Subject: [PATCH 013/134] dev test --- collections/developers/developers.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index a0f2c32..4c08a26 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,6 +2,8 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc.md) section. + For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc) section. For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@zkube) section. From 62af4be6e8f366f9a23dc578ed77a54fc866c5ad Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 4 May 2024 00:59:51 -0400 Subject: [PATCH 014/134] added intro changes with @@ url --- collections/manual/intro.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/manual/intro.md b/collections/manual/intro.md index 110e1de..74b9154 100644 --- a/collections/manual/intro.md +++ b/collections/manual/intro.md @@ -4,12 +4,12 @@ This manual is organized in two main sections: -- [ThreeFold Knowledge Base](manual/knowledge_base.md) -- [ThreeFold Documentation](manual/documentation.md) +- [ThreeFold Knowledge Base](manual@@knowledge_base) +- [ThreeFold Documentation](documentation) The *ThreeFold Knowledge Base* section contains all information needed to understand how the whole ThreeFold ecosystem works. -The *ThreeFold Documentation* section contains all the practical information of the ThreeFold Grid, from general information covering the multi-functional [Dashboard](dashboard:dashboard.md), [TFT](threefold_token:threefold_token.md) and our community-based [FAQ](faq:faq.md), to specific tutorials for [developers](developers:developers.md), [farmers](farmers:farmers.md) and [system administrators](system_administrators:system_administrators.md). +The *ThreeFold Documentation* section contains all the practical information of the ThreeFold Grid, from general information covering the multi-functional [Dashboard](dashboard@@dashboard.md), [TFT](threefold_token@@threefold_token.md) and our community-based [FAQ](faq@@faq.md), to specific tutorials for [developers](developers@@developers.md), [farmers](farmers@@farmers.md) and [system administrators](system_administrators@@system_administrators.md). > Explore the TFGrid status page for live updates on Threefold services! > From 1a5e76c82d42ad013d7dd4030c6464e9d586fb30 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 4 May 2024 01:11:32 -0400 Subject: [PATCH 015/134] added intro changes with @@ url --- collections/developers/developers.md | 4 ---- collections/manual/intro.md | 4 ++-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 4c08a26..7548e16 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,12 +2,8 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc.md) section. - For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc) section. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@zkube) section. -

Table of Contents

- [Javascript Client](grid3_javascript_readme) diff --git a/collections/manual/intro.md b/collections/manual/intro.md index 74b9154..0124972 100644 --- a/collections/manual/intro.md +++ b/collections/manual/intro.md @@ -5,11 +5,11 @@ This manual is organized in two main sections: - [ThreeFold Knowledge Base](manual@@knowledge_base) -- [ThreeFold Documentation](documentation) +- [ThreeFold Documentation](manual@@documentation) The *ThreeFold Knowledge Base* section contains all information needed to understand how the whole ThreeFold ecosystem works. -The *ThreeFold Documentation* section contains all the practical information of the ThreeFold Grid, from general information covering the multi-functional [Dashboard](dashboard@@dashboard.md), [TFT](threefold_token@@threefold_token.md) and our community-based [FAQ](faq@@faq.md), to specific tutorials for [developers](developers@@developers.md), [farmers](farmers@@farmers.md) and [system administrators](system_administrators@@system_administrators.md). +The *ThreeFold Documentation* section contains all the practical information of the ThreeFold Grid, from general information covering the multi-functional [Dashboard](dashboard@@dashboard), [TFT](threefold_token@@threefold_token) and our community-based [FAQ](faq@@faq), to specific tutorials for [developers](developers@@developers), [farmers](farmers@@farmers) and [system administrators](system_administrators@@system_administrators). > Explore the TFGrid status page for live updates on Threefold services! > From 1af15a326d81ff657f0c617e9c5584aa9e2ec0f4 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 4 May 2024 01:17:38 -0400 Subject: [PATCH 016/134] update urls with @@ --- collections/developers/developers.md | 6 +++--- collections/manual/documentation.md | 14 +++++++------- collections/manual/knowledge_base.md | 14 +++++++------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 7548e16..8065a5c 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -6,9 +6,9 @@ For complementary information on the technology developed by ThreeFold, refer to

Table of Contents

-- [Javascript Client](grid3_javascript_readme) - - [Installation](grid3_javascript_installation) - - [Loading Client](grid3_javascript_loadclient) +- [Javascript Client](grid3_javascript_readme.md) + - [Installation](grid3_javascript_installation.md) + - [Loading Client](grid3_javascript_loadclient.md) - [Deploy a VM](grid3_javascript_vm.md) - [Capacity Planning](grid3_javascript_capacity_planning.md) - [Deploy Multiple VMs](grid3_javascript_vms.md) diff --git a/collections/manual/documentation.md b/collections/manual/documentation.md index 821f1ef..afa8394 100644 --- a/collections/manual/documentation.md +++ b/collections/manual/documentation.md @@ -2,13 +2,13 @@ The section contains all the practical information for farmers, developers and system administrators of the ThreeFold Grid. -For complementary information on ThreeFold, refer to the [ThreeFold Knowledge Base](./knowledge_base.md). +For complementary information on ThreeFold, refer to the [ThreeFold Knowledge Base](manual@@knowledge_base).

Table of Contents

-- [Dashboard](dashboard/dashboard.md) -- [Developers](developers/developers.md) -- [Farmers](farmers/farmers.md) -- [System Administrators](system_administrators/system_administrators.md) -- [ThreeFold Token](threefold_token/threefold_token.md) -- [FAQ](faq/faq.md) \ No newline at end of file +- [Dashboard](dashboard@@dashboard) +- [Developers](developers@@developers) +- [Farmers](farmers@@farmers) +- [System Administrators](system_administrators@@system_administrators) +- [ThreeFold Token](threefold_token@@threefold_token) +- [FAQ](faq@@faq) \ No newline at end of file diff --git a/collections/manual/knowledge_base.md b/collections/manual/knowledge_base.md index d31e18c..6e98141 100644 --- a/collections/manual/knowledge_base.md +++ b/collections/manual/knowledge_base.md @@ -2,13 +2,13 @@ The section contains information about the ThreeFold ecosystem, its technology and its history. -For practical information for farmers, developers and system administrators, refer to the [ThreeFold Documentation](documentation.md). +For practical information for farmers, developers and system administrators, refer to the [ThreeFold Documentation](manual@@documentation).

Table of Contents

-- [About](about:about.md) -- [Technology](technology:technology_toc.md) -- [Farming](farming:farming_toc.md) -- [Cloud](cloud:cloud_toc.md) -- [Collaboration](collaboration:collaboration_toc.md) -- [Legal](legal:terms_conditions_all3.md) \ No newline at end of file +- [About](about@@about) +- [Technology](technology@@technology_toc) +- [Farming](farming@@farming_toc) +- [Cloud](cloud@@cloud_toc) +- [Collaboration](collaboration@@collaboration_toc) +- [Legal](manual_legal@@terms_conditions_all3) \ No newline at end of file From 8bfea0a9128abcfa0b664a6bd1df232d35374119 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 4 May 2024 01:29:58 -0400 Subject: [PATCH 017/134] update dashboard urls --- collections/dashboard/dashboard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/dashboard/dashboard.md b/collections/dashboard/dashboard.md index 991b189..1ad728b 100644 --- a/collections/dashboard/dashboard.md +++ b/collections/dashboard/dashboard.md @@ -10,7 +10,7 @@ The ThreeFold Dashboard is a dynamic environment designed for both seasoned deve In the context of the Dashboard, a weblet is a compiled JavaScript web component that can be effortlessly embedded within the HTML page of a web application. This modular approach allows for flexible and intuitive interactions, facilitating a user-friendly deployment process. -The backend for the weblets is introduced with the [Javascript Client](../developers/javascript/grid3_javascript_readme.md) which communicates to TFChain over RMB. +The backend for the weblets is introduced with the [Javascript Client](developers@@grid3_javascript_readme) which communicates to TFChain over RMB.

Table of Contents

From 0de43514806784ae97e7c12168a8215e7bc8257c Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 4 May 2024 01:33:55 -0400 Subject: [PATCH 018/134] update dashboard --- collections/dashboard/deploy/applications.md | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/collections/dashboard/deploy/applications.md b/collections/dashboard/deploy/applications.md index ca16e19..e3a5a2c 100644 --- a/collections/dashboard/deploy/applications.md +++ b/collections/dashboard/deploy/applications.md @@ -8,17 +8,17 @@ Easily deploy your favourite applications on the ThreeFold grid with a click of

Table of Contents

-- [Algorand](../solutions/algorand.md) -- [CasperLabs](../solutions/casper.md) -- [Discourse](../solutions/discourse.md) -- [Funkwhale](../solutions/funkwhale.md) -- [Mattermost](../solutions/mattermost.md) -- [Nextcloud](../solutions/nextcloud.md) -- [Node Pilot](../solutions/nodepilot.md) -- [ownCloud](../solutions/owncloud.md) -- [Peertube](../solutions/peertube.md) -- [Presearch](../solutions/presearch.md) -- [Subsquid](../solutions/subsquid.md) -- [Taiga](../solutions/taiga.md) -- [Umbrel](../solutions/umbrel.md) -- [WordPress](../solutions/wordpress.md) \ No newline at end of file +- [Algorand](algorand.md) +- [CasperLabs](casper.md) +- [Discourse](discourse.md) +- [Funkwhale](funkwhale.md) +- [Mattermost](mattermost.md) +- [Nextcloud](nextcloud.md) +- [Node Pilot](nodepilot.md) +- [ownCloud](owncloud.md) +- [Peertube](peertube.md) +- [Presearch](presearch.md) +- [Subsquid](subsquid.md) +- [Taiga](taiga.md) +- [Umbrel](umbrel.md) +- [WordPress](wordpress.md) \ No newline at end of file From a83c0f154c2923f5293f118474268868338472fc Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 4 May 2024 01:38:12 -0400 Subject: [PATCH 019/134] fixed all dashboard URLs --- collections/dashboard/deploy/deploy.md | 34 +++++++++---------- collections/dashboard/deploy/orchestrators.md | 8 ++--- collections/dashboard/deploy/vm.md | 6 ++-- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/collections/dashboard/deploy/deploy.md b/collections/dashboard/deploy/deploy.md index a96decc..2b358a3 100644 --- a/collections/dashboard/deploy/deploy.md +++ b/collections/dashboard/deploy/deploy.md @@ -2,26 +2,26 @@ Here you will find everything related to deployments on the ThreeFold grid. This includes: -- Checking the cost of a deployment using [Pricing Calculator](./pricing_calculator.md) -- Finding a node to deploy on using the [Node Finder](./node_finder.md) -- Deploying your desired workload from [Virtual Machines](../solutions/vm_intro.md), [Orchestrators](./orchestrators.md), or [Applictions](./applications.md) -- Renting your own node on the ThreeFold grid from [Dedicated Machines](./dedicated_machines.md) -- Consulting [Your Contracts](./your_contracts.md) on the TFGrid -- Finding or publishing Flists from [Images](./images.md) -- Updating or generating your SSH key from [SSH Keys](./ssh_keys.md) +- Checking the cost of a deployment using [Pricing Calculator](pricing_calculator.md) +- Finding a node to deploy on using the [Node Finder](node_finder.md) +- Deploying your desired workload from [Virtual Machines](vm_intro.md), [Orchestrators](orchestrators.md), or [Applictions](applications.md) +- Renting your own node on the ThreeFold grid from [Dedicated Machines](dedicated_machines.md) +- Consulting [Your Contracts](your_contracts.md) on the TFGrid +- Finding or publishing Flists from [Images](images.md) +- Updating or generating your SSH key from [SSH Keys](ssh_keys.md) - ![](../img/sidebar_2.png) + ![](.img/sidebar_2.png) *** ## Table of Content -- [Pricing Calculator](./pricing_calculator.md) -- [Node Finder](./node_finder.md) -- [Virtual Machines](../solutions/vm_intro.md) -- [Orchestrators](./orchestrators.md) -- [Dedicated Machines](./dedicated_machines.md) -- [Applications](./applications.md) -- [Your Contracts](./your_contracts.md) -- [Images](./images.md) -- [SSH Keys](./ssh_keys.md) \ No newline at end of file +- [Pricing Calculator](pricing_calculator.md) +- [Node Finder](node_finder.md) +- [Virtual Machines](vm_intro.md) +- [Orchestrators](orchestrators.md) +- [Dedicated Machines](dedicated_machines.md) +- [Applications](applications.md) +- [Your Contracts](your_contracts.md) +- [Images](images.md) +- [SSH Keys](ssh_keys.md) \ No newline at end of file diff --git a/collections/dashboard/deploy/orchestrators.md b/collections/dashboard/deploy/orchestrators.md index 47282a6..eb5c8c8 100644 --- a/collections/dashboard/deploy/orchestrators.md +++ b/collections/dashboard/deploy/orchestrators.md @@ -8,7 +8,7 @@ Deploy your favorite orchestrating services and enjoy the seamless coordination ## Table of Contnet -- [Kubernetes](../solutions/k8s.md) -- [Caprover](../solutions/caprover.md) - - [Caprover Admin](../solutions/caprover_admin.md) - - [Caprover Worker](../solutions/caprover_worker.md) \ No newline at end of file +- [Kubernetes](k8s.md) +- [Caprover](caprover.md) + - [Caprover Admin](caprover_admin.md) + - [Caprover Worker](caprover_worker.md) \ No newline at end of file diff --git a/collections/dashboard/deploy/vm.md b/collections/dashboard/deploy/vm.md index 5a22576..4b0ee77 100644 --- a/collections/dashboard/deploy/vm.md +++ b/collections/dashboard/deploy/vm.md @@ -8,6 +8,6 @@ On the TFGrid, you can deploy both micro and full virtual machines.

Table of Contents

-- [Micro and Full VM Differences ](../solutions/vm_differences.md) -- [Full Virtual Machine](../solutions/fullVm.md) -- [Micro Virtual Machine](../solutions/vm.md) +- [Micro and Full VM Differences ](vm_differences.md) +- [Full Virtual Machine](fullVm.md) +- [Micro Virtual Machine](vm.md) From dca8ebb8305de36f72fb340586ddcc0276e2866e Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 09:49:29 -0400 Subject: [PATCH 020/134] urls flist --- collections/developers/flist/flist.md | 10 +++++----- .../flist_case_studies/flist_nextcloud_case_study.md | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/collections/developers/flist/flist.md b/collections/developers/flist/flist.md index 248005d..7a59391 100644 --- a/collections/developers/flist/flist.md +++ b/collections/developers/flist/flist.md @@ -2,10 +2,10 @@

Table of Contents

-- [Zero-OS Hub](manual:zos_hub.md) +- [Zero-OS Hub](zos_hub.md) - [Generate an API Token](api_token.md) -- [Convert Docker Image Into Flist](./flist_hub/convert_docker_image.md) +- [Convert Docker Image Into Flist](convert_docker_image.md) - [Supported Flists](./grid3_supported_flists.md) -- [Flist Case Studies](./flist_case_studies/flist_case_studies.md) - - [Case Study: Debian 12](./flist_case_studies/flist_debian_case_study.md) - - [Case Study: Nextcloud AIO](./flist_case_studies/flist_nextcloud_case_study.md) \ No newline at end of file +- [Flist Case Studies](flist_case_studies.md) + - [Case Study: Debian 12](flist_debian_case_study.md) + - [Case Study: Nextcloud AIO](flist_nextcloud_case_study.md) \ No newline at end of file diff --git a/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md b/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md index 4193317..86964bf 100644 --- a/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md +++ b/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md @@ -49,7 +49,7 @@ As a general advice, before creating an flist for a ThreeFold deployment, you sh Before we go any further, let us recall what is an flist. In short, an flist is a technology for storing and efficiently sharing sets of files. While it has many great features, it's purpose in this case is simply to deliver the image contents to Zero-OS for execution as a micro VM. It thus acts as a bundle of files like a normal archive. -One convenient thing about the flist technology is that it is possible to convert any Docker image into an flist, thanks to the [ThreeFold Docker Hub Converter tool](https://hub.grid.tf/docker-convert). It is very easy to do and we will show you how to proceed in this case study. For a quick guide on converting Docker images into flists, read [this section](../flist_hub/convert_docker_image.md) of the ThreeFold Manual. +One convenient thing about the flist technology is that it is possible to convert any Docker image into an flist, thanks to the [ThreeFold Docker Hub Converter tool](https://hub.grid.tf/docker-convert). It is very easy to do and we will show you how to proceed in this case study. For a quick guide on converting Docker images into flists, read [this section](convert_docker_image.md) of the ThreeFold Manual. ## Case Study Objective @@ -70,7 +70,7 @@ One important thing to have in mind is that, when we create an flist, what we ar Once we've successfully created an flist, we thus have a very quick way to deploy a specific workload while always obtaining the same result. This is why it is highly recommended to test a given deployment on a full or micro VM before building an flist. -For example, in the case of building a Nextcloud All-in-One flist, the prerequisites would be to successfully deploy a Nextcloud AIO instance on a full VM by executing each step sequentially. This specific example is documented in the Terraform section [Nextcloud All-in-One Guide](../../../system_administrators/terraform/advanced/terraform_nextcloud_aio.md) of the System Administrators book. +For example, in the case of building a Nextcloud All-in-One flist, the prerequisites would be to successfully deploy a Nextcloud AIO instance on a full VM by executing each step sequentially. This specific example is documented in the Terraform section [Nextcloud All-in-One Guide](system_administrators@@terraform_nextcloud_aio) of the System Administrators book. In our case, the flist we will be using has some specific configurations depending on the way we deploy Nextcloud (e.g. using or not the gateway and a custom domain). The Terraform **main.tf** we will be sharing later on will thus take all this into account for a smooth deployment. From fd6436c426a738eca7a60686ca81d66ffc849398 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 09:55:51 -0400 Subject: [PATCH 021/134] urls go --- collections/developers/go/grid3_go_readme.md | 20 +++++++++---------- .../developers/grid_deployment/snapshots.md | 2 +- .../grid_deployment/snapshots_archive.md | 8 +++----- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/collections/developers/go/grid3_go_readme.md b/collections/developers/go/grid3_go_readme.md index cf24ada..7c7b45e 100644 --- a/collections/developers/go/grid3_go_readme.md +++ b/collections/developers/go/grid3_go_readme.md @@ -2,16 +2,16 @@ Grid Go Client is a Go client created to interact and develop on Threefold Grid using Go language. -Please make sure to check the [basics](../../system_administrators/getstarted/tfgrid3_getstarted.md) before continuing. +Please make sure to check the [basics](system_administrators@@tfgrid3_getstarted) before continuing.

Table of Contents

-- [Installation](../go/grid3_go_installation.md) -- [Loading Client](../go/grid3_go_load_client.md) -- [Deploy a VM](../go/grid3_go_vm.md) -- [Deploy a VM with GPU](../go/grid3_go_vm_with_gpu.md) -- [Deploy Multiple VMs](../go/grid3_go_vms.md) -- [Deploy Gateways](../go/grid3_go_gateways.md) -- [Deploy Kubernetes](../go/grid3_go_kubernetes.md) -- [Deploy a QSFS](../go/grid3_go_qsfs.md) -- [GPU Support](../go/grid3_go_gpu_support.md) +- [Installation](grid3_go_installation.md) +- [Loading Client](grid3_go_load_client.md) +- [Deploy a VM](grid3_go_vm.md) +- [Deploy a VM with GPU](grid3_go_vm_with_gpu.md) +- [Deploy Multiple VMs](grid3_go_vms.md) +- [Deploy Gateways](grid3_go_gateways.md) +- [Deploy Kubernetes](grid3_go_kubernetes.md) +- [Deploy a QSFS](grid3_go_qsfs.md) +- [GPU Support](grid3_go_gpu_support.md) diff --git a/collections/developers/grid_deployment/snapshots.md b/collections/developers/grid_deployment/snapshots.md index 2b7a7d4..1e8f0ff 100644 --- a/collections/developers/grid_deployment/snapshots.md +++ b/collections/developers/grid_deployment/snapshots.md @@ -53,7 +53,7 @@ ThreeFold hosts all available snapshots at: [https://bknd.snapshot.grid.tf/](htt ## Deploy the Services with Scripts -You can deploy the 3 individual services using known methods such as [Docker](../../system_administrators/computer_it_basics/docker_basics.md). To facilitate the process, scripts are provided that run the necessary docker commands. +You can deploy the 3 individual services using known methods such as [Docker](system_administrators@@docker_basics). To facilitate the process, scripts are provided that run the necessary docker commands. The first script creates the snapshots, while the second and third scripts serve to start and stop all services. diff --git a/collections/developers/grid_deployment/snapshots_archive.md b/collections/developers/grid_deployment/snapshots_archive.md index eac3ff7..cab122a 100644 --- a/collections/developers/grid_deployment/snapshots_archive.md +++ b/collections/developers/grid_deployment/snapshots_archive.md @@ -23,8 +23,8 @@ To facilitate deploying grid backend services, we provide snapshots to significa There are a few prerequisites to properly run the ThreeFold services. -- [Docker engine](../computer_it_basics/docker_basics.md#install-docker-desktop-and-docker-engine) -- [Rsync](../computer_it_basics/file_transfer.md#rsync) +- [Docker engine](system_administrators@@docker_basics.md#install-docker-desktop-and-docker-engine) +- [Rsync](system_administrators@@file_transfer.md#rsync) ## Services @@ -61,7 +61,7 @@ Let's now see how to use those snapshots to run the services via scripts. ## Deploy the Services with Scripts -You can deploy the 3 individual services using known methods such as [Docker](https://manual.grid.tf/computer_it_basics/docker_basics.html). To facilitate the process, scripts are provided that run the necessary docker commands. +You can deploy the 3 individual services using known methods such as [Docker](docker_basics.md). To facilitate the process, scripts are provided that run the necessary docker commands. The first script creates the snapshots, while the second and third scripts serve to start and stop all services. @@ -202,5 +202,3 @@ systemctl start rsync systemctl enable rsync systemctl status rsync ``` - -If you're interested about hosting your own instance of the grid to strenghten the ThreeFold ecosystem, make sure to read the next section, [Guardians of the Grid](./tfgrid_guardians.md). \ No newline at end of file From ac9e15a4973c5e0ec2693bdd4b62c9af47109290 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 10:07:18 -0400 Subject: [PATCH 022/134] zos urls --- books/manual/SUMMARY.md | 18 +++++++++--------- .../developers/internals/rmb/rmb_toc.md | 4 ++-- .../internals/zos/development/quickstart.md | 2 +- .../{readme.md => container_readme.md} | 0 .../flist/{readme.md => flist_readme.md} | 0 .../identity/{readme.md => identity_readme.md} | 0 .../network/{readme.md => network_readme.md} | 0 .../node/{readme.md => node_readme.md} | 0 .../{readme.md => provision_readme.md} | 0 .../storage/{readme.md => storage_readme.md} | 0 .../internals/vmd/{readme.md => vmd_readme.md} | 0 11 files changed, 12 insertions(+), 12 deletions(-) rename collections/developers/internals/zos/internals/container/{readme.md => container_readme.md} (100%) rename collections/developers/internals/zos/internals/flist/{readme.md => flist_readme.md} (100%) rename collections/developers/internals/zos/internals/identity/{readme.md => identity_readme.md} (100%) rename collections/developers/internals/zos/internals/network/{readme.md => network_readme.md} (100%) rename collections/developers/internals/zos/internals/node/{readme.md => node_readme.md} (100%) rename collections/developers/internals/zos/internals/provision/{readme.md => provision_readme.md} (100%) rename collections/developers/internals/zos/internals/storage/{readme.md => storage_readme.md} (100%) rename collections/developers/internals/zos/internals/vmd/{readme.md => vmd_readme.md} (100%) diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index 6c1103b..fdbacce 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -120,24 +120,24 @@ - [RMB Specs](developers/internals/rmb/rmb_specs.md) - [RMB Peer](developers/internals/rmb/uml/peer.md) - [RMB Relay](developers/internals/rmb/uml/relay.md) - - [Zero-OS](developers/internals/zos/readme.md) + - [Zero-OS](developers/internals/zos/zos_readme.md) - [Manual](developers/internals/zos/manual/manual.md) - [Workload Types](developers/internals/zos/manual/workload_types.md) - [Internal Modules](developers/internals/zos/internals/internals.md) - - [Identity](developers/internals/zos/internals/identity/readme.md) + - [Identity](developers/internals/zos/internals/identity/identity_readme.md) - [Node ID Generation](developers/internals/zos/internals/identity/identity.md) - [Node Upgrade](developers/internals/zos/internals/identity/upgrade.md) - - [Node](developers/internals/zos/internals/node/readme.md) - - [Storage](developers/internals/zos/internals/storage/readme.md) - - [Network](developers/internals/zos/internals/network/readme.md) + - [Node](developers/internals/zos/internals/node/node_readme.md) + - [Storage](developers/internals/zos/internals/storage/storage_readme.md) + - [Network](developers/internals/zos/internals/network/network_readme.md) - [Introduction](developers/internals/zos/internals/network/introduction.md) - [Definitions](developers/internals/zos/internals/network/definitions.md) - [Mesh](developers/internals/zos/internals/network/mesh.md) - [Setup](developers/internals/zos/internals/network/setup_farm_network.md) - - [Flist](developers/internals/zos/internals/flist/readme.md) - - [Container](developers/internals/zos/internals/container/readme.md) - - [VM](developers/internals/zos/internals/vmd/readme.md) - - [Provision](developers/internals/zos/internals/provision/readme.md) + - [Flist](developers/internals/zos/internals/flist/flist_readme.md) + - [Container](developers/internals/zos/internals/container/container_readme.md) + - [VM](developers/internals/zos/internals/vmd/vmd_readme.md) + - [Provision](developers/internals/zos/internals/provision/provision_readme.md) - [Capacity](developers/internals/zos/internals/capacity.md) - [Performance Monitor Package](developers/internals/zos/performance/performance.md) - [Public IPs Validation Task](developers/internals/zos/performance/publicips.md) diff --git a/collections/developers/internals/rmb/rmb_toc.md b/collections/developers/internals/rmb/rmb_toc.md index 0801571..6e7b871 100644 --- a/collections/developers/internals/rmb/rmb_toc.md +++ b/collections/developers/internals/rmb/rmb_toc.md @@ -14,5 +14,5 @@ Out of the box RMB provides the following: - [Introduction to RMB](rmb_intro.md) - [RMB Specs](rmb_specs.md) -- [RMB Peer](uml/peer.md) -- [RMB Relay](uml/relay.md) \ No newline at end of file +- [RMB Peer](peer.md) +- [RMB Relay](relay.md) \ No newline at end of file diff --git a/collections/developers/internals/zos/development/quickstart.md b/collections/developers/internals/zos/development/quickstart.md index 0563b61..17a4fb1 100644 --- a/collections/developers/internals/zos/development/quickstart.md +++ b/collections/developers/internals/zos/development/quickstart.md @@ -8,7 +8,7 @@ ## Starting a local zos node * Make sure `qemu` and `dnsmasq` are installed -* [Create a farm](../manual/manual.md#creating-a-farm) +* [Create a farm](dashboard@@your_farms) * [Download a zos image](https://bootstrap.grid.tf/kernel/zero-os-development-zos-v3-generic-7e587e499a.efi) * Make sure `zos0` bridge is allowed by qemu, you can add `allow zos0` in `/etc/qemu/bridge.conf` (create the file if it's not there) * Setup the network using this script [this script](./net.sh) diff --git a/collections/developers/internals/zos/internals/container/readme.md b/collections/developers/internals/zos/internals/container/container_readme.md similarity index 100% rename from collections/developers/internals/zos/internals/container/readme.md rename to collections/developers/internals/zos/internals/container/container_readme.md diff --git a/collections/developers/internals/zos/internals/flist/readme.md b/collections/developers/internals/zos/internals/flist/flist_readme.md similarity index 100% rename from collections/developers/internals/zos/internals/flist/readme.md rename to collections/developers/internals/zos/internals/flist/flist_readme.md diff --git a/collections/developers/internals/zos/internals/identity/readme.md b/collections/developers/internals/zos/internals/identity/identity_readme.md similarity index 100% rename from collections/developers/internals/zos/internals/identity/readme.md rename to collections/developers/internals/zos/internals/identity/identity_readme.md diff --git a/collections/developers/internals/zos/internals/network/readme.md b/collections/developers/internals/zos/internals/network/network_readme.md similarity index 100% rename from collections/developers/internals/zos/internals/network/readme.md rename to collections/developers/internals/zos/internals/network/network_readme.md diff --git a/collections/developers/internals/zos/internals/node/readme.md b/collections/developers/internals/zos/internals/node/node_readme.md similarity index 100% rename from collections/developers/internals/zos/internals/node/readme.md rename to collections/developers/internals/zos/internals/node/node_readme.md diff --git a/collections/developers/internals/zos/internals/provision/readme.md b/collections/developers/internals/zos/internals/provision/provision_readme.md similarity index 100% rename from collections/developers/internals/zos/internals/provision/readme.md rename to collections/developers/internals/zos/internals/provision/provision_readme.md diff --git a/collections/developers/internals/zos/internals/storage/readme.md b/collections/developers/internals/zos/internals/storage/storage_readme.md similarity index 100% rename from collections/developers/internals/zos/internals/storage/readme.md rename to collections/developers/internals/zos/internals/storage/storage_readme.md diff --git a/collections/developers/internals/zos/internals/vmd/readme.md b/collections/developers/internals/zos/internals/vmd/vmd_readme.md similarity index 100% rename from collections/developers/internals/zos/internals/vmd/readme.md rename to collections/developers/internals/zos/internals/vmd/vmd_readme.md From 3bceba12884e91096550c2277af58dd8054c8c9c Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 10:09:03 -0400 Subject: [PATCH 023/134] flist fix --- .../developers/internals/zos/internals/flist/flist_readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/developers/internals/zos/internals/flist/flist_readme.md b/collections/developers/internals/zos/internals/flist/flist_readme.md index 46f1076..e23500c 100644 --- a/collections/developers/internals/zos/internals/flist/flist_readme.md +++ b/collections/developers/internals/zos/internals/flist/flist_readme.md @@ -16,7 +16,7 @@ Flist module is available on zbus over the following channel: | module | object | version | |--------|--------|---------| -|flist |[flist](#public-interface)| 0.0.1 +|flist |flist| 0.0.1 ## Home Directory flist keeps some data in the following locations: From 42993114396683eafd674473e6889a9989ab30eb Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 10:11:17 -0400 Subject: [PATCH 024/134] flist fix --- .../developers/internals/zos/internals/flist/flist_readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/developers/internals/zos/internals/flist/flist_readme.md b/collections/developers/internals/zos/internals/flist/flist_readme.md index e23500c..9e7a863 100644 --- a/collections/developers/internals/zos/internals/flist/flist_readme.md +++ b/collections/developers/internals/zos/internals/flist/flist_readme.md @@ -16,7 +16,7 @@ Flist module is available on zbus over the following channel: | module | object | version | |--------|--------|---------| -|flist |flist| 0.0.1 +|flist |[flist](#public-interface)| 0.0.1 | ## Home Directory flist keeps some data in the following locations: From 776dff1417164a2bd5da06cb6c579b099144636b Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 10:12:34 -0400 Subject: [PATCH 025/134] node fix --- .../developers/internals/zos/internals/node/node_readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/developers/internals/zos/internals/node/node_readme.md b/collections/developers/internals/zos/internals/node/node_readme.md index 0679bd7..69ed009 100644 --- a/collections/developers/internals/zos/internals/node/node_readme.md +++ b/collections/developers/internals/zos/internals/node/node_readme.md @@ -20,9 +20,9 @@ Node module is available on [zbus](https://github.com/threefoldtech/zbus) over t | module | object | version | |--------|--------|---------| -|host |host| 0.0.1 -|system |system| 0.0.1 -|events |events| 0.0.1 +|host |host| 0.0.1 | +|system |system| 0.0.1 | +|events |events| 0.0.1 | ## Example From 88ce926fc8be83bfa46edc7ca80f95133a07cf2e Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 10:27:02 -0400 Subject: [PATCH 026/134] zos --- collections/developers/internals/internals.md | 24 +++++----- .../internals/zos/internals/internals.md | 16 +++---- .../zos/internals/network/introduction.md | 2 +- .../developers/internals/zos/manual/manual.md | 2 +- .../developers/internals/zos/zos_readme.md | 48 +++++++++---------- 5 files changed, 46 insertions(+), 46 deletions(-) diff --git a/collections/developers/internals/internals.md b/collections/developers/internals/internals.md index af1c1f8..ce29a8c 100644 --- a/collections/developers/internals/internals.md +++ b/collections/developers/internals/internals.md @@ -4,16 +4,16 @@ We present in this section of the developers book a partial list of system compo

Table of Contents

-- [Reliable Message Bus (RMB)](rmb/rmb_toc.md) - - [Introduction to RMB](rmb/rmb_intro.md) - - [RMB Specs](rmb/rmb_specs.md) - - [RMB Peer](rmb/uml/peer.md) - - [RMB Relay](rmb/uml/relay.md) +- [Reliable Message Bus (RMB)](rmb_toc.md) + - [Introduction to RMB](rmb_intro.md) + - [RMB Specs](rmb_specs.md) + - [RMB Peer](peer.md) + - [RMB Relay](relay.md) -- [ZOS](zos/index.md) - - [Manual](./zos/manual/manual.md) - - [Workload Types](./zos/manual/workload_types.md) - - [Internal Modules](./zos/internals/internals.md) - - [Capacity](./zos/internals/capacity.md) - - [Performance Monitor Package](./zos/performance/performance.md) - - [API](./zos/manual/api.md) \ No newline at end of file +- [ZOS](zos_readme.md) + - [Manual](manual.md) + - [Workload Types](workload_types.md) + - [Internal Modules](internals.md) + - [Capacity](capacity.md) + - [Performance Monitor Package](performance.md) + - [API](api.md) \ No newline at end of file diff --git a/collections/developers/internals/zos/internals/internals.md b/collections/developers/internals/zos/internals/internals.md index ac7dfe8..21ec057 100644 --- a/collections/developers/internals/zos/internals/internals.md +++ b/collections/developers/internals/zos/internals/internals.md @@ -74,14 +74,14 @@ Modules of zos are completely internal. There is no way for an external user to Here is a list of the major ZOS modules. -- [Identity](identity/index.md) -- [Node](node/index.md) -- [Storage](storage/index.md) -- [Network](network/index.md) -- [Flist](flist/index.md) -- [Container](container/index.md) -- [VM](vmd/index.md) -- [Provision](provision/index.md) +- [Identity](identity_readme.md) +- [Node](node_readme.md) +- [Storage](storage_readme.md) +- [Network](network_readme.md) +- [Flist](flist_readme.md) +- [Container](container_readme.md) +- [VM](vmd_readme.md) +- [Provision](provision_readme.md) ## Capacity diff --git a/collections/developers/internals/zos/internals/network/introduction.md b/collections/developers/internals/zos/internals/network/introduction.md index 76660fa..5221c99 100644 --- a/collections/developers/internals/zos/internals/network/introduction.md +++ b/collections/developers/internals/zos/internals/network/introduction.md @@ -27,7 +27,7 @@ Once initialized, with the network daemon running (a process that will handle al ## Networkd functionality -The network daemon is in itself responsible for a few tasks, and working together with the [provision daemon](../provision) it mainly sets up the local infrastructure to get the user network resources, together with the wireguard configurations for the user's mesh network. +The network daemon is in itself responsible for a few tasks, and working together with the [provision daemon](provision_readme.md) it mainly sets up the local infrastructure to get the user network resources, together with the wireguard configurations for the user's mesh network. The Wireguard mesh is an overlay network. That means that traffic of that network is encrypted and encapsulated in a new traffic frame that the gets transferred over the underlay network, here in essence the network that has been set up during boot of the node. diff --git a/collections/developers/internals/zos/manual/manual.md b/collections/developers/internals/zos/manual/manual.md index fb926c9..f2f39c2 100644 --- a/collections/developers/internals/zos/manual/manual.md +++ b/collections/developers/internals/zos/manual/manual.md @@ -55,7 +55,7 @@ To be able to contact the node directly you need to run - `yggdrasil` - `rmb` (correctly configured) -Once you have those running you can now contact the node over `rmb`. For a reference implementation (function names and parameters) please refer to [RMB documentation](../../rmb/rmb_toc.md) +Once you have those running you can now contact the node over `rmb`. For a reference implementation (function names and parameters) please refer to [RMB documentation](rmb_toc.md) Here is a rough example of how low level creation of a deployment is done. diff --git a/collections/developers/internals/zos/zos_readme.md b/collections/developers/internals/zos/zos_readme.md index 33d16df..33dd01f 100644 --- a/collections/developers/internals/zos/zos_readme.md +++ b/collections/developers/internals/zos/zos_readme.md @@ -2,27 +2,27 @@

Table of Contents

-- [Manual](./manual/manual.md) -- [Workload Types](./manual/workload_types.md) -- [Internal Modules](./internals/internals.md) - - [Identity](./internals/identity/index.md) - - [Node ID Generation](./internals/identity/identity.md) - - [Node Upgrade](./internals/identity/upgrade.md) - - [Node](./internals/node/index.md) - - [Storage](./internals/storage/index.md) - - [Network](./internals/network/index.md) - - [Introduction](./internals/network/introduction.md) - - [Definitions](./internals/network/definitions.md) - - [Mesh](./internals/network/mesh.md) - - [Setup](./internals/network/setup_farm_network.md) - - [Flist](./internals/flist/index.md) - - [Container](./internals/container/index.md) - - [VM](./internals/vmd/index.md) - - [Provision](./internals/provision/index.md) -- [Capacity](./internals/capacity.md) -- [Performance Monitor Package](./performance/performance.md) - - [Public IPs Validation Task](./performance/publicips.md) - - [CPUBenchmark](./performance/cpubench.md) - - [IPerf](./performance/iperf.md) - - [Health Check](./performance/healthcheck.md) -- [API](./manual/api.md) +- [Manual](manual.md) +- [Workload Types](workload_types.md) +- [Internal Modules](internals.md) + - [Identity](identity_readme.md) + - [Node ID Generation](identity.md) + - [Node Upgrade](upgrade.md) + - [Node](node_readme.md) + - [Storage](storage_readme.md) + - [Network](network_readme.md) + - [Introduction](introduction.md) + - [Definitions](definitions.md) + - [Mesh](mesh.md) + - [Setup](setup_farm_network.md) + - [Flist](flist_readme.md) + - [Container](container_readme.md) + - [VM](vmd_readme.md) + - [Provision](provision_readme.md) +- [Capacity](capacity.md) +- [Performance Monitor Package](performance.md) + - [Public IPs Validation Task](publicips.md) + - [CPUBenchmark](cpubench.md) + - [IPerf](iperf.md) + - [Health Check](healthcheck.md) +- [API](api.md) From 088f1117740b3b3210b8e16e8368d3d4ea6ab64c Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 10:34:37 -0400 Subject: [PATCH 027/134] urls javascript --- .../javascript/grid3_javascript_capacity_planning.md | 2 +- .../developers/javascript/grid3_javascript_installation.md | 4 ++-- .../developers/javascript/grid3_javascript_loadclient.md | 4 ++-- collections/developers/javascript/grid3_javascript_readme.md | 2 +- collections/developers/javascript/grid3_javascript_vm.md | 2 +- collections/developers/javascript/grid3_javascript_vms.md | 2 +- collections/developers/javascript/grid3_wireguard_gateway.md | 2 +- collections/developers/proxy/proxy.md | 2 +- collections/developers/proxy/setup.md | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/collections/developers/javascript/grid3_javascript_capacity_planning.md b/collections/developers/javascript/grid3_javascript_capacity_planning.md index f1db3cc..024d8e0 100644 --- a/collections/developers/javascript/grid3_javascript_capacity_planning.md +++ b/collections/developers/javascript/grid3_javascript_capacity_planning.md @@ -9,7 +9,7 @@ ## Introduction -It's almost the same as in [deploying a single VM](../javascript/grid3_javascript_vm.md) the only difference is you can automate the choice of the node to deploy on using code. We now support `FilterOptions` to filter nodes based on specific criteria e.g the node resources (CRU, SRU, HRU, MRU) or being part of a specific farm or located in some country, or being a gateway or not +It's almost the same as in [deploying a single VM](grid3_javascript_vm.md) the only difference is you can automate the choice of the node to deploy on using code. We now support `FilterOptions` to filter nodes based on specific criteria e.g the node resources (CRU, SRU, HRU, MRU) or being part of a specific farm or located in some country, or being a gateway or not ## Example diff --git a/collections/developers/javascript/grid3_javascript_installation.md b/collections/developers/javascript/grid3_javascript_installation.md index 3040880..1fcd64e 100644 --- a/collections/developers/javascript/grid3_javascript_installation.md +++ b/collections/developers/javascript/grid3_javascript_installation.md @@ -36,7 +36,7 @@ To use the Grid Client, you will need the following on the TFGrid: - A TFChain account - TFT in your wallet -If it is not the case, please visit the [Get started section](../../system_administrators/getstarted/tfgrid3_getstarted.md). +If it is not the case, please visit the [Get started section](system_administrators@@tfgrid3_getstarted). ## Installation @@ -81,7 +81,7 @@ Make sure to set the client configuration properly before using the Grid Client. - **network**: The network environment (**dev**, **qa**, **test** or **main**). - **mnemonic**: The 12 words mnemonics for your account. - - Learn how to create one [here](../../dashboard/wallet_connector.md). + - Learn how to create one [here](dashboard@@wallet_connector). - **storeSecret**: This is any word that will be used for encrypting/decrypting the keys on ThreeFold key-value store. diff --git a/collections/developers/javascript/grid3_javascript_loadclient.md b/collections/developers/javascript/grid3_javascript_loadclient.md index fc7c025..6376d67 100644 --- a/collections/developers/javascript/grid3_javascript_loadclient.md +++ b/collections/developers/javascript/grid3_javascript_loadclient.md @@ -62,7 +62,7 @@ using e2e. That's similar to home servers by matrix for more details, check [client options](https://github.com/threefoldtech/tfgrid-sdk-ts/blob/development/packages/grid_client/docs/client_configuration.md) -> Note: The choice of the node is completely up to the user at this point. They need to do the capacity planning. Check [Node Finder](../../dashboard/deploy/node_finder.md) to know which nodes fits your deployment criteria. +> Note: The choice of the node is completely up to the user at this point. They need to do the capacity planning. Check [Node Finder](dashboard@@node_finder) to know which nodes fits your deployment criteria. -Check the document for [capacity planning using code](../javascript/grid3_javascript_capacity_planning.md) if you want to automate it +Check the document for [capacity planning using code](grid3_javascript_capacity_planning.md) if you want to automate it > Note: this feature is still experimental diff --git a/collections/developers/javascript/grid3_javascript_readme.md b/collections/developers/javascript/grid3_javascript_readme.md index 7072d19..62dc875 100644 --- a/collections/developers/javascript/grid3_javascript_readme.md +++ b/collections/developers/javascript/grid3_javascript_readme.md @@ -4,7 +4,7 @@ This section covers developing projects on top of Threefold Grid using Javascrip Javascript has a huge ecosystem, and first class citizen when it comes to blockchain technologies like substrate and that was one of the reasons for it to become one the very first supported languages on the grid. -Please make sure to check the [basics](../../system_administrators/getstarted/tfgrid3_getstarted.md) before continuing. +Please make sure to check the [basics](system_administrators@@tfgrid3_getstarted) before continuing.

Table of Contents

diff --git a/collections/developers/javascript/grid3_javascript_vm.md b/collections/developers/javascript/grid3_javascript_vm.md index 5c9069e..af09bea 100644 --- a/collections/developers/javascript/grid3_javascript_vm.md +++ b/collections/developers/javascript/grid3_javascript_vm.md @@ -145,7 +145,7 @@ We need to specify its - disks: disks model collection - memory - root filesystem size -- flist: the image it is going to start from. Check the [supported flists](../flist/grid3_supported_flists.md) +- flist: the image it is going to start from. Check the [supported flists](grid3_supported_flists.md) - entry point: entrypoint command / script to execute - env: has the environment variables needed e.g sshkeys used - public ip: if we want to have a public ip attached to the VM diff --git a/collections/developers/javascript/grid3_javascript_vms.md b/collections/developers/javascript/grid3_javascript_vms.md index b928007..81e9a22 100644 --- a/collections/developers/javascript/grid3_javascript_vms.md +++ b/collections/developers/javascript/grid3_javascript_vms.md @@ -105,4 +105,4 @@ async function main() { main(); ``` -It's similiar to the previous section of [deploying a single VM](../javascript/grid3_javascript_vm.md), but just adds more vm objects to vms collection. +It's similiar to the previous section of [deploying a single VM](grid3_javascript_vm.md), but just adds more vm objects to vms collection. diff --git a/collections/developers/javascript/grid3_wireguard_gateway.md b/collections/developers/javascript/grid3_wireguard_gateway.md index 2cb1b89..7677789 100644 --- a/collections/developers/javascript/grid3_wireguard_gateway.md +++ b/collections/developers/javascript/grid3_wireguard_gateway.md @@ -186,7 +186,7 @@ log(vmResult); - `CreateNetWorkModel` : we are creating a network and set the node id to be `gwNode`, the name `monNetwork` and inside the function we set `addAccess: true` to add __wireguard__ access. -- `createMachineModel` and `createMachinesModel` is similar to the previous section of [deploying a single VM](../javascript/grid3_javascript_vm.md), but we are passing the created `NetworkModel` to the machines model and the entry point here runs a simple python server. +- `createMachineModel` and `createMachinesModel` is similar to the previous section of [deploying a single VM](grid3_javascript_vm.md), but we are passing the created `NetworkModel` to the machines model and the entry point here runs a simple python server. ### Deploy the Gateway diff --git a/collections/developers/proxy/proxy.md b/collections/developers/proxy/proxy.md index 7dc936c..ac87fbc 100644 --- a/collections/developers/proxy/proxy.md +++ b/collections/developers/proxy/proxy.md @@ -20,7 +20,7 @@ The TFGrid client Proxy acts as an interface to access information about the gri The proxy is used as the backend of several threefold projects like: -- [Dashboard](../../dashboard/dashboard.md) +- [Dashboard](dashboard@@dashboard) diff --git a/collections/developers/proxy/setup.md b/collections/developers/proxy/setup.md index fa8d07f..00b55bb 100644 --- a/collections/developers/proxy/setup.md +++ b/collections/developers/proxy/setup.md @@ -20,7 +20,7 @@ To install Golang, you can follow the official [guide](https://go.dev/doc/instal ## Docker -Docker is useful for running the TFGridDb in container environment. Read this to [install Docker engine](../../system_administrators/computer_it_basics/docker_basics.md#install-docker-desktop-and-docker-engine). +Docker is useful for running the TFGridDb in container environment. Read this to [install Docker engine](system_administrators@@docker_basics.md#install-docker-desktop-and-docker-engine). Note: it will be necessary to follow step #2 in the previous article to run docker without sudo. if you want to avoid that. edit the docker commands in the `Makefile` and add sudo. From aa82080a149f4977719e7dd8cd5da2fbf79c3400 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 10:37:26 -0400 Subject: [PATCH 028/134] urls javascript --- collections/developers/proxy/setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/developers/proxy/setup.md b/collections/developers/proxy/setup.md index 00b55bb..f8d74e2 100644 --- a/collections/developers/proxy/setup.md +++ b/collections/developers/proxy/setup.md @@ -20,7 +20,7 @@ To install Golang, you can follow the official [guide](https://go.dev/doc/instal ## Docker -Docker is useful for running the TFGridDb in container environment. Read this to [install Docker engine](system_administrators@@docker_basics.md#install-docker-desktop-and-docker-engine). +Docker is useful for running the TFGridDb in container environment. Read this to [install Docker engine](system_administrators@@docker_basics#install-docker-desktop-and-docker-engine). Note: it will be necessary to follow step #2 in the previous article to run docker without sudo. if you want to avoid that. edit the docker commands in the `Makefile` and add sudo. From 4c46250d467b275e7f51561eb1f89d2a93ba014a Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 10:43:43 -0400 Subject: [PATCH 029/134] urls devs done --- collections/developers/developers.md | 12 ++++++------ collections/developers/proxy/setup.md | 2 +- collections/developers/tfchain/dev_tfchain.md | 4 ++-- collections/developers/tfchain/introduction.md | 2 +- .../tfchain_external_service_contract.md | 17 +++++++++++++---- collections/developers/tfrobot/tfrobot.md | 2 +- .../developers/tfrobot/tfrobot_deploy.md | 2 +- 7 files changed, 25 insertions(+), 16 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 8065a5c..13f8139 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -60,13 +60,13 @@ For complementary information on the technology developed by ThreeFold, refer to - [Production](production.md) - [Release](release.md) - [Flist](flist.md) - - [ThreeFold Hub Intro](flist_hub/zos_hub.md) - - [Generate an API Token](flist_hub/api_token.md) - - [Convert Docker Image Into Flist](flist_hub/convert_docker_image.md) + - [ThreeFold Hub Intro](zos_hub.md) + - [Generate an API Token](api_token.md) + - [Convert Docker Image Into Flist](convert_docker_image.md) - [Supported Flists](grid3_supported_flists.md) - - [Flist Case Studies](flist_case_studies/flist_case_studies.md) - - [Case Study: Debian 12](flist_case_studies/flist_debian_case_study.md) - - [Case Study: Nextcloud AIO](flist_case_studies/flist_nextcloud_case_study.md) + - [Flist Case Studies](flist_case_studies.md) + - [Case Study: Debian 12](flist_debian_case_study.md) + - [Case Study: Nextcloud AIO](flist_nextcloud_case_study.md) - [Internals](internals.md) - [Reliable Message Bus (RMB)](rmb_toc.md) - [Introduction to RMB](rmb_intro.md) diff --git a/collections/developers/proxy/setup.md b/collections/developers/proxy/setup.md index f8d74e2..6667013 100644 --- a/collections/developers/proxy/setup.md +++ b/collections/developers/proxy/setup.md @@ -20,7 +20,7 @@ To install Golang, you can follow the official [guide](https://go.dev/doc/instal ## Docker -Docker is useful for running the TFGridDb in container environment. Read this to [install Docker engine](system_administrators@@docker_basics#install-docker-desktop-and-docker-engine). +Docker is useful for running the TFGridDb in container environment. Read this to [install Docker engine](system_administrators@@docker_basics). Note: it will be necessary to follow step #2 in the previous article to run docker without sudo. if you want to avoid that. edit the docker commands in the `Makefile` and add sudo. diff --git a/collections/developers/tfchain/dev_tfchain.md b/collections/developers/tfchain/dev_tfchain.md index a575535..04c05cc 100644 --- a/collections/developers/tfchain/dev_tfchain.md +++ b/collections/developers/tfchain/dev_tfchain.md @@ -68,7 +68,7 @@ Every contract is billed every 1 hour on the chain, the amount that is due is de - 50% goes to certified sales channel - 35% TFT gets burned -See [pricing](../../../knowledge_base/cloud/pricing/pricing.md) for more information on how the cost for a contract is calculated. +See [pricing](cloud@@pricing) for more information on how the cost for a contract is calculated. ## Contract locking @@ -80,7 +80,7 @@ When the owner of a contract runs out funds on his wallet to pay for his deploym ## DAO -See [DAO](../../dashboard/tfchain/tf_dao.md) for more information on the DAO on TF Chain. +See [DAO](dashboard@@tf_dao) for more information on the DAO on TF Chain. ## Farming Policies diff --git a/collections/developers/tfchain/introduction.md b/collections/developers/tfchain/introduction.md index a983b68..d3dc87a 100644 --- a/collections/developers/tfchain/introduction.md +++ b/collections/developers/tfchain/introduction.md @@ -45,7 +45,7 @@ It is the backbone of [ZOS](https://github.com/threefoldtech/zos) and other comp A twin is a unique identifier linked to a specific account on a given TFChain network. Actually there are 2 ways to create a twin: -- With the [Dashboard](../../dashboard/wallet_connector.md) +- With the [Dashboard](dashboard@@wallet_connector) - a twin is automatically generated while creating a TFChain account - With the TFConnect app - a twin is automatically generated while creating a farm (in this case the twin will be created on mainnet) diff --git a/collections/developers/tfchain/tfchain_external_service_contract.md b/collections/developers/tfchain/tfchain_external_service_contract.md index 992186a..92196ab 100644 --- a/collections/developers/tfchain/tfchain_external_service_contract.md +++ b/collections/developers/tfchain/tfchain_external_service_contract.md @@ -2,10 +2,19 @@

Table of Contents

- [Introduction](#introduction) -- [Step 1: Create the contract and get its unique ID](#step-1-create-contract--get-unique-id) +- [Step 1: Create contract / Get unique ID](#step-1-create-contract--get-unique-id) + - [Create service contract](#create-service-contract) + - [Last service contract ID](#last-service-contract-id) + - [Parse service contract](#parse-service-contract) + - [Wrong contract ID ?](#wrong-contract-id-) - [Step 2: Fill contract](#step-2-fill-contract) - [Step 3: Both parties approve contract](#step-3-both-parties-approve-contract) - [Step 4: Bill for the service](#step-4-bill-for-the-service) + - [Send bill to consumer](#send-bill-to-consumer) + - [Billing frequency](#billing-frequency) + - [Amount due calculation](#amount-due-calculation) + - [Protection against draining](#protection-against-draining) + - [Billing considerations](#billing-considerations) - [Step 5: Cancel the contract](#step-5-cancel-the-contract) *** @@ -19,12 +28,12 @@ The initial scenario is when two parties, a service provider and a consumer of t This is actually a more direct and generic feature if we compare to the initial rewarding model where a service provider (or solution provider) is receiving TFT from a rewards distribution process, linked to a node contract and based on a cloud capacity consumption, which follows specific billing rules. The initial requirements are: -- Both service and consumer need to have their respective twin created on TFChain (if not, see [here](tfchain.md#create-a-tfchain-twin) how to do it) +- Both service and consumer need to have their respective twin created on TFChain (if not, see [here](dev_tfchain.md#create-a-tfchain-twin) how to do it) - Consumer account needs to be funded (lack of funds will simply result in the contract cancelation while billed) In the following steps we detail the sequence of extrinsics that need to be called in TFChain Polkadot portal for setting up and executing such contract. -Make sure to use right [links](tfchain.md#deployed-instances) depending on the targeted network. +Make sure to use right [links](dev_tfchain.md#deployed-instances) depending on the targeted network. # Step 1: Create contract / Get unique ID @@ -55,7 +64,7 @@ Check if the contract fields are correct, especially the twin ID of both service ## Wrong contract ID ? -If twin IDs are wrong ([how to get my twin ID?](tfchain.md#get-your-twin-id)) on service contract fields it means the contract does not correspond to the last created contract. +If twin IDs are wrong ([how to get my twin ID?](dev_tfchain.md#get-your-twin-id)) on service contract fields it means the contract does not correspond to the last created contract. In this case parse the last contracts on stack by decreasing `serviceContractId` and try to identify the right one; or the contract was simply not created so you should repeat the creation process and evaluate the error log. diff --git a/collections/developers/tfrobot/tfrobot.md b/collections/developers/tfrobot/tfrobot.md index c8b2d5f..40ba063 100644 --- a/collections/developers/tfrobot/tfrobot.md +++ b/collections/developers/tfrobot/tfrobot.md @@ -2,7 +2,7 @@ TFROBOT (`tfrobot`) is a command line interface tool that offers simultaneous mass deployment of groups of VMs on the ThreeFold Grid, with support of multiple retries for failed deployments, and customizable configurations, where you can define node groups, VMs groups and other configurations through a YAML or a JSON file. -Consult the [ThreeFoldTech TFROBOT repository](https://github.com/threefoldtech/tfgrid-sdk-go/tree/development/tfrobot) for the latest updates and read the [basics](../../system_administrators/getstarted/tfgrid3_getstarted.md) to get up to speed if needed. +Consult the [ThreeFoldTech TFROBOT repository](https://github.com/threefoldtech/tfgrid-sdk-go/tree/development/tfrobot) for the latest updates and read the [basics](system_administrators@@tfgrid3_getstarted) to get up to speed if needed.

Table of Contents

diff --git a/collections/developers/tfrobot/tfrobot_deploy.md b/collections/developers/tfrobot/tfrobot_deploy.md index 7e16d12..2c7d62a 100644 --- a/collections/developers/tfrobot/tfrobot_deploy.md +++ b/collections/developers/tfrobot/tfrobot_deploy.md @@ -56,4 +56,4 @@ The TFCMD tool works well with TFROBOT, as it can be used to query the TFGrid, f tfcmd get contracts ``` -For more information on TFCMD, [read the documentation](../tfcmd/tfcmd.md). \ No newline at end of file +For more information on TFCMD, [read the documentation](tfcmd.md). \ No newline at end of file From 77c04ca667ca43d207a1cece69ff1889e4a912f8 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 6 May 2024 11:17:48 -0400 Subject: [PATCH 030/134] farmers start --- collections/farmers/3node_building/1_create_farm.md | 2 +- collections/farmers/3node_building/3_set_hardware.md | 2 +- collections/farmers/3node_building/3node_building.md | 2 +- collections/farmers/3node_building/4_wipe_all_disks.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/collections/farmers/3node_building/1_create_farm.md b/collections/farmers/3node_building/1_create_farm.md index 460fc32..6b0d6e6 100644 --- a/collections/farmers/3node_building/1_create_farm.md +++ b/collections/farmers/3node_building/1_create_farm.md @@ -44,7 +44,7 @@ Click on **Create Farm**, choose a farm name and then click **Create**. ## Create a ThreeFold Connect Wallet -Your farming rewards should be sent to a Stellar wallet with a TFT trustline enabled. The simplest way to proceed is to create a TF Connect app wallet as the TFT trustline is enabled by default on this wallet. For more information on TF Connect, read [this section](../../threefold_token/storing_tft/tf_connect_app.md). +Your farming rewards should be sent to a Stellar wallet with a TFT trustline enabled. The simplest way to proceed is to create a TF Connect app wallet as the TFT trustline is enabled by default on this wallet. For more information on TF Connect, read [this section](threefold_token@@tf_connect_app). Let's create a TFConnect Wallet and take note of the wallet address. First, download the app. diff --git a/collections/farmers/3node_building/3_set_hardware.md b/collections/farmers/3node_building/3_set_hardware.md index 6f053dd..1dfd77d 100644 --- a/collections/farmers/3node_building/3_set_hardware.md +++ b/collections/farmers/3node_building/3_set_hardware.md @@ -39,7 +39,7 @@ Note that you can run Zero-OS on a Virtual Machine (VM), but you won't farm any Also, note that ThreeFold runs its own OS, which is Zero-OS. You thus need to start with completely wiped disks. You cannot farm TFT with Windows, Linux or MAC OS installed on your disks. If you need to use such OS temporarily, boot it in Try mode with a removable media (USB key). -Note: Once you have the necessary hardware, you need to [create a farm](./1_create_farm.md), [create a Zero-OS bootstrap image](./2_bootstrap_image.md), [wipe your disks](./4_wipe_all_disks.md) and [set the BIOS/UEFI](./5_set_bios_uefi.md) . Then you can [boot your 3Node](./6_boot_3node.md). If you are planning in building a farm in data center, [read this section](../advanced_networking/advanced_networking_toc.md). +Note: Once you have the necessary hardware, you need to [create a farm](./1_create_farm.md), [create a Zero-OS bootstrap image](./2_bootstrap_image.md), [wipe your disks](./4_wipe_all_disks.md) and [set the BIOS/UEFI](./5_set_bios_uefi.md) . Then you can [boot your 3Node](./6_boot_3node.md). If you are planning in building a farm in data center, [read this section](advanced_networking_toc.md). diff --git a/collections/farmers/3node_building/3node_building.md b/collections/farmers/3node_building/3node_building.md index 8f26b69..c7fe3f9 100644 --- a/collections/farmers/3node_building/3node_building.md +++ b/collections/farmers/3node_building/3node_building.md @@ -2,7 +2,7 @@ This section of the ThreeFold Farmers book presents the necessary and basic steps to build a DIY 3Node. -For advanced farming information, such as GPU farming and room parameters, refer to the section [Farming Optimization](../farming_optimization/farming_optimization.md). +For advanced farming information, such as GPU farming and room parameters, refer to the section [Farming Optimization](farming_optimization.md).

Table of Contents

diff --git a/collections/farmers/3node_building/4_wipe_all_disks.md b/collections/farmers/3node_building/4_wipe_all_disks.md index 4e252a5..afce8aa 100644 --- a/collections/farmers/3node_building/4_wipe_all_disks.md +++ b/collections/farmers/3node_building/4_wipe_all_disks.md @@ -101,6 +101,6 @@ If you're having issues wiping the disks, you might need to use **--force** or * If you're having trouble getting your disks recognized by Zero-OS, some farmers have had success enabling AHCI mode for SATA in their BIOS. -If you are using a server with onboard storage, you might need to [re-flash the RAID card](../../faq/faq.md#is-there-a-way-to-bypass-raid-in-order-for-zero-os-to-have-bare-metals-on-the-system-no-raid-controller-in-between-storage-and-the-grid). +If you are using a server with onboard storage, you might need to [re-flash the RAID card](faq@@faq.md#is-there-a-way-to-bypass-raid-in-order-for-zero-os-to-have-bare-metals-on-the-system-no-raid-controller-in-between-storage-and-the-grid). From c52ba83f80c61f6b55519962c48c1514a287a4fe Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 11:05:14 -0400 Subject: [PATCH 031/134] dy, added _v4 for farming in summary --- books/duniayetu_dar/SUMMARY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/books/duniayetu_dar/SUMMARY.md b/books/duniayetu_dar/SUMMARY.md index 9d44af8..8ca9770 100644 --- a/books/duniayetu_dar/SUMMARY.md +++ b/books/duniayetu_dar/SUMMARY.md @@ -4,8 +4,8 @@ - [Countries don't have their Internet](why/countries_no_internet.md) - [Human Right](why/internet_human_right.md) - [Social Warming](why/social_warming.md) -- [Farming](farming/farming.md) - - [TFNodes](farming/tfnodes.md) +- [Farming](farming_v4/farming.md) + - [TFNodes](farming_v4/tf_nodes.md) - [Vision](values/values.md) - [Planet and People First](values/planet_people_first.md) - [Proof of Authenticity](values/poa.md) From cb2ed3636e7c3e63c089feb2716f6e4bbb436e4f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 11:09:55 -0400 Subject: [PATCH 032/134] dy update summary --- books/duniayetu_dar/SUMMARY.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/books/duniayetu_dar/SUMMARY.md b/books/duniayetu_dar/SUMMARY.md index 8ca9770..5105142 100644 --- a/books/duniayetu_dar/SUMMARY.md +++ b/books/duniayetu_dar/SUMMARY.md @@ -8,11 +8,11 @@ - [TFNodes](farming_v4/tf_nodes.md) - [Vision](values/values.md) - [Planet and People First](values/planet_people_first.md) - - [Proof of Authenticity](values/poa.md) + - [Proof of Authenticity](p2p/poa.md) - [Problems](problems/problems.md) - - [painkillers and onions](problems/no_pain_killer.md) - - [Clouds are C omplicated](problems/cd_issues_cloud_not_enough.md) - - [Content Delivery is Expensive](problems/cd_issues_cost.md) + - [Painkillers and Onions](problems/no_pain_killer.md) + - [Clouds are Complicated](problems/cd_issues_cloud_not_enough.md) + - [Content Delivery is Expensive](problems/cd_issues_cost.md) - [Solutions](solutions/solutions.md) - [Decentralized Cloud](solutions/cloud/cloud.md) - [Content Providers](solutions/content_providers/content_providers.md) @@ -32,14 +32,14 @@ - [About Us](dy_intro/dunia_yetu/about_us.md) - [Our Core Values](dy_intro/dunia_yetu/our_core_values.md) - [What We Offer](dy_intro/what_we_offer/what_we_offer.md) - - [A New Internet](dy_intro/what_we_offer/new_internet.md) - - [Coding Academy](dy_intro/what_we_offer/coding_academy.md) - - [Innovation Hubs](dy_intro/what_we_offer/innovation_hubs.md) + - [A New Internet](dy_intro/what_we_offer/new_internet.md) + - [Coding Academy](dy_intro/what_we_offer/coding_academy.md) + - [Innovation Hubs](dy_intro/what_we_offer/innovation_hubs.md) - [How you can Participate](dy_intro/how_you_can_participate/participate.md) - - [Host a Node](dy_intro/how_you_can_participate/host_a_node.md) - - [Build on top of Tanzania's decentralised Internet](dy_intro/how_you_can_participate/build.md) - - [Join Our Coding Academy](dy_intro/how_you_can_participate/coding_participate.md) - - [Join Our Community](dy_intro/how_you_can_participate/community_participate.md) + - [Host a Node](dy_intro/how_you_can_participate/host_a_node.md) + - [Build on top of Tanzania's decentralised Internet](dy_intro/how_you_can_participate/build.md) + - [Join Our Coding Academy](dy_intro/how_you_can_participate/coding_participate.md) + - [Join Our Community](dy_intro/how_you_can_participate/community_participate.md) - [SASHA sidebar](sasha/ilovezanzibar.md) From 38253c536ce0804ae2999ccf483c3d1151ecec9c Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 11:15:54 -0400 Subject: [PATCH 033/134] dy summary all fixed --- books/duniayetu_dar/SUMMARY.md | 14 ++--- .../problems/painkiller/cd_issues_cost.md | 53 +++++++++++++++++++ 2 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 collections/problems/painkiller/cd_issues_cost.md diff --git a/books/duniayetu_dar/SUMMARY.md b/books/duniayetu_dar/SUMMARY.md index 5105142..5bd86f1 100644 --- a/books/duniayetu_dar/SUMMARY.md +++ b/books/duniayetu_dar/SUMMARY.md @@ -1,7 +1,7 @@ - [Why](why/why.md) - [Cloud Too Centralized](why/current_cloud_too_centralized.md) - - [Countries don't have their Internet](why/countries_no_internet.md) + - [Countries Don't Have Their Own Internet](why/countries_no_internet.md) - [Human Right](why/internet_human_right.md) - [Social Warming](why/social_warming.md) - [Farming](farming_v4/farming.md) @@ -17,17 +17,16 @@ - [Decentralized Cloud](solutions/cloud/cloud.md) - [Content Providers](solutions/content_providers/content_providers.md) - - [Web4](WEB4/web4.md) + - [Web4](web4/web4.md) - [FreeFlow Movement](freeflow/freeflow_movement.md) - [Community Principles](freeflow/community_principles/community_principles.md) - [Social Media Protocols](social_media_protocols/protocols.md) - [Nostr Protocol](social_media_protocols/nostr.md) - [Activity Pub](social_media_protocols/activitypub.md) - - [Activity Pub 2](social_media_protocols/activitypub2.md) - [Technology](web4/web4.md) - [FreeFlow Self](web4/freeflowself/freeflowself.md) - [Actor Based Development](web4/actor_based/actor_based_approach.md) - - [Vlang](web4/vlang/vlang.md) + - [Vlang](web4/vlang/vlang.md) - [Dunia Yetu](dy_intro/dunia_yetu/dunia_yetu.md) - [About Us](dy_intro/dunia_yetu/about_us.md) - [Our Core Values](dy_intro/dunia_yetu/our_core_values.md) @@ -35,13 +34,10 @@ - [A New Internet](dy_intro/what_we_offer/new_internet.md) - [Coding Academy](dy_intro/what_we_offer/coding_academy.md) - [Innovation Hubs](dy_intro/what_we_offer/innovation_hubs.md) - - [How you can Participate](dy_intro/how_you_can_participate/participate.md) + - [How You Can Participate](dy_intro/how_you_can_participate/participate.md) - [Host a Node](dy_intro/how_you_can_participate/host_a_node.md) - - [Build on top of Tanzania's decentralised Internet](dy_intro/how_you_can_participate/build.md) + - [Build on Top of Tanzania's Decentralised Internet](dy_intro/how_you_can_participate/build.md) - [Join Our Coding Academy](dy_intro/how_you_can_participate/coding_participate.md) - [Join Our Community](dy_intro/how_you_can_participate/community_participate.md) -- [SASHA sidebar](sasha/ilovezanzibar.md) - - diff --git a/collections/problems/painkiller/cd_issues_cost.md b/collections/problems/painkiller/cd_issues_cost.md new file mode 100644 index 0000000..e9729da --- /dev/null +++ b/collections/problems/painkiller/cd_issues_cost.md @@ -0,0 +1,53 @@ +![](img/cdn2.png) + +## high CDN cost = Content Delivery + +- CDN's cost between 20 and 60 on major CDN's from Amazon, Google, ..., after negotiation and willingness to park lots of money and commit per month it mught be certain discount. +- Other specialized CDN's can be around 10 per TB if services from e.g. Europe or US, smaller CDN's are much more expensive. +- Managing these CDN's is expensive and not easy job. + +>> this means to service 10m people it would cost about 1 to 2m USD per month just for CDN alone. + + +# CDN pricing Amazon + +Remark no fees included for HTTPS requests, but should be ok for volume we are talking about, if app is made in right way. + +## US + +![](img/amz_us.png) + += 28 USD per TB in US + +## EUR + +![](img/amz_eur.png) + +## MIDDLE EAST + +![](img/amz_middleeast.png) + += 56 USD per TB + +## AFRICA + +![](img/amz_sa.png) + += 56 USD per TB + +## Discounts + +- discounts can be negotiated but required serious amounts of pre-financing + +# CDN pricing Google + +Remark no fees included for HTTPS requests, but should be ok for volume we are talking about, if app is made in right way. + +![](img/google_1.png) + +![](img/google2.png) + +https://cloud.google.com/cdn/pricing + + + From 875f0db8848c3a69aadeeec12270e4cf180dd483 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 11:20:26 -0400 Subject: [PATCH 034/134] dy fixed farming section --- books/duniayetu_dar/SUMMARY.md | 1 + collections/farming_v4/farming.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/books/duniayetu_dar/SUMMARY.md b/books/duniayetu_dar/SUMMARY.md index 5bd86f1..e20b0fc 100644 --- a/books/duniayetu_dar/SUMMARY.md +++ b/books/duniayetu_dar/SUMMARY.md @@ -6,6 +6,7 @@ - [Social Warming](why/social_warming.md) - [Farming](farming_v4/farming.md) - [TFNodes](farming_v4/tf_nodes.md) + - [TFRouters](farming_v4/tf_routers.md) - [Vision](values/values.md) - [Planet and People First](values/planet_people_first.md) - [Proof of Authenticity](p2p/poa.md) diff --git a/collections/farming_v4/farming.md b/collections/farming_v4/farming.md index e7f32c3..d687589 100644 --- a/collections/farming_v4/farming.md +++ b/collections/farming_v4/farming.md @@ -42,7 +42,7 @@ Cell's get colors in line to need of service: ### How to Become a Farmer -- Buy a *TFNODE (Compute/Storage node) or *TFROUTER (Mycelium Network Node). +- Buy a [TFNode](./tf_nodes.md) or a [TFRouter](./tf_routers.md) (Mycelium Network Node). - Build your own TFNode - Our software makes it easy to get started. From 0e52f7ce42eabbc45c60e905c2c699d77b65cbb9 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 12:42:21 -0400 Subject: [PATCH 035/134] dy reorganized summary, added intro page from sam's blog --- books/duniayetu_dar/SUMMARY.md | 59 +++++++++---------- collections/dy_intro/dunia_yetu/dunia_yetu.md | 5 ++ 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/books/duniayetu_dar/SUMMARY.md b/books/duniayetu_dar/SUMMARY.md index e20b0fc..62e7278 100644 --- a/books/duniayetu_dar/SUMMARY.md +++ b/books/duniayetu_dar/SUMMARY.md @@ -1,33 +1,3 @@ - -- [Why](why/why.md) - - [Cloud Too Centralized](why/current_cloud_too_centralized.md) - - [Countries Don't Have Their Own Internet](why/countries_no_internet.md) - - [Human Right](why/internet_human_right.md) - - [Social Warming](why/social_warming.md) -- [Farming](farming_v4/farming.md) - - [TFNodes](farming_v4/tf_nodes.md) - - [TFRouters](farming_v4/tf_routers.md) -- [Vision](values/values.md) - - [Planet and People First](values/planet_people_first.md) - - [Proof of Authenticity](p2p/poa.md) -- [Problems](problems/problems.md) - - [Painkillers and Onions](problems/no_pain_killer.md) - - [Clouds are Complicated](problems/cd_issues_cloud_not_enough.md) - - [Content Delivery is Expensive](problems/cd_issues_cost.md) -- [Solutions](solutions/solutions.md) - - [Decentralized Cloud](solutions/cloud/cloud.md) - - [Content Providers](solutions/content_providers/content_providers.md) - - - [Web4](web4/web4.md) -- [FreeFlow Movement](freeflow/freeflow_movement.md) - - [Community Principles](freeflow/community_principles/community_principles.md) -- [Social Media Protocols](social_media_protocols/protocols.md) - - [Nostr Protocol](social_media_protocols/nostr.md) - - [Activity Pub](social_media_protocols/activitypub.md) -- [Technology](web4/web4.md) - - [FreeFlow Self](web4/freeflowself/freeflowself.md) - - [Actor Based Development](web4/actor_based/actor_based_approach.md) - - [Vlang](web4/vlang/vlang.md) - [Dunia Yetu](dy_intro/dunia_yetu/dunia_yetu.md) - [About Us](dy_intro/dunia_yetu/about_us.md) - [Our Core Values](dy_intro/dunia_yetu/our_core_values.md) @@ -40,5 +10,34 @@ - [Build on Top of Tanzania's Decentralised Internet](dy_intro/how_you_can_participate/build.md) - [Join Our Coding Academy](dy_intro/how_you_can_participate/coding_participate.md) - [Join Our Community](dy_intro/how_you_can_participate/community_participate.md) +- [Vision](values/values.md) + - [Planet and People First](values/planet_people_first.md) + - [Proof of Authenticity](p2p/poa.md) +- [Why](why/why.md) + - [Cloud Too Centralized](why/current_cloud_too_centralized.md) + - [Countries Don't Have Their Own Internet](why/countries_no_internet.md) + - [Human Right](why/internet_human_right.md) + - [Social Warming](why/social_warming.md) +- [Problems](problems/problems.md) + - [Painkillers and Onions](problems/no_pain_killer.md) + - [Clouds are Complicated](problems/cd_issues_cloud_not_enough.md) + - [Content Delivery is Expensive](problems/cd_issues_cost.md) +- [Solutions](solutions/solutions.md) + - [Decentralized Cloud](solutions/cloud/cloud.md) + - [Content Providers](solutions/content_providers/content_providers.md) + + - [Web4](web4/web4.md) +- [Farming](farming_v4/farming.md) + - [TFNodes](farming_v4/tf_nodes.md) + - [TFRouters](farming_v4/tf_routers.md) +- [FreeFlow Movement](freeflow/freeflow_movement.md) + - [Community Principles](freeflow/community_principles/community_principles.md) +- [Social Media Protocols](social_media_protocols/protocols.md) + - [Nostr Protocol](social_media_protocols/nostr.md) + - [Activity Pub](social_media_protocols/activitypub.md) +- [Technology](web4/web4.md) + - [FreeFlow Self](web4/freeflowself/freeflowself.md) + - [Actor Based Development](web4/actor_based/actor_based_approach.md) + - [Vlang](web4/vlang/vlang.md) diff --git a/collections/dy_intro/dunia_yetu/dunia_yetu.md b/collections/dy_intro/dunia_yetu/dunia_yetu.md index 757cd4d..e6a57b0 100644 --- a/collections/dy_intro/dunia_yetu/dunia_yetu.md +++ b/collections/dy_intro/dunia_yetu/dunia_yetu.md @@ -2,3 +2,8 @@ ![Image](img/dunia2.png#medium#mx-auto) +Together with a group of tech community leaders and innovators from Dar Es Salaam, we have kicked off a project called Dunia Yetu (Our World, in Swahili). + +The primary goal of Dunia Yetu is to deliver a set of tools and a platform which will allow many thousands of coders in East Africa to create their own digital sovereign Internet. For now, it begins with the deployment of local ThreeFold infrastructure and a series of events and gatherings. + +Learn more about the project and the initial steps by reading this book. \ No newline at end of file From a2af5a8038698c03084f136c5a59304f7969e83d Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 12:44:11 -0400 Subject: [PATCH 036/134] dy updated mdbook title for booktoml --- heroscript/duniayetu/book_collections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/heroscript/duniayetu/book_collections.md b/heroscript/duniayetu/book_collections.md index a77e8e6..2381a8a 100644 --- a/heroscript/duniayetu/book_collections.md +++ b/heroscript/duniayetu/book_collections.md @@ -2,7 +2,7 @@ ```js -!!book.generate name:'duniayetu' title:'TFGrid Internet 4.0' +!!book.generate name:'duniayetu' title:'Dunia Yetu' url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/duniayetu_dar' From 67c09a80da4601284150e4fe8805a6b12ad29e33 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 13:16:16 -0400 Subject: [PATCH 037/134] dy, problems update --- books/duniayetu_dar/SUMMARY.md | 2 +- collections/dy_intro/dunia_yetu/about_us.md | 3 +- .../dy_intro/how_you_can_participate/build.md | 2 +- .../how_you_can_participate/host_a_node.md | 12 +-- collections/p2p/poa/poa.md | 8 +- .../painkiller/cd_issues_cloud_not_enough.md | 89 ++++++++++--------- .../problems/painkiller/cd_issues_cost.md | 54 ++++++----- .../problems/painkiller/no_pain_killer.md | 12 +-- collections/values/values.md | 2 +- collections/why/countries_no_internet.md | 12 +-- .../internet_human_right.md | 2 +- .../why/social_warming/social_warming.md | 7 +- 12 files changed, 103 insertions(+), 102 deletions(-) diff --git a/books/duniayetu_dar/SUMMARY.md b/books/duniayetu_dar/SUMMARY.md index 62e7278..932c8cc 100644 --- a/books/duniayetu_dar/SUMMARY.md +++ b/books/duniayetu_dar/SUMMARY.md @@ -20,7 +20,7 @@ - [Social Warming](why/social_warming.md) - [Problems](problems/problems.md) - [Painkillers and Onions](problems/no_pain_killer.md) - - [Clouds are Complicated](problems/cd_issues_cloud_not_enough.md) + - [Clouds Are Complicated](problems/cd_issues_cloud_not_enough.md) - [Content Delivery is Expensive](problems/cd_issues_cost.md) - [Solutions](solutions/solutions.md) - [Decentralized Cloud](solutions/cloud/cloud.md) diff --git a/collections/dy_intro/dunia_yetu/about_us.md b/collections/dy_intro/dunia_yetu/about_us.md index 632afc8..49d5c34 100644 --- a/collections/dy_intro/dunia_yetu/about_us.md +++ b/collections/dy_intro/dunia_yetu/about_us.md @@ -1,12 +1,13 @@ ![Image](img/about.png#medium#mx-auto) ## About Us -### Who we are +### Who We Are Dunia Yetu, which means "Our World" in Swahili, is not just a name; it's a powerful symbol of collective empowerment and a vision of a digital future where Tanzanians are in control of their own destiny. It embodies unity, autonomy, and a commitment to digital sovereignty. As a people-powered movement, Dunia Yetu aims to redefine Tanzania's digital ecosystem, emphasising collective ownership and a self-reliant digital future shaped by the community. Envision a future where Tanzanians create and oversee their digital experiences, tailored to the nation’s unique needs. Through Dunia Yetu, this vision becomes reality. ### Our Mission + Our mission is to unite a community, enhancing Tanzanian autonomy and independence. Empowering citizens to collectively shape Tanzania's future starts with regaining control of the nation’s Internet infrastructure and establishing a self-reliant digital ecosystem. In the next two years, we aim to empower thousands of coders with an innovative network and toolkit. Beyond technology, our initiative signifies more—an independent digital ecosystem proudly owned and managed by East Africans. The Internet was meant to be a peer-to-peer infrastructure where we are at the centre of our data and digital lives. Inspired by the past, we’re building an Internet how “the” Internet was originally intended. diff --git a/collections/dy_intro/how_you_can_participate/build.md b/collections/dy_intro/how_you_can_participate/build.md index 5d9f695..b5789e1 100644 --- a/collections/dy_intro/how_you_can_participate/build.md +++ b/collections/dy_intro/how_you_can_participate/build.md @@ -1,6 +1,6 @@ ![image](img/build2.png "image_tooltip") -## Build on top of Tanzania’s decentralised internet +## Build on Top of Tanzania’s Decentralised Internet **True digital sovereignty for open-source builders** diff --git a/collections/dy_intro/how_you_can_participate/host_a_node.md b/collections/dy_intro/how_you_can_participate/host_a_node.md index 6fc6ab3..2c055a5 100644 --- a/collections/dy_intro/how_you_can_participate/host_a_node.md +++ b/collections/dy_intro/how_you_can_participate/host_a_node.md @@ -1,4 +1,4 @@ -## Host a node +## Host a Node You can help make Tanzania’s own sovereign internet a reality by hosting a node. @@ -6,19 +6,19 @@ By connecting hardware at your home or office – or anywhere you’d like – y ![image](img/node.png "image_tooltip") -### How to build a node +### How to Build a Node **Step 1 -** Obtain the hardware for a node which can be purchased [here](https://marketplace.3node.global/index.php) -**Step 2 -** Follow this [instruction manual](https://manual.grid.tf/farmers/3node_building/3node_building.html) to set up your node +**Step 2 -** Follow the [instruction manual](https://manual.grid.tf/documentation/farmers/3node_building/3node_building.html) to set up your node -**Step 3 -** Earn TFT [(learn more)](https://manual.grid.tf/farmers/farming_optimization/farming_optimization.html) +**Step 3 -** Earn TFT ([Learn more](https://manual.grid.tf/documentation/farmers/farming_optimization/calculate_roi.html)) We have a team on the ground in Dar Es Salaam for all the necessary support that you might need with setting up your node. -### How to earn TFT +### How to Earn TFT -Farmers earn TFT according to the amount of Internet capacity their Nodes connect to the ThreeFold Grid. The Internet capacity is verified by the ThreeFold Blockchain on an ongoing basis using the “Proof-of-Capacity” algorithm. Learn more [here](https://manual.grid.tf/threefold_token/threefold_token.html). +Farmers earn TFT according to the amount of Internet capacity their Nodes connect to the ThreeFold Grid. The Internet capacity is verified by the ThreeFold Blockchain on an ongoing basis using the “Proof-of-Capacity” algorithm. Learn more [here](https://manual.grid.tf/documentation/threefold_token/threefold_token.html). ![image](img/tft.png "image_tooltip") diff --git a/collections/p2p/poa/poa.md b/collections/p2p/poa/poa.md index 41d6790..0303348 100644 --- a/collections/p2p/poa/poa.md +++ b/collections/p2p/poa/poa.md @@ -20,13 +20,13 @@ what is the ability for the Author to act in line to - People First - is the author capable to give without expectations to the benefit of the community (people). -There are 3 ways how a vote can be done +There are 3 ways how a vote can be done: -- **positive** +- **Positive** - means we agree and want to give our support -- **neutral** +- **Neutral** - means we are not sure, we don't wanna say yes or no -- **negative** +- **Negative** - means we don't agree diff --git a/collections/problems/painkiller/cd_issues_cloud_not_enough.md b/collections/problems/painkiller/cd_issues_cloud_not_enough.md index 2d2b4a8..2b0ce92 100644 --- a/collections/problems/painkiller/cd_issues_cloud_not_enough.md +++ b/collections/problems/painkiller/cd_issues_cloud_not_enough.md @@ -1,71 +1,80 @@ ![](img/cloudcomplex.png) -# Do current clouds resolve your problems? +# Do Current Clouds Resolve Your Problems? This page describe some of the issues you might encounter if your use clouds to fullfil your requirements for your solution. -## high CDN cost = Content Delivery +## High CDN Cost = Content Delivery - CDN's cost between 20 and 60 on major CDN's from Amazon, Google, ..., after negotiation and willingness to park lots of money and commit per month it mught be certain discount. - Other specialized CDN's can be around 10 per TB if services from e.g. Europe or US, smaller CDN's are much more expensive. -- Managing these CDN's is expensive and not easy job. +- Managing these CDN's is expensive and not an easy job. ->> this means to service 10m people it would cost about 1 to 2m USD per month just for CDN alone. +>> This means to service 10m people, it would cost about 1 to 2m USD per month just for CDN alone. -## High cost of operations +## High Cost of Operations -- cloud servers -- managing those servers, what if mistakes are made +There are high cost of operations attributed to this type of technology. -## Ability to be shut down on the public cloud +- Cloud servers + - Managing those servers + - What if mistakes are made -- its highly probable that within months there would be attempts to shut down the CDN's or often it happens more softly (give bad service and make your product look bad). +## Ability to Shut Down Servers -## apps typically not ready to scale +There is always the possibility to be shut down on the public cloud -- ... -- there are optimizations which can be done e.g. better indexing, better queries, more optimization strategies e.g. using redis -- more knowledge is required to optimize the app +It's highly probable that within months there would be attempts to shut down the CDN's or often it happens more softly (give bad service and make your product look bad). -## Ability to shutdown the mobile apps +## Can't Scale Apps -- google/apple might chose to shutdown apps -- not easy to know how fast this will go, it might just be overnight +Apps are typically not ready to scale. + +- There are optimizations which can be done e.g. better indexing, better queries, more optimization strategies e.g. using redis +- More knowledge is required to optimize the app + +## Ability to Shutdown the Mobile Apps + +- Google/Apple might chose to shutdown apps +- Not easy to know how fast this will go, it might just be overnight ## GDPR -- are very annoying constraints in e.g. Europe, need to be careful to comply +The GDPR constraints are to be taken into account. They are very annoying constraints in e.g. Europe, need to be careful to comply. -## Legal potential trouble +## Legal Potential Trouble -- its important to have good terms & conditions and think which legal entity will be the counterpart of the T&C -- there will be legal requirements like how to shutdown / recognize bad content +- It's important to have good *Terms & Conditions* (T&C) and think which legal entity will be the counterpart of the T&C +- There will be legal requirements, e.g. shutdown and/or recognize bad content -## Redundancy / Uptime +## Redundancy and Uptime -- is the site redundant, can data be lost? -- what happens if a datacenter goes down? -- or what happens if a DB server crashes? -- what happens if e.g. DB gets corrupted? -- how to make sure people always deserve the service they need -- if it kind of works now, will it work if 10x more people? -- is everything monitored? -- if an issue is detected are there people available 24h/day 7/7 to fix -- do the people who will fix have the right knowledge, where is that knowledge stored -- is the monitoring system itself monitored, very often monitoring by itself will stop working +There are a factor of parameters that need to be taken into account to provide a reliable service. + +- Is the site redundant, can data be lost? +- What happens if a datacenter goes down? + - Or what happens if a DB server crashes? +- What happens if e.g. DB gets corrupted? +- How to make sure people always deserve the service they need +- If it kind of works now, will it work if 10x more people? +- Is everything monitored? +- If an issue is detected are there people available 24h/day 7/7 to fix +- Do the people who will fix have the right knowledge, where is that knowledge stored +- Is the monitoring system itself monitored, very often monitoring by itself will stop working ## Performance -- how to see performance is not good enough for customers -- how to make sure we can easily fix it, can be region specific -- how to relocate services? +Performance affect user experience directly and must be dealt with care. -## protect against human error - -- mistakes are and will be made this might have huge impact on uptime and if not careful loose data -- truck factor: what happens if someone goes away? can org easily take over and continue -- level of automation & documentation? -- how is version control done +- How to see performance is not good enough for customers +- How to make sure we can easily fix it, can be region specific +- How to relocate services? +## Protect Against Human Error +The system in place must be able to protect against human error. This has to be considered. +- Mistakes are and will be made this might have huge impact on uptime and if not careful loose data +- Truck factor: what happens if someone goes away? Can org easily take over and continue +- Level of automation & documentation? +- How is version control done diff --git a/collections/problems/painkiller/cd_issues_cost.md b/collections/problems/painkiller/cd_issues_cost.md index e9729da..8d7cc5f 100644 --- a/collections/problems/painkiller/cd_issues_cost.md +++ b/collections/problems/painkiller/cd_issues_cost.md @@ -1,53 +1,51 @@ ![](img/cdn2.png) -## high CDN cost = Content Delivery +## High CDN Cost = Content Delivery -- CDN's cost between 20 and 60 on major CDN's from Amazon, Google, ..., after negotiation and willingness to park lots of money and commit per month it mught be certain discount. +- CDN's cost between 20 and 60 on major CDN's from Amazon, Google, ..., after negotiation and willingness to park lots of money and commit per month it might be certain discount. - Other specialized CDN's can be around 10 per TB if services from e.g. Europe or US, smaller CDN's are much more expensive. - Managing these CDN's is expensive and not easy job. ->> this means to service 10m people it would cost about 1 to 2m USD per month just for CDN alone. +>> This means to service 10m people, it would cost about 1 to 2m USD per month just for CDN alone. -# CDN pricing Amazon +# CDN Pricing Amazon Remark no fees included for HTTPS requests, but should be ok for volume we are talking about, if app is made in right way. -## US +| Location | Price per TB (USD) | +| ----------- | ------------------ | +| US | 28 | +| Middle East | 56 | +| Africa | 56 | -![](img/amz_us.png) +## CloudFront Price Amazon: Regional Data Transfer Out to Origin (per GB) -= 28 USD per TB in US +| | United States, Mexico, and Canada | Europe, Israel, and Türkiye |  South Africa, Kenya, Nigeria,  and Middle East | South America | Japan | Australia and New Zealand | Hong Kong, Indonesia,  Philippines, Singapore, South Korea, Taiwan, Thailand, Malaysia, and Vietnam | India | +| ----------------- | --------------------------------- | --------------------------- | ----------------------------------------------- | ------------- | ------ | ------------------------- | --------------------------------------------------------------------------------------------------- | ------ | +| All Data Transfer | $0.020 | $0.020 | $0.060 | $0.125 | $0.060 | $0.080 | $0.060 | $0.160 | -## EUR - -![](img/amz_eur.png) - -## MIDDLE EAST - -![](img/amz_middleeast.png) - -= 56 USD per TB - -## AFRICA - -![](img/amz_sa.png) - -= 56 USD per TB +References: https://aws.amazon.com/cloudfront/pricing/ ## Discounts -- discounts can be negotiated but required serious amounts of pre-financing +- Discounts can be negotiated but required serious amounts of pre-financing -# CDN pricing Google +# CDN Pricing Google Remark no fees included for HTTPS requests, but should be ok for volume we are talking about, if app is made in right way. -![](img/google_1.png) +| | **< 10 TiB** | **10 TiB-150 TiB** | **150 TiB-500 TiB** | **\> 500 TiB** | +| ------------------------------------------------------------------------------ | ----- | ------------ | ------------------ | ------------------- | +| Asia Pacific
(including Hong Kong) | $0.09 | $0.06 | $0.05 | On demand | +| China | $0.20 | $0.17 | $0.16 | On demand | +| Europe | $0.08 | $0.055 | $0.03 | On demand | +| North America
(including Hawaii) | $0.08 | $0.055 | $0.03 | On demand | +| Oceania | $0.11 | $0.09 | $0.08 | On demand | +| South America | $0.09 | $0.06 | $0.05 | On demand | +| All other destinations
(including Mexico, Central America, and Middle East) | $0.09 | $0.06 | $0.05 | On demand | -![](img/google2.png) - -https://cloud.google.com/cdn/pricing +References: https://cloud.google.com/cdn/pricing diff --git a/collections/problems/painkiller/no_pain_killer.md b/collections/problems/painkiller/no_pain_killer.md index 94e6135..b0ae44e 100644 --- a/collections/problems/painkiller/no_pain_killer.md +++ b/collections/problems/painkiller/no_pain_killer.md @@ -1,12 +1,12 @@ ![](img/painkillers.png) -# Painkillers are not a solution. +# Painkillers Are Not a Solution -Currently, most develop their digital future by implementing many independent projects which all act as painkillers to their problems. While a painkiller might fix symptoms, it rarely solves the root issue. This happens for content providers, countries, enterprises. +Currently, most develop their digital future by implementing many independent projects which all act as painkillers to their problems. While a painkiller might fix symptoms, it rarely solves the root issue. This happens for content providers, countries, enterprises, etc. -We should stop treating the symptoms it becomes time to resolve the root cause. +We should stop treating the symptoms. It's time to resolve the root cause. -We believe you have the opportunity to leapfrog straight to a solution which is both easier to implement and solves most of its issues all at once. +We believe you have the opportunity to leapfrog straight to a solution which is both easier to implement and solves most of the issues all at once. This has huge benefits: @@ -16,7 +16,7 @@ This has huge benefits: * It is more prepared for the future * It's greener (such a system will use up to 100 times less energy) -## onion layers +## Onion Layers ![](img/onion_layers.png) @@ -38,5 +38,5 @@ Now, imagine when hundreds of such models are connectted to one another and exch The problem here is that individual systems are trying to redo things better, however they are using the same base infrastructure. They simply redefine that base towards a relevant issue. Ths cannot lead to optimal systems since solutions are managed around a single functiion. If multiiple people need to use that function it gets very complicated. -One way to go around this has been to use Enterprise Message Bus: Controlling how models talk to each other by pre-defining the messages exchanged. But this does not solve the problem at the root. +One way to go around this has been to use Enterprise Message Bus: controlling how models talk to each other by pre-defining the messages exchanged. But this does not solve the problem at the root. diff --git a/collections/values/values.md b/collections/values/values.md index 3c41eae..db54a9c 100644 --- a/collections/values/values.md +++ b/collections/values/values.md @@ -1,5 +1,5 @@ # Values -At ThreeFold, we have the planet and people first in mind. +We always have the planet and people first in mind. Anything we do needs to improve our planet's situation and help the people around us. \ No newline at end of file diff --git a/collections/why/countries_no_internet.md b/collections/why/countries_no_internet.md index 59f2da6..6dc569a 100644 --- a/collections/why/countries_no_internet.md +++ b/collections/why/countries_no_internet.md @@ -1,21 +1,15 @@ ![](fortune_no_internet.png) - # Many Countries Do Not Have Their Own Internet ![alt text](nointernet.png) - -The issue extends beyond countries lacking their own Internet infrastructure; a significant portion of the global population still lacks access to the Internet. +The issue extends beyond countries lacking their own Internet infrastructure: a significant portion of the global population still lacks access to the Internet. It is a must to democratize the Internet. -## IMMENSE LOSSES - -**BECAUSE OF THE CENTRALIZED MODEL** - -some companies have access to the data of hundreds -of millions of citizens, this makes us a product. +## The Centralized Model Leads to Immense Losses +Some companies have access to the data of hundreds of millions of citizens, this makes us a product. ![alt text](not_internet_losses.png) \ No newline at end of file diff --git a/collections/why/internet_human_right/internet_human_right.md b/collections/why/internet_human_right/internet_human_right.md index 3f6e35c..a202272 100644 --- a/collections/why/internet_human_right/internet_human_right.md +++ b/collections/why/internet_human_right/internet_human_right.md @@ -1,7 +1,7 @@ ![](img/humanityplanet.jpg) -# Why we do what we do +# Why We Do What We Do ## Internet Access is a Human Right diff --git a/collections/why/social_warming/social_warming.md b/collections/why/social_warming/social_warming.md index 7f8785c..ce90459 100644 --- a/collections/why/social_warming/social_warming.md +++ b/collections/why/social_warming/social_warming.md @@ -1,18 +1,17 @@ ![](img/social_warming.png) -## +5 billion people in survival mode +## +5 Billion People in Survival Mode ![](img/toabondance.png) -## Our Kids define our Future World +## Our Kids Define our Future World ![](img/world_behind.png) We are maybe too much focussed on what kind of world we will leave behind, rather than thinking about how we need to raise our kids so that they will treat our world differently. - -## Education is everything +## Education is Everything ![](img/africa_young.png) From db534dcd2ca40163e1fc81d17822dd37d46f6de8 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 13:29:28 -0400 Subject: [PATCH 038/134] dy reorganization set solutiosn with tech to avoid empty files --- books/duniayetu_dar/SUMMARY.md | 10 ++-- collections/farming_v4/tf_routers.md | 2 +- .../community_principles.md | 7 +-- .../problems/painkiller/cd_issues_cost.md | 2 +- collections/social_media_protocols/nostr.md | 9 +--- .../solutions/content_providers/cdn_cost.md | 53 ------------------- collections/solutions/solutions.md | 6 +++ .../web4/actor_based/actor_based_approach.md | 8 +-- collections/web4/freeflowself/freeflowself.md | 2 - 9 files changed, 15 insertions(+), 84 deletions(-) delete mode 100644 collections/solutions/content_providers/cdn_cost.md diff --git a/books/duniayetu_dar/SUMMARY.md b/books/duniayetu_dar/SUMMARY.md index 932c8cc..a8d0c09 100644 --- a/books/duniayetu_dar/SUMMARY.md +++ b/books/duniayetu_dar/SUMMARY.md @@ -23,10 +23,11 @@ - [Clouds Are Complicated](problems/cd_issues_cloud_not_enough.md) - [Content Delivery is Expensive](problems/cd_issues_cost.md) - [Solutions](solutions/solutions.md) - - [Decentralized Cloud](solutions/cloud/cloud.md) - [Content Providers](solutions/content_providers/content_providers.md) + - [FreeFlow Self](web4/freeflowself/freeflowself.md) + - [Actor Based Development](web4/actor_based/actor_based_approach.md) + - [Vlang](web4/vlang/vlang.md) - - [Web4](web4/web4.md) - [Farming](farming_v4/farming.md) - [TFNodes](farming_v4/tf_nodes.md) - [TFRouters](farming_v4/tf_routers.md) @@ -35,9 +36,4 @@ - [Social Media Protocols](social_media_protocols/protocols.md) - [Nostr Protocol](social_media_protocols/nostr.md) - [Activity Pub](social_media_protocols/activitypub.md) -- [Technology](web4/web4.md) - - [FreeFlow Self](web4/freeflowself/freeflowself.md) - - [Actor Based Development](web4/actor_based/actor_based_approach.md) - - [Vlang](web4/vlang/vlang.md) - diff --git a/collections/farming_v4/tf_routers.md b/collections/farming_v4/tf_routers.md index 54f5be8..91bffab 100644 --- a/collections/farming_v4/tf_routers.md +++ b/collections/farming_v4/tf_routers.md @@ -13,7 +13,7 @@ It's an exciting node with a reasonable price point and enough CPU capacity to r More than 1 node can be installed in a larger office, hotel, home, etc., and they will automatically mesh together. -Each node runs our *ZNET Operating System, allowing for native integration into the TFGrid network. +Each node runs our ZeroNet Operating System, allowing for native integration into the TFGrid network. This operating system allows to create distributed networking on a planetary scale and allows our farmers to provide network capacity to the grid ecosystem. Zero-OS Nodes are seamlessly integrated with the Zero-Net nodes by design, requiring minimal configuration. They are part of our Autonomous Zero-OS Stack. diff --git a/collections/freeflow/community_principles/community_principles.md b/collections/freeflow/community_principles/community_principles.md index 9aa9a5c..d26e027 100644 --- a/collections/freeflow/community_principles/community_principles.md +++ b/collections/freeflow/community_principles/community_principles.md @@ -1,14 +1,9 @@ - - # FreeFlow Community Principles -> TODO: Page needs to be improved - ## Inclusion ![](img/principles_01.png) - “If not US, then who? If not NOW then when?” Anyone may be a part of FreeFlowCommunity. We welcome and respect the stranger. No pre-requisites exist for participation in our community. @@ -66,7 +61,7 @@ We value civil society. Community members who organize events should assume resp "We return to Responsible Community Building" -## Leave no Trace = Planet First +## Leave No Trace = Planet First ![](img/principles_08_.jpg) diff --git a/collections/problems/painkiller/cd_issues_cost.md b/collections/problems/painkiller/cd_issues_cost.md index 8d7cc5f..48001c2 100644 --- a/collections/problems/painkiller/cd_issues_cost.md +++ b/collections/problems/painkiller/cd_issues_cost.md @@ -6,7 +6,7 @@ - Other specialized CDN's can be around 10 per TB if services from e.g. Europe or US, smaller CDN's are much more expensive. - Managing these CDN's is expensive and not easy job. ->> This means to service 10m people, it would cost about 1 to 2m USD per month just for CDN alone. +> This means to service 10m people, it would cost about 1 to 2m USD per month just for CDN alone. # CDN Pricing Amazon diff --git a/collections/social_media_protocols/nostr.md b/collections/social_media_protocols/nostr.md index cce8fbe..510eec8 100644 --- a/collections/social_media_protocols/nostr.md +++ b/collections/social_media_protocols/nostr.md @@ -32,11 +32,4 @@ Despite its innovative approach, it has several limitations: - **Resource Constraints** - Running a relay requires resources, and smaller entities or individuals may struggle to participate as relay operators due to these constraints. - **Interoperability and Standards** - - As Nostr is an evolving protocol, maintaining interoperability between different clients and adherence to standards is challenging, which could lead to fragmentation. - - \ No newline at end of file + - As Nostr is an evolving protocol, maintaining interoperability between different clients and adherence to standards is challenging, which could lead to fragmentation. \ No newline at end of file diff --git a/collections/solutions/content_providers/cdn_cost.md b/collections/solutions/content_providers/cdn_cost.md deleted file mode 100644 index e9729da..0000000 --- a/collections/solutions/content_providers/cdn_cost.md +++ /dev/null @@ -1,53 +0,0 @@ -![](img/cdn2.png) - -## high CDN cost = Content Delivery - -- CDN's cost between 20 and 60 on major CDN's from Amazon, Google, ..., after negotiation and willingness to park lots of money and commit per month it mught be certain discount. -- Other specialized CDN's can be around 10 per TB if services from e.g. Europe or US, smaller CDN's are much more expensive. -- Managing these CDN's is expensive and not easy job. - ->> this means to service 10m people it would cost about 1 to 2m USD per month just for CDN alone. - - -# CDN pricing Amazon - -Remark no fees included for HTTPS requests, but should be ok for volume we are talking about, if app is made in right way. - -## US - -![](img/amz_us.png) - -= 28 USD per TB in US - -## EUR - -![](img/amz_eur.png) - -## MIDDLE EAST - -![](img/amz_middleeast.png) - -= 56 USD per TB - -## AFRICA - -![](img/amz_sa.png) - -= 56 USD per TB - -## Discounts - -- discounts can be negotiated but required serious amounts of pre-financing - -# CDN pricing Google - -Remark no fees included for HTTPS requests, but should be ok for volume we are talking about, if app is made in right way. - -![](img/google_1.png) - -![](img/google2.png) - -https://cloud.google.com/cdn/pricing - - - diff --git a/collections/solutions/solutions.md b/collections/solutions/solutions.md index e69de29..9fc8f39 100644 --- a/collections/solutions/solutions.md +++ b/collections/solutions/solutions.md @@ -0,0 +1,6 @@ +# Solutions + +- [Content Providers](solutions:content_providers.md) +- [FreeFlow Self](web4:freeflowself.md) +- [Actor Based Development](web4:actor_based_approach.md) +- [Vlang](web4:vlang.md) \ No newline at end of file diff --git a/collections/web4/actor_based/actor_based_approach.md b/collections/web4/actor_based/actor_based_approach.md index bb0e994..74f0451 100644 --- a/collections/web4/actor_based/actor_based_approach.md +++ b/collections/web4/actor_based/actor_based_approach.md @@ -2,12 +2,8 @@ ![](img/twin_model.png) -'actor' driven pattern instead of a model first pattern. +We use an 'actor' driven pattern instead of a model first pattern. In such a pattern, the root model only holds essentials in its database, hence any necessary changes can be applied at the root. -The model can tap direct into knowledge (how to do certain things) by accessing the 'recipes'. 'Recipes' are the source code that can easily be adapted to any task. By using Domain Specific Language (DSL) it is easy to reuse recipes. - -> TODO: too dense, need more explanation - - +The model can tap direct into knowledge (how to do certain things) by accessing the 'recipes'. 'Recipes' are the source code that can easily be adapted to any task. By using Domain Specific Language (DSL) it is easy to reuse recipes. \ No newline at end of file diff --git a/collections/web4/freeflowself/freeflowself.md b/collections/web4/freeflowself/freeflowself.md index 21b7a79..3dd8db2 100644 --- a/collections/web4/freeflowself/freeflowself.md +++ b/collections/web4/freeflowself/freeflowself.md @@ -9,8 +9,6 @@ FreeFlow Self is your unique digital "self" - in other worlds, it is you in this FreeFlow Self guarantees that only you have access to your data - no one else. It encourages a trustful environment without any manipulation attempt from third parties. -> TODO: need more complete and easy to understand explanation, more practical - ## Link to 3Bot 3Bot is a first implementation of the FreeFlow Self, its rather technical and in heavy development at this stage. From d2d2b809b1e018aaed29d88865aa43d73b9ae860 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 13:35:16 -0400 Subject: [PATCH 039/134] dy set urls and typos --- collections/dy_intro/how_you_can_participate/participate.md | 2 +- collections/solutions/content_providers/content_providers.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/dy_intro/how_you_can_participate/participate.md b/collections/dy_intro/how_you_can_participate/participate.md index 50adabc..05e1750 100644 --- a/collections/dy_intro/how_you_can_participate/participate.md +++ b/collections/dy_intro/how_you_can_participate/participate.md @@ -1,4 +1,4 @@ -# How you can participate +# How You Can Participate ![Image](img/participate.png#medium#mx-auto) diff --git a/collections/solutions/content_providers/content_providers.md b/collections/solutions/content_providers/content_providers.md index c1116b2..0fc54ad 100644 --- a/collections/solutions/content_providers/content_providers.md +++ b/collections/solutions/content_providers/content_providers.md @@ -6,11 +6,11 @@ Content providers have quite some issues in supporting their user base, our appr Below you can find how we can help you to resolve some of your possible issues. -## lower your CDN cost = Content Delivery +## Lower your CDN cost = Content Delivery - costs typically are +50 USD per TB, our solution goes below 10 USD. - cost goes to 10 USD at start, from v2.0 can be even lower. -- see [Costs of CDN's](cdn_cost.md) +- see [Costs of CDN's](problems:cd_issues_cost.md) ## Lower your cost of operations From 3bbe600c50532d2ea7faf6844df3f80a5d5e434e Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 13:42:12 -0400 Subject: [PATCH 040/134] dy done --- collections/social_media_protocols/protocols.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/social_media_protocols/protocols.md b/collections/social_media_protocols/protocols.md index cc677f7..57bd104 100644 --- a/collections/social_media_protocols/protocols.md +++ b/collections/social_media_protocols/protocols.md @@ -3,7 +3,7 @@ # Social Media App Protocols - [**Activitypub**](activitypub.md) -- [**nostr**](nostr.md) +- [**Nostr**](nostr.md) - **Diaspora** - An early decentralized social network. - Uses the "Diaspora federation protocol" for connecting different instances (pods). From 0f0ad858cea31e8f8956723de39649cc97bd575f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Sat, 11 May 2024 15:03:42 -0400 Subject: [PATCH 041/134] dy updated intro --- collections/dy_intro/dunia_yetu/dunia_yetu.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/collections/dy_intro/dunia_yetu/dunia_yetu.md b/collections/dy_intro/dunia_yetu/dunia_yetu.md index e6a57b0..46cc051 100644 --- a/collections/dy_intro/dunia_yetu/dunia_yetu.md +++ b/collections/dy_intro/dunia_yetu/dunia_yetu.md @@ -4,6 +4,18 @@ Together with a group of tech community leaders and innovators from Dar Es Salaam, we have kicked off a project called Dunia Yetu (Our World, in Swahili). -The primary goal of Dunia Yetu is to deliver a set of tools and a platform which will allow many thousands of coders in East Africa to create their own digital sovereign Internet. For now, it begins with the deployment of local ThreeFold infrastructure and a series of events and gatherings. +The primary goal of Dunia Yetu is to deliver a set of tools and a platform which will allow many thousands of coders in East Africa to create their own digital sovereign Internet. -Learn more about the project and the initial steps by reading this book. \ No newline at end of file +# Vision + +If we consider life as surfing on waves, some waves bring us forward, some we can't avoid and have potential to throw us off, and some we can help create to drive change. One thing is for sure: going against waves isn't so productive. + +We must recognize the waves that could harm us but not become consumed by them. + +What we require is a sea of change, but it won't come in the form of one monumental wave undoing everything we've done. The sea of change we need consists of millions, perhaps billions, of small waves all contributing to more sustainable life. + +Let's unite and empower each other to generate these life-sustaining waves. + +# Learn More + +Learn more about the project and the ongoing steps by reading this book. \ No newline at end of file From b3862816b6d9101c7a11aadaf62bcde7df6faa87 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 09:44:08 -0400 Subject: [PATCH 042/134] legal, update websites tnc --- collections/companies/bettertoken.md | 33 +++++++++++++ collections/companies/threefold_ag.md | 20 ++++++++ collections/companies/threefold_vzw.md | 48 +++++++++++++++++++ collections/legal/definitions_legal.md | 4 +- collections/legal/intro/legal_home.md | 4 +- .../part_0_agreement_terms.md | 4 +- 6 files changed, 107 insertions(+), 6 deletions(-) create mode 100644 collections/companies/bettertoken.md create mode 100644 collections/companies/threefold_ag.md create mode 100644 collections/companies/threefold_vzw.md diff --git a/collections/companies/bettertoken.md b/collections/companies/bettertoken.md new file mode 100644 index 0000000..81ff291 --- /dev/null +++ b/collections/companies/bettertoken.md @@ -0,0 +1,33 @@ +

BetterToken NV

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Income](#income) +- [Structure](#structure) +- [Expected Changes](#expected-changes) + +*** + +## Introduction + +European Farming Cooperative for the foundation: + +- Operates a data center in Lochristi (Belgium) offering hosting and connectivity for TF Farmers +- Currently, 100+ nodes – many of them are owned by TF farmers +- [ThreeFold Tech](./threefold_tech.md) NV uses some of their equipment today for development +- Sale of small servers to TF Farmers, was done mainly via an online webshop + +## Income + +- Hosting fees for the maintenance & running of the farmer pool + +## Structure + +- Started 30 November 2016 +- [limited liable company in belgium](http://www.ejustice.just.fgov.be/tsv_pdf/2016/11/30/16324281.pdf) +- Peter Van der Henst is the managing director + +## Expected Changes + +BetterToken continues to be farming cooperative for Europe. Right now there is not much happening in BetterToken. \ No newline at end of file diff --git a/collections/companies/threefold_ag.md b/collections/companies/threefold_ag.md new file mode 100644 index 0000000..2d1c69f --- /dev/null +++ b/collections/companies/threefold_ag.md @@ -0,0 +1,20 @@ +

ThreeFold Switzerland

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Some Plans](#some-plans) + +*** + +## Introduction + +ThreeFold Switzerland is officially called ThreeFold AG. + +While there are activities done at this time, we are preparing for future activities. + +## Some Plans + +- Promotion of ThreeFold, specifically in Zug Communities (CH). + +![](img/crypto_valley_zug_.jpg) \ No newline at end of file diff --git a/collections/companies/threefold_vzw.md b/collections/companies/threefold_vzw.md new file mode 100644 index 0000000..584653f --- /dev/null +++ b/collections/companies/threefold_vzw.md @@ -0,0 +1,48 @@ +

ThreeFold VZW

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Functions](#functions) +- [Some History](#some-history) +- [Belgium Official Doc](#belgium-official-doc) + +*** + +## Introduction + +ThreeFold VZW is a non for profit organization based in Belgium. + +A **VZW** has no shareholders, only members. + + + +## Functions + +- owner of the wisdom_council +- eventuallly ThreeFold VZW will own some decentralized organizations as operating in the ThreeFold world e.g. [TF Dubai](./threefold_dubai.md) + +## Some History + +We all started in Belgium from Korenlei 22, a super old building in the middle of the town. It dates back to 1731. + +![](img/korenlei_22.jpg) + +![](img/korenlei_old.jpg) + +Now the foundation has another address in Lochristi. + + + +## Belgium Official Doc + +![](img/threefold_vzw_official_doc.jpg) + + + +See also https://trendstop.knack.be/en/detail/747872572/threefold-foundation.aspx \ No newline at end of file diff --git a/collections/legal/definitions_legal.md b/collections/legal/definitions_legal.md index 1a526cb..24badad 100644 --- a/collections/legal/definitions_legal.md +++ b/collections/legal/definitions_legal.md @@ -9,7 +9,7 @@ Threefold is a peer-to-peer network of network, storage an compute capacity for All the ideas and content created for this concept are opensource and stored in github A group of volunteers and the ThreeFold Foundation maintain these repositories. -See https://github.com/threefoldfoundation +See the [ThreeFold Foundation](https://github.com/threefoldfoundation) on GitHub. ## ThreeFold Foundation (TFF) @@ -86,7 +86,7 @@ Group of blockchain related technologies as used by ThreeFold to accomplish the The Zero-OS is the software which makes it possible to convert any pool of hardware to become a pool of resource for the ThreeFold_Grid. -see [Zero-OS](https://github.com/threefoldtech/zos) = Efficient Stateless Operating System +See [Zero-OS](https://github.com/threefoldtech/zos), our efficient stateless operating system based on the Linux kernel. ## User diff --git a/collections/legal/intro/legal_home.md b/collections/legal/intro/legal_home.md index 60929b5..517a213 100644 --- a/collections/legal/intro/legal_home.md +++ b/collections/legal/intro/legal_home.md @@ -13,6 +13,6 @@ THESE TERMS AND CONDITIONS (THE "**AGREEMENTS**") CONSTITUTE A LEGAL AGREEMENT B - [Terms & Conditions TFGrid Users TFGrid 3](terms_conditions_griduser.md) - [Terms & Conditions TFGrid Farmers TFGrid 3](terms_conditions_farmer3.md) -Our single source of truth for our legal docs is on https://github.com/threefoldfoundation/info_legal +Our single source of truth for our legal docs is available [here](https://github.com/threefoldfoundation/info_legal). -> You can see the history of each file on github, useful to see the right version of the file in relation to the date when you signed a document or contract which linked into one of the above documents. \ No newline at end of file +> You can see the history of each file on GitHub. This is useful to see the right version of the file in relation to the date when you signed a document or contract which linked into one of the above documents. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_0_agreement_terms.md b/collections/legal/terms_conditions_websites/part_0_agreement_terms.md index 0711e09..23ba648 100644 --- a/collections/legal/terms_conditions_websites/part_0_agreement_terms.md +++ b/collections/legal/terms_conditions_websites/part_0_agreement_terms.md @@ -1,8 +1,8 @@ **AGREEMENT TO TERMS** - These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity ("you") and ThreeFold, doing business as ThreeFold ("**ThreeFold**", "**we**", "**us**", or "**our**"), concerning your access to and use of the threefold related websites: +These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity ("you") and ThreeFold, doing business as ThreeFold ("**ThreeFold**", "**we**", "**us**", or "**our**"), concerning your access to and use of the threefold related websites: - !!wiki.include page:websites +!!wiki.include page:websites.md as well as any other media form, media channel, forum, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the "Site"). From 0d87dea9f69820cd3d6e78fb04cfa0216c4d9ab8 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 09:48:02 -0400 Subject: [PATCH 043/134] legal, fixed websites tnc --- .../terms_conditions_websites/part_10_site_management.md | 1 + .../terms_conditions_websites/part_11_privacy_policy.md | 1 + .../terms_conditions_websites/part_12_dispute_resolution.md | 1 + .../legal/terms_conditions_websites/part_13_disclaimer.md | 1 + .../part_14_limitations_liability.md | 3 ++- .../terms_conditions_websites/part_15_indemnification.md | 1 + .../legal/terms_conditions_websites/part_16_user_data.md | 1 + .../part_17_electronic_comms_transactions_signatures.md | 1 + .../legal/terms_conditions_websites/part_18_miscellaneous.md | 3 ++- .../legal/terms_conditions_websites/part_19_contact_us.md | 3 ++- .../legal/terms_conditions_websites/part_1_ip_rights.md | 3 ++- .../terms_conditions_websites/part_2_user_representations.md | 3 ++- .../terms_conditions_websites/part_3_user_registration.md | 3 ++- .../part_4_prohibited_activities.md | 3 ++- .../part_5_user_generated_contributions.md | 5 ++--- .../terms_conditions_websites/part_6_contribution_license.md | 1 + .../legal/terms_conditions_websites/part_7_social_media.md | 1 + .../legal/terms_conditions_websites/part_8_submission.md | 1 + .../part_9_thirdparty_websites_content.md | 1 + 19 files changed, 27 insertions(+), 10 deletions(-) diff --git a/collections/legal/terms_conditions_websites/part_10_site_management.md b/collections/legal/terms_conditions_websites/part_10_site_management.md index 1b12bf6..b64fb34 100644 --- a/collections/legal/terms_conditions_websites/part_10_site_management.md +++ b/collections/legal/terms_conditions_websites/part_10_site_management.md @@ -1,3 +1,4 @@ + **SITE MANAGEMENT** We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_11_privacy_policy.md b/collections/legal/terms_conditions_websites/part_11_privacy_policy.md index 5db0439..f77ed53 100644 --- a/collections/legal/terms_conditions_websites/part_11_privacy_policy.md +++ b/collections/legal/terms_conditions_websites/part_11_privacy_policy.md @@ -1,3 +1,4 @@ + **PRIVACY POLICY** We care about data privacy and security. Please review our Privacy Policy: privacypolicy . diff --git a/collections/legal/terms_conditions_websites/part_12_dispute_resolution.md b/collections/legal/terms_conditions_websites/part_12_dispute_resolution.md index 0d11d7d..e89de78 100644 --- a/collections/legal/terms_conditions_websites/part_12_dispute_resolution.md +++ b/collections/legal/terms_conditions_websites/part_12_dispute_resolution.md @@ -1,3 +1,4 @@ + **DISPUTE RESOLUTION** Any legal action of whatever nature brought by either you or us (collectively, the "Parties" and individually, a "Party") shall be commenced or prosecuted in courts located in Belgium, Ghent, and the Parties hereby consent to, and waive all defenses of lack of personal jurisdiction and forum non conveniens with respect to venue and jurisdiction in such state and federal courts. Application of the United Nations Convention on Contracts for the International Sale of Goods and the Uniform Computer Information Transaction Act (UCITA) are excluded from these Terms of Use. In no event shall any claim, action, or proceeding brought by either Party related in any way to the Site be commenced more than one (1) years after the cause of action arose. diff --git a/collections/legal/terms_conditions_websites/part_13_disclaimer.md b/collections/legal/terms_conditions_websites/part_13_disclaimer.md index 19472d0..157885d 100644 --- a/collections/legal/terms_conditions_websites/part_13_disclaimer.md +++ b/collections/legal/terms_conditions_websites/part_13_disclaimer.md @@ -1,3 +1,4 @@ + **DISCLAIMER** THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_14_limitations_liability.md b/collections/legal/terms_conditions_websites/part_14_limitations_liability.md index 9adccbf..23df70a 100644 --- a/collections/legal/terms_conditions_websites/part_14_limitations_liability.md +++ b/collections/legal/terms_conditions_websites/part_14_limitations_liability.md @@ -1,3 +1,4 @@ + **LIMITATIONS OF LIABILITY** - IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE ACTION, WILL AT ALL TIMES BE LIMITED TO $1.00 USD. CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY HAVE ADDITIONAL RIGHTS. \ No newline at end of file +IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE ACTION, WILL AT ALL TIMES BE LIMITED TO $1.00 USD. CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY HAVE ADDITIONAL RIGHTS. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_15_indemnification.md b/collections/legal/terms_conditions_websites/part_15_indemnification.md index 447c022..8b8f618 100644 --- a/collections/legal/terms_conditions_websites/part_15_indemnification.md +++ b/collections/legal/terms_conditions_websites/part_15_indemnification.md @@ -1,3 +1,4 @@ + **INDEMNIFICATION** You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of: (1) your Contributions; (2) use of the Site; (3) breach of these Terms of Use; (4) any breach of your representations and warranties set forth in these Terms of Use; (5) your violation of the rights of a third party, including but not limited to intellectual property rights; or (6) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_16_user_data.md b/collections/legal/terms_conditions_websites/part_16_user_data.md index 80ecde7..e61317b 100644 --- a/collections/legal/terms_conditions_websites/part_16_user_data.md +++ b/collections/legal/terms_conditions_websites/part_16_user_data.md @@ -1,3 +1,4 @@ + **USER DATA** We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data. diff --git a/collections/legal/terms_conditions_websites/part_17_electronic_comms_transactions_signatures.md b/collections/legal/terms_conditions_websites/part_17_electronic_comms_transactions_signatures.md index da54ef8..6b23f77 100644 --- a/collections/legal/terms_conditions_websites/part_17_electronic_comms_transactions_signatures.md +++ b/collections/legal/terms_conditions_websites/part_17_electronic_comms_transactions_signatures.md @@ -1,3 +1,4 @@ + **ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES** Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_18_miscellaneous.md b/collections/legal/terms_conditions_websites/part_18_miscellaneous.md index 633bbe3..8b897f8 100644 --- a/collections/legal/terms_conditions_websites/part_18_miscellaneous.md +++ b/collections/legal/terms_conditions_websites/part_18_miscellaneous.md @@ -1,3 +1,4 @@ + **MISCELLANEOUS** - These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use. \ No newline at end of file +These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_19_contact_us.md b/collections/legal/terms_conditions_websites/part_19_contact_us.md index 82f7d36..aeb8304 100644 --- a/collections/legal/terms_conditions_websites/part_19_contact_us.md +++ b/collections/legal/terms_conditions_websites/part_19_contact_us.md @@ -1,6 +1,7 @@ + **CONTACT US** - In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at: +In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at: **ThreeFold FCZ** diff --git a/collections/legal/terms_conditions_websites/part_1_ip_rights.md b/collections/legal/terms_conditions_websites/part_1_ip_rights.md index 7e1c522..8364059 100644 --- a/collections/legal/terms_conditions_websites/part_1_ip_rights.md +++ b/collections/legal/terms_conditions_websites/part_1_ip_rights.md @@ -1,5 +1,6 @@ + **INTELLECTUAL PROPERTY RIGHTS** - Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the "Content") and the trademarks, service marks, and logos contained therein (the "Marks") are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and EU competition laws, foreign jurisdictions, and international conventions. The Content and the Marks are provided on the Site "AS IS" for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission. +Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the "Content") and the trademarks, service marks, and logos contained therein (the "Marks") are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and EU competition laws, foreign jurisdictions, and international conventions. The Content and the Marks are provided on the Site "AS IS" for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission. Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_2_user_representations.md b/collections/legal/terms_conditions_websites/part_2_user_representations.md index 281bcc0..8951a43 100644 --- a/collections/legal/terms_conditions_websites/part_2_user_representations.md +++ b/collections/legal/terms_conditions_websites/part_2_user_representations.md @@ -1,5 +1,6 @@ + **USER REPRESENTATIONS** - By using the Site, you represent and warrant that: (1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary; (3) you have the legal capacity and you agree to comply with these Terms of Use; (4) you are not a minor in the jurisdiction in which you reside; (5) you will not access the Site through automated or non-human means, whether through a bot, script, or otherwise; (6) you will not use the Site for any illegal or unauthorized purpose; and (7) your use of the Site will not violate any applicable law or regulation. +By using the Site, you represent and warrant that: (1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary; (3) you have the legal capacity and you agree to comply with these Terms of Use; (4) you are not a minor in the jurisdiction in which you reside; (5) you will not access the Site through automated or non-human means, whether through a bot, script, or otherwise; (6) you will not use the Site for any illegal or unauthorized purpose; and (7) your use of the Site will not violate any applicable law or regulation. If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Site (or any portion thereof). \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_3_user_registration.md b/collections/legal/terms_conditions_websites/part_3_user_registration.md index 24f5115..c7f5e59 100644 --- a/collections/legal/terms_conditions_websites/part_3_user_registration.md +++ b/collections/legal/terms_conditions_websites/part_3_user_registration.md @@ -1,3 +1,4 @@ + **USER REGISTRATION** -You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable. +You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_4_prohibited_activities.md b/collections/legal/terms_conditions_websites/part_4_prohibited_activities.md index 79eb1f9..c658e7f 100644 --- a/collections/legal/terms_conditions_websites/part_4_prohibited_activities.md +++ b/collections/legal/terms_conditions_websites/part_4_prohibited_activities.md @@ -1,8 +1,9 @@ + **PROHIBITED ACTIVITIES** You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us. - As a user of the Site, you agree not to: +As a user of the Site, you agree not to: 1. Systematically retrieve data or other content from the Site to create or compile, directly or indirectly, a collection, compilation, database, or directory without written permission from us. 2. Circumvent, disable, or otherwise interfere with security-related features of the Site, including features that prevent or restrict the use or copying of any Content or enforce limitations on the use of the Site and/or the Content contained therein. diff --git a/collections/legal/terms_conditions_websites/part_5_user_generated_contributions.md b/collections/legal/terms_conditions_websites/part_5_user_generated_contributions.md index 15b00c4..4dc8801 100644 --- a/collections/legal/terms_conditions_websites/part_5_user_generated_contributions.md +++ b/collections/legal/terms_conditions_websites/part_5_user_generated_contributions.md @@ -1,8 +1,7 @@ + **USER GENERATED CONTRIBUTIONS** -The Site may invite you to chat, contribute to, or participate in blogs, message boards, online forums, and other functionality, and may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make available any Contributions, you thereby represent and warrant that: - - +The Site may invite you to chat, contribute to, or participate in blogs, message boards, online forums, and other functionality, and may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make available any Contributions, you thereby represent and warrant that: 1. The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party. 2. You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize us, the Site, and other users of the Site to use your Contributions in any manner contemplated by the Site and these Terms of Use. diff --git a/collections/legal/terms_conditions_websites/part_6_contribution_license.md b/collections/legal/terms_conditions_websites/part_6_contribution_license.md index 689ec3d..d0f10d4 100644 --- a/collections/legal/terms_conditions_websites/part_6_contribution_license.md +++ b/collections/legal/terms_conditions_websites/part_6_contribution_license.md @@ -1,3 +1,4 @@ + **CONTRIBUTION LICENSE** By posting your Contributions to any part of the Site or making Contributions accessible to the Site by linking your account from the Site to any of your social networking accounts, you automatically grant, and you represent and warrant that you have the right to grant, to us an unrestricted, unlimited, irrevocable, perpetual, non-exclusive, transferable, royalty-free, fully-paid, worldwide right, and license to host, use, copy, reproduce, disclose, sell, resell, publish, broadcast, retitle, archive, store, cache, publicly perform, publicly display, reformat, translate, transmit, excerpt (in whole or in part), and distribute such Contributions (including, without limitation, your image and voice) for any purpose, commercial, advertising, or otherwise, and to prepare derivative works of, or incorporate into other works, such Contributions, and grant and authorize sublicenses of the foregoing. The use and distribution may occur in any media formats and through any media channels. diff --git a/collections/legal/terms_conditions_websites/part_7_social_media.md b/collections/legal/terms_conditions_websites/part_7_social_media.md index ea7c25d..c710ade 100644 --- a/collections/legal/terms_conditions_websites/part_7_social_media.md +++ b/collections/legal/terms_conditions_websites/part_7_social_media.md @@ -1,3 +1,4 @@ + **SOCIAL MEDIA** As part of the functionality of the Site, you may link your account with online accounts you have with third-party service providers (each such account, a "Third-Party Account") by either: (1) providing your Third-Party Account login information through the Site; or (2) allowing us to access your Third-Party Account, as is permitted under the applicable terms and conditions that govern your use of each Third-Party Account. You represent and warrant that you are entitled to disclose your Third-Party Account login information to us and/or grant us access to your Third-Party Account, without breach by you of any of the terms and conditions that govern your use of the applicable Third-Party Account, and without obligating us to pay any fees or making us subject to any usage limitations imposed by the third-party service provider of the Third-Party Account. By granting us access to any Third-Party Accounts, you understand that (1) we may access, make available, and store (if applicable) any content that you have provided to and stored in your Third-Party Account (the "Social Network Content") so that it is available on and through the Site via your account, including without limitation any friend lists and (2) we may submit to and receive from your Third-Party Account additional information to the extent you are notified when you link your account with the Third-Party Account. Depending on the Third-Party Accounts you choose and subject to the privacy settings that you have set in such Third-Party Accounts, personally identifiable information that you post to your Third-Party Accounts may be available on and through your account on the Site. Please note that if a Third-Party Account or associated service becomes unavailable or our access to such Third Party Account is terminated by the third-party service provider, then Social Network Content may no longer be available on and through the Site. You will have the ability to disable the connection between your account on the Site and your Third-Party Accounts at any time. PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD- diff --git a/collections/legal/terms_conditions_websites/part_8_submission.md b/collections/legal/terms_conditions_websites/part_8_submission.md index d390911..3a44141 100644 --- a/collections/legal/terms_conditions_websites/part_8_submission.md +++ b/collections/legal/terms_conditions_websites/part_8_submission.md @@ -1,3 +1,4 @@ + **SUBMISSIONS** You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site ("Submissions") provided by you to us are non-confidential and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual infringement or misappropriation of any proprietary right in your Submissions. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_9_thirdparty_websites_content.md b/collections/legal/terms_conditions_websites/part_9_thirdparty_websites_content.md index 7f69b25..7457efa 100644 --- a/collections/legal/terms_conditions_websites/part_9_thirdparty_websites_content.md +++ b/collections/legal/terms_conditions_websites/part_9_thirdparty_websites_content.md @@ -1,3 +1,4 @@ + **THIRD-PARTY WEBSITES AND CONTENT** The Site may contain (or you may be sent via the Site) links to other websites ("Third-Party Websites") as well as articles, photographs, text, graphics, pictures, designs, music, sound, video, information, applications, software, and other content or items belonging to or originating from third parties ("Third-Party Content"). Such Third-Party Websites and Third-Party Content are not investigated, monitored, or checked for accuracy, appropriateness, or completeness by us, and we are not responsible for any Third-Party Websites accessed through the Site or any Third-Party Content posted on, available through, or installed from the Site, including the content, accuracy, offensiveness, opinions, reliability, privacy practices, or other policies of or contained in the Third-Party Websites or the Third-Party Content. Inclusion of, linking to, or permitting the use or installation of any Third-Party Websites or any Third-Party Content does not imply approval or endorsement thereof by us. If you decide to leave the Site and access the Third-Party Websites or to use or install any Third-Party Content, you do so at your own risk, and you should be aware these Terms of Use no longer govern. You should review the applicable terms and policies, including privacy and data gathering practices, of any website to which you navigate from the Site or relating to any applications you use or install from the Site. Any purchases you make through Third-Party Websites will be through other websites and from other companies, and we take no responsibility whatsoever in relation to such purchases which are exclusively between you and the applicable third party. You agree and acknowledge that we do not endorse the products or services offered on Third-Party Websites and you shall hold us harmless from any harm caused by your purchase of such products or services. Additionally, you shall hold us harmless from any losses sustained by you or harm caused to you relating to or resulting in any way from any Third-Party Content or any contact with Third-Party Websites. \ No newline at end of file From 5bd7aefd6278d6147ad2544683ab7c9d71def8b2 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 09:52:06 -0400 Subject: [PATCH 044/134] legal, fixed websites tnc headings --- collections/legal/terms_conditions_websites.md | 4 ++-- .../part_0_agreement_terms.md | 2 +- .../part_10_site_management.md | 2 +- .../part_11_privacy_policy.md | 12 ++++++------ .../part_12_dispute_resolution.md | 4 ++-- .../terms_conditions_websites/part_13_disclaimer.md | 2 +- .../part_14_limitations_liability.md | 2 +- .../part_15_indemnification.md | 2 +- .../terms_conditions_websites/part_16_user_data.md | 2 +- ...rt_17_electronic_comms_transactions_signatures.md | 2 +- .../part_18_miscellaneous.md | 2 +- .../terms_conditions_websites/part_19_contact_us.md | 4 ++-- .../terms_conditions_websites/part_1_ip_rights.md | 2 +- .../part_2_user_representations.md | 2 +- .../part_3_user_registration.md | 2 +- .../part_4_prohibited_activities.md | 2 +- .../part_5_user_generated_contributions.md | 2 +- .../part_6_contribution_license.md | 2 +- .../terms_conditions_websites/part_7_social_media.md | 2 +- .../terms_conditions_websites/part_8_submission.md | 2 +- .../part_9_thirdparty_websites_content.md | 2 +- 21 files changed, 29 insertions(+), 29 deletions(-) diff --git a/collections/legal/terms_conditions_websites.md b/collections/legal/terms_conditions_websites.md index e2a81a3..c7a957d 100644 --- a/collections/legal/terms_conditions_websites.md +++ b/collections/legal/terms_conditions_websites.md @@ -1,7 +1,7 @@ +# TERMS OF USE - **TERMS OF USE** +**Last updated September 13, 2019** - **Last updated September 13, 2019** !!wiki.include page:part_0_agreement_terms !!wiki.include page:part_1_ip_rights !!wiki.include page:part_2_user_representations diff --git a/collections/legal/terms_conditions_websites/part_0_agreement_terms.md b/collections/legal/terms_conditions_websites/part_0_agreement_terms.md index 23ba648..ae4989d 100644 --- a/collections/legal/terms_conditions_websites/part_0_agreement_terms.md +++ b/collections/legal/terms_conditions_websites/part_0_agreement_terms.md @@ -1,4 +1,4 @@ -**AGREEMENT TO TERMS** +## AGREEMENT TO TERMS These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity ("you") and ThreeFold, doing business as ThreeFold ("**ThreeFold**", "**we**", "**us**", or "**our**"), concerning your access to and use of the threefold related websites: diff --git a/collections/legal/terms_conditions_websites/part_10_site_management.md b/collections/legal/terms_conditions_websites/part_10_site_management.md index b64fb34..c16cdc1 100644 --- a/collections/legal/terms_conditions_websites/part_10_site_management.md +++ b/collections/legal/terms_conditions_websites/part_10_site_management.md @@ -1,4 +1,4 @@ -**SITE MANAGEMENT** +## SITE MANAGEMENT We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_11_privacy_policy.md b/collections/legal/terms_conditions_websites/part_11_privacy_policy.md index f77ed53..92cb9e9 100644 --- a/collections/legal/terms_conditions_websites/part_11_privacy_policy.md +++ b/collections/legal/terms_conditions_websites/part_11_privacy_policy.md @@ -1,23 +1,23 @@ -**PRIVACY POLICY** +## PRIVACY POLICY We care about data privacy and security. Please review our Privacy Policy: privacypolicy . By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use. Please be advised the Site is hosted in the United States. If you access the Site from the European Union, Asia, or any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in the United States, then through your continued use of the Site, you are transferring your data to the United States, and you expressly consent to have your data transferred to and processed in the United States. Further, we do not knowingly accept, request, or solicit information from children or knowingly market to children. Therefore, in accordance with the U.S. Children’s Online Privacy Protection Act, if we receive actual knowledge that anyone under the age of 13 has provided personal information to us without the requisite and verifiable parental consent, we will delete that information from the Site as quickly as is reasonably practical. -**TERM AND TERMINATION** +## TERM AND TERMINATION These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION. - If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress. +If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress. -**MODIFICATIONS AND INTERRUPTIONS** +## MODIFICATIONS AND INTERRUPTIONS - We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third party for any modification, price change, suspension, or discontinuance of the Site. +We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third party for any modification, price change, suspension, or discontinuance of the Site. We cannot guarantee the Site will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site during any downtime or discontinuance of the Site. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or to supply any corrections, updates, or releases in connection therewith. -**GOVERNING LAW** +## GOVERNING LAW These Terms of Use and your use of the Site are governed by and construed in accordance with the laws of Belgium, without regard to its conflict of law principles. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_12_dispute_resolution.md b/collections/legal/terms_conditions_websites/part_12_dispute_resolution.md index e89de78..fedf6ed 100644 --- a/collections/legal/terms_conditions_websites/part_12_dispute_resolution.md +++ b/collections/legal/terms_conditions_websites/part_12_dispute_resolution.md @@ -1,8 +1,8 @@ -**DISPUTE RESOLUTION** +## DISPUTE RESOLUTION Any legal action of whatever nature brought by either you or us (collectively, the "Parties" and individually, a "Party") shall be commenced or prosecuted in courts located in Belgium, Ghent, and the Parties hereby consent to, and waive all defenses of lack of personal jurisdiction and forum non conveniens with respect to venue and jurisdiction in such state and federal courts. Application of the United Nations Convention on Contracts for the International Sale of Goods and the Uniform Computer Information Transaction Act (UCITA) are excluded from these Terms of Use. In no event shall any claim, action, or proceeding brought by either Party related in any way to the Site be commenced more than one (1) years after the cause of action arose. -**CORRECTIONS** +## CORRECTIONS There may be information on the Site that contains typographical errors, inaccuracies, or omissions, including descriptions, pricing, availability, and various other information. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_13_disclaimer.md b/collections/legal/terms_conditions_websites/part_13_disclaimer.md index 157885d..dc76bba 100644 --- a/collections/legal/terms_conditions_websites/part_13_disclaimer.md +++ b/collections/legal/terms_conditions_websites/part_13_disclaimer.md @@ -1,4 +1,4 @@ -**DISCLAIMER** +## DISCLAIMER THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_14_limitations_liability.md b/collections/legal/terms_conditions_websites/part_14_limitations_liability.md index 23df70a..7e3519e 100644 --- a/collections/legal/terms_conditions_websites/part_14_limitations_liability.md +++ b/collections/legal/terms_conditions_websites/part_14_limitations_liability.md @@ -1,4 +1,4 @@ -**LIMITATIONS OF LIABILITY** +## LIMITATIONS OF LIABILITY IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE ACTION, WILL AT ALL TIMES BE LIMITED TO $1.00 USD. CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY HAVE ADDITIONAL RIGHTS. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_15_indemnification.md b/collections/legal/terms_conditions_websites/part_15_indemnification.md index 8b8f618..544d07f 100644 --- a/collections/legal/terms_conditions_websites/part_15_indemnification.md +++ b/collections/legal/terms_conditions_websites/part_15_indemnification.md @@ -1,4 +1,4 @@ -**INDEMNIFICATION** +## INDEMNIFICATION You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of: (1) your Contributions; (2) use of the Site; (3) breach of these Terms of Use; (4) any breach of your representations and warranties set forth in these Terms of Use; (5) your violation of the rights of a third party, including but not limited to intellectual property rights; or (6) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_16_user_data.md b/collections/legal/terms_conditions_websites/part_16_user_data.md index e61317b..8862793 100644 --- a/collections/legal/terms_conditions_websites/part_16_user_data.md +++ b/collections/legal/terms_conditions_websites/part_16_user_data.md @@ -1,4 +1,4 @@ -**USER DATA** +## USER DATA We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data. diff --git a/collections/legal/terms_conditions_websites/part_17_electronic_comms_transactions_signatures.md b/collections/legal/terms_conditions_websites/part_17_electronic_comms_transactions_signatures.md index 6b23f77..a6181b9 100644 --- a/collections/legal/terms_conditions_websites/part_17_electronic_comms_transactions_signatures.md +++ b/collections/legal/terms_conditions_websites/part_17_electronic_comms_transactions_signatures.md @@ -1,4 +1,4 @@ -**ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES** +## ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_18_miscellaneous.md b/collections/legal/terms_conditions_websites/part_18_miscellaneous.md index 8b897f8..3a0c30d 100644 --- a/collections/legal/terms_conditions_websites/part_18_miscellaneous.md +++ b/collections/legal/terms_conditions_websites/part_18_miscellaneous.md @@ -1,4 +1,4 @@ -**MISCELLANEOUS** +## MISCELLANEOUS These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_19_contact_us.md b/collections/legal/terms_conditions_websites/part_19_contact_us.md index aeb8304..002b6ca 100644 --- a/collections/legal/terms_conditions_websites/part_19_contact_us.md +++ b/collections/legal/terms_conditions_websites/part_19_contact_us.md @@ -1,9 +1,9 @@ -**CONTACT US** +## CONTACT US In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at: - **ThreeFold FCZ** +### ThreeFold FCZ BA1120 DMCC BUSINESS CENTRE, LEVEL NO 1, JEWELLERY & GEMPLEX 3, DUBAI, UNITED EMIRATES ARAB diff --git a/collections/legal/terms_conditions_websites/part_1_ip_rights.md b/collections/legal/terms_conditions_websites/part_1_ip_rights.md index 8364059..4e7ac6f 100644 --- a/collections/legal/terms_conditions_websites/part_1_ip_rights.md +++ b/collections/legal/terms_conditions_websites/part_1_ip_rights.md @@ -1,5 +1,5 @@ -**INTELLECTUAL PROPERTY RIGHTS** +## INTELLECTUAL PROPERTY RIGHTS Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the "Content") and the trademarks, service marks, and logos contained therein (the "Marks") are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and EU competition laws, foreign jurisdictions, and international conventions. The Content and the Marks are provided on the Site "AS IS" for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission. diff --git a/collections/legal/terms_conditions_websites/part_2_user_representations.md b/collections/legal/terms_conditions_websites/part_2_user_representations.md index 8951a43..fd256ce 100644 --- a/collections/legal/terms_conditions_websites/part_2_user_representations.md +++ b/collections/legal/terms_conditions_websites/part_2_user_representations.md @@ -1,5 +1,5 @@ -**USER REPRESENTATIONS** +## USER REPRESENTATIONS By using the Site, you represent and warrant that: (1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary; (3) you have the legal capacity and you agree to comply with these Terms of Use; (4) you are not a minor in the jurisdiction in which you reside; (5) you will not access the Site through automated or non-human means, whether through a bot, script, or otherwise; (6) you will not use the Site for any illegal or unauthorized purpose; and (7) your use of the Site will not violate any applicable law or regulation. diff --git a/collections/legal/terms_conditions_websites/part_3_user_registration.md b/collections/legal/terms_conditions_websites/part_3_user_registration.md index c7f5e59..a9fea55 100644 --- a/collections/legal/terms_conditions_websites/part_3_user_registration.md +++ b/collections/legal/terms_conditions_websites/part_3_user_registration.md @@ -1,4 +1,4 @@ -**USER REGISTRATION** +## USER REGISTRATION You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_4_prohibited_activities.md b/collections/legal/terms_conditions_websites/part_4_prohibited_activities.md index c658e7f..d488310 100644 --- a/collections/legal/terms_conditions_websites/part_4_prohibited_activities.md +++ b/collections/legal/terms_conditions_websites/part_4_prohibited_activities.md @@ -1,5 +1,5 @@ -**PROHIBITED ACTIVITIES** +## PROHIBITED ACTIVITIES You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us. diff --git a/collections/legal/terms_conditions_websites/part_5_user_generated_contributions.md b/collections/legal/terms_conditions_websites/part_5_user_generated_contributions.md index 4dc8801..aca8557 100644 --- a/collections/legal/terms_conditions_websites/part_5_user_generated_contributions.md +++ b/collections/legal/terms_conditions_websites/part_5_user_generated_contributions.md @@ -1,5 +1,5 @@ -**USER GENERATED CONTRIBUTIONS** +## USER GENERATED CONTRIBUTIONS The Site may invite you to chat, contribute to, or participate in blogs, message boards, online forums, and other functionality, and may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make available any Contributions, you thereby represent and warrant that: diff --git a/collections/legal/terms_conditions_websites/part_6_contribution_license.md b/collections/legal/terms_conditions_websites/part_6_contribution_license.md index d0f10d4..12b9c59 100644 --- a/collections/legal/terms_conditions_websites/part_6_contribution_license.md +++ b/collections/legal/terms_conditions_websites/part_6_contribution_license.md @@ -1,5 +1,5 @@ -**CONTRIBUTION LICENSE** +## CONTRIBUTION LICENSE By posting your Contributions to any part of the Site or making Contributions accessible to the Site by linking your account from the Site to any of your social networking accounts, you automatically grant, and you represent and warrant that you have the right to grant, to us an unrestricted, unlimited, irrevocable, perpetual, non-exclusive, transferable, royalty-free, fully-paid, worldwide right, and license to host, use, copy, reproduce, disclose, sell, resell, publish, broadcast, retitle, archive, store, cache, publicly perform, publicly display, reformat, translate, transmit, excerpt (in whole or in part), and distribute such Contributions (including, without limitation, your image and voice) for any purpose, commercial, advertising, or otherwise, and to prepare derivative works of, or incorporate into other works, such Contributions, and grant and authorize sublicenses of the foregoing. The use and distribution may occur in any media formats and through any media channels. diff --git a/collections/legal/terms_conditions_websites/part_7_social_media.md b/collections/legal/terms_conditions_websites/part_7_social_media.md index c710ade..861494b 100644 --- a/collections/legal/terms_conditions_websites/part_7_social_media.md +++ b/collections/legal/terms_conditions_websites/part_7_social_media.md @@ -1,5 +1,5 @@ -**SOCIAL MEDIA** +## SOCIAL MEDIA As part of the functionality of the Site, you may link your account with online accounts you have with third-party service providers (each such account, a "Third-Party Account") by either: (1) providing your Third-Party Account login information through the Site; or (2) allowing us to access your Third-Party Account, as is permitted under the applicable terms and conditions that govern your use of each Third-Party Account. You represent and warrant that you are entitled to disclose your Third-Party Account login information to us and/or grant us access to your Third-Party Account, without breach by you of any of the terms and conditions that govern your use of the applicable Third-Party Account, and without obligating us to pay any fees or making us subject to any usage limitations imposed by the third-party service provider of the Third-Party Account. By granting us access to any Third-Party Accounts, you understand that (1) we may access, make available, and store (if applicable) any content that you have provided to and stored in your Third-Party Account (the "Social Network Content") so that it is available on and through the Site via your account, including without limitation any friend lists and (2) we may submit to and receive from your Third-Party Account additional information to the extent you are notified when you link your account with the Third-Party Account. Depending on the Third-Party Accounts you choose and subject to the privacy settings that you have set in such Third-Party Accounts, personally identifiable information that you post to your Third-Party Accounts may be available on and through your account on the Site. Please note that if a Third-Party Account or associated service becomes unavailable or our access to such Third Party Account is terminated by the third-party service provider, then Social Network Content may no longer be available on and through the Site. You will have the ability to disable the connection between your account on the Site and your Third-Party Accounts at any time. PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD- diff --git a/collections/legal/terms_conditions_websites/part_8_submission.md b/collections/legal/terms_conditions_websites/part_8_submission.md index 3a44141..f00bbc3 100644 --- a/collections/legal/terms_conditions_websites/part_8_submission.md +++ b/collections/legal/terms_conditions_websites/part_8_submission.md @@ -1,4 +1,4 @@ -**SUBMISSIONS** +## SUBMISSIONS You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site ("Submissions") provided by you to us are non-confidential and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual infringement or misappropriation of any proprietary right in your Submissions. \ No newline at end of file diff --git a/collections/legal/terms_conditions_websites/part_9_thirdparty_websites_content.md b/collections/legal/terms_conditions_websites/part_9_thirdparty_websites_content.md index 7457efa..29b1251 100644 --- a/collections/legal/terms_conditions_websites/part_9_thirdparty_websites_content.md +++ b/collections/legal/terms_conditions_websites/part_9_thirdparty_websites_content.md @@ -1,4 +1,4 @@ -**THIRD-PARTY WEBSITES AND CONTENT** +## THIRD-PARTY WEBSITES AND CONTENT The Site may contain (or you may be sent via the Site) links to other websites ("Third-Party Websites") as well as articles, photographs, text, graphics, pictures, designs, music, sound, video, information, applications, software, and other content or items belonging to or originating from third parties ("Third-Party Content"). Such Third-Party Websites and Third-Party Content are not investigated, monitored, or checked for accuracy, appropriateness, or completeness by us, and we are not responsible for any Third-Party Websites accessed through the Site or any Third-Party Content posted on, available through, or installed from the Site, including the content, accuracy, offensiveness, opinions, reliability, privacy practices, or other policies of or contained in the Third-Party Websites or the Third-Party Content. Inclusion of, linking to, or permitting the use or installation of any Third-Party Websites or any Third-Party Content does not imply approval or endorsement thereof by us. If you decide to leave the Site and access the Third-Party Websites or to use or install any Third-Party Content, you do so at your own risk, and you should be aware these Terms of Use no longer govern. You should review the applicable terms and policies, including privacy and data gathering practices, of any website to which you navigate from the Site or relating to any applications you use or install from the Site. Any purchases you make through Third-Party Websites will be through other websites and from other companies, and we take no responsibility whatsoever in relation to such purchases which are exclusively between you and the applicable third party. You agree and acknowledge that we do not endorse the products or services offered on Third-Party Websites and you shall hold us harmless from any harm caused by your purchase of such products or services. Additionally, you shall hold us harmless from any losses sustained by you or harm caused to you relating to or resulting in any way from any Third-Party Content or any contact with Third-Party Websites. \ No newline at end of file From 572147f7850ef6f528701b48932b47e835462cf6 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 09:57:10 -0400 Subject: [PATCH 045/134] legal added tfgrid3 threefold_grid --- collections/tfgrid3/threefold_grid.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 collections/tfgrid3/threefold_grid.md diff --git a/collections/tfgrid3/threefold_grid.md b/collections/tfgrid3/threefold_grid.md new file mode 100644 index 0000000..5268715 --- /dev/null +++ b/collections/tfgrid3/threefold_grid.md @@ -0,0 +1,7 @@ +# ThreeFold_Grid + +ThreeFold_Grid is a global, neutral, and sustainable network of autonomous storage and compute Internet capacity created by ThreeFold Farmers, with more than 80,000,000 GB and 20,000 cores existing today. On this Grid, IT capacity is indexed / registered on the TFChain for easy discovery by purchasers. Any application which can run on Linux can run on the ThreeFold_Grid but with more privacy, security, closer to the end-user, and at a much lower cost. + +This Internet capacity is produced and allocated locally - similar to the way electricity and other utilities are purchased today. This allows any digital service or application provider to host their services and applications in proximity to the end user leading to significantly greater performance, a lower price point and better margins. This is both more cost effective and green. + +!!!def alias:Threefold_Grid,tf_grid From 348e9005027931bbadf93762b761c2ab191304c9 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 09:59:29 -0400 Subject: [PATCH 046/134] legal, set book_collections to test --- collections/legal/tfgrid/terms_conditions_tfgrid3.md | 2 +- heroscript/legal/book_collections.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/collections/legal/tfgrid/terms_conditions_tfgrid3.md b/collections/legal/tfgrid/terms_conditions_tfgrid3.md index 49e1d84..09ae9e7 100644 --- a/collections/legal/tfgrid/terms_conditions_tfgrid3.md +++ b/collections/legal/tfgrid/terms_conditions_tfgrid3.md @@ -2,7 +2,7 @@ THESE TERMS AND CONDITIONS (THE "**AGREEMENTS**") CONSTITUTE A LEGAL AGREEMENT BETWEEN YOU ("TFGRID **USER**,""TFGRID **FARMER**," "**YOU**", OR "**YOURS**") AND [THREEFOLD COMPANIES](companies) or TFTECH ("**THREEFOLD**", "**COMPANY**," "**US**," "**WE**" OR "**OUR**"), GOVERNING THE TERMS OF YOUR PARTICIPATION AS A PARTNER, CUSTOMER, FARMER OR USER IN THE THREEFOLD GRID. YOU UNDERSTAND AND AGREE THAT BY ACCEPTING THE TERMS OF THIS AGREEMENT, EITHER BY CLICKING TO SIGNIFY ACCEPTANCE, OR BY TAKING ANY ONE OR MORE OF THE FOLLOWING ACTIONS DOWNLOADING, INSTALLING, RUNNING,/AND OR USING THE APPLICABLE SOFTWARE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT EFFECTIVE AS OF THE DATE THAT YOU TAKE THE EARLIEST OF ONE OF THE FOREGOING ACTIONS. YOU REPRESENT AND WARRANT THAT YOU ARE 18 YEARS OLD OR OLDER AND HAVE THE RIGHT AND AUTHORITY TO ENTER INTO AND COMPLY WITH THE TERMS OF THIS AGREEMENT. ->> BY USING THE [TFGRID](tfgrid3:threefold_grid) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: +>> BY USING THE [TFGRID](tfgrid3:threefold_grid.md) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: - [X] [Terms & Conditions TFGrid Users TFGrid 3](terms_conditions_griduser) - [X] [Terms & Conditions TFGrid Farmers TFGrid 3](terms_conditions_farmer3) : relevant if you are a TFGrid Farmer diff --git a/heroscript/legal/book_collections.md b/heroscript/legal/book_collections.md index a68a044..99a6a6c 100644 --- a/heroscript/legal/book_collections.md +++ b/heroscript/legal/book_collections.md @@ -3,17 +3,17 @@ ```js !!book.generate name:'legal' title:'Legal' - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/legal' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_legal/books/legal' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/legal' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_legal/collections/legal' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/companies' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_legal/collections/companies' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/tfgrid3' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_legal/collections/tfgrid3' ``` From 37c95161b77b2bd3e8349c925e48bd54ba65f913 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 10:00:48 -0400 Subject: [PATCH 047/134] legal, test parsing --- collections/legal/tfgrid/terms_conditions_tfgrid3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/legal/tfgrid/terms_conditions_tfgrid3.md b/collections/legal/tfgrid/terms_conditions_tfgrid3.md index 09ae9e7..771cba1 100644 --- a/collections/legal/tfgrid/terms_conditions_tfgrid3.md +++ b/collections/legal/tfgrid/terms_conditions_tfgrid3.md @@ -2,7 +2,7 @@ THESE TERMS AND CONDITIONS (THE "**AGREEMENTS**") CONSTITUTE A LEGAL AGREEMENT BETWEEN YOU ("TFGRID **USER**,""TFGRID **FARMER**," "**YOU**", OR "**YOURS**") AND [THREEFOLD COMPANIES](companies) or TFTECH ("**THREEFOLD**", "**COMPANY**," "**US**," "**WE**" OR "**OUR**"), GOVERNING THE TERMS OF YOUR PARTICIPATION AS A PARTNER, CUSTOMER, FARMER OR USER IN THE THREEFOLD GRID. YOU UNDERSTAND AND AGREE THAT BY ACCEPTING THE TERMS OF THIS AGREEMENT, EITHER BY CLICKING TO SIGNIFY ACCEPTANCE, OR BY TAKING ANY ONE OR MORE OF THE FOLLOWING ACTIONS DOWNLOADING, INSTALLING, RUNNING,/AND OR USING THE APPLICABLE SOFTWARE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT EFFECTIVE AS OF THE DATE THAT YOU TAKE THE EARLIEST OF ONE OF THE FOREGOING ACTIONS. YOU REPRESENT AND WARRANT THAT YOU ARE 18 YEARS OLD OR OLDER AND HAVE THE RIGHT AND AUTHORITY TO ENTER INTO AND COMPLY WITH THE TERMS OF THIS AGREEMENT. ->> BY USING THE [TFGRID](tfgrid3:threefold_grid.md) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: +BY USING THE [TFGRID](tfgrid3:threefold_grid.md) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: - [X] [Terms & Conditions TFGrid Users TFGrid 3](terms_conditions_griduser) - [X] [Terms & Conditions TFGrid Farmers TFGrid 3](terms_conditions_farmer3) : relevant if you are a TFGrid Farmer From d4a2c306d5db7373e7fe203ccf1d8db4d0bd22e1 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 10:03:08 -0400 Subject: [PATCH 048/134] legal, test parsing --- collections/legal/tfgrid/terms_conditions_tfgrid3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/legal/tfgrid/terms_conditions_tfgrid3.md b/collections/legal/tfgrid/terms_conditions_tfgrid3.md index 771cba1..7eb326b 100644 --- a/collections/legal/tfgrid/terms_conditions_tfgrid3.md +++ b/collections/legal/tfgrid/terms_conditions_tfgrid3.md @@ -2,7 +2,7 @@ THESE TERMS AND CONDITIONS (THE "**AGREEMENTS**") CONSTITUTE A LEGAL AGREEMENT BETWEEN YOU ("TFGRID **USER**,""TFGRID **FARMER**," "**YOU**", OR "**YOURS**") AND [THREEFOLD COMPANIES](companies) or TFTECH ("**THREEFOLD**", "**COMPANY**," "**US**," "**WE**" OR "**OUR**"), GOVERNING THE TERMS OF YOUR PARTICIPATION AS A PARTNER, CUSTOMER, FARMER OR USER IN THE THREEFOLD GRID. YOU UNDERSTAND AND AGREE THAT BY ACCEPTING THE TERMS OF THIS AGREEMENT, EITHER BY CLICKING TO SIGNIFY ACCEPTANCE, OR BY TAKING ANY ONE OR MORE OF THE FOLLOWING ACTIONS DOWNLOADING, INSTALLING, RUNNING,/AND OR USING THE APPLICABLE SOFTWARE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT EFFECTIVE AS OF THE DATE THAT YOU TAKE THE EARLIEST OF ONE OF THE FOREGOING ACTIONS. YOU REPRESENT AND WARRANT THAT YOU ARE 18 YEARS OLD OR OLDER AND HAVE THE RIGHT AND AUTHORITY TO ENTER INTO AND COMPLY WITH THE TERMS OF THIS AGREEMENT. -BY USING THE [TFGRID](tfgrid3:threefold_grid.md) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: +>> BY USING THE [TFGRID](tfgrid3@@threefold_grid.md) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: - [X] [Terms & Conditions TFGrid Users TFGrid 3](terms_conditions_griduser) - [X] [Terms & Conditions TFGrid Farmers TFGrid 3](terms_conditions_farmer3) : relevant if you are a TFGrid Farmer From ba1c8778428ef909a028375ebeaf86c0ca182e61 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 10:04:07 -0400 Subject: [PATCH 049/134] legal, test parsing --- collections/legal/tfgrid/terms_conditions_tfgrid3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/legal/tfgrid/terms_conditions_tfgrid3.md b/collections/legal/tfgrid/terms_conditions_tfgrid3.md index 7eb326b..abd5eea 100644 --- a/collections/legal/tfgrid/terms_conditions_tfgrid3.md +++ b/collections/legal/tfgrid/terms_conditions_tfgrid3.md @@ -2,7 +2,7 @@ THESE TERMS AND CONDITIONS (THE "**AGREEMENTS**") CONSTITUTE A LEGAL AGREEMENT BETWEEN YOU ("TFGRID **USER**,""TFGRID **FARMER**," "**YOU**", OR "**YOURS**") AND [THREEFOLD COMPANIES](companies) or TFTECH ("**THREEFOLD**", "**COMPANY**," "**US**," "**WE**" OR "**OUR**"), GOVERNING THE TERMS OF YOUR PARTICIPATION AS A PARTNER, CUSTOMER, FARMER OR USER IN THE THREEFOLD GRID. YOU UNDERSTAND AND AGREE THAT BY ACCEPTING THE TERMS OF THIS AGREEMENT, EITHER BY CLICKING TO SIGNIFY ACCEPTANCE, OR BY TAKING ANY ONE OR MORE OF THE FOLLOWING ACTIONS DOWNLOADING, INSTALLING, RUNNING,/AND OR USING THE APPLICABLE SOFTWARE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT EFFECTIVE AS OF THE DATE THAT YOU TAKE THE EARLIEST OF ONE OF THE FOREGOING ACTIONS. YOU REPRESENT AND WARRANT THAT YOU ARE 18 YEARS OLD OR OLDER AND HAVE THE RIGHT AND AUTHORITY TO ENTER INTO AND COMPLY WITH THE TERMS OF THIS AGREEMENT. ->> BY USING THE [TFGRID](tfgrid3@@threefold_grid.md) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: +>> BY USING THE [TFGRID](tfgrid3@@threefold_grid) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: - [X] [Terms & Conditions TFGrid Users TFGrid 3](terms_conditions_griduser) - [X] [Terms & Conditions TFGrid Farmers TFGrid 3](terms_conditions_farmer3) : relevant if you are a TFGrid Farmer From c81eb024c319c864b0fa3074dd176e38470683e7 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 10:09:24 -0400 Subject: [PATCH 050/134] legal, test parsing --- collections/legal/tfgrid/terms_conditions_tfgrid3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/legal/tfgrid/terms_conditions_tfgrid3.md b/collections/legal/tfgrid/terms_conditions_tfgrid3.md index abd5eea..09ae9e7 100644 --- a/collections/legal/tfgrid/terms_conditions_tfgrid3.md +++ b/collections/legal/tfgrid/terms_conditions_tfgrid3.md @@ -2,7 +2,7 @@ THESE TERMS AND CONDITIONS (THE "**AGREEMENTS**") CONSTITUTE A LEGAL AGREEMENT BETWEEN YOU ("TFGRID **USER**,""TFGRID **FARMER**," "**YOU**", OR "**YOURS**") AND [THREEFOLD COMPANIES](companies) or TFTECH ("**THREEFOLD**", "**COMPANY**," "**US**," "**WE**" OR "**OUR**"), GOVERNING THE TERMS OF YOUR PARTICIPATION AS A PARTNER, CUSTOMER, FARMER OR USER IN THE THREEFOLD GRID. YOU UNDERSTAND AND AGREE THAT BY ACCEPTING THE TERMS OF THIS AGREEMENT, EITHER BY CLICKING TO SIGNIFY ACCEPTANCE, OR BY TAKING ANY ONE OR MORE OF THE FOLLOWING ACTIONS DOWNLOADING, INSTALLING, RUNNING,/AND OR USING THE APPLICABLE SOFTWARE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT EFFECTIVE AS OF THE DATE THAT YOU TAKE THE EARLIEST OF ONE OF THE FOREGOING ACTIONS. YOU REPRESENT AND WARRANT THAT YOU ARE 18 YEARS OLD OR OLDER AND HAVE THE RIGHT AND AUTHORITY TO ENTER INTO AND COMPLY WITH THE TERMS OF THIS AGREEMENT. ->> BY USING THE [TFGRID](tfgrid3@@threefold_grid) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: +>> BY USING THE [TFGRID](tfgrid3:threefold_grid.md) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: - [X] [Terms & Conditions TFGrid Users TFGrid 3](terms_conditions_griduser) - [X] [Terms & Conditions TFGrid Farmers TFGrid 3](terms_conditions_farmer3) : relevant if you are a TFGrid Farmer From 3fb117518098f0caea760a84e9829277fb732cad Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 10:19:27 -0400 Subject: [PATCH 051/134] legal, finalizing review --- collections/legal/privacypolicy.md | 1 - .../part_2_farmer_services.md | 2 +- .../part_9_capacity_utilization3.md | 10 +++++----- collections/legal/tfgrid/terms_conditions_tfgrid3.md | 2 +- collections/legal/threefold_grid.md | 7 +++++++ heroscript/legal/book_collections.md | 8 ++++---- 6 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 collections/legal/threefold_grid.md diff --git a/collections/legal/privacypolicy.md b/collections/legal/privacypolicy.md index a5d206a..a1f780c 100644 --- a/collections/legal/privacypolicy.md +++ b/collections/legal/privacypolicy.md @@ -71,7 +71,6 @@ If you make a request, we have one month to respond to you. If you would like to * email: dataprivacy@threefold.io -* post address: !!wiki.include page:threefold_fzc_address ### What are cookies? diff --git a/collections/legal/terms_conditions_farmer_parts/part_2_farmer_services.md b/collections/legal/terms_conditions_farmer_parts/part_2_farmer_services.md index e4afbe9..eae5868 100644 --- a/collections/legal/terms_conditions_farmer_parts/part_2_farmer_services.md +++ b/collections/legal/terms_conditions_farmer_parts/part_2_farmer_services.md @@ -4,7 +4,7 @@ The Farmer may provide IT Capacity on the ThreeFold_Grid (the "**Farmer Services By entering into this Agreement you receive a non-exclusive, non-sublicensable, non-transferable right to provide the Farmer Services pursuant to this Agreement during the Term hereof solely for your internal business purposes subject to the limitations set forth herein. -The Software consists of open source code and is made available to you pursuant to the terms of the open-source license agreement(s) as located on https://github.com/threefoldtech and https://github.com/threefoldfoundation (the "**Open Source License(s)**"). Your use of the Software or any other Content (Information) is conditioned upon your compliance at all times with the terms of all applicable Open Source License(s). [Example license for Zero-OS can be found here](https://github.com/threefoldtech/zos/blob/master/LICENCE). +The Software consists of open source code and is made available to you pursuant to the terms of the open-source license agreement(s) as located on https://github.com/threefoldtech and https://github.com/threefoldfoundation (the "**Open Source License(s)**"). Your use of the Software or any other Content (Information) is conditioned upon your compliance at all times with the terms of all applicable Open Source License(s). [Example license for Zero-OS can be found here](https://github.com/threefoldtech/zos/blob/main/LICENSE). Including without limitation all provisions governing access to source code, modification, and/or reverse engineering. You are responsible for complying with any applicable documentation, meaning any information that describes the ThreeFold_Grid, provides instructions or recommendations related to the configuration and/or use of the ThreeFold_Grid, or otherwise informs Users of the intended use of the ThreeFold_Grid, including, but not limited to content provided directly to User or published at [https://library.threefold.me](https://library.threefold.me), [https://library.threefold.me](https://library.threefold.me), [https://forum.threefold.io](https://forum.threefold.io) or otherwise made available in conjunction with the ThreeFold_Grid, the ThreeFold_Token or the Software ("**Documentation**") and for satisfying all technical requirements of the Software, including any requirements set forth in the Documentation for ensuring that the Software performs properly. diff --git a/collections/legal/terms_conditions_farmer_parts/part_9_capacity_utilization3.md b/collections/legal/terms_conditions_farmer_parts/part_9_capacity_utilization3.md index 42b6756..9e2efda 100644 --- a/collections/legal/terms_conditions_farmer_parts/part_9_capacity_utilization3.md +++ b/collections/legal/terms_conditions_farmer_parts/part_9_capacity_utilization3.md @@ -8,11 +8,11 @@ ThreeFold_Tokens (TFTs) are used to buy IT Capacity as delivered by the TFNodes #### 9.2 Utilization Mechanism -IT capacity is expressed in network, compute & storage units. +IT capacity is expressed in [network, compute & storage units](tfgrid3:cloudunits). -- CU = [Compute Units](tfgrid3:cloudunits) -- SU = [Storage Units](tfgrid3:cloudunits) -- NU = [Network Units](tfgrid3:cloudunits) +- CU = Compute Units +- SU = Storage Units +- NU = Network Units TF Explorer is the inventory of all IT capacity available for consumption on the ThreeFold_Grid. See http://explorer.grid.tf/ @@ -23,7 +23,7 @@ TFT received for people using capacity is disributed as follows: | 35% | needs to be burned | results in more TFT burned compared to generated once grid more mature. | | 10% | to TF Foundation | used to promote the manage the project. | | 5% | to Staking Pool for TF Validators | used to reward the people who run the TFChain 3.0 blockchain validators. | -| 50% | for solution providers & sales channel | managed by [ThreeFold DAO](/tfgrid/farming/tfdao). | +| 50% | for solution providers & sales channel | managed by [ThreeFold DAO](tfgrid3:tfdao.md). | the single source of truth for Utilization specifications is on https://library.threefold.me/info/threefold#/tfgrid/farming/proof_of_utilization diff --git a/collections/legal/tfgrid/terms_conditions_tfgrid3.md b/collections/legal/tfgrid/terms_conditions_tfgrid3.md index 09ae9e7..f274e0a 100644 --- a/collections/legal/tfgrid/terms_conditions_tfgrid3.md +++ b/collections/legal/tfgrid/terms_conditions_tfgrid3.md @@ -2,7 +2,7 @@ THESE TERMS AND CONDITIONS (THE "**AGREEMENTS**") CONSTITUTE A LEGAL AGREEMENT BETWEEN YOU ("TFGRID **USER**,""TFGRID **FARMER**," "**YOU**", OR "**YOURS**") AND [THREEFOLD COMPANIES](companies) or TFTECH ("**THREEFOLD**", "**COMPANY**," "**US**," "**WE**" OR "**OUR**"), GOVERNING THE TERMS OF YOUR PARTICIPATION AS A PARTNER, CUSTOMER, FARMER OR USER IN THE THREEFOLD GRID. YOU UNDERSTAND AND AGREE THAT BY ACCEPTING THE TERMS OF THIS AGREEMENT, EITHER BY CLICKING TO SIGNIFY ACCEPTANCE, OR BY TAKING ANY ONE OR MORE OF THE FOLLOWING ACTIONS DOWNLOADING, INSTALLING, RUNNING,/AND OR USING THE APPLICABLE SOFTWARE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT EFFECTIVE AS OF THE DATE THAT YOU TAKE THE EARLIEST OF ONE OF THE FOREGOING ACTIONS. YOU REPRESENT AND WARRANT THAT YOU ARE 18 YEARS OLD OR OLDER AND HAVE THE RIGHT AND AUTHORITY TO ENTER INTO AND COMPLY WITH THE TERMS OF THIS AGREEMENT. ->> BY USING THE [TFGRID](tfgrid3:threefold_grid.md) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: +>> BY USING THE [TFGRID](threefold_grid) OR ANY OF THE THREEFOLD PROVIDED SOFTWARE OR SERVICES YOU ACCEPT FOLLOWING AGREEMENTS: - [X] [Terms & Conditions TFGrid Users TFGrid 3](terms_conditions_griduser) - [X] [Terms & Conditions TFGrid Farmers TFGrid 3](terms_conditions_farmer3) : relevant if you are a TFGrid Farmer diff --git a/collections/legal/threefold_grid.md b/collections/legal/threefold_grid.md new file mode 100644 index 0000000..5268715 --- /dev/null +++ b/collections/legal/threefold_grid.md @@ -0,0 +1,7 @@ +# ThreeFold_Grid + +ThreeFold_Grid is a global, neutral, and sustainable network of autonomous storage and compute Internet capacity created by ThreeFold Farmers, with more than 80,000,000 GB and 20,000 cores existing today. On this Grid, IT capacity is indexed / registered on the TFChain for easy discovery by purchasers. Any application which can run on Linux can run on the ThreeFold_Grid but with more privacy, security, closer to the end-user, and at a much lower cost. + +This Internet capacity is produced and allocated locally - similar to the way electricity and other utilities are purchased today. This allows any digital service or application provider to host their services and applications in proximity to the end user leading to significantly greater performance, a lower price point and better margins. This is both more cost effective and green. + +!!!def alias:Threefold_Grid,tf_grid diff --git a/heroscript/legal/book_collections.md b/heroscript/legal/book_collections.md index 99a6a6c..a68a044 100644 --- a/heroscript/legal/book_collections.md +++ b/heroscript/legal/book_collections.md @@ -3,17 +3,17 @@ ```js !!book.generate name:'legal' title:'Legal' - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_legal/books/legal' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/legal' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_legal/collections/legal' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/legal' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_legal/collections/companies' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/companies' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_legal/collections/tfgrid3' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/tfgrid3' ``` From 27f0ad385b66d279f4d1093a9238c778567f9d2f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 10:20:03 -0400 Subject: [PATCH 052/134] legal removed tfgrid def --- collections/legal/threefold_grid.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/collections/legal/threefold_grid.md b/collections/legal/threefold_grid.md index 5268715..0ebe6c4 100644 --- a/collections/legal/threefold_grid.md +++ b/collections/legal/threefold_grid.md @@ -3,5 +3,3 @@ ThreeFold_Grid is a global, neutral, and sustainable network of autonomous storage and compute Internet capacity created by ThreeFold Farmers, with more than 80,000,000 GB and 20,000 cores existing today. On this Grid, IT capacity is indexed / registered on the TFChain for easy discovery by purchasers. Any application which can run on Linux can run on the ThreeFold_Grid but with more privacy, security, closer to the end-user, and at a much lower cost. This Internet capacity is produced and allocated locally - similar to the way electricity and other utilities are purchased today. This allows any digital service or application provider to host their services and applications in proximity to the end user leading to significantly greater performance, a lower price point and better margins. This is both more cost effective and green. - -!!!def alias:Threefold_Grid,tf_grid From cd578be2fa622d1c9a1b2050cd67896486c6f60f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 10:23:08 -0400 Subject: [PATCH 053/134] legal tfgrid3 urls --- collections/tfgrid3/dao/tfdao.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collections/tfgrid3/dao/tfdao.md b/collections/tfgrid3/dao/tfdao.md index 2b3ec3a..79cddd8 100644 --- a/collections/tfgrid3/dao/tfdao.md +++ b/collections/tfgrid3/dao/tfdao.md @@ -17,5 +17,5 @@ As well as ### More info about DAO's -- see [what is a DAO](dao_info.md) -- see [why a DAO](dao_why.md) \ No newline at end of file +- see [what is a DAO](tfgrid3:dao_info.md) +- see [why a DAO](tfgrid3:dao_why.md) \ No newline at end of file From 82ad9a6bf548d417030cc6a1a1678bf5d0b892fb Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 12:22:12 -0400 Subject: [PATCH 054/134] manual, legal --- books/manual/SUMMARY.md | 20 ++++++++++---------- collections/legal/terms_conditions_toc.md | 9 +++++++++ collections/legal/tfta_to_tft.md | 9 +++++++++ 3 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 collections/legal/terms_conditions_toc.md create mode 100644 collections/legal/tfta_to_tft.md diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index fdbacce..f07b712 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -367,13 +367,13 @@ - [How to Test](collaboration/testing/testing_readme.md) - [TestLodge](collaboration/testing/testlodge.md) - [Code of Conduct](collaboration/code_conduct.md) - - [Legal](manual_legal/terms_conditions_all3.md) - - [Disclaimer](manual_legal/disclaimer.md) - - [Definitions](manual_legal/definitions_legal.md) - - [Privacy Policy](manual_legal/privacypolicy.md) - - [Terms & Conditions](manual_legal/terms_conditions/terms_conditions_toc.md) - - [Terms & Conditions ThreeFold Related Websites](manual_legal/terms_conditions/terms_conditions_websites.md) - - [Terms & Conditions TFGrid Users TFGrid 3](manual_legal/terms_conditions/terms_conditions_griduser.md) - - [TFTA to TFT](manual_legal/terms_conditions/tfta_to_tft.md) - - [Terms & Conditions TFGrid Farmers TFGrid 3](manual_legal/terms_conditions/terms_conditions_farmer3.md) - - [Terms & Conditions Sales](manual_legal/terms_conditions/terms_conditions_sales.md) \ No newline at end of file + - [Legal](legal/legal_home.md) + - [Disclaimer](legal/disclaimer.md) + - [Definitions](legal/definitions_legal.md) + - [Terms & Conditions](legal/terms_conditions/terms_conditions_toc.md) + - [Terms and Conditions Websites](legal/terms_conditions_websites.md) + - [Terms and Conditions Users](legal/terms_conditions_tfgrid3.md) + - [TFTA to TFT](legal/tfta_to_tft.md) + - [Terms and Conditions Farmers](legal/terms_conditions_farmer3.md) + - [Terms and Conditions Sales](legal/terms_conditions_sales.md) + - [Privacy Policy](legal/privacypolicy.md) \ No newline at end of file diff --git a/collections/legal/terms_conditions_toc.md b/collections/legal/terms_conditions_toc.md new file mode 100644 index 0000000..de9638f --- /dev/null +++ b/collections/legal/terms_conditions_toc.md @@ -0,0 +1,9 @@ +# Terms & Conditions + +

Table of Contents

+ +- [Terms & Conditions ThreeFold Related Websites](./terms_conditions_websites.md) +- [Terms & Conditions TFGrid Users TFGrid 3](./terms_conditions_griduser.md) + - [TFTA to TFT](./tfta_to_tft.md) +- [Terms & Conditions TFGrid Farmers TFGrid 3](./terms_conditions_farmer3.md) +- [Terms & Conditions Sales](./terms_conditions_sales.md) \ No newline at end of file diff --git a/collections/legal/tfta_to_tft.md b/collections/legal/tfta_to_tft.md new file mode 100644 index 0000000..33a89ce --- /dev/null +++ b/collections/legal/tfta_to_tft.md @@ -0,0 +1,9 @@ +## Convert TFTA to TFT + +TFTA is a voluntary staking pool for people to show that they have no intent to sell in near time. + +If you would like migrate TFTA to TFT, it's super easy, just send your TFTA to the following address: + +> GBUT4GP5GJ6B3XW5PXENHQA7TXJI5GOPW3NF4W3ZIW6OOO4ISY6WNLN2 + +and it will return as TFT. We suggest that you try with 1 TFT first! \ No newline at end of file From 7c476e021ec8301357280138f2be8510001b77a7 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 12:32:05 -0400 Subject: [PATCH 055/134] manual, updated legal and tech --- books/manual/SUMMARY.md | 70 +++++++++++++++------------ heroscript/manual/book_collections.md | 6 ++- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index f07b712..311590b 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -305,38 +305,44 @@ - [TFGrid v3.0.0](about/roadmap/releasenotes/tfgrid_release_3_0.md) - [ThreeFold Token](about/token_overview/token_overview.md) - [Special Wallets](about/token_overview/special_wallets/stats_special_wallets.md) - - [Technology](technology/technology_toc.md) - - [How It Works](technology/grid3_howitworks.md) - - [Grid Concepts](technology/concepts/concepts_readme.md) - - [TFGrid Primitives](technology/concepts/grid_primitives.md) - - [TFGrid Component List](technology/concepts/grid3_components.md) - - [Infrastructure as Code](technology/concepts/grid3_iac.md) - - [Proof of Utilization](technology/concepts/proof_of_utilization.md) - - [Contract Grace Period](technology/concepts/contract_grace_period.md) - - [What's New on TFGrid v3.x](technology/concepts/grid3_whatsnew.md) - - [TFChain](technology/concepts/tfchain.md) - - [TFGrid by Design](technology/concepts/tfgrid_by_design.md) - - [Primitives](technology/primitives/primitives_toc.md) - - [Compute](technology/primitives/compute/compute_toc.md) - - [ZKube](technology/primitives/compute/zkube.md) - - [ZMachine](technology/primitives/compute/zmachine.md) - - [CoreX](technology/primitives/compute/corex.md) - - [Storage](technology/primitives/storage/storage_toc.md) - - [ZOS Filesystem](technology/primitives/storage/zos_fs.md) - - [ZOS Mount](technology/primitives/storage/zmount.md) - - [Quantum Safe File System](technology/primitives/storage/qsfs.md) - - [Zero-DB](technology/primitives/storage/zdb.md) - - [Zero-Disk](technology/primitives/storage/zdisk.md) - - [Network](technology/primitives/network/network_toc.md) - - [ZNET](technology/primitives/network/znet.md) - - [ZNIC](technology/primitives/network/znic.md) - - [WebGateway](technology/primitives/network/webgw3.md) - - [Zero-OS Advantages](technology/zos/benefits/zos_advantages.md) - - [Quantum Safe Storage](technology/qsss/qsss_home.md) - - [Smart Contract IT](technology/smartcontract_it/smartcontract_toc.md) - - [Introduction](technology/smartcontract_it/smartcontract_tfgrid3.md) - - [Infrastructure As Code - IAC](technology/smartcontract_it/smartcontract_iac.md) - - [3Bot Integration](technology/smartcontract_it/smartcontract_3bot.md) + - [Technology](tech/technology.md) + - [The Internet Today](tech/internet_today.md) + - [History of Computers](tech/history/c64.md) + - [Too Many Layers](tech/history/layers.md) + - [The Internet Re-invented](tech/how_does_it_work.md) + - [World Records](tech/world_records.md) + - [Key Innovations](tech/key_innovations_overview.md) + - [Mycelium Network](tech/mycelium_innovation.md) + - [Zero-OS](tech/zos_innovation.md) + - [Quantum Safe Storage](tech/zstor_innovation.md) + - [Quantum Safe Filesystem](tech/qsfs_innovation.md) + - [FList: Better OS Images](tech/flist_innovation.md) + - [FungiStor](tech/fungistor_innovation.md) + - [Network Wall](tech/network_wall_innovation.md) + - [Architecture](tech/architecture.md) + - [Energy Efficient](tech/energy_efficient.md) + - [Decentralized Cloud Core Capabilities](tech/features.md) + - [Storage](tech/qsss_home.md) + - [Quantum Safe Storage Algo](tech/qss_algorithm.md) + - [Zero Knowledge proof](tech/qss_zero_knowledge_proof.md) + - [NFT Storage](tech/nft_storage.md) + - [S3 Storage](tech/s3_interface) + - [File System](tech/qss_filesystem.md) + - [Network](tech/networking.md) + - [Mycelium](tech/mycelium.md) + - [Web Gateway](tech/webgw.md) + - [Partners Utilization](partners_utilization/partners.md) + - [Sikana](partners_utilization/sikana.md) + - [Vindo](partners_utilization/vindo.md) + - [Mkondo](partners_utilization/mkondo.md) + - [Vverse](partners_utilization/vverse.md) + - [Earth Wallet](partners_utilization/earth_wallet.md) + - [Elestio](partners_utilization/elestio.md) + - [OW Freezone](partners_utilization/freezone.md) + - [Helium](partners_utilization/helium.md) + - [Holochain](partners_utilization/helium.md) + - [TZG](partners_utilization/tanzania.md) + - [Tier-S DC](partners_utilization/tier_s_datacenter.md) - [Farming](farming/farming_toc.md) - [Farming Rewards](farming/farming_reward.md) - [Proof-of-Capacity](farming/proof_of_capacity.md) diff --git a/heroscript/manual/book_collections.md b/heroscript/manual/book_collections.md index 764195b..3a14aa9 100644 --- a/heroscript/manual/book_collections.md +++ b/heroscript/manual/book_collections.md @@ -22,15 +22,17 @@ !!doctree.add url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/about' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/technology' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/tech' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/manual_legal' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/legal' !!doctree.add url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/farming' !!doctree.add url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/cloud' !!doctree.add url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/collaboration' +!!doctree.add + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/partners_utilization' ``` From 593bfdb1fbbb6c1c1e94f36828d9c3c787747891 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 12:38:28 -0400 Subject: [PATCH 056/134] legal, updated grid user --- books/legal/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/books/legal/SUMMARY.md b/books/legal/SUMMARY.md index 6317e3e..9cee463 100644 --- a/books/legal/SUMMARY.md +++ b/books/legal/SUMMARY.md @@ -2,7 +2,7 @@ - [Definitions](legal/definitions_legal.md) - [Disclaimer](legal/disclaimer.md) - [Terms and Conditions Websites](legal/terms_conditions_websites.md) -- [Terms and Conditions Users](legal/terms_conditions_tfgrid3.md) +- [Terms and Conditions Users](legal/terms_conditions_griduser.md) - [Terms and Conditions Farmers](legal/terms_conditions_farmer3.md) - [Terms and Conditions Sales](legal/terms_conditions_sales.md) - [Privacy Policy](legal/privacypolicy.md) \ No newline at end of file From 3d834370f1b3feb65930a463d9afd3ae982e7eec Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 12:44:17 -0400 Subject: [PATCH 057/134] manual set user instead of all3 --- books/manual/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index 311590b..c2f87eb 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -378,7 +378,7 @@ - [Definitions](legal/definitions_legal.md) - [Terms & Conditions](legal/terms_conditions/terms_conditions_toc.md) - [Terms and Conditions Websites](legal/terms_conditions_websites.md) - - [Terms and Conditions Users](legal/terms_conditions_tfgrid3.md) + - [Terms and Conditions Users](legal/terms_conditions_griduser.md) - [TFTA to TFT](legal/tfta_to_tft.md) - [Terms and Conditions Farmers](legal/terms_conditions_farmer3.md) - [Terms and Conditions Sales](legal/terms_conditions_sales.md) From 22af330b98c2d4be930b162ba59b6aafda3f19f6 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 12:49:18 -0400 Subject: [PATCH 058/134] manual set tech in higher order for summary --- books/manual/SUMMARY.md | 78 ++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index c2f87eb..c6c4f9d 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -305,44 +305,44 @@ - [TFGrid v3.0.0](about/roadmap/releasenotes/tfgrid_release_3_0.md) - [ThreeFold Token](about/token_overview/token_overview.md) - [Special Wallets](about/token_overview/special_wallets/stats_special_wallets.md) - - [Technology](tech/technology.md) - - [The Internet Today](tech/internet_today.md) - - [History of Computers](tech/history/c64.md) - - [Too Many Layers](tech/history/layers.md) - - [The Internet Re-invented](tech/how_does_it_work.md) - - [World Records](tech/world_records.md) - - [Key Innovations](tech/key_innovations_overview.md) - - [Mycelium Network](tech/mycelium_innovation.md) - - [Zero-OS](tech/zos_innovation.md) - - [Quantum Safe Storage](tech/zstor_innovation.md) - - [Quantum Safe Filesystem](tech/qsfs_innovation.md) - - [FList: Better OS Images](tech/flist_innovation.md) - - [FungiStor](tech/fungistor_innovation.md) - - [Network Wall](tech/network_wall_innovation.md) - - [Architecture](tech/architecture.md) - - [Energy Efficient](tech/energy_efficient.md) - - [Decentralized Cloud Core Capabilities](tech/features.md) - - [Storage](tech/qsss_home.md) - - [Quantum Safe Storage Algo](tech/qss_algorithm.md) - - [Zero Knowledge proof](tech/qss_zero_knowledge_proof.md) - - [NFT Storage](tech/nft_storage.md) - - [S3 Storage](tech/s3_interface) - - [File System](tech/qss_filesystem.md) - - [Network](tech/networking.md) - - [Mycelium](tech/mycelium.md) - - [Web Gateway](tech/webgw.md) - - [Partners Utilization](partners_utilization/partners.md) - - [Sikana](partners_utilization/sikana.md) - - [Vindo](partners_utilization/vindo.md) - - [Mkondo](partners_utilization/mkondo.md) - - [Vverse](partners_utilization/vverse.md) - - [Earth Wallet](partners_utilization/earth_wallet.md) - - [Elestio](partners_utilization/elestio.md) - - [OW Freezone](partners_utilization/freezone.md) - - [Helium](partners_utilization/helium.md) - - [Holochain](partners_utilization/helium.md) - - [TZG](partners_utilization/tanzania.md) - - [Tier-S DC](partners_utilization/tier_s_datacenter.md) + - [Technology](tech/technology.md) + - [The Internet Today](tech/internet_today.md) + - [History of Computers](tech/history/c64.md) + - [Too Many Layers](tech/history/layers.md) + - [The Internet Re-invented](tech/how_does_it_work.md) + - [World Records](tech/world_records.md) + - [Key Innovations](tech/key_innovations_overview.md) + - [Mycelium Network](tech/mycelium_innovation.md) + - [Zero-OS](tech/zos_innovation.md) + - [Quantum Safe Storage](tech/zstor_innovation.md) + - [Quantum Safe Filesystem](tech/qsfs_innovation.md) + - [FList: Better OS Images](tech/flist_innovation.md) + - [FungiStor](tech/fungistor_innovation.md) + - [Network Wall](tech/network_wall_innovation.md) + - [Architecture](tech/architecture.md) + - [Energy Efficient](tech/energy_efficient.md) + - [Decentralized Cloud Core Capabilities](tech/features.md) + - [Storage](tech/qsss_home.md) + - [Quantum Safe Storage Algo](tech/qss_algorithm.md) + - [Zero Knowledge proof](tech/qss_zero_knowledge_proof.md) + - [NFT Storage](tech/nft_storage.md) + - [S3 Storage](tech/s3_interface) + - [File System](tech/qss_filesystem.md) + - [Network](tech/networking.md) + - [Mycelium](tech/mycelium.md) + - [Web Gateway](tech/webgw.md) + - [Partners Utilization](partners_utilization/partners.md) + - [Sikana](partners_utilization/sikana.md) + - [Vindo](partners_utilization/vindo.md) + - [Mkondo](partners_utilization/mkondo.md) + - [Vverse](partners_utilization/vverse.md) + - [Earth Wallet](partners_utilization/earth_wallet.md) + - [Elestio](partners_utilization/elestio.md) + - [OW Freezone](partners_utilization/freezone.md) + - [Helium](partners_utilization/helium.md) + - [Holochain](partners_utilization/helium.md) + - [TZG](partners_utilization/tanzania.md) + - [Tier-S DC](partners_utilization/tier_s_datacenter.md) - [Farming](farming/farming_toc.md) - [Farming Rewards](farming/farming_reward.md) - [Proof-of-Capacity](farming/proof_of_capacity.md) @@ -382,4 +382,4 @@ - [TFTA to TFT](legal/tfta_to_tft.md) - [Terms and Conditions Farmers](legal/terms_conditions_farmer3.md) - [Terms and Conditions Sales](legal/terms_conditions_sales.md) - - [Privacy Policy](legal/privacypolicy.md) \ No newline at end of file + - [Privacy Policy](legal/privacypolicy.md) \ No newline at end of file From b15b2135418083a5e44e2b42ef15794507875d32 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 12:54:26 -0400 Subject: [PATCH 059/134] manual update tech --- collections/developers/developers.md | 2 +- collections/manual/knowledge_base.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 13f8139..4e1c98a 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -2,7 +2,7 @@ This section covers all practical tutorials on how to develop and build on the ThreeFold Grid. -For complementary information on the technology developed by ThreeFold, refer to the [Technology](technology@@technology_toc) section. +For complementary information on the technology developed by ThreeFold, refer to the [Technology](tech@@technology_toc) section.

Table of Contents

diff --git a/collections/manual/knowledge_base.md b/collections/manual/knowledge_base.md index 6e98141..8af6c20 100644 --- a/collections/manual/knowledge_base.md +++ b/collections/manual/knowledge_base.md @@ -7,8 +7,8 @@ For practical information for farmers, developers and system administrators, ref

Table of Contents

- [About](about@@about) -- [Technology](technology@@technology_toc) +- [Technology](tech@@technology_toc) - [Farming](farming@@farming_toc) - [Cloud](cloud@@cloud_toc) - [Collaboration](collaboration@@collaboration_toc) -- [Legal](manual_legal@@terms_conditions_all3) \ No newline at end of file +- [Legal](legal@@legal_home) \ No newline at end of file From 33541e363f51908008066208184b2aabbf5164b8 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 12:59:49 -0400 Subject: [PATCH 060/134] manual tech added toc --- books/manual/SUMMARY.md | 3 +- collections/tech/technology_toc.md | 46 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 collections/tech/technology_toc.md diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index c6c4f9d..f4d2266 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -305,7 +305,8 @@ - [TFGrid v3.0.0](about/roadmap/releasenotes/tfgrid_release_3_0.md) - [ThreeFold Token](about/token_overview/token_overview.md) - [Special Wallets](about/token_overview/special_wallets/stats_special_wallets.md) - - [Technology](tech/technology.md) + - [Technology](tech/technology_toc.md) + - [Introduction](tech/technology.md) - [The Internet Today](tech/internet_today.md) - [History of Computers](tech/history/c64.md) - [Too Many Layers](tech/history/layers.md) diff --git a/collections/tech/technology_toc.md b/collections/tech/technology_toc.md new file mode 100644 index 0000000..94ab0b4 --- /dev/null +++ b/collections/tech/technology_toc.md @@ -0,0 +1,46 @@ +

Technology

+ +This section covers the technology behind the ThreeFold Grid. ThreeFold has created an amazing technology system to allow anyone to host their applications and data close to them. + +To build on the ThreeFold Grid, refer to the [Developers](developers@@developers) section. + +

Table of Contents

+ +- [Introduction](tech/technology.md) +- [The Internet Today](tech/internet_today.md) + - [History of Computers](tech/history/c64.md) + - [Too Many Layers](tech/history/layers.md) +- [The Internet Re-invented](tech/how_does_it_work.md) + - [World Records](tech/world_records.md) +- [Key Innovations](tech/key_innovations_overview.md) + - [Mycelium Network](tech/mycelium_innovation.md) + - [Zero-OS](tech/zos_innovation.md) + - [Quantum Safe Storage](tech/zstor_innovation.md) + - [Quantum Safe Filesystem](tech/qsfs_innovation.md) + - [FList: Better OS Images](tech/flist_innovation.md) + - [FungiStor](tech/fungistor_innovation.md) + - [Network Wall](tech/network_wall_innovation.md) +- [Architecture](tech/architecture.md) +- [Energy Efficient](tech/energy_efficient.md) +- [Decentralized Cloud Core Capabilities](tech/features.md) + - [Storage](tech/qsss_home.md) + - [Quantum Safe Storage Algo](tech/qss_algorithm.md) + - [Zero Knowledge proof](tech/qss_zero_knowledge_proof.md) + - [NFT Storage](tech/nft_storage.md) + - [S3 Storage](tech/s3_interface) + - [File System](tech/qss_filesystem.md) + - [Network](tech/networking.md) + - [Mycelium](tech/mycelium.md) + - [Web Gateway](tech/webgw.md) +- [Partners Utilization](partners_utilization/partners.md) + - [Sikana](partners_utilization/sikana.md) + - [Vindo](partners_utilization/vindo.md) + - [Mkondo](partners_utilization/mkondo.md) + - [Vverse](partners_utilization/vverse.md) + - [Earth Wallet](partners_utilization/earth_wallet.md) + - [Elestio](partners_utilization/elestio.md) + - [OW Freezone](partners_utilization/freezone.md) + - [Helium](partners_utilization/helium.md) + - [Holochain](partners_utilization/helium.md) + - [TZG](partners_utilization/tanzania.md) + - [Tier-S DC](partners_utilization/tier_s_datacenter.md) \ No newline at end of file From 86d33176c280e34e8a0da11a4c3cb2e34bcbe63a Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 13:03:39 -0400 Subject: [PATCH 061/134] manual tech fixed partners links --- collections/tech/technology_toc.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/collections/tech/technology_toc.md b/collections/tech/technology_toc.md index 94ab0b4..e78e9d1 100644 --- a/collections/tech/technology_toc.md +++ b/collections/tech/technology_toc.md @@ -32,15 +32,15 @@ To build on the ThreeFold Grid, refer to the [Developers](developers@@developers - [Network](tech/networking.md) - [Mycelium](tech/mycelium.md) - [Web Gateway](tech/webgw.md) -- [Partners Utilization](partners_utilization/partners.md) - - [Sikana](partners_utilization/sikana.md) - - [Vindo](partners_utilization/vindo.md) - - [Mkondo](partners_utilization/mkondo.md) - - [Vverse](partners_utilization/vverse.md) - - [Earth Wallet](partners_utilization/earth_wallet.md) - - [Elestio](partners_utilization/elestio.md) - - [OW Freezone](partners_utilization/freezone.md) - - [Helium](partners_utilization/helium.md) - - [Holochain](partners_utilization/helium.md) - - [TZG](partners_utilization/tanzania.md) - - [Tier-S DC](partners_utilization/tier_s_datacenter.md) \ No newline at end of file +- [Partners Utilization](partners_utilization@@partners) + - [Sikana](partners_utilization@@sikana) + - [Vindo](partners_utilization@@vindo) + - [Mkondo](partners_utilization@@mkondo) + - [Vverse](partners_utilization@@vverse) + - [Earth Wallet](partners_utilization@@earth_wallet) + - [Elestio](partners_utilization@@elestio) + - [OW Freezone](partners_utilization@@freezone) + - [Helium](partners_utilization@@helium) + - [Holochain](partners_utilization@@helium) + - [TZG](partners_utilization@@tanzania) + - [Tier-S DC](partners_utilization@@tier_s_datacenter) \ No newline at end of file From 57bc8f088b30313c720413d2a09c68582c4f1c5e Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 13:07:41 -0400 Subject: [PATCH 062/134] manual test collections --- heroscript/manual/book_collections.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/heroscript/manual/book_collections.md b/heroscript/manual/book_collections.md index 3a14aa9..33771b2 100644 --- a/heroscript/manual/book_collections.md +++ b/heroscript/manual/book_collections.md @@ -34,5 +34,8 @@ !!doctree.add url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/partners_utilization' +!!doctree.add + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections' + ``` From 4f6152a34ddb237a7aa447cdbfc194b17247ce3f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 13:09:26 -0400 Subject: [PATCH 063/134] manual fixed collections and holochain --- books/manual/SUMMARY.md | 2 +- collections/tech/technology_toc.md | 2 +- heroscript/manual/book_collections.md | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index f4d2266..da6d082 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -341,7 +341,7 @@ - [Elestio](partners_utilization/elestio.md) - [OW Freezone](partners_utilization/freezone.md) - [Helium](partners_utilization/helium.md) - - [Holochain](partners_utilization/helium.md) + - [Holochain](partners_utilization/holochain.md) - [TZG](partners_utilization/tanzania.md) - [Tier-S DC](partners_utilization/tier_s_datacenter.md) - [Farming](farming/farming_toc.md) diff --git a/collections/tech/technology_toc.md b/collections/tech/technology_toc.md index e78e9d1..53db78c 100644 --- a/collections/tech/technology_toc.md +++ b/collections/tech/technology_toc.md @@ -41,6 +41,6 @@ To build on the ThreeFold Grid, refer to the [Developers](developers@@developers - [Elestio](partners_utilization@@elestio) - [OW Freezone](partners_utilization@@freezone) - [Helium](partners_utilization@@helium) - - [Holochain](partners_utilization@@helium) + - [Holochain](partners_utilization@@holochain) - [TZG](partners_utilization@@tanzania) - [Tier-S DC](partners_utilization@@tier_s_datacenter) \ No newline at end of file diff --git a/heroscript/manual/book_collections.md b/heroscript/manual/book_collections.md index 33771b2..ed531d1 100644 --- a/heroscript/manual/book_collections.md +++ b/heroscript/manual/book_collections.md @@ -35,7 +35,10 @@ url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/partners_utilization' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/vindo' + +!!doctree.add + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/mkondo' ``` From e49b1e8238e6b1e235bae44ef59bcc3e578c92bc Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 13:12:51 -0400 Subject: [PATCH 064/134] manual fix collections --- books/manual/SUMMARY.md | 2 +- books/tech/SUMMARY.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index da6d082..8b6da45 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -332,7 +332,7 @@ - [Network](tech/networking.md) - [Mycelium](tech/mycelium.md) - [Web Gateway](tech/webgw.md) - - [Partners Utilization](partners_utilization/partners.md) + - [Partners](partners_utilization/partners.md) - [Sikana](partners_utilization/sikana.md) - [Vindo](partners_utilization/vindo.md) - [Mkondo](partners_utilization/mkondo.md) diff --git a/books/tech/SUMMARY.md b/books/tech/SUMMARY.md index f483fb3..5158638 100644 --- a/books/tech/SUMMARY.md +++ b/books/tech/SUMMARY.md @@ -33,6 +33,6 @@ - [Elestio](partners_utilization/elestio.md) - [OW Freezone](partners_utilization/freezone.md) - [Helium](partners_utilization/helium.md) - - [Holochain](partners_utilization/helium.md) + - [Holochain](partners_utilization/holochain.md) - [TZG](partners_utilization/tanzania.md) - [Tier-S DC](partners_utilization/tier_s_datacenter.md) \ No newline at end of file From 3eab2d1cc9f67fff9d61f61e024725648dd8e22a Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 13:16:34 -0400 Subject: [PATCH 065/134] manual put book_collections to main --- heroscript/manual/book_collections.md | 34 +++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/heroscript/manual/book_collections.md b/heroscript/manual/book_collections.md index ed531d1..0e6cb9a 100644 --- a/heroscript/manual/book_collections.md +++ b/heroscript/manual/book_collections.md @@ -1,44 +1,44 @@ ```js !!book.generate name:'manual' title:'ThreeFold Manual' printbook:false foldlevel:1 - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/books/manual' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/manual' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/manual' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/manual' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/dashboard' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/dashboard' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/developers' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/developers' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/farmers' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/farmers' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/system_administrators' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/system_administrators' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/threefold_token' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/threefold_token' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/faq' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/faq' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/about' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/about' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/tech' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/tech' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/legal' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/legal' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/farming' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/farming' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/cloud' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/cloud' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/collaboration' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/collaboration' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/partners_utilization' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/partners_utilization' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/vindo' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/vindo' !!doctree.add - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/development_manual/collections/mkondo' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/mkondo' ``` From 1023661bafbd890cd091945bb8cbeb45c4888630 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 14:38:54 -0400 Subject: [PATCH 066/134] manual farmers --- collections/farming/farming_toc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/farming/farming_toc.md b/collections/farming/farming_toc.md index 547b71e..e65db81 100644 --- a/collections/farming/farming_toc.md +++ b/collections/farming/farming_toc.md @@ -2,7 +2,7 @@ This section covers the essential information concerning ThreeFold Farming. -To farm on the ThreeFold Grid, refer to the [Farmers](../../documentation/farmers/farmers.md) section. +To farm on the ThreeFold Grid, refer to the [Farmers](farmers:farmers.md) section.

Table of Contents

From b7508480f36011a015df2b797633d18413b6d034 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 14:43:12 -0400 Subject: [PATCH 067/134] manual threefokd token --- .../system_administrators.md | 2 +- .../threefold_token/threefold_token.md | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/collections/system_administrators/system_administrators.md b/collections/system_administrators/system_administrators.md index fe09e6a..e8c3e2f 100644 --- a/collections/system_administrators/system_administrators.md +++ b/collections/system_administrators/system_administrators.md @@ -2,7 +2,7 @@ This section covers all practical tutorials for system administrators working on the ThreeFold Grid. -For complementary information on ThreeFold grid and its cloud component, refer to the [Cloud](../../knowledge_base/cloud/cloud_toc.md) section. +For complementary information on ThreeFold grid and its cloud component, refer to the [Cloud](cloud:cloud_toc.md) section.

Table of Contents

diff --git a/collections/threefold_token/threefold_token.md b/collections/threefold_token/threefold_token.md index de0079f..694b254 100644 --- a/collections/threefold_token/threefold_token.md +++ b/collections/threefold_token/threefold_token.md @@ -21,7 +21,7 @@ The ThreeFold Token (TFT) is a decentralized digital currency used to buy autono ThreeFold Tokens are generated through a process called “Farming”. Farming happens when active internet capacity is added to the ThreeFold Grid. Independent farmers earn ThreeFold Tokens (TFT) by providing neutral and decentralized internet capacity, thus expending the usable TF Grid. Therefore no central entity controls the internet. -> [Get an overview of the ThreeFold token](../../knowledge_base/about/token_overview/token_overview.md) +> [Get an overview of the ThreeFold token](about:token_overview.md) ## Chains with TFT @@ -50,31 +50,31 @@ The TFT contract address on different chains are the following: ## Bridges Between Chains -[Bridges](./tft_bridges/tft_bridges.md) are available to easily navigate between the chains. +[Bridges](tft_bridges.md) are available to easily navigate between the chains. -- [TFChain-Stellar Bridge](./tft_bridges/tfchain_stellar_bridge.html) -- [BSC-Stellar Bridge](./tft_bridges/bsc_stellar_bridge.html) -- [Ethereum-Stellar Bridge](./tft_bridges/tft_ethereum/tft_ethereum.html) +- [TFChain-Stellar Bridge](tfchain_stellar_bridge.md) +- [BSC-Stellar Bridge](bsc_stellar_bridge.md) +- [Ethereum-Stellar Bridge](tft_ethereum.md) ## Storing TFT -There are many ways to store TFT. The [TF Connect app wallet](./storing_tft/tf_connect_app.md) and a [hardwallet wallet](./storing_tft/hardware_wallet.md) are two of the many possibilities. +There are many ways to store TFT. The [TF Connect app wallet](tf_connect_app.md) and a [hardwallet wallet](hardware_wallet.md) are two of the many possibilities. -> [Easily Store TFT](./storing_tft/storing_tft.md) +> [Easily Store TFT](storing_tft.md) ## Buy and Sell TFT -You can [buy and sell TFT](./buy_sell_tft/buy_sell_tft.md) with cryptocurrencies on Stellar Chain, Ethereum Chain and BNB Smart Chain. +You can [buy and sell TFT](buy_sell_tft.md) with cryptocurrencies on Stellar Chain, Ethereum Chain and BNB Smart Chain. Using Lobstr is very effective to buy TFT with fiat or crypto in no time: -> [Get TFT: Quick Guide](./buy_sell_tft/tft_lobstr/tft_lobstr_short_guide.md) +> [Get TFT: Quick Guide](tft_lobstr_short_guide.md) ## Liquidity Provider (LP) A liquidity provider (LP) is an individual or entity that contributes liquidity to a decentralized exchange or automated market maker (AMM) platform -> [Become a Liquidity Provider](./liquidity/liquidity_readme.md) +> [Become a Liquidity Provider](liquidity_readme.md) ## Transaction Fees @@ -86,10 +86,10 @@ Each time transactions are done on chains, transaction fees apply. You can do almost anything on the TFGrid: as long as you're doing Linux stuff, ZOS got your back! -> [Get Started on the TFGrid](../system_administrators/getstarted/tfgrid3_getstarted.md) +> [Get Started on the TFGrid](system_administrators:tfgrid3_getstarted) ## Disclaimer > The information provided in this tutorial or any related discussion is not intended as investment advice. The purpose is to provide educational and informational content only. Investing in cryptocurrencies or any other assets carries inherent risks, and it is crucial to conduct your own research and exercise caution before making any investment decisions. > -> **The ThreeFold Token (TFT)** is not to be considered as a traditional investment instrument. The value of cryptocurrencies can be volatile, and there are no guarantees of profits or returns. Always be aware of the risks involved and make informed choices based on your own assessment and understanding. We strongly encourage you to read our [full disclaimer](../../knowledge_base/legal/disclaimer.md) and seek advice from a qualified financial professional if needed. \ No newline at end of file +> **The ThreeFold Token (TFT)** is not to be considered as a traditional investment instrument. The value of cryptocurrencies can be volatile, and there are no guarantees of profits or returns. Always be aware of the risks involved and make informed choices based on your own assessment and understanding. We strongly encourage you to read our [full disclaimer](legal/disclaimer.md) and seek advice from a qualified financial professional if needed. \ No newline at end of file From 35a1c614bd894fcc9ee1d789c354f26ea102dd64 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 15:07:32 -0400 Subject: [PATCH 068/134] manual, cloud sys admins collections url --- collections/cloud/cloud_toc.md | 12 ++++++------ .../system_administrators/system_administrators.md | 2 +- collections/threefold_token/threefold_token.md | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/collections/cloud/cloud_toc.md b/collections/cloud/cloud_toc.md index 4a50bd7..d1a549f 100644 --- a/collections/cloud/cloud_toc.md +++ b/collections/cloud/cloud_toc.md @@ -2,15 +2,15 @@ This section covers the essential information concerning Cloud utilization. -To deploy on the ThreeFold Grid, refer to the [System Administrators](../../documentation/system_administrators/system_administrators.md) section. +To deploy on the ThreeFold Grid, refer to the [System Administrators](system_administrators@@system_administrators) section.

Table of Contents

- [Cloud Units](./cloudunits.md) -- [Pricing](./pricing/pricing_toc.md) - - [Pricing Overview](./pricing/pricing.md) - - [Staking Discounts](./pricing/staking_discount_levels.md) - - [Cloud Pricing Compare](./pricing/cloud_pricing_compare.md) - - [Grid Billing](./grid_billing/grid_billing.md) +- [Pricing](./pricing_toc.md) + - [Pricing Overview](./pricing.md) + - [Staking Discounts](./staking_discount_levels.md) + - [Cloud Pricing Compare](./cloud_pricing_compare.md) + - [Grid Billing](./grid_billing.md) - [Resource Units](./resource_units_calc_cloudunits.md) - [Resource Units Advanced](./resourceunits_advanced.md) \ No newline at end of file diff --git a/collections/system_administrators/system_administrators.md b/collections/system_administrators/system_administrators.md index e8c3e2f..8d133d6 100644 --- a/collections/system_administrators/system_administrators.md +++ b/collections/system_administrators/system_administrators.md @@ -2,7 +2,7 @@ This section covers all practical tutorials for system administrators working on the ThreeFold Grid. -For complementary information on ThreeFold grid and its cloud component, refer to the [Cloud](cloud:cloud_toc.md) section. +For complementary information on ThreeFold grid and its cloud component, refer to the [Cloud](cloud@@cloud_toc) section.

Table of Contents

diff --git a/collections/threefold_token/threefold_token.md b/collections/threefold_token/threefold_token.md index 694b254..800efa6 100644 --- a/collections/threefold_token/threefold_token.md +++ b/collections/threefold_token/threefold_token.md @@ -86,7 +86,7 @@ Each time transactions are done on chains, transaction fees apply. You can do almost anything on the TFGrid: as long as you're doing Linux stuff, ZOS got your back! -> [Get Started on the TFGrid](system_administrators:tfgrid3_getstarted) +> [Get Started on the TFGrid](system_administrators:tfgrid3_getstarted.md) ## Disclaimer From dae8755ad2e126b767ef5c5b8839ef56c134cfc2 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 15:25:13 -0400 Subject: [PATCH 069/134] manual update links --- collections/about/orgstructure.md | 4 ++-- collections/legal/definitions_legal.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/about/orgstructure.md b/collections/about/orgstructure.md index 8f1ec9d..5fb2686 100644 --- a/collections/about/orgstructure.md +++ b/collections/about/orgstructure.md @@ -9,6 +9,6 @@ - [ThreeFold AG](./threefold_ag.md) - [Mazraa](./mazraa.md) - [BetterToken](./bettertoken.md) -- [DAO](./dao/dao.md) -- [ThreeFold DAO](./dao/tfdao.md) +- [DAO](./dao.md) +- [ThreeFold DAO](./tfdao.md) - [TFChain](./tfchain.md) \ No newline at end of file diff --git a/collections/legal/definitions_legal.md b/collections/legal/definitions_legal.md index 24badad..57458a4 100644 --- a/collections/legal/definitions_legal.md +++ b/collections/legal/definitions_legal.md @@ -17,7 +17,7 @@ The ThreeFold Foundation (ThreeFold DMCC in DUbai) is a participant in the bigge We acknowledge and support the many people and organizations around the world who bring crucial support to the growth and adoption of the ThreeFold_Grid. -See [ThreeFold Dubai](companies:threefold_dubai) +See [ThreeFold Dubai](companies@@threefold_dubai) > Work is ongoing to make the Foundation a global distributed concept with probably more than 1 legal entity. From a4efec1aa32682c01e6ba0d974e4afed165e2dbe Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 15:38:23 -0400 Subject: [PATCH 070/134] manual fixed URLs --- collections/cloud/pricing/pricing_toc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/cloud/pricing/pricing_toc.md b/collections/cloud/pricing/pricing_toc.md index 8e7a128..50903e1 100644 --- a/collections/cloud/pricing/pricing_toc.md +++ b/collections/cloud/pricing/pricing_toc.md @@ -5,4 +5,4 @@ - [Pricing Overview](./pricing.md) - [Staking Discounts](./staking_discount_levels.md) - [Cloud Pricing Compare](./cloud_pricing_compare.md) -- [Grid Billing](../grid_billing/grid_billing.md) \ No newline at end of file +- [Grid Billing](./grid_billing.md) \ No newline at end of file From 280652166f906ba2578fe24a00fa3273fae2ff4c Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 19:10:10 -0400 Subject: [PATCH 071/134] manual set urls for external collection --- collections/about/genesis_pool.md | 2 +- collections/about/token_history.md | 2 +- collections/collaboration/collaboration_toc.md | 2 +- .../collaboration_tools/circle_tool.md | 2 +- .../collaboration/development_process.md | 2 +- .../dashboard/deploy/dedicated_machines.md | 4 ++-- collections/dashboard/farms/your_farms.md | 4 ++-- collections/dashboard/home.md | 2 +- collections/dashboard/solutions/fullvm.md | 2 +- collections/dashboard/solutions/nixos_micro.md | 2 +- collections/dashboard/tfchain/tf_dao.md | 6 +++--- .../internals/zos/development/packages.md | 4 ++-- .../internals/zos/development/quickstart.md | 4 ++-- .../internals/zos/development/testing.md | 2 +- collections/developers/tfcmd/tfcmd.md | 2 +- collections/faq/faq.md | 10 +++++----- .../farmers/3node_building/1_create_farm.md | 2 +- .../farmers/3node_building/4_wipe_all_disks.md | 2 +- .../farmers/3node_building/gpu_farming.md | 2 +- .../farmers/3node_building/minting_receipts.md | 2 +- .../3node_diy_desktop/3node_diy_desktop.md | 6 +++--- .../3node_diy_rack_server.md | 4 ++-- collections/farmers/farmers.md | 4 ++-- .../set_additional_fees.md | 4 ++-- collections/farming/farming_intro.md | 2 +- collections/farming/farming_reward.md | 3 +-- .../farming/farming_reward_calculation.md | 4 ++-- collections/farming/farming_toc.md | 2 +- collections/farming/poc_dao_rules.md | 2 +- collections/farming/proof_of_capacity.md | 4 ++-- collections/farming/proof_of_utilization.md | 8 ++++---- .../advanced/cancel_contracts.md | 4 ++-- .../advanced/grid3_stellar_tfchain_bridge.md | 6 +++--- .../getstarted/tfgrid3_getstarted.md | 12 ++++++------ .../getstarted/tfgrid3_what_to_know.md | 2 +- collections/system_administrators/gpu/gpu.md | 4 ++-- .../system_administrators/gpu/gpu_toc.md | 18 +++++++++--------- .../advanced/terraform_nextcloud_vpn.md | 4 ++-- .../terraform/resources/terraform_vm.md | 2 +- .../terraform/terraform_basics.md | 4 ++-- 40 files changed, 79 insertions(+), 80 deletions(-) diff --git a/collections/about/genesis_pool.md b/collections/about/genesis_pool.md index ad6fdb2..25552de 100644 --- a/collections/about/genesis_pool.md +++ b/collections/about/genesis_pool.md @@ -64,7 +64,7 @@ The tokens were used from out of ThreeFold_Dubai to create value for the ThreeFo ## Remarks -- ThreeFold_Dubai is run as a [not-for-profit organization](../legal/definitions_legal.md) +- ThreeFold_Dubai is run as a [not-for-profit organization](legal@@definitions_legal) - All (future) profits generated, tokens=IT capacity sold are used to promote and grow the ThreeFold Project. - None of the potential profits generated go to the shareholders of the company. - Investments and loans given will of course be paid back to the relevant investors. \ No newline at end of file diff --git a/collections/about/token_history.md b/collections/about/token_history.md index 7d9c7a2..ee49ab4 100644 --- a/collections/about/token_history.md +++ b/collections/about/token_history.md @@ -81,7 +81,7 @@ In Q3 2021 we launched TF Grid 3.0 which has again brought improvement to the fa ### Migration from TFTv1 Stellar (Staking Pool=TFTA) to TFTv2 Stellar (Trading or Production Pool=TFT) -- See [TFTA to TFT](../legal/terms_conditions/tfta_to_tft.md) +- See [TFTA to TFT](legal@@tfta_to_tft) ### Technical Information diff --git a/collections/collaboration/collaboration_toc.md b/collections/collaboration/collaboration_toc.md index 3a6bc41..b99597c 100644 --- a/collections/collaboration/collaboration_toc.md +++ b/collections/collaboration/collaboration_toc.md @@ -2,7 +2,7 @@ ThreeFold strongly believes in the power of open-source projects and community-driven collaboration. The following documentation is ideal for anyone who wants to know ways to collaborate to the ThreeFold ecosystem. -To become a farmer, a developer or a sysadmin on the ThreeFold, read the [documentation](../../documentation/documentation.md). +To become a farmer, a developer or a sysadmin on the ThreeFold, read the [documentation](manual@@documentation).

Table of Contents

Table of Contents diff --git a/collections/dashboard/solutions/fullvm.md b/collections/dashboard/solutions/fullvm.md index 59b01e6..774714f 100644 --- a/collections/dashboard/solutions/fullvm.md +++ b/collections/dashboard/solutions/fullvm.md @@ -43,7 +43,7 @@ Deploy a new full virtual machine on the Threefold Grid - `Myceluim` to enable mycelium on the virtual machine - `Wireguard Access` to add a wireguard access to the Virtual Machine - `GPU` flag to add GPU to the Virtual machine - - To deploy a Full VM with GPU, you first need to [rent a dedicated node](../../dashboard/deploy/dedicated_machines.md) + - To deploy a Full VM with GPU, you first need to [rent a dedicated node](dashboard@@dedicated_machines) - `Dedicated` flag to retrieve only dedicated nodes - `Certified` flag to retrieve only certified nodes - Choose the location of the node diff --git a/collections/dashboard/solutions/nixos_micro.md b/collections/dashboard/solutions/nixos_micro.md index 41f8932..2e6a91f 100644 --- a/collections/dashboard/solutions/nixos_micro.md +++ b/collections/dashboard/solutions/nixos_micro.md @@ -55,7 +55,7 @@ We now present the main steps to properly configure your NixOS MicroVM running o * Once your configured the parameters, you can deploy the MicroVM. -If you need more information on how to SSH into your deployment, read [this section](../../system_administrators/getstarted/tfgrid3_getstarted.md) of the TF Manual. +If you need more information on how to SSH into your deployment, read [this section](system_administrators@@tfgrid3_getstarted) of the TF Manual. diff --git a/collections/dashboard/tfchain/tf_dao.md b/collections/dashboard/tfchain/tf_dao.md index 648280b..be2cf0e 100644 --- a/collections/dashboard/tfchain/tf_dao.md +++ b/collections/dashboard/tfchain/tf_dao.md @@ -13,7 +13,7 @@ The TFChain DAO (i.e. Decentralized Autonomous Organization) feature integrates ## An Introduction to the DAO concept -[A decentralized autonomous organization (DAO)](../../../knowledge_base/about/dao/dao.md) is an entity with no central leadership. Decisions get made from the bottom-up, governed by a community organized around a specific set of rules enforced on a blockchain. +[A decentralized autonomous organization (DAO)](about@@dao) is an entity with no central leadership. Decisions get made from the bottom-up, governed by a community organized around a specific set of rules enforced on a blockchain. DAOs are internet-native organizations collectively owned and managed by their members. They have built-in treasuries that are only accessible with the approval of their members. Decisions are made via proposals the group votes on during a specified period. @@ -24,9 +24,9 @@ DAOs are internet-native organizations collectively owned and managed by their m Voting for a DAO proposal is very simple. You first need to meet certain requirements to be able to vote. - Have a [Threefold farm](../farms/farms.md) -- Have at least one active [3node server](../../farmers/3node_building/3node_building.md) on the farm +- Have at least one active [3node server](farmers@@3node_building) on the farm - If you created your farm with the Threefold Connect app - - [Import your farm on the Threefold Dashboard](../../threefold_token/storing_tft/tf_connect_app.md#move-farm-from-the-tf-connect-app-to-the-tf-portal-polkadotjs) + - [Import your farm on the Threefold Dashboard](threefold_token@@tf_connect_app.md#move-farm-from-the-tf-connect-app-to-the-tf-portal-polkadotjs) diff --git a/collections/developers/internals/zos/development/packages.md b/collections/developers/internals/zos/development/packages.md index f7391f6..1e76a10 100644 --- a/collections/developers/internals/zos/development/packages.md +++ b/collections/developers/internals/zos/development/packages.md @@ -1,6 +1,6 @@ # Adding a new package -Binary packages are added via providing [a build script](../../bins/), then an automated workflow will build/publish an flist with this binary. +Binary packages are added via providing a build script, then an automated workflow will build/publish an flist with this binary. For example, to add `rmb` binary, we need to provide a bash script with a `build_rmb` function: @@ -43,7 +43,7 @@ build_rmb() { Note that, you can just download a statically build binary instead of building it. -The other step is to add it to workflow to be built automatically, in [bins workflow](../../.github/workflows/bins.yaml), add your binary's job: +The other step is to add it to workflow to be built automatically, in bins workflow, add your binary's job: ```yaml jobs: diff --git a/collections/developers/internals/zos/development/quickstart.md b/collections/developers/internals/zos/development/quickstart.md index 17a4fb1..10f461a 100644 --- a/collections/developers/internals/zos/development/quickstart.md +++ b/collections/developers/internals/zos/development/quickstart.md @@ -26,13 +26,13 @@ You should see the qemu console and boot logs, wait for awhile and you can [brow To stop the machine you can do `Control + a` then `x`. -You can read more about setting up a qemu development environment and more network options [here](../../qemu/README.md). +You can read more about setting up a qemu development environment and more network options [here](qemu_readme.md). ## Accessing node After booting up, the node should start downloading external packages, this would take some time depending on your internet connection. -See [how to ssh into it.](../../qemu/README.md#to-ssh-into-the-machine) +See [how to ssh into it.](qemu_readme.md#to-ssh-into-the-machine) How to get the node IP? Given the network script `dhcp-range`, it usually would be one of `192.168.123.43`, `192.168.123.44` or `192.168.123.45`. diff --git a/collections/developers/internals/zos/development/testing.md b/collections/developers/internals/zos/development/testing.md index 8f023ec..d2a9a27 100644 --- a/collections/developers/internals/zos/development/testing.md +++ b/collections/developers/internals/zos/development/testing.md @@ -21,7 +21,7 @@ While deploying on your local node, logs with `zinit log` would be helpful to se ## Using a test app -If you need to test a specific module or functionality, you can create a simple test app inside e.g. [tools directory](../../tools/). +If you need to test a specific module or functionality, you can create a simple test app inside e.g. tools directory. Inside this simple test app, you can import any module or talk to another one using [zbus](../internals/internals.md#ipc). diff --git a/collections/developers/tfcmd/tfcmd.md b/collections/developers/tfcmd/tfcmd.md index daa502a..b0653ae 100644 --- a/collections/developers/tfcmd/tfcmd.md +++ b/collections/developers/tfcmd/tfcmd.md @@ -2,7 +2,7 @@ TFCMD (`tfcmd`) is a command line interface to interact and develop on Threefold Grid using command line. -Consult the [ThreeFoldTech TFCMD repository](https://github.com/threefoldtech/tfgrid-sdk-go/tree/development/grid-cli) for the latest updates. Make sure to read the [basics](../../system_administrators/getstarted/tfgrid3_getstarted.md). +Consult the [ThreeFoldTech TFCMD repository](https://github.com/threefoldtech/tfgrid-sdk-go/tree/development/grid-cli) for the latest updates. Make sure to read the [basics](system_administrators@@tfgrid3_getstarted).

Table of Contents

diff --git a/collections/faq/faq.md b/collections/faq/faq.md index dda0496..fb60afb 100644 --- a/collections/faq/faq.md +++ b/collections/faq/faq.md @@ -314,7 +314,7 @@ Apply [here](https://marketplace.3node.global/index.php?dispatch=companies.apply There are 2 ways to create a twin: -You can create a twin via the [ThreeFold Dashboard](../dashboard/wallet_connector.md). +You can create a twin via the [ThreeFold Dashboard](dashboard@@wallet_connector). You can also create a twin via the ThreeFold Connect app. Indeed, a twin is automatically generated while creating a farm. Note that, in this case, the twin will be created on mainnet. @@ -865,7 +865,7 @@ http://[319:3cf0:dd1d:47b9:20c:29ff:fe2c:39be]/ If you can reach this website, it means that you are properly connected. -For more information on how to connect to Yggrasil (and the Planetary Network), read [this guide](../system_administrators/getstarted/ssh_guide/ssh_guide.md). +For more information on how to connect to Yggrasil (and the Planetary Network), read [this guide](system_administrators@@ssh_guide). @@ -1463,7 +1463,7 @@ No, as long as the 3Node is connected to the Internet via an ethernet cable (wif A small DIY 3Node based on a compact office computer will draw under 20W. A full size server will draw around 100W idling. Note that a 3Node actively used on the Grid (proof-of-utilization) will draw more power, but also generate passive income on top of farming if you have a public IP address. -For more information, read thes section [Calculate the Total Electricity Cost of Your Farm](../farmers/farming_optimization/farming_costs.md#calculate-the-total-electricity-cost-of-your-farm) of the Farming Guide. +For more information, read thes section [Calculate the Total Electricity Cost of Your Farm](farmers@@farming_costs) of the Farming Guide. @@ -1621,7 +1621,7 @@ It depends on your 3Node's system. Newer computers and servers will accept UEFI. ### How do I set the BIOS or UEFI of my 3Node? -You can read this [documentation](../farmers/3node_building/5_set_bios_uefi.md) to learn more about BIOS and UEFI settings for a DIY 3Node. +You can read this [documentation](farmers@@5_set_bios_uefi) to learn more about BIOS and UEFI settings for a DIY 3Node. @@ -2068,7 +2068,7 @@ First make sure to wipe the disks and then boot your 3Node. If you've wiped the There can be many different fixes for this error. Here are some troubleshooting tips to test separately: * In BIOS, enable AHCI -* Make sure to [wipe the disks](../farmers/3node_building/4_wipe_all_disks.md) of the 3Nodes +* Make sure to [wipe the disks](farmers@@4_wipe_all_disks) of the 3Nodes * If the 3Node has a RAID Controller: * Disabled the RAID controller, OR; * [Flash the RAID controller](https://fohdeesha.com/docs/perc.html) (i.e. crossflashing), OR; diff --git a/collections/farmers/3node_building/1_create_farm.md b/collections/farmers/3node_building/1_create_farm.md index 6b0d6e6..61ec8cc 100644 --- a/collections/farmers/3node_building/1_create_farm.md +++ b/collections/farmers/3node_building/1_create_farm.md @@ -85,4 +85,4 @@ Farming rewards will be sent to your farming wallet around the 8th of each month ## More Information -For more information, such as setting IP addresses, you can consult the [Dashboard Farms section](../../dashboard/farms/farms.md). \ No newline at end of file +For more information, such as setting IP addresses, you can consult the [Dashboard Farms section](dashboard@@farms). \ No newline at end of file diff --git a/collections/farmers/3node_building/4_wipe_all_disks.md b/collections/farmers/3node_building/4_wipe_all_disks.md index afce8aa..bcc5005 100644 --- a/collections/farmers/3node_building/4_wipe_all_disks.md +++ b/collections/farmers/3node_building/4_wipe_all_disks.md @@ -101,6 +101,6 @@ If you're having issues wiping the disks, you might need to use **--force** or * If you're having trouble getting your disks recognized by Zero-OS, some farmers have had success enabling AHCI mode for SATA in their BIOS. -If you are using a server with onboard storage, you might need to [re-flash the RAID card](faq@@faq.md#is-there-a-way-to-bypass-raid-in-order-for-zero-os-to-have-bare-metals-on-the-system-no-raid-controller-in-between-storage-and-the-grid). +If you are using a server with onboard storage, you might need to re-flash the RAID card. [Read the FAQ](faq@@faq) for more information. diff --git a/collections/farmers/3node_building/gpu_farming.md b/collections/farmers/3node_building/gpu_farming.md index b684163..f355525 100644 --- a/collections/farmers/3node_building/gpu_farming.md +++ b/collections/farmers/3node_building/gpu_farming.md @@ -54,7 +54,7 @@ When a user reserves your 3Node as a dedicated node, you will receive TFT paymen ## Check the GPU Node on the Node Finder -You can use the [Node Finder](../../dashboard/deploy/node_finder.md) on the [TF Dashboard](https://dashboard.grid.tf/) to verify that the node is displayed as having a GPU. +You can use the [Node Finder](dashboard@@node_finder) on the [TF Dashboard](https://dashboard.grid.tf/) to verify that the node is displayed as having a GPU. * On the Dashboard, go to the Node Finder * Under **Node ID**, write the node ID of the GPU node diff --git a/collections/farmers/3node_building/minting_receipts.md b/collections/farmers/3node_building/minting_receipts.md index 2b84f1b..76633d3 100644 --- a/collections/farmers/3node_building/minting_receipts.md +++ b/collections/farmers/3node_building/minting_receipts.md @@ -10,7 +10,7 @@ ## Introduction -Once you have the receipt hash of your node minting, you can get the [minting report](../../dashboard/tfchain/tf_minting_reports.md) of your node. +Once you have the receipt hash of your node minting, you can get the [minting report](dashboard@@tf_minting_reports) of your node. ## Access the Reports diff --git a/collections/farmers/complete_diy_guides/3node_diy_desktop/3node_diy_desktop.md b/collections/farmers/complete_diy_guides/3node_diy_desktop/3node_diy_desktop.md index de74eb0..2662525 100644 --- a/collections/farmers/complete_diy_guides/3node_diy_desktop/3node_diy_desktop.md +++ b/collections/farmers/complete_diy_guides/3node_diy_desktop/3node_diy_desktop.md @@ -82,11 +82,11 @@ You can create a farm with either the ThreeFold Dashboard or the ThreeFold Conne ## Using Dashboard -The Dashboard section contains all the information required to [create a farm](../../../dashboard/farms/your_farms.md). +The Dashboard section contains all the information required to [create a farm](dashboard@@your_farms). ## Using TF Connect App -You can [create a ThreeFold farm](../../../threefold_token/storing_tft/tf_connect_app.md) with the ThreeFold Connect App. +You can [create a ThreeFold farm](threefold_token@@tf_connect_app) with the ThreeFold Connect App. # 2. Create a Zero-OS Bootstrap Image @@ -387,7 +387,7 @@ Once you have your node ID, you can also go on the ThreeFold Dashboard to see yo ## Check the Node Status -You can use the [Node Finder](../../../dashboard/deploy/node_finder.md) on the [TF Dashboard](https://dashboard.grid.tf/) to verify that the node is online. +You can use the [Node Finder](dashboard@@node_finder) on the [TF Dashboard](https://dashboard.grid.tf/) to verify that the node is online. Enter your node ID and click **Apply**. diff --git a/collections/farmers/complete_diy_guides/3node_diy_rack_server/3node_diy_rack_server.md b/collections/farmers/complete_diy_guides/3node_diy_rack_server/3node_diy_rack_server.md index 3686915..e7e1c5e 100644 --- a/collections/farmers/complete_diy_guides/3node_diy_rack_server/3node_diy_rack_server.md +++ b/collections/farmers/complete_diy_guides/3node_diy_rack_server/3node_diy_rack_server.md @@ -272,11 +272,11 @@ You can create a farm with either the ThreeFold Dashboard or the ThreeFold Conne ### Using Dashboard -The Dashboard section contains all the information required to [create a farm](../../../dashboard/farms/your_farms.md). +The Dashboard section contains all the information required to [create a farm](dashboard@@your_farms). ### Using TF Connect App -You can [create a ThreeFold farm](../../../threefold_token/storing_tft/tf_connect_app.md) with the ThreeFold Connect App. +You can [create a ThreeFold farm](threefold_token@@tf_connect_app) with the ThreeFold Connect App. ## Wiping All the Disks diff --git a/collections/farmers/farmers.md b/collections/farmers/farmers.md index 9d5f2f8..f9428a7 100644 --- a/collections/farmers/farmers.md +++ b/collections/farmers/farmers.md @@ -2,7 +2,7 @@ This section covers all practical information on how to become a cloud service provider (farmer) on the ThreeFold Grid. -For complementary information on ThreeFold farming, refer to the [Farming](../../knowledge_base/farming/farming_toc.md) section. +For complementary information on ThreeFold farming, refer to the [Farming](farming@@farming_toc) section. To buy a certified node from an official ThreeFold vendor, check the [ThreeFold Marketplace](https://marketplace.3node.global/). @@ -31,6 +31,6 @@ To buy a certified node from an official ThreeFold vendor, check the [ThreeFold - [Quick Guide](./farmerbot/farmerbot_quick.md) - [Additional Information](./farmerbot/farmerbot_information.md) - [Minting and the Farmerbot](./farmerbot/farmerbot_minting.md) -- [Farmers FAQ](../faq/faq.md#farmers-faq) +- [Farmers FAQ](faq@@faq) > Note: Bugs in the code (e.g. ZOS or other components) can happen. If this is the case, there might be a loss of tokens during minting which won't be refunded by ThreeFold. If there are minting code errors, ThreeFold will try its best to fix the minting code and remint nodes that were affected by such errors. diff --git a/collections/farmers/farming_optimization/set_additional_fees.md b/collections/farmers/farming_optimization/set_additional_fees.md index e1b5437..5da2886 100644 --- a/collections/farmers/farming_optimization/set_additional_fees.md +++ b/collections/farmers/farming_optimization/set_additional_fees.md @@ -11,12 +11,12 @@ ## Introduction -Farmers can set additional fees for their 3Nodes on the [TF Dashboard](https://dashboard.grid.tf/). By doing so, users will then be able to [reserve the 3Node and use it as a dedicated node](../../dashboard/deploy/dedicated_machines.md). +Farmers can set additional fees for their 3Nodes on the [TF Dashboard](https://dashboard.grid.tf/). By doing so, users will then be able to [reserve the 3Node and use it as a dedicated node](dashboard@@dedicated_machines). This can be useful for farmers who provide additional values to their 3Nodes, e.g. a GPU card and/or high-quality hardware. ## Steps -Here are the steps to [set additional fees](../../dashboard/farms/your_farms.md#extra-fees) to a 3Node. +Here are the steps to [set additional fees](dashboard@@your_farms) to a 3Node. * On the Dashboard, go to **Farms** -> **Your Farms** * Under the section **Your Nodes**, locate the 3Node and click **Set Additional Fees** under **Actions** diff --git a/collections/farming/farming_intro.md b/collections/farming/farming_intro.md index 9ba490e..50da7fb 100644 --- a/collections/farming/farming_intro.md +++ b/collections/farming/farming_intro.md @@ -7,7 +7,7 @@ ThreeFold Farming ("Farming") is the process of connecting Internet capacity to ## What is Farming? -{{#include farming_circular.md}} +!!wiki.include page:'farming:farming_circular.md' ## Who can become a farmer on ThreeFold? diff --git a/collections/farming/farming_reward.md b/collections/farming/farming_reward.md index 8eba865..62f811a 100644 --- a/collections/farming/farming_reward.md +++ b/collections/farming/farming_reward.md @@ -59,5 +59,4 @@ The main advantage of PoC to farmers it makes it really easy to run a 3Node. It 5. TFChain will mint the required TFT and send them to account on TFChain of TFFarmer. 6. Everyone can use the [ThreeFold Node Finder](https://dashboard.grid.tf/#/deploy/node-finder/) to see where capacity is available. This info comes from the TFChain. - -{{#include farming_reward_disclaimer.md}} +!!wiki.include page:'farming:farming_reward_disclaimer.md' \ No newline at end of file diff --git a/collections/farming/farming_reward_calculation.md b/collections/farming/farming_reward_calculation.md index a56a9f1..a671094 100644 --- a/collections/farming/farming_reward_calculation.md +++ b/collections/farming/farming_reward_calculation.md @@ -9,7 +9,7 @@ Each 3Node has certain amount of compute, storage and network resources: For making this Internet Capacity available, Farmers are rewarded with TFT. -The amount of resources availabe in a 3Node are translated into compute units (CU), storage units (SU), Network units (NU) and IP addresses (IPAddr) to calculate farming rewards. See also [Cloud Units Calculation For Farming](../../cloudunits/resource_units_calc_cloudunits.md). +The amount of resources availabe in a 3Node are translated into compute units (CU), storage units (SU), Network units (NU) and IP addresses (IPAddr) to calculate farming rewards. See also [Cloud Units Calculation For Farming](cloud@@resource_units_calc_cloudunits). > **Unless explicitly specified otherwise, calculations of "gigabytes" use base > 1024. That is, 1 GB is equal to 1073741824 bytes.** @@ -50,4 +50,4 @@ The reward for above items are linked (pegged) to the USD See below for more info about USD price which will be used to calculate your farming reward as well as any other specifics in relation to farming calculations. -The above farming rewards apply for 3Nodes registered in TFChain for ThreeFold Grid v3. Anyone can calculate their potential rewards using the [Farming Reward Calculator](https://dashboard.grid.tf/calculator/simulator). The same CU, SU, NU and IPAddr principles apply to the sales of Internet capacity in the form [cloud units](../../cloudunits/cloudunits.md). +The above farming rewards apply for 3Nodes registered in TFChain for ThreeFold Grid v3. Anyone can calculate their potential rewards using the [Farming Reward Calculator](https://dashboard.grid.tf/calculator/simulator). The same CU, SU, NU and IPAddr principles apply to the sales of Internet capacity in the form [cloud units](cloud@@cloudunits). diff --git a/collections/farming/farming_toc.md b/collections/farming/farming_toc.md index e65db81..166db4f 100644 --- a/collections/farming/farming_toc.md +++ b/collections/farming/farming_toc.md @@ -2,7 +2,7 @@ This section covers the essential information concerning ThreeFold Farming. -To farm on the ThreeFold Grid, refer to the [Farmers](farmers:farmers.md) section. +To farm on the ThreeFold Grid, refer to the [Farmers](farmers@@farmers) section.

Table of Contents

diff --git a/collections/farming/poc_dao_rules.md b/collections/farming/poc_dao_rules.md index 0b0475c..42da3ff 100644 --- a/collections/farming/poc_dao_rules.md +++ b/collections/farming/poc_dao_rules.md @@ -29,7 +29,7 @@ - Make sure you have 50GB SSD capacity min available per logical core (physical core times number of threads it can run), if not your calculated CU will be lower. - Make sure your network connection is good enough, in future it will be measured and part of the Service Level Agreement. -{{#include tfgrid_min_sla.md}} +!!wiki.include page:'farming:tfgrid_min_sla.md' **Important Information around TFT USD Price Used at Registration** diff --git a/collections/farming/proof_of_capacity.md b/collections/farming/proof_of_capacity.md index ae0f9fe..01b3824 100644 --- a/collections/farming/proof_of_capacity.md +++ b/collections/farming/proof_of_capacity.md @@ -63,7 +63,7 @@ Each 3Node has certain amount of compute, storage and network resources: For making this Internet Capacity available, Farmers are rewarded with TFT. -The amount of resources availabe in a 3Node are translated into compute units (CU), storage units (SU), Network units (NU) and IP addresses (IPAddr) to calculate farming rewards. See also [Cloud Units Calculation For Farming](../cloud/resource_units_calc_cloudunits.md). +The amount of resources availabe in a 3Node are translated into compute units (CU), storage units (SU), Network units (NU) and IP addresses (IPAddr) to calculate farming rewards. See also [Cloud Units Calculation For Farming](cloud@@resource_units_calc_cloudunits). > **Unless explicitly specified otherwise, calculations of "gigabytes" use base > 1024. That is, 1 GB is equal to 1073741824 bytes.** @@ -90,4 +90,4 @@ The below table expands on CU, SU, NU and IPAddr and their farming rewards: > **The rewards above are calculated according to the current TFT to USD price in TFChain of 0.08. TFDAO is responsible to change this price in accordance to the current market and liquidity.** -The above farming rewards apply for 3Nodes registered in TFChain for ThreeFold Grid v3. Anyone can calculate their potential rewards using the [Farming Reward Simulator](https://dashboard.grid.tf/#/farms/simulator/). The same CU, SU, NU and IPAddr principles apply to the sales of Internet capacity in the form of [cloud units](../cloud/cloudunits.md). +The above farming rewards apply for 3Nodes registered in TFChain for ThreeFold Grid v3. Anyone can calculate their potential rewards using the [Farming Reward Simulator](https://dashboard.grid.tf/#/farms/simulator/). The same CU, SU, NU and IPAddr principles apply to the sales of Internet capacity in the form of [cloud units](cloud@@cloudunits). diff --git a/collections/farming/proof_of_utilization.md b/collections/farming/proof_of_utilization.md index e92536e..5b0a25e 100644 --- a/collections/farming/proof_of_utilization.md +++ b/collections/farming/proof_of_utilization.md @@ -23,13 +23,13 @@ Each ThreeFold Grid user can now use this capacity. The ThreeFold Chain ("TFChai Proof-of-utilization is the underlying mechanisms that verifies the utilization of Internet capacity on the ThreeFold Grid. -Every hour, the utilization is recorded in TFChain and the user is charged for the Internet capacity used on the ThreeFold Grid. Discount calculated in line with the amount of TFT users have in their accounts on TFChain. Learn more about the discount [here](../cloud/pricing/staking_discount_levels.md). +Every hour, the utilization is recorded in TFChain and the user is charged for the Internet capacity used on the ThreeFold Grid. Discount calculated in line with the amount of TFT users have in their accounts on TFChain. Learn more about the discount [here](cloud@@staking_discount_levels). ## How does Proof-of-Utilization work? 1. A user reserves Internet capacity on a given set of 3Nodes. 2. Zero-OS records the reserved and used CU, SU, NU and IPAddresses in correlation with TFChain records. -3. The TFChain DAO will charge the costs to the user in line with [discount mechanism](../cloud/pricing/staking_discount_levels.md). +3. The TFChain DAO will charge the costs to the user in line with [discount mechanism](cloud@@staking_discount_levels). 4. TFT from the user account are burned/distributed in line to table below. | Percentage | Description | Remark | @@ -37,7 +37,7 @@ Every hour, the utilization is recorded in TFChain and the user is charged for t | 35% | TFT burning | A mechanism used to maintain scarcity in the TFT economy. | | 10% | ThreeFold Foundation | Funds allocated to promote and grow the ThreeFold Grid. | | 5% | Validator Staking Pool | Rewards farmers that run TFChain 3.0 validator nodes. | -| 50% | Solution providers & sales channel | managed by [ThreeFold DAO](../about/dao/dao.md). | +| 50% | Solution providers & sales channel | managed by [ThreeFold DAO](about@@dao). | > Note: While the solution provider program is still active, the plan is to discontinue the program in the near future. We will update the manual as we get more information. We currently do not accept new solution providers. @@ -47,7 +47,7 @@ Every hour, the utilization is recorded in TFChain and the user is charged for t - Each solution provider and sales channel gets registered in TFChain and as such the distribution can be defined and calculated at billing time. - For billing purposes, ThreeFold DAO will check if it is from a known sales channel or solution provider. If yes, then the billing smart contract code will know how to distribute the TFTs. If the channel of solution provider is not known, then the 50% will go to the ThreeFold Foundation. -- For Certified Farming, [ThreeFold Tech](../about/threefold_tech.md) can define the solution & sales channel parameters, these are channels as provided by ThreeFold Tech. +- For Certified Farming, [ThreeFold Tech](about@@threefold_tech) can define the solution & sales channel parameters, these are channels as provided by ThreeFold Tech. - Burning can be lowered to 25% if too many tokens would be burned, ThreeFold DAO consensus needs to be achieved. ### Other Ways TFT are Required diff --git a/collections/system_administrators/advanced/cancel_contracts.md b/collections/system_administrators/advanced/cancel_contracts.md index 7b466a0..efab0ff 100644 --- a/collections/system_administrators/advanced/cancel_contracts.md +++ b/collections/system_administrators/advanced/cancel_contracts.md @@ -15,7 +15,7 @@ We present different methods to delete contracts on the TFGrid. ## Using the Dashboard -To cancel contracts with the Dashboard, consult the [Contracts List](../../dashboard/deploy/your_contracts.md) documentation. +To cancel contracts with the Dashboard, consult the [Contracts List](dashboard@@your_contracts) documentation. ## Using GraphQL and Polkadot UI @@ -31,7 +31,7 @@ query MyQuery { ``` -replace `TWIN_ID` with your twin id. The information should be available on the [Dashboard](../../dashboard/dashboard.md). +replace `TWIN_ID` with your twin id. The information should be available on the [Dashboard](dashboard@@dashboard). Then from [polkadot UI](https://polkadot.js.org/apps/), add the tfchain endpoint to development. diff --git a/collections/system_administrators/advanced/grid3_stellar_tfchain_bridge.md b/collections/system_administrators/advanced/grid3_stellar_tfchain_bridge.md index f74cbdb..11e84da 100644 --- a/collections/system_administrators/advanced/grid3_stellar_tfchain_bridge.md +++ b/collections/system_administrators/advanced/grid3_stellar_tfchain_bridge.md @@ -13,13 +13,13 @@ This document will explain how you can transfer TFT from Tfchain to Stellar and back. -For more information on TFT bridges, read [this documentation](../threefold_token/tft_bridges/tft_bridges.md). +For more information on TFT bridges, read [this documentation](threefold_token@@tft_bridges). ## Prerequisites -- [Stellar wallet](../threefold_token/storing_tft/storing_tft.md) +- [Stellar wallet](threefold_token@@storing_tft) -- [Account on TFChain (use TF Dashboard to create one)](../dashboard/wallet_connector.md) +- [Account on TFChain (use TF Dashboard to create one)](dashboard@@wallet_connector) ![](./img/bridge.png) diff --git a/collections/system_administrators/getstarted/tfgrid3_getstarted.md b/collections/system_administrators/getstarted/tfgrid3_getstarted.md index dcfd756..d7ef097 100644 --- a/collections/system_administrators/getstarted/tfgrid3_getstarted.md +++ b/collections/system_administrators/getstarted/tfgrid3_getstarted.md @@ -4,10 +4,10 @@ It's easy to get started on the TFGrid and deploy applications. -- [Create a TFChain Account](../../dashboard/wallet_connector.md) -- [Get TFT](../../threefold_token/buy_sell_tft/buy_sell_tft.md) -- [Bridge TFT to TChain](../../threefold_token/tft_bridges/tft_bridges.md) -- [Deploy an Application](../../dashboard/deploy/deploy.md) +- [Create a TFChain Account](dashboard@@wallet_connector) +- [Get TFT](threefold_token@@buy_sell_tft) +- [Bridge TFT to TChain](threefold_token@@tft_bridges) +- [Deploy an Application](dashboard@@deploy) - [SSH Remote Connection](./ssh_guide/ssh_guide.md) - [SSH with OpenSSH](./ssh_guide/ssh_openssh.md) - [SSH with PuTTY](./ssh_guide/ssh_putty.md) @@ -16,8 +16,8 @@ It's easy to get started on the TFGrid and deploy applications. ## Grid Platforms -- [TF Dashboard](../../dashboard/dashboard.md) -- [TF Flist Hub](../../developers/flist/flist_hub/zos_hub.md) +- [TF Dashboard](dashboard/dashboard@@) +- [TF Flist Hub](developers@@zos_hub) ## TFGrid Services and Resources diff --git a/collections/system_administrators/getstarted/tfgrid3_what_to_know.md b/collections/system_administrators/getstarted/tfgrid3_what_to_know.md index 300caa1..2a47adf 100644 --- a/collections/system_administrators/getstarted/tfgrid3_what_to_know.md +++ b/collections/system_administrators/getstarted/tfgrid3_what_to_know.md @@ -50,7 +50,7 @@ We leverage the VM primitive to allow provisioning kubernetes clusters across mu ## Exploring the capacity -You can easily check using [explorer-ui](dashboard/explorer/explorer_home.md) , also to plan your deployment you can use these [example queries](dashboard/explorer/explorer_graphql_examples.md) +You can easily check using [explorer-ui](dashboard@@explorer_home) , also to plan your deployment you can use these [example queries](dashboard@@explorer_graphql_examples) ## Getting started diff --git a/collections/system_administrators/gpu/gpu.md b/collections/system_administrators/gpu/gpu.md index 0d85112..96c5112 100644 --- a/collections/system_administrators/gpu/gpu.md +++ b/collections/system_administrators/gpu/gpu.md @@ -25,7 +25,7 @@ To use a GPU on the TFGrid, users need to rent a dedicated node. Once they have ## Filter and Reserve a GPU Node -You can filter and reserve a GPU node using the [Dedicated Nodes section](../../dashboard/deploy/dedicated_machines.md) of the **ThreeFold Dashboard**. +You can filter and reserve a GPU node using the [Dedicated Nodes section](dashboard@@dedicated_machines) of the **ThreeFold Dashboard**. ### Filter Nodes @@ -52,7 +52,7 @@ When you have decided which node to reserve, click on **Reserve** under the colu ## Deploy a VM with GPU -Now that you've reserverd a dedicated GPU node, it's time to deploy a VM to make use of the GPU! There are many ways to proceed. You can use the [Dashboard](../../dashboard/solutions/fullVm.md), [Go](../../developers/go/grid3_go_gpu.md), [Terraform](../terraform/terraform_gpu_support.md), etc. +Now that you've reserverd a dedicated GPU node, it's time to deploy a VM to make use of the GPU! There are many ways to proceed. You can use the [Dashboard](../../dashboard/solutions/fullVm.md), [Go](developers@@grid3_go_gpu), [Terraform](../terraform/terraform_gpu_support.md), etc. For example, deploying a VM with GPU on the Dashboard is easy. Simply set the GPU option and make sure to select your dedicated node, as show here: ![image](./img/gpu_3.png) diff --git a/collections/system_administrators/gpu/gpu_toc.md b/collections/system_administrators/gpu/gpu_toc.md index 073c79e..ea2a846 100644 --- a/collections/system_administrators/gpu/gpu_toc.md +++ b/collections/system_administrators/gpu/gpu_toc.md @@ -7,13 +7,13 @@ Feel free to explore the different possibilities!

Table of Contents

- [GPU Support](./gpu.md) -- [Node Finder and GPU](../../dashboard/deploy/node_finder.md#gpu-support) -- [Javascript Client and GPU](../../developers/javascript/grid3_javascript_gpu_support.md) -- [GPU and Go](../../developers/go/grid3_go_gpu.md) - - [GPU Support](../../developers/go/grid3_go_gpu_support.md) - - [Deploy a VM with GPU](../../developers/go/grid3_go_vm_with_gpu.md) -- [TFCMD and GPU](../../developers/tfcmd/tfcmd_vm.md#deploy-a-vm-with-gpu) +- [Node Finder and GPU](dashboard@@node_finder) +- [Javascript Client and GPU](developers@@grid3_javascript_gpu_support) +- [GPU and Go](developers@@grid3_go_gpu) + - [GPU Support](developers@@grid3_go_gpu_support) + - [Deploy a VM with GPU](developers@@grid3_go_vm_with_gpu) +- [TFCMD and GPU](developers@@tfcmd_vm) - [Terraform and GPU](../terraform/terraform_gpu_support.md) -- [Full VM and GPU](../../dashboard/solutions/fullVm.md) -- [Zero-OS API and GPU](../../developers/internals/zos/manual/api.md#gpus) -- [GPU Farming](../../farmers/3node_building/gpu_farming.md) \ No newline at end of file +- [Full VM and GPU](dashboard@@fullvm) +- [Zero-OS API and GPU](developers@@api) +- [GPU Farming](farmers@@gpu_farming) \ No newline at end of file diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md index 4045078..2eb4ccf 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md @@ -263,9 +263,9 @@ Note that, at any moment, if you want to see the information on your Terraform d # Nextcloud Setup * Access Nextcloud Setup - * Once you've deployed Nextcloud, you can access the Nextcloud Setup page by pasting on a browser the URL displayed on the line `fqdn = "..."` of the `terraform show` output. For more information on this, [read this documentation](../../../dashboard/solutions/nextcloud.md#nextcloud-setup). + * Once you've deployed Nextcloud, you can access the Nextcloud Setup page by pasting on a browser the URL displayed on the line `fqdn = "..."` of the `terraform show` output. For more information on this, [read this documentation](dashboard@@nextcloud). * Create a backup and set a daily backup and update - * Make sure to create a backup with `/mnt/backup` as the mount point, and set a daily update and backup for your Nextcloud VM. For more information, [read this documentation](../../../dashboard/solutions/nextcloud.md#backups-and-updates). + * Make sure to create a backup with `/mnt/backup` as the mount point, and set a daily update and backup for your Nextcloud VM. For more information, [read this documentation](dashboard@@nextcloud). > Note: By default, the daily Borgbackup is set at 4:00 UTC. If you change this parameter, make sure to adjust the moment the [Rsync backup](#create-a-cron-job-for-the-rsync-daily-backup) is done. diff --git a/collections/system_administrators/terraform/resources/terraform_vm.md b/collections/system_administrators/terraform/resources/terraform_vm.md index b349c5e..1b88f43 100644 --- a/collections/system_administrators/terraform/resources/terraform_vm.md +++ b/collections/system_administrators/terraform/resources/terraform_vm.md @@ -163,7 +163,7 @@ It's bit long for sure but let's try to dissect it a bit ip_range = lookup(grid_network.net1.nodes_ip_range, 2, "") ``` -- `node = grid_scheduler.sched.nodes["node1"]` means this deployment will happen on node returned from the scheduler. Otherwise the user can specify the node as `node = 2` and in this case the choice of the node is completely up to the user at this point. They need to do the capacity planning. Check the [Node Finder](../../../dashboard/deploy/node_finder.md) to know which nodes fits your deployment criteria. +- `node = grid_scheduler.sched.nodes["node1"]` means this deployment will happen on node returned from the scheduler. Otherwise the user can specify the node as `node = 2` and in this case the choice of the node is completely up to the user at this point. They need to do the capacity planning. Check the [Node Finder](dashboard@@node_finder) to know which nodes fits your deployment criteria. - `network_name` which network to deploy our project on, and here we choose the `name` of network `net1` - `ip_range` here we [lookup](https://www.terraform.io/docs/language/functions/lookup.html) the iprange of node `2` and initially load it with `""` diff --git a/collections/system_administrators/terraform/terraform_basics.md b/collections/system_administrators/terraform/terraform_basics.md index 0d200d6..4102d2a 100644 --- a/collections/system_administrators/terraform/terraform_basics.md +++ b/collections/system_administrators/terraform/terraform_basics.md @@ -51,7 +51,7 @@ There are two options when it comes to finding a node to deploy on. You can use - Use the [scheduler](resources/terraform_scheduler.md) - Scheduler will help you find a node that matches your criteria - Use the Nodes Explorer - - You can check the [Node Finder](../../dashboard/deploy/node_finder.md) to know which nodes fits your deployment criteria. + - You can check the [Node Finder](dashboard@@node_finder) to know which nodes fits your deployment criteria. - Make sure you choose a node which has enough capacity and is available (up and running). ## Preparation @@ -160,7 +160,7 @@ terraform destroy ## Available Flists -You can consult the [list of Flists](../../developers/flist/flist.md) to learn more about the available Flist to use with a virtual machine. +You can consult the [list of Flists](developers@@flist) to learn more about the available Flist to use with a virtual machine. ## Full and Micro Virtual Machines From 1836179a7511a7b2a01a474c6110899efb42afb2 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Mon, 13 May 2024 19:28:23 -0400 Subject: [PATCH 072/134] manual, set internal collections to filename.md template --- books/tech/SUMMARY.md | 74 ++++----- collections/about/about.md | 10 +- collections/about/bettertoken.md | 2 +- collections/about/dao/tfdao.md | 4 +- collections/about/genesis_pool.md | 8 +- collections/about/genesis_pool_dubai.md | 2 +- collections/about/governance.md | 6 +- collections/about/mazraa.md | 2 +- collections/about/orgstructure.md | 20 +-- .../releasenotes/releasenotes_readme.md | 20 +-- .../releasenotes/tfgrid_release_3_10_0.md | 2 +- .../releasenotes/tfgrid_release_3_8_0.md | 2 +- .../releasenotes/tfgrid_release_3_9_0.md | 2 +- collections/about/roadmap/roadmap_readme.md | 6 +- collections/about/threefold_companies.md | 16 +- collections/about/threefold_dubai.md | 2 +- collections/about/threefold_history.md | 8 +- collections/about/threefold_vzw.md | 2 +- collections/about/token_history.md | 2 +- .../about/token_overview/token_overview.md | 10 +- collections/cloud/cloud_toc.md | 16 +- collections/cloud/cloudunits.md | 8 +- .../cloud/grid_billing/grid_billing.md | 12 +- collections/cloud/pricing/pricing_toc.md | 8 +- .../cloud/resource_units_calc_cloudunits.md | 2 +- collections/cloud/resourceunits.md | 2 +- .../collaboration/collaboration_toc.md | 10 +- .../collaboration_tools.md | 6 +- .../collaboration_tools/website_tool.md | 2 +- collections/collaboration/contribute.md | 2 +- .../collaboration/development_process.md | 4 +- collections/dashboard/dashboard.md | 10 +- collections/dashboard/farms/farms.md | 16 +- collections/dashboard/home.md | 10 +- collections/dashboard/solutions/algorand.md | 2 +- .../solutions/basic_environments_readme.md | 14 +- collections/dashboard/solutions/caprover.md | 6 +- collections/dashboard/solutions/casper.md | 2 +- collections/dashboard/solutions/discourse.md | 2 +- collections/dashboard/solutions/fullvm.md | 2 +- collections/dashboard/solutions/funkwhale.md | 2 +- collections/dashboard/solutions/k8s.md | 2 +- collections/dashboard/solutions/mattermost.md | 2 +- collections/dashboard/solutions/nextcloud.md | 4 +- .../dashboard/solutions/nixos_micro.md | 2 +- collections/dashboard/solutions/nodepilot.md | 2 +- collections/dashboard/solutions/owncloud.md | 2 +- collections/dashboard/solutions/peertube.md | 2 +- collections/dashboard/solutions/presearch.md | 2 +- collections/dashboard/solutions/solutions.md | 46 +++--- collections/dashboard/solutions/subsquid.md | 2 +- collections/dashboard/solutions/taiga.md | 2 +- collections/dashboard/solutions/umbrel.md | 2 +- collections/dashboard/solutions/vm.md | 2 +- collections/dashboard/solutions/vm_intro.md | 10 +- collections/dashboard/solutions/wordpress.md | 2 +- collections/dashboard/tfchain/tf_dao.md | 2 +- collections/dashboard/tfchain/tfchain.md | 20 +-- collections/dashboard/tfchain/your_profile.md | 2 +- collections/dashboard/tfgrid/tfgrid.md | 12 +- collections/dashboard/toc.md | 12 +- collections/dashboard/vm_presearch.md | 2 +- collections/developers/flist/flist.md | 2 +- .../flist_case_studies/flist_case_studies.md | 4 +- .../flist_nextcloud_case_study.md | 10 +- .../developers/flist/flist_hub/zos_hub.md | 4 +- .../flist/grid3_supported_flists.md | 8 +- .../developers/go/grid3_go_gateways.md | 2 +- .../grid_deployment/grid_deployment.md | 6 +- .../developers/grid_deployment/snapshots.md | 2 +- .../grid_deployment/tfgrid_stacks.md | 2 +- .../developers/internals/rmb/rmb_intro.md | 4 +- .../internals/zos/development/readme.md | 6 +- .../internals/zos/internals/internals.md | 2 +- .../zos/internals/network/network_readme.md | 8 +- .../developers/internals/zos/manual/manual.md | 2 +- .../internals/zos/manual/workload_types.md | 2 +- .../internals/zos/manual/zmachine/readme.md | 2 +- .../internals/zos/performance/performance.md | 8 +- .../internals/zos/release/readme.md | 2 +- .../javascript/grid3_javascript_caprover.md | 2 +- .../javascript/grid3_javascript_kubernetes.md | 2 +- .../javascript/grid3_javascript_kvstore.md | 2 +- .../javascript/grid3_javascript_loadclient.md | 2 +- .../javascript/grid3_javascript_qsfs.md | 4 +- .../javascript/grid3_javascript_qsfs_zdbs.md | 2 +- .../javascript/grid3_javascript_readme.md | 28 ++-- .../grid3_javascript_vm_gateways.md | 4 +- .../javascript/grid3_javascript_zdb.md | 2 +- .../javascript/grid3_wireguard_gateway.md | 2 +- collections/developers/proxy/contributions.md | 4 +- collections/developers/proxy/proxy.md | 6 +- collections/developers/proxy/proxy_readme.md | 18 +-- collections/developers/tfcmd/tfcmd.md | 14 +- collections/developers/tfrobot/tfrobot.md | 10 +- .../developers/tfrobot/tfrobot_deploy.md | 2 +- .../farmers/3node_building/3_set_hardware.md | 2 +- .../farmers/3node_building/3node_building.md | 12 +- .../farmers/3node_building/5_set_bios_uefi.md | 2 +- .../farmers/3node_building/6_boot_3node.md | 6 +- .../farmers/3node_building/gpu_farming.md | 4 +- .../advanced_networking_toc.md | 6 +- .../networking_overview.md | 2 +- .../3node_diy_rack_server.md | 4 +- .../farmerbot/farmerbot_information.md | 6 +- .../farmers/farmerbot/farmerbot_intro.md | 6 +- .../farmers/farmerbot/farmerbot_quick.md | 2 +- collections/farmers/farmers.md | 46 +++--- .../farming_optimization/farming_costs.md | 2 +- .../farming_optimization.md | 16 +- .../farming/farming_reward_disclaimer.md | 2 +- collections/farming/farming_toc.md | 8 +- collections/farming/proof_of_capacity.md | 2 +- collections/farming/proof_of_utilization.md | 2 +- collections/legal/terms_conditions_toc.md | 10 +- .../legal/tf_grid_testnet_disclaimer.md | 2 +- .../advanced/advanced.md | 16 +- .../advanced/cancel_contracts.md | 2 +- .../advanced/ipfs/ipfs_toc.md | 4 +- .../computer_it_basics/computer_it_basics.md | 14 +- .../computer_it_basics/docker_basics.md | 2 +- .../firewall_basics/firewall_basics.md | 4 +- .../cockpit_guide/cockpit_guide.md | 6 +- .../guacamole_guide/guacamole_guide.md | 4 +- .../remote-desktop_gui/remote_desktop_gui.md | 6 +- .../xrdp_guide/xrdp_guide.md | 4 +- .../getstarted/ssh_guide/ssh_guide.md | 8 +- .../getstarted/ssh_guide/ssh_openssh.md | 2 +- .../getstarted/ssh_guide/ssh_wireguard.md | 8 +- .../getstarted/tfgrid3_getstarted.md | 14 +- .../getstarted/tfgrid3_what_to_know.md | 10 +- collections/system_administrators/gpu/gpu.md | 4 +- .../system_administrators/gpu/gpu_toc.md | 4 +- .../mycelium/information.md | 4 +- .../system_administrators/mycelium/message.md | 2 +- .../mycelium/mycelium_toc.md | 14 +- .../pulumi/pulumi_deployment_details.md | 2 +- .../pulumi/pulumi_examples.md | 2 +- .../pulumi/pulumi_readme.md | 8 +- .../system_administrators.md | 150 +++++++++--------- .../advanced/terraform_advanced_readme.md | 18 +-- .../advanced/terraform_capacity_planning.md | 2 +- .../terraform_mariadb_synced_databases.md | 4 +- .../advanced/terraform_nextcloud_aio.md | 2 +- .../advanced/terraform_nextcloud_redundant.md | 6 +- .../advanced/terraform_nextcloud_single.md | 4 +- .../advanced/terraform_nextcloud_toc.md | 8 +- .../terraform/advanced/terraform_nomad.md | 6 +- .../terraform/advanced/terraform_provider.md | 2 +- .../advanced/terraform_wireguard_ssh.md | 4 +- .../advanced/terraform_wireguard_vpn.md | 4 +- .../terraform/resources/terraform_k8s.md | 2 +- .../terraform/resources/terraform_qsfs.md | 4 +- .../resources/terraform_qsfs_on_full_vm.md | 4 +- .../resources/terraform_qsfs_on_microvm.md | 2 +- .../resources/terraform_resources_readme.md | 8 +- .../terraform/resources/terraform_vm.md | 4 +- .../resources/terraform_vm_gateway.md | 4 +- .../terraform/terraform_basics.md | 12 +- .../terraform/terraform_full_vm.md | 6 +- .../terraform/terraform_get_started.md | 4 +- .../terraform/terraform_toc.md | 60 +++---- .../innovations/key_innovations_overview.md | 28 ++-- .../innovations/mycelium_innovation_short.md | 50 +++--- collections/tech/primitives/primitives.md | 22 +-- collections/tech/primitives/storage/qsfs.md | 6 +- .../tech/primitives/storage/storage.md | 2 +- collections/tech/technology_toc.md | 50 +++--- .../tech/zos/benefits/unbreakable_storage.md | 2 +- 169 files changed, 709 insertions(+), 709 deletions(-) diff --git a/books/tech/SUMMARY.md b/books/tech/SUMMARY.md index 5158638..ac94582 100644 --- a/books/tech/SUMMARY.md +++ b/books/tech/SUMMARY.md @@ -1,38 +1,38 @@ -- [Introduction](tech/technology.md) -- [The Internet Today](tech/internet_today.md) - - [History of Computers](tech/history/c64.md) - - [Too Many Layers](tech/history/layers.md) -- [The Internet Re-invented](tech/how_does_it_work.md) - - [World Records](tech/world_records.md) -- [Key Innovations](tech/key_innovations_overview.md) - - [Mycelium Network](tech/mycelium_innovation.md) - - [Zero-OS](tech/zos_innovation.md) - - [Quantum Safe Storage](tech/zstor_innovation.md) - - [Quantum Safe Filesystem](tech/qsfs_innovation.md) - - [FList: Better OS Images](tech/flist_innovation.md) - - [FungiStor](tech/fungistor_innovation.md) - - [Network Wall](tech/network_wall_innovation.md) -- [Architecture](tech/architecture.md) -- [Energy Efficient](tech/energy_efficient.md) -- [Decentralized Cloud Core Capabilities](tech/features.md) - - [Storage](tech/qsss_home.md) - - [Quantum Safe Storage Algo](tech/qss_algorithm.md) - - [Zero Knowledge proof](tech/qss_zero_knowledge_proof.md) - - [NFT Storage](tech/nft_storage.md) +- [Introduction](technology.md) +- [The Internet Today](internet_today.md) + - [History of Computers](c64.md) + - [Too Many Layers](layers.md) +- [The Internet Re-invented](how_does_it_work.md) + - [World Records](world_records.md) +- [Key Innovations](key_innovations_overview.md) + - [Mycelium Network](mycelium_innovation.md) + - [Zero-OS](zos_innovation.md) + - [Quantum Safe Storage](zstor_innovation.md) + - [Quantum Safe Filesystem](qsfs_innovation.md) + - [FList: Better OS Images](flist_innovation.md) + - [FungiStor](fungistor_innovation.md) + - [Network Wall](network_wall_innovation.md) +- [Architecture](architecture.md) +- [Energy Efficient](energy_efficient.md) +- [Decentralized Cloud Core Capabilities](features.md) + - [Storage](qsss_home.md) + - [Quantum Safe Storage Algo](qss_algorithm.md) + - [Zero Knowledge proof](qss_zero_knowledge_proof.md) + - [NFT Storage](nft_storage.md) - [S3 Storage](tech/s3_interface) - - [File System](tech/qss_filesystem.md) - - [Network](tech/networking.md) - - [Mycelium](tech/mycelium.md) - - [Web Gateway](tech/webgw.md) -- [Partners Utilization](partners_utilization/partners.md) - - [Sikana](partners_utilization/sikana.md) - - [Vindo](partners_utilization/vindo.md) - - [Mkondo](partners_utilization/mkondo.md) - - [Vverse](partners_utilization/vverse.md) - - [Earth Wallet](partners_utilization/earth_wallet.md) - - [Elestio](partners_utilization/elestio.md) - - [OW Freezone](partners_utilization/freezone.md) - - [Helium](partners_utilization/helium.md) - - [Holochain](partners_utilization/holochain.md) - - [TZG](partners_utilization/tanzania.md) - - [Tier-S DC](partners_utilization/tier_s_datacenter.md) \ No newline at end of file + - [File System](qss_filesystem.md) + - [Network](networking.md) + - [Mycelium](mycelium.md) + - [Web Gateway](webgw.md) +- [Partners Utilization](partners.md) + - [Sikana](sikana.md) + - [Vindo](vindo.md) + - [Mkondo](mkondo.md) + - [Vverse](vverse.md) + - [Earth Wallet](earth_wallet.md) + - [Elestio](elestio.md) + - [OW Freezone](freezone.md) + - [Helium](helium.md) + - [Holochain](holochain.md) + - [TZG](tanzania.md) + - [Tier-S DC](tier_s_datacenter.md) \ No newline at end of file diff --git a/collections/about/about.md b/collections/about/about.md index ba76824..9e981f4 100644 --- a/collections/about/about.md +++ b/collections/about/about.md @@ -6,8 +6,8 @@ It's a good place to start if you want to have an overview of ThreeFold since it

Table of Contents

-- [ThreeFold History](./threefold_history.md) -- [ThreeFold Tech](./threefold_tech.md) -- [Organisation Structure](./orgstructure.md) -- [ThreeFold Roadmap](./roadmap/roadmap_readme.md) -- [ThreeFold Token](./token_overview/token_overview.md) \ No newline at end of file +- [ThreeFold History](threefold_history.md) +- [ThreeFold Tech](threefold_tech.md) +- [Organisation Structure](orgstructure.md) +- [ThreeFold Roadmap](roadmap_readme.md) +- [ThreeFold Token](token_overview.md) \ No newline at end of file diff --git a/collections/about/bettertoken.md b/collections/about/bettertoken.md index 81ff291..4e2fca5 100644 --- a/collections/about/bettertoken.md +++ b/collections/about/bettertoken.md @@ -15,7 +15,7 @@ European Farming Cooperative for the foundation: - Operates a data center in Lochristi (Belgium) offering hosting and connectivity for TF Farmers - Currently, 100+ nodes – many of them are owned by TF farmers -- [ThreeFold Tech](./threefold_tech.md) NV uses some of their equipment today for development +- [ThreeFold Tech](threefold_tech.md) NV uses some of their equipment today for development - Sale of small servers to TF Farmers, was done mainly via an online webshop ## Income diff --git a/collections/about/dao/tfdao.md b/collections/about/dao/tfdao.md index 79020b5..d50a01d 100644 --- a/collections/about/dao/tfdao.md +++ b/collections/about/dao/tfdao.md @@ -24,8 +24,8 @@ Amongst others the DAO needs to arrange | Utility Token model | | | -------------------------------------------- | ------------------------------------------ | -| [Proof Of Capacity](../../farming/proof_of_capacity.md) | Farming (creation) of TFT | -| [Proof Of Utilization](../../farming/proof_of_utilization.md) | Utilization (burning, distribution) of TFT | +| [Proof Of Capacity](proof_of_capacity.md) | Farming (creation) of TFT | +| [Proof Of Utilization](proof_of_utilization.md) | Utilization (burning, distribution) of TFT | As well as diff --git a/collections/about/genesis_pool.md b/collections/about/genesis_pool.md index 25552de..1923ad5 100644 --- a/collections/about/genesis_pool.md +++ b/collections/about/genesis_pool.md @@ -32,12 +32,12 @@ Many hundreds of servers have been used to develop the technology which now make Most of the servers are in Dubai and in Ghent (Belgium). -- To see the [genesis pool in Ghent, see here](./genesis_pool_ghent.md) -- To see the [genesis pool in Dubai, see here](./genesis_pool_dubai.md) +- To see the [genesis pool in Ghent, see here](genesis_pool_ghent.md) +- To see the [genesis pool in Dubai, see here](genesis_pool_dubai.md) All genesis pools were owned by the foundation. Many of those servers are at this point no longer active. The operations were done by ThreeFold_Dubai and BetterToken as Farming Cooperative. -> For information about genesis pool/block, see [here](./genesis_block_pool_details.md). +> For information about genesis pool/block, see [here](genesis_block_pool_details.md). ## Genesis Pool Token Usage @@ -46,7 +46,7 @@ All genesis pools were owned by the foundation. Many of those servers are at thi - This was a deal made mid 2018 and provided the ThreeFold Dubai with technology and a global engineering team. - The other part went to ThreeFold Dubai, to allow the Foundation to promote & further grow the project. -> [See Token Overview](./token_overview/token_overview.md) for more details. +> [See Token Overview](token_overview.md) for more details. The tokens were used from out of ThreeFold_Dubai to create value for the ThreeFold Grid. diff --git a/collections/about/genesis_pool_dubai.md b/collections/about/genesis_pool_dubai.md index a25dc91..93ff1b9 100644 --- a/collections/about/genesis_pool_dubai.md +++ b/collections/about/genesis_pool_dubai.md @@ -4,4 +4,4 @@ ![](img/genesispool_2.jpg) -Read more about ThreeFold Dubai [here](./threefold_dubai.md). \ No newline at end of file +Read more about ThreeFold Dubai [here](threefold_dubai.md). \ No newline at end of file diff --git a/collections/about/governance.md b/collections/about/governance.md index 2381fa5..383d5aa 100644 --- a/collections/about/governance.md +++ b/collections/about/governance.md @@ -22,7 +22,7 @@ The project is grateful of the support of its community and the commercial entit ThreeFold is fundamentally a decentralized initiative. Within this framework, ThreeFold Dubai plays a pivotal role in championing and advancing the ThreeFold Grid and the broader movement. -For more information, read the [ThreeFold History](./threefold_history.md). +For more information, read the [ThreeFold History](threefold_history.md). ## Type of Token @@ -39,7 +39,7 @@ For more information, [read the legal opinions](https://drive.google.com/file/d/ ## Governance Process -To make sure that all our funds are used properly and that decisions are taken for the benefit of ThreeFold and its community as a whole, we make use of different tools and features, such as multi-signature wallets, the [ThreeFold DAO](./dao/tfdao.md) and the [ThreeFold Forum](https://forum.threefold.io/). +To make sure that all our funds are used properly and that decisions are taken for the benefit of ThreeFold and its community as a whole, we make use of different tools and features, such as multi-signature wallets, the [ThreeFold DAO](tfdao.md) and the [ThreeFold Forum](https://forum.threefold.io/). ## Organic Growth @@ -51,7 +51,7 @@ The Genesis pool was based on real hardware located in Dubai and Ghent. The tokens out of this pool are safe and well managed. We are acquiring a lot of them with ThreeFold Cloud (ThreeFold Dubai). -For more information on the Genesis pool, [read this section](./genesis_pool.md). +For more information on the Genesis pool, [read this section](genesis_pool.md). ## Decentralized and Open-Source diff --git a/collections/about/mazraa.md b/collections/about/mazraa.md index c280c8e..d9e6898 100644 --- a/collections/about/mazraa.md +++ b/collections/about/mazraa.md @@ -10,7 +10,7 @@ ## Introduction -Mazraa is a brand name of [ThreeFold Dubai](./threefold_dubai.md). You can read about ThreeFold Dubai for more details. +Mazraa is a brand name of [ThreeFold Dubai](threefold_dubai.md). You can read about ThreeFold Dubai for more details. ## History diff --git a/collections/about/orgstructure.md b/collections/about/orgstructure.md index 5fb2686..b9e7a67 100644 --- a/collections/about/orgstructure.md +++ b/collections/about/orgstructure.md @@ -2,13 +2,13 @@

Table of Contents

-- [Governance](./governance.md) -- [ThreeFold Companies](./threefold_companies.md) -- [ThreeFold Dubai](./threefold_dubai.md) -- [ThreeFold VZW](./threefold_vzw.md) -- [ThreeFold AG](./threefold_ag.md) -- [Mazraa](./mazraa.md) -- [BetterToken](./bettertoken.md) -- [DAO](./dao.md) -- [ThreeFold DAO](./tfdao.md) -- [TFChain](./tfchain.md) \ No newline at end of file +- [Governance](governance.md) +- [ThreeFold Companies](threefold_companies.md) +- [ThreeFold Dubai](threefold_dubai.md) +- [ThreeFold VZW](threefold_vzw.md) +- [ThreeFold AG](threefold_ag.md) +- [Mazraa](mazraa.md) +- [BetterToken](bettertoken.md) +- [DAO](dao.md) +- [ThreeFold DAO](tfdao.md) +- [TFChain](tfchain.md) \ No newline at end of file diff --git a/collections/about/roadmap/releasenotes/releasenotes_readme.md b/collections/about/roadmap/releasenotes/releasenotes_readme.md index 21e8011..d2a0e20 100644 --- a/collections/about/roadmap/releasenotes/releasenotes_readme.md +++ b/collections/about/roadmap/releasenotes/releasenotes_readme.md @@ -7,13 +7,13 @@ Whether you're a developer, a farmer, a user, or simply curious about the cutting-edge advancements happening in the world of distributed computing, these release notes will provide you with valuable insights and keep you up to date with our progress. So dive in, explore the details, and join us in shaping the future of the ThreeFold Grid! ## ThreeFold TFGrid v3.x Release Notes -- [TFGrid v3.10.0](./tfgrid_release_3_10_0.md) -- [TFGrid v3.9.0](./tfgrid_release_3_9_0.md) -- [TFGrid v3.8.0](./tfgrid_release_3_8_0.md) -- [TFGrid v3.7.0](./tfgrid_release_3_7_0.md) -- [TFGrid v3.6.1](./tfgrid_release_3_6_1.md) -- [TFGrid v3.6.0](./tfgrid_release_3_6_0.md) -- [TFGrid v3.0.0 Alpha-5](./tfgrid_release_3_0_a5.md) -- [TFGrid v3.0.0 Alpha-4](./tfgrid_release_3_0_a4.md) -- [TFGrid v3.0.0 Alpha-2](./tfgrid_release_3_0_a2.md) -- [TFGrid v3.0.0](./tfgrid_release_3_0.md) +- [TFGrid v3.10.0](tfgrid_release_3_10_0.md) +- [TFGrid v3.9.0](tfgrid_release_3_9_0.md) +- [TFGrid v3.8.0](tfgrid_release_3_8_0.md) +- [TFGrid v3.7.0](tfgrid_release_3_7_0.md) +- [TFGrid v3.6.1](tfgrid_release_3_6_1.md) +- [TFGrid v3.6.0](tfgrid_release_3_6_0.md) +- [TFGrid v3.0.0 Alpha-5](tfgrid_release_3_0_a5.md) +- [TFGrid v3.0.0 Alpha-4](tfgrid_release_3_0_a4.md) +- [TFGrid v3.0.0 Alpha-2](tfgrid_release_3_0_a2.md) +- [TFGrid v3.0.0](tfgrid_release_3_0.md) diff --git a/collections/about/roadmap/releasenotes/tfgrid_release_3_10_0.md b/collections/about/roadmap/releasenotes/tfgrid_release_3_10_0.md index 8cad3e3..08fbf1b 100644 --- a/collections/about/roadmap/releasenotes/tfgrid_release_3_10_0.md +++ b/collections/about/roadmap/releasenotes/tfgrid_release_3_10_0.md @@ -67,7 +67,7 @@ Below are some of the key highlights of the TFGrid v3.10.0 component upgrades an #### TF-Grid-CLI - Introduced a simple tool for creating virtual machines and Kubernetes clusters. Note that `TF-Grid-CLI` is now `TFCMD`. -- Get started [here](../../../../documentation/developers/tfcmd/tfcmd.md). +- Get started [here](tfcmd.md). #### Gridify diff --git a/collections/about/roadmap/releasenotes/tfgrid_release_3_8_0.md b/collections/about/roadmap/releasenotes/tfgrid_release_3_8_0.md index 9142adf..a1c51aa 100644 --- a/collections/about/roadmap/releasenotes/tfgrid_release_3_8_0.md +++ b/collections/about/roadmap/releasenotes/tfgrid_release_3_8_0.md @@ -18,7 +18,7 @@ This release note includes updates, improvements and fixes of numerous grid comp ## Upgrades and Improvements ### TFChain v2.2.0 -- Added [Third Party Billing Services](https://github.com/threefoldtech/tfchain/blob/12bc8842c7c321d22e36667a91dfc5d3c7d04ab8/substrate-node/pallets/pallet-smart-contract/service_consumer_contract_flow.md), allowing defining contracts between TFChain users for a service and the billing. +- Added [Third Party Billing Services](service_consumer_contract_flow.md), allowing defining contracts between TFChain users for a service and the billing. - Reworked billing flow, see [details here](https://github.com/threefoldtech/tfchain/issues/269). - Infrastructure wise, we have integrated [Firesquid](https://docs.subsquid.io/), which is showing promising improvements in regards of the storage and data syncing. - Added Bugfixes around data validations and improving migrations diff --git a/collections/about/roadmap/releasenotes/tfgrid_release_3_9_0.md b/collections/about/roadmap/releasenotes/tfgrid_release_3_9_0.md index 972cb78..14a3b67 100644 --- a/collections/about/roadmap/releasenotes/tfgrid_release_3_9_0.md +++ b/collections/about/roadmap/releasenotes/tfgrid_release_3_9_0.md @@ -35,7 +35,7 @@ Reliable Message Bus Relay (RMB-RS) is a secure communication panel that allows - End-to-end encryption support. - Support for third-party hosted Relays. Anyone can host a Relay and people can use it safely since there is no way messages can be inspected while using e2e. That's similar to home servers by matrix. -See [Specifications](https://github.com/threefoldtech/rmb-rs/blob/main/docs/readme.md) for more information. +See [Specifications](readme.md) for more information. > Below is the list of the __Public Relay Addresses__ hosted by Threefold: diff --git a/collections/about/roadmap/roadmap_readme.md b/collections/about/roadmap/roadmap_readme.md index acf698c..fc5cea9 100644 --- a/collections/about/roadmap/roadmap_readme.md +++ b/collections/about/roadmap/roadmap_readme.md @@ -2,10 +2,10 @@ Welcome to ThreeFold's product roadmap! We are thrilled to have you on board as we journey towards a decentralized and sustainable future. Our product roadmap outlines the innovative solutions and technologies we are developing to revolutionize the way we compute, store data, and connect. Here, you will find a comprehensive overview of our latest and upcoming releases, enhancements, and advancements across our ecosystem. -> Click [here](../../technology/concepts/grid3_components.md) to see the complete TFGrid Component List +> Click [here](grid3_components.md) to see the complete TFGrid Component List ## Table of Contents - [TFGrid v3.x Announcement (Aug 2021 - Forum)](https://forum.threefold.io/t/announcement-of-tfgrid-3-0/1132) -- [What's new on TFGrid v3.x](../../technology/concepts/grid3_whatsnew.md) -- [Release Notes](./releasenotes/releasenotes_readme.md) \ No newline at end of file +- [What's new on TFGrid v3.x](grid3_whatsnew.md) +- [Release Notes](releasenotes_readme.md) \ No newline at end of file diff --git a/collections/about/threefold_companies.md b/collections/about/threefold_companies.md index 280a3f0..f1e7821 100644 --- a/collections/about/threefold_companies.md +++ b/collections/about/threefold_companies.md @@ -15,18 +15,18 @@ The following companies are related parties to ThreeFold. Our terms and conditio | THREEFOLD RELATED COMPANIES | Description | | --------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| [ThreeFold Dubai or ThreeFold Cloud](./threefold_dubai.md) | Promotion of TFGrid + Delivery of ThreeFold Cloud | -| [Threefold_Tech](./threefold_tech.md) | Belgium-based tech company owns IP (Intellectual Property) of tech, is open source | -| [ThreeFold_VZW](./threefold_vzw.md) | Non for profit organization in BE, intented to be used for grants work. | -| [ThreeFold_AG](./threefold_ag.md) | ThreeFold in Zug, Switzerland | +| [ThreeFold Dubai or ThreeFold Cloud](threefold_dubai.md) | Promotion of TFGrid + Delivery of ThreeFold Cloud | +| [Threefold_Tech](threefold_tech.md) | Belgium-based tech company owns IP (Intellectual Property) of tech, is open source | +| [ThreeFold_VZW](threefold_vzw.md) | Non for profit organization in BE, intented to be used for grants work. | +| [ThreeFold_AG](threefold_ag.md) | ThreeFold in Zug, Switzerland | | TF Hub Limited | ThreeFold in BVI | | Codescalers | Egypt-based software development team, creates a lot of code for ThreeFold | | FARMING COOPERATIVES | | | ------------------------------------ | ------------------------------------------------ | -| [Mazraa](./mazraa.md) | A farmer in Middle East who is part of ThreeFold_Dubai | -| [BetterToken](./bettertoken.md) | BetterToken is the very first ThreeFold Farming Cooperative in Europe | +| [Mazraa](mazraa.md) | A farmer in Middle East who is part of ThreeFold_Dubai | +| [BetterToken](bettertoken.md) | BetterToken is the very first ThreeFold Farming Cooperative in Europe | | SOME LARGER FARMERS | | @@ -36,5 +36,5 @@ The following companies are related parties to ThreeFold. Our terms and conditio | Moresi | A neutral, technologically advanced data center in Switzerland | | there are many more | ... | -> Please note, ThreeFold Grid 3.x operates as a [DAO](./dao/dao.md) every party who wants to participate with the ThreeFold Grid uses the [TFChain](./tfchain.md) and our Forums. -> [Click here for more info about our DAO](./dao/tfdao.md) \ No newline at end of file +> Please note, ThreeFold Grid 3.x operates as a [DAO](dao.md) every party who wants to participate with the ThreeFold Grid uses the [TFChain](tfchain.md) and our Forums. +> [Click here for more info about our DAO](tfdao.md) \ No newline at end of file diff --git a/collections/about/threefold_dubai.md b/collections/about/threefold_dubai.md index 9c1836b..e2e1abc 100644 --- a/collections/about/threefold_dubai.md +++ b/collections/about/threefold_dubai.md @@ -18,7 +18,7 @@ ThreeFold Dubai is the original team of ThreeFold operated from Dubai and Belgiu ## Responsibilities - Promote ThreeFold Grid and the ThreeFold Token -- Work with [ThreeFold Tech](./threefold_tech.md) for the creation and maintenance of the technology. +- Work with [ThreeFold Tech](threefold_tech.md) for the creation and maintenance of the technology. - Legal: signing party with all T&C (terms and conditions) with all future farmers - Work with many people and companies around the world to grow the threefold ecosystem - Look for partners who are willing to grow the threefold ecosystem diff --git a/collections/about/threefold_history.md b/collections/about/threefold_history.md index df6c74c..d8fd5df 100644 --- a/collections/about/threefold_history.md +++ b/collections/about/threefold_history.md @@ -23,7 +23,7 @@ Our founders have largely retained their tokens, with only minimal sales, if any In the earlier days of ThreeFold, there were multiple teams collaborating, but the two core teams were located in Dubai and Belgium. -A group of early supporters bought IT capacity (through buying TFT) from our Genesis pool and our early farmers. These buyers could use their TFT to buy IT capacity from [ThreeFold Dubai](./threefold_dubai.md) or [BetterToken](./bettertoken.md) BV until April 2020, or from the TF Grid directly in a fully decentralized way starting May 2020. +A group of early supporters bought IT capacity (through buying TFT) from our Genesis pool and our early farmers. These buyers could use their TFT to buy IT capacity from [ThreeFold Dubai](threefold_dubai.md) or [BetterToken](bettertoken.md) BV until April 2020, or from the TF Grid directly in a fully decentralized way starting May 2020. The ThreeFold Grid is the result of many farmers using the open source technology of ThreeFold Tech. @@ -47,13 +47,13 @@ How much funding was used to make the ThreeFold project possible? We have worked with multiple regions over the years to look for appropriate structures, we realize we need more funding as such we have launched a venture creator in mauritius who will hopefully invest 7.5m EUR in TFTech as well as in TF Dubai. -See our [overview of our companies](./threefold_companies.md) +See our [overview of our companies](threefold_companies.md) ## Genesis Pool -To kickstart the ThreeFold Grid back in 2017 the foundation committed large amounts of capacity to the grid. This was called the [Genesis Pool](./genesis_pool.md) and the tokens sold as mentioned could be used to use capacity from this pool and more. +To kickstart the ThreeFold Grid back in 2017 the foundation committed large amounts of capacity to the grid. This was called the [Genesis Pool](genesis_pool.md) and the tokens sold as mentioned could be used to use capacity from this pool and more. ## History of Tokens -For more info about history of tokens, see [token history](./token_history.md). \ No newline at end of file +For more info about history of tokens, see [token history](token_history.md). \ No newline at end of file diff --git a/collections/about/threefold_vzw.md b/collections/about/threefold_vzw.md index 584653f..efd5a29 100644 --- a/collections/about/threefold_vzw.md +++ b/collections/about/threefold_vzw.md @@ -21,7 +21,7 @@ A **VZW** has no shareholders, only members. ## Functions - owner of the wisdom_council -- eventuallly ThreeFold VZW will own some decentralized organizations as operating in the ThreeFold world e.g. [TF Dubai](./threefold_dubai.md) +- eventuallly ThreeFold VZW will own some decentralized organizations as operating in the ThreeFold world e.g. [TF Dubai](threefold_dubai.md) ## Some History diff --git a/collections/about/token_history.md b/collections/about/token_history.md index ee49ab4..8796dd9 100644 --- a/collections/about/token_history.md +++ b/collections/about/token_history.md @@ -22,7 +22,7 @@ We present the ThreeFold token history and the path from TFT v1 towards TFT v2. - More than 10 years ago, this project started from out of our incubator (see [Incubaid](https://www.incubaid.com)) - More than 6 years ago TF Foundation started deploying capacity for development purposes - - This became our ([our genesis pool](./genesis_pool.md)), which is the beginning of farming + - This became our ([our genesis pool](genesis_pool.md)), which is the beginning of farming - In 2017-18, value of the genesis pools were about 7m USD in TFT (tokens did not exist yet) - Genesis pools are owned by ThreeFold Dubai (ThreeFold_Dubai). - March 2018 our first-generation blockchain for the ThreeFold_Token saw daylight diff --git a/collections/about/token_overview/token_overview.md b/collections/about/token_overview/token_overview.md index c78c608..73d509b 100644 --- a/collections/about/token_overview/token_overview.md +++ b/collections/about/token_overview/token_overview.md @@ -31,7 +31,7 @@ By farming, buying, holding, and utilizing ThreeFold Tokens, you are actively su ThreeFold uses proof-of-capacity to mint tokens. Since the genenis pool, all tokens that are being minted are the result of farming. Minting will stop during 2024, to keep the total amount of TFT at 1 billion, instead of the previously planned 4 billion. Read more about this [here](https://forum.threefold.io/t/end-feb-2024-update-from-the-team/4233). -> For more details, see [Proof of Capacity](../../farming/proof_of_capacity.md) +> For more details, see [Proof of Capacity](proof_of_capacity.md) ## Proof-of-Utilization @@ -41,7 +41,7 @@ TFT is used on the TFGrid to purchase network, compute and storage resources thr ![](img/token_distribution.png) -> For more details, see [Proof-of-Utilization](../../farming/proof_of_utilization.md) +> For more details, see [Proof-of-Utilization](proof_of_utilization.md) ## TFT Distribution @@ -80,9 +80,9 @@ The values here are subject to change. Check the current market conditions. ## Complemetary Information -- [ThreeFold History](../../about/threefold_history.md) -- [Token History](../../about/token_history.md) -- [Special Wallets](./special_wallets/stats_special_wallets.md) +- [ThreeFold History](threefold_history.md) +- [Token History](token_history.md) +- [Special Wallets](stats_special_wallets.md) ## Disclaimer diff --git a/collections/cloud/cloud_toc.md b/collections/cloud/cloud_toc.md index d1a549f..48ae56a 100644 --- a/collections/cloud/cloud_toc.md +++ b/collections/cloud/cloud_toc.md @@ -6,11 +6,11 @@ To deploy on the ThreeFold Grid, refer to the [System Administrators](system_adm

Table of Contents

-- [Cloud Units](./cloudunits.md) -- [Pricing](./pricing_toc.md) - - [Pricing Overview](./pricing.md) - - [Staking Discounts](./staking_discount_levels.md) - - [Cloud Pricing Compare](./cloud_pricing_compare.md) - - [Grid Billing](./grid_billing.md) -- [Resource Units](./resource_units_calc_cloudunits.md) -- [Resource Units Advanced](./resourceunits_advanced.md) \ No newline at end of file +- [Cloud Units](cloudunits.md) +- [Pricing](pricing_toc.md) + - [Pricing Overview](pricing.md) + - [Staking Discounts](staking_discount_levels.md) + - [Cloud Pricing Compare](cloud_pricing_compare.md) + - [Grid Billing](grid_billing.md) +- [Resource Units](resource_units_calc_cloudunits.md) +- [Resource Units Advanced](resourceunits_advanced.md) \ No newline at end of file diff --git a/collections/cloud/cloudunits.md b/collections/cloud/cloudunits.md index e9f34c4..7f216c8 100644 --- a/collections/cloud/cloudunits.md +++ b/collections/cloud/cloudunits.md @@ -19,7 +19,7 @@ Cloud units are a unified way to account for virtual hardware resources on the T - Storage Unit (SU): The amount of storage capacity in terms of Hard Disk Drives (HDDs) and Solid State Drives (SSDs) in Gigabytes (GB). - Network Unit (NU): The amount of data that travels in and out of storage units or compute units expressed in GB. -> Note: [Resource units](./resource_units_calc_cloudunits.md) are used to calculate SU & CU. Resource Units are used to measure compute and storage capacity produced by hardware. +> Note: [Resource units](resource_units_calc_cloudunits.md) are used to calculate SU & CU. Resource Units are used to measure compute and storage capacity produced by hardware. When a solution is deployed on the ThreeFold Grid, the system automatically gathers the required amount of CU, SU, or NU. It is important to note that users are not billed upon reservation but only when utilizing the actualy CU, SU and NU. TF Certified Farmers can define the price of CU, SU, and NU they make available on the ThreeFold Grid. @@ -42,7 +42,7 @@ Example of Compute unit: - Recommended price on TF Grid = 10 USD - Alternative cloud price = between 40 USD and 180 USD -See how we compare with the market compute prices [here](./pricing/pricing.md). +See how we compare with the market compute prices [here](pricing.md). ### Storage Capacity @@ -58,7 +58,7 @@ Example of Storage unit: - Recommended price on TF Grid for 1 SU = 10 USD - Alternative cloud price = between 20 USD and 200 USD -See how we compare with market storage prices [here](./pricing/pricing.md). +See how we compare with market storage prices [here](pricing.md). ### Network @@ -66,4 +66,4 @@ See how we compare with market storage prices [here](./pricing/pricing.md). | ------------------------------------------ | -------- | | GB transferred OUT or IN | 1 | -> We use SU-month and CU-month to show SU monthly costs. This can be compared to kilowatts (kW) to see electricity usage per month. Learn more about how this is calculated with [Resource units](./resource_units_calc_cloudunits.md), a way to measure the compute and storage capacity produced by hardware. \ No newline at end of file +> We use SU-month and CU-month to show SU monthly costs. This can be compared to kilowatts (kW) to see electricity usage per month. Learn more about how this is calculated with [Resource units](resource_units_calc_cloudunits.md), a way to measure the compute and storage capacity produced by hardware. \ No newline at end of file diff --git a/collections/cloud/grid_billing/grid_billing.md b/collections/cloud/grid_billing/grid_billing.md index 771d59d..f1d56bc 100644 --- a/collections/cloud/grid_billing/grid_billing.md +++ b/collections/cloud/grid_billing/grid_billing.md @@ -130,7 +130,7 @@ Contract cost/hour = CU cost/hour + SU cost/hour ### Applying the Discounts -Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](../pricing/staking_discount_levels.md). +Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](staking_discount_levels.md). For this example, we assume that this twin has 18 months worth of TFTs staked, so the user will be eligible for a Gold discount level (60% discount). @@ -247,7 +247,7 @@ Contract cost/hour = CU cost/hour + SU cost/hour ### Applying the Dedicated Node Discount -There's a default `50%` discount for renting a node, this discount is not related to the staking discount. For more information on dedicated node discounts, please [read this section](../../../documentation/dashboard/deploy/dedicated_machines.md). +There's a default `50%` discount for renting a node, this discount is not related to the staking discount. For more information on dedicated node discounts, please [read this section](dedicated_machines.md). ``` Cost with 50% discount = 35.72532 * 0.5 @@ -256,7 +256,7 @@ Cost with 50% discount = 35.72532 * 0.5 ### Applying the Staking Discount -Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](../pricing/staking_discount_levels.md). +Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](staking_discount_levels.md). For this example, let's assume that this twin has 18 months worth of TFTs staked, so the user will be eligible for a Gold discount level (60% discount). @@ -291,7 +291,7 @@ uniqueName in TFT = 0.00025 * 100 ### Applying the Staking Discount -Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](../pricing/staking_discount_levels.md). +Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](staking_discount_levels.md). For this example, let's assume that this twin has 18 months worth of TFTs staked, so the user will be eligible for a Gold discount level (60% discount). @@ -326,7 +326,7 @@ Public IP in TFT = 0.004 * 100 ### Applying the Staking Discount -Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](../pricing/staking_discount_levels.md). +Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](staking_discount_levels.md). For this example, let's assume that this twin has 18 months worth of TFTs staked, so the user will be eligible for a Gold discount level (60% discount). @@ -378,7 +378,7 @@ NU price in TFT = 0.0015 * 100 ### Applying the Staking Discount -Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](../pricing/staking_discount_levels.md). +Before assuming that the price above is the final price, check first if your twin is eligible for any of the available staking discount levels. To understand more about discount levels, please read [this section](staking_discount_levels.md). For this example, let's assume that this twin has 18 months worth of TFTs staked, so the user will be eligible for a Gold discount level (60% discount). diff --git a/collections/cloud/pricing/pricing_toc.md b/collections/cloud/pricing/pricing_toc.md index 50903e1..5a00fd6 100644 --- a/collections/cloud/pricing/pricing_toc.md +++ b/collections/cloud/pricing/pricing_toc.md @@ -2,7 +2,7 @@

Table of Contents

-- [Pricing Overview](./pricing.md) -- [Staking Discounts](./staking_discount_levels.md) -- [Cloud Pricing Compare](./cloud_pricing_compare.md) -- [Grid Billing](./grid_billing.md) \ No newline at end of file +- [Pricing Overview](pricing.md) +- [Staking Discounts](staking_discount_levels.md) +- [Cloud Pricing Compare](cloud_pricing_compare.md) +- [Grid Billing](grid_billing.md) \ No newline at end of file diff --git a/collections/cloud/resource_units_calc_cloudunits.md b/collections/cloud/resource_units_calc_cloudunits.md index 87a2b99..2c39555 100644 --- a/collections/cloud/resource_units_calc_cloudunits.md +++ b/collections/cloud/resource_units_calc_cloudunits.md @@ -29,7 +29,7 @@ Resource units are used to measure and convert capacity on the hardware level in These are raw capacities as measured by the ThreeFold software running on Zero-OS. -To learn how they convert into cloudunits see [here](./resourceunits_advanced.md) +To learn how they convert into cloudunits see [here](resourceunits_advanced.md) ### Compute diff --git a/collections/cloud/resourceunits.md b/collections/cloud/resourceunits.md index 7265f41..9c7b71c 100644 --- a/collections/cloud/resourceunits.md +++ b/collections/cloud/resourceunits.md @@ -13,4 +13,4 @@ Resource units are used to measure and convert capacity on the hardware level in These are raw capacities as measured by the ThreeFold software running on Zero-OS. -To learn how they convert into cloudunits see [here](./resourceunits_advanced.md) \ No newline at end of file +To learn how they convert into cloudunits see [here](resourceunits_advanced.md) \ No newline at end of file diff --git a/collections/collaboration/collaboration_toc.md b/collections/collaboration/collaboration_toc.md index b99597c..38c110a 100644 --- a/collections/collaboration/collaboration_toc.md +++ b/collections/collaboration/collaboration_toc.md @@ -6,8 +6,8 @@ To become a farmer, a developer or a sysadmin on the ThreeFold, read the [docume

Table of Contents

Table of Contents -- [Circle Tool](./circle_tool.md) +- [Circle Tool](circle_tool.md) - This ThreeFold's project management tool, made by using Taiga, is an open-source project management platform designed to facilitate collaboration and to streamline workflows for teams. It provides a comprehensive set of features and tools to help teams plan, track, and manage their projects effectively. -- [Website Deployer](./website_tool.md) +- [Website Deployer](website_tool.md) - This ThreeFold's website builder tool, made by using Zola, is a static site generator (SSG) and content management system (CMS) that empowers developers and content creators to build and manage websites efficiently. It is an open-source framework written in the Rust programming language, known for its performance, security, and reliability. -- [Website Link Checker](./website_link_checker.md) +- [Website Link Checker](website_link_checker.md) - The ThreeFold website link checker is a wrapper around muffet to check for specific link errors on live websites written in Python. \ No newline at end of file diff --git a/collections/collaboration/collaboration_tools/website_tool.md b/collections/collaboration/collaboration_tools/website_tool.md index c3b997f..c118299 100644 --- a/collections/collaboration/collaboration_tools/website_tool.md +++ b/collections/collaboration/collaboration_tools/website_tool.md @@ -292,7 +292,7 @@ When you are in the main directory of your Zola website, you can check the follo zola check ``` -Once your website is online, you can also use the [Website Link Checker](./website_link_checker.md). +Once your website is online, you can also use the [Website Link Checker](website_link_checker.md). ### Important Links diff --git a/collections/collaboration/contribute.md b/collections/collaboration/contribute.md index 698a477..796b7f5 100644 --- a/collections/collaboration/contribute.md +++ b/collections/collaboration/contribute.md @@ -44,7 +44,7 @@ We present here the main steps to add content to the Threefold Manual by forking * Make changes in the forked repository * To add a new section * Add a new Markdown file to the [src](https://github.com/threefoldtech/info_grid/blob/development/src) directory - * Add the path of the Markdown file to [SUMMARY](https://github.com/threefoldtech/info_grid/blob/development/src/SUMMARY.md). + * Add the path of the Markdown file to [SUMMARY](SUMMARY.md). * To modify an existing section: * Make the changes directly in the Markdown file * Ask for a pull request diff --git a/collections/collaboration/development_process.md b/collections/collaboration/development_process.md index a8a16b2..9bb3bda 100644 --- a/collections/collaboration/development_process.md +++ b/collections/collaboration/development_process.md @@ -101,8 +101,8 @@ Creating a repository involves establishing a foundation for collaborative devel #### Github Templates -- Use github templates to provide proper template for issues [bug_report](./bug_report.md) or [feature request](./feature_request.md) -- Use github templates to provide proper template for [pull requests](./pull_request_template.md) +- Use github templates to provide proper template for issues [bug_report](bug_report.md) or [feature request](feature_request.md) +- Use github templates to provide proper template for [pull requests](pull_request_template.md) #### Expected Workflows diff --git a/collections/dashboard/dashboard.md b/collections/dashboard/dashboard.md index 1ad728b..007707f 100644 --- a/collections/dashboard/dashboard.md +++ b/collections/dashboard/dashboard.md @@ -14,11 +14,11 @@ The backend for the weblets is introduced with the [Javascript Client](developer

Table of Contents

-- [Wallet Connector](./wallet_connector.md) -- [TFGrid](./tfgrid/tfgrid.md) -- [Deploy](./deploy/deploy.md) -- [Farms](./farms/farms.md) -- [TFChain](./tfchain/tfchain.md) +- [Wallet Connector](wallet_connector.md) +- [TFGrid](tfgrid.md) +- [Deploy](deploy.md) +- [Farms](farms.md) +- [TFChain](tfchain.md) ## Advantages diff --git a/collections/dashboard/farms/farms.md b/collections/dashboard/farms/farms.md index 7faedd3..11dc72d 100644 --- a/collections/dashboard/farms/farms.md +++ b/collections/dashboard/farms/farms.md @@ -2,10 +2,10 @@ Here you will find everything farming related. this includes: -- Monitoring, creating, and updating your farms from the [Your Farms](./your_farms.md) section where you can also check your nodes and update multiple things like the public configuration and extra fees of the node. -- Exploring and finding farms that are available on the ThreeFold grid from the [Farm Finder](./farms_finder.md) section. -- Generating your own boot device for your system from the [Node Installer](./node_installer.md) section. -- Estimating and calculating potential earnings from farming on the ThreeFold Grid from the [Simulator](./simulator.md) section. +- Monitoring, creating, and updating your farms from the [Your Farms](your_farms.md) section where you can also check your nodes and update multiple things like the public configuration and extra fees of the node. +- Exploring and finding farms that are available on the ThreeFold grid from the [Farm Finder](farms_finder.md) section. +- Generating your own boot device for your system from the [Node Installer](node_installer.md) section. +- Estimating and calculating potential earnings from farming on the ThreeFold Grid from the [Simulator](simulator.md) section. ![](../img/sidebar_3.png) @@ -13,7 +13,7 @@ Here you will find everything farming related. this includes: ## Table of Content -- [Your Farms](./your_farms.md) -- [Farm Finder](./farms_finder.md) -- [Node Installer](./node_installer.md) -- [Simulator](./simulator.md) \ No newline at end of file +- [Your Farms](your_farms.md) +- [Farm Finder](farms_finder.md) +- [Node Installer](node_installer.md) +- [Simulator](simulator.md) \ No newline at end of file diff --git a/collections/dashboard/home.md b/collections/dashboard/home.md index 0b70c98..2f8bcad 100644 --- a/collections/dashboard/home.md +++ b/collections/dashboard/home.md @@ -14,11 +14,11 @@ The backend for the weblets is introduced with the [Javascript Client](developer

Table of Contents

-- [Wallet Connector](./wallet_connector.md) -- [TFGrid](./tfgrid/tfgrid.md) -- [Deploy](./deploy/deploy.md) -- [Farms](./farms/farms.md) -- [TFChain](./tfchain/tfchain.md) +- [Wallet Connector](wallet_connector.md) +- [TFGrid](tfgrid.md) +- [Deploy](deploy.md) +- [Farms](farms.md) +- [TFChain](tfchain.md) ## Advantages diff --git a/collections/dashboard/solutions/algorand.md b/collections/dashboard/solutions/algorand.md index 21c25c7..5660fbd 100644 --- a/collections/dashboard/solutions/algorand.md +++ b/collections/dashboard/solutions/algorand.md @@ -19,7 +19,7 @@ ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Algorand** diff --git a/collections/dashboard/solutions/basic_environments_readme.md b/collections/dashboard/solutions/basic_environments_readme.md index d1bd532..5bbd8c9 100644 --- a/collections/dashboard/solutions/basic_environments_readme.md +++ b/collections/dashboard/solutions/basic_environments_readme.md @@ -2,10 +2,10 @@

Table of Contents

-- [Virtual Machines](./vm_intro.md) - - [Micro and Full VM Differences ](./vm_differences.md) - - [Full Virtual Machine](./fullVm.md) - - [Micro Virtual Machine](./vm.md) -- [Kubernetes](./k8s.md) -- [NixOS MicroVM](./nixos_micro.md) -- [Add a Domain](./add_domain.md) \ No newline at end of file +- [Virtual Machines](vm_intro.md) + - [Micro and Full VM Differences ](vm_differences.md) + - [Full Virtual Machine](fullVm.md) + - [Micro Virtual Machine](vm.md) +- [Kubernetes](k8s.md) +- [NixOS MicroVM](nixos_micro.md) +- [Add a Domain](add_domain.md) \ No newline at end of file diff --git a/collections/dashboard/solutions/caprover.md b/collections/dashboard/solutions/caprover.md index 32034d7..99c295b 100644 --- a/collections/dashboard/solutions/caprover.md +++ b/collections/dashboard/solutions/caprover.md @@ -38,7 +38,7 @@ It has following benefits : ## Requirements -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Orchestrators** - Click on **CapRover** @@ -161,5 +161,5 @@ Make sure that you've point a wildcard DNS entry to your CapRover IP address (e. ## How to Work with CapRover -* [CapRover Admin Tutorial](./caprover_admin.md) -* [CapRover Worker Tutorial](./caprover_worker.md) +* [CapRover Admin Tutorial](caprover_admin.md) +* [CapRover Worker Tutorial](caprover_worker.md) diff --git a/collections/dashboard/solutions/casper.md b/collections/dashboard/solutions/casper.md index 5071c09..9d10e8a 100644 --- a/collections/dashboard/solutions/casper.md +++ b/collections/dashboard/solutions/casper.md @@ -11,7 +11,7 @@ [Casper Network](https://casperlabs.io/) is a blockchain protocol built from the ground up to remain true to core Web3 principles and adapt to the needs of our evolving world. -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Casperlabs** diff --git a/collections/dashboard/solutions/discourse.md b/collections/dashboard/solutions/discourse.md index 9bdff3c..3ffa093 100644 --- a/collections/dashboard/solutions/discourse.md +++ b/collections/dashboard/solutions/discourse.md @@ -11,7 +11,7 @@ [Discourse](https://www.discourse.org/) is the 100% open source discussion platform built for the next decade of the Internet. Use it as a mailing list, discussion forum, long-form chat room, and more! -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Discourse** diff --git a/collections/dashboard/solutions/fullvm.md b/collections/dashboard/solutions/fullvm.md index 774714f..1137273 100644 --- a/collections/dashboard/solutions/fullvm.md +++ b/collections/dashboard/solutions/fullvm.md @@ -21,7 +21,7 @@ We present the steps to deploy a full VM on the TFGrid. Deploy a new full virtual machine on the Threefold Grid -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Full Virtual Machine** diff --git a/collections/dashboard/solutions/funkwhale.md b/collections/dashboard/solutions/funkwhale.md index 8940728..c095388 100644 --- a/collections/dashboard/solutions/funkwhale.md +++ b/collections/dashboard/solutions/funkwhale.md @@ -15,7 +15,7 @@ Funkwhale is a community-driven project that lets you listen and share music and ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Funkwhale** diff --git a/collections/dashboard/solutions/k8s.md b/collections/dashboard/solutions/k8s.md index 11197ec..44a96c3 100644 --- a/collections/dashboard/solutions/k8s.md +++ b/collections/dashboard/solutions/k8s.md @@ -19,7 +19,7 @@ On the TF grid, Kubernetes clusters can be deployed out of the box. We have impl ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Kubernetes** diff --git a/collections/dashboard/solutions/mattermost.md b/collections/dashboard/solutions/mattermost.md index 0e9528c..cbd7f99 100644 --- a/collections/dashboard/solutions/mattermost.md +++ b/collections/dashboard/solutions/mattermost.md @@ -14,7 +14,7 @@ ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Mattermost** diff --git a/collections/dashboard/solutions/nextcloud.md b/collections/dashboard/solutions/nextcloud.md index d25dd79..72f9cb1 100644 --- a/collections/dashboard/solutions/nextcloud.md +++ b/collections/dashboard/solutions/nextcloud.md @@ -36,7 +36,7 @@ Nextcloud provides functionality similar to Dropbox, Office 365 or Google Drive # Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Nextcloud** @@ -63,7 +63,7 @@ If you're not sure and just want the easiest, most affordable option, skip the p * **Recommended**: {cpu: 4, memory: 16gb, diskSize: 1000gb } * Or choose a **Custom** plan * If want to reserve a public IPv4 address, click on Network then select **Public IPv4** -* If you want a [dedicated](../deploy/dedicated_machines.md) and/or a certified node, select the corresponding option +* If you want a [dedicated](dedicated_machines.md) and/or a certified node, select the corresponding option * Choose the location of the node * `Country` * `Farm Name` diff --git a/collections/dashboard/solutions/nixos_micro.md b/collections/dashboard/solutions/nixos_micro.md index 2e6a91f..da4574c 100644 --- a/collections/dashboard/solutions/nixos_micro.md +++ b/collections/dashboard/solutions/nixos_micro.md @@ -26,7 +26,7 @@ For more information on Nix, you can read the [Nix Reference Manual](https://nix * [Devnet](https://dashboard.dev.grid.tf) * [QAnet](https://dashboard.qa.grid.tf) -* Make sure you have a [wallet](../wallet_connector.md) +* Make sure you have a [wallet](wallet_connector.md) * From the sidebar click on **Solutions** * Click on **Micro Virtual Machine** to start your NixOS MicroVM Deployment diff --git a/collections/dashboard/solutions/nodepilot.md b/collections/dashboard/solutions/nodepilot.md index 1fc212a..aa8da14 100644 --- a/collections/dashboard/solutions/nodepilot.md +++ b/collections/dashboard/solutions/nodepilot.md @@ -14,7 +14,7 @@ This is a simple instance of upstream [Node Pilot](https://nodepilot.tech). ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Node Pilot** diff --git a/collections/dashboard/solutions/owncloud.md b/collections/dashboard/solutions/owncloud.md index 16726a0..1ef716d 100644 --- a/collections/dashboard/solutions/owncloud.md +++ b/collections/dashboard/solutions/owncloud.md @@ -19,7 +19,7 @@ ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Solutions** - Click on **ownCloud** diff --git a/collections/dashboard/solutions/peertube.md b/collections/dashboard/solutions/peertube.md index 79a74ee..f9fc947 100644 --- a/collections/dashboard/solutions/peertube.md +++ b/collections/dashboard/solutions/peertube.md @@ -14,7 +14,7 @@ ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Peertube** diff --git a/collections/dashboard/solutions/presearch.md b/collections/dashboard/solutions/presearch.md index c0c3f55..a1f2d65 100644 --- a/collections/dashboard/solutions/presearch.md +++ b/collections/dashboard/solutions/presearch.md @@ -18,7 +18,7 @@ ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Presearch** diff --git a/collections/dashboard/solutions/solutions.md b/collections/dashboard/solutions/solutions.md index 60732e3..1a10b1c 100644 --- a/collections/dashboard/solutions/solutions.md +++ b/collections/dashboard/solutions/solutions.md @@ -4,26 +4,26 @@ This section provides a non-code easy way to deploy a whole solution on the TFGr

Table of Contents

-- [Basic Environments](./basic_environments_readme.md) - - [Virtual Machines](./vm_intro.md) - - [Micro and Full VM Differences](./vm_differences.md) - - [Full Virtual Machine](./fullVm.md) - - [Micro Virtual Machine](./vm.md) - - [Kubernetes](./k8s.md) - - [NixOS MicroVM](./nixos_micro.md) -- [Ready Community Solutions](./ready_community_readme.md) - - [Caprover](./caprover.md) - - [Funkwhale](./funkwhale.md) - - [Peertube](./peertube.md) - - [Taiga](./taiga.md) - - [Owncloud](./owncloud.md) - - [Nextcloud](./nextcloud.md) - - [Discourse](./discourse.md) - - [Mattermost](./mattermost.md) - - [Presearch](./presearch.md) - - [CasperLabs](./casper.md) - - [Node Pilot](./nodepilot.md) - - [Subsquid](./subsquid.md) - - [Algorand](./algorand.md) - - [Wordpress](./wordpress.md) - - [Umbrel](./umbrel.md) +- [Basic Environments](basic_environments_readme.md) + - [Virtual Machines](vm_intro.md) + - [Micro and Full VM Differences](vm_differences.md) + - [Full Virtual Machine](fullVm.md) + - [Micro Virtual Machine](vm.md) + - [Kubernetes](k8s.md) + - [NixOS MicroVM](nixos_micro.md) +- [Ready Community Solutions](ready_community_readme.md) + - [Caprover](caprover.md) + - [Funkwhale](funkwhale.md) + - [Peertube](peertube.md) + - [Taiga](taiga.md) + - [Owncloud](owncloud.md) + - [Nextcloud](nextcloud.md) + - [Discourse](discourse.md) + - [Mattermost](mattermost.md) + - [Presearch](presearch.md) + - [CasperLabs](casper.md) + - [Node Pilot](nodepilot.md) + - [Subsquid](subsquid.md) + - [Algorand](algorand.md) + - [Wordpress](wordpress.md) + - [Umbrel](umbrel.md) diff --git a/collections/dashboard/solutions/subsquid.md b/collections/dashboard/solutions/subsquid.md index 063ff35..5a59b44 100644 --- a/collections/dashboard/solutions/subsquid.md +++ b/collections/dashboard/solutions/subsquid.md @@ -14,7 +14,7 @@ ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Subsquid** diff --git a/collections/dashboard/solutions/taiga.md b/collections/dashboard/solutions/taiga.md index 4291e12..17d7e3c 100644 --- a/collections/dashboard/solutions/taiga.md +++ b/collections/dashboard/solutions/taiga.md @@ -14,7 +14,7 @@ ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Taiga** diff --git a/collections/dashboard/solutions/umbrel.md b/collections/dashboard/solutions/umbrel.md index 21075ca..dd9bd5d 100644 --- a/collections/dashboard/solutions/umbrel.md +++ b/collections/dashboard/solutions/umbrel.md @@ -13,7 +13,7 @@ ## Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Applications** - Click on **Umbrel** diff --git a/collections/dashboard/solutions/vm.md b/collections/dashboard/solutions/vm.md index 5e8db2f..0eec151 100644 --- a/collections/dashboard/solutions/vm.md +++ b/collections/dashboard/solutions/vm.md @@ -16,7 +16,7 @@ We present the steps to deploy a micro VM on the TFGrid. Deploy a new virtual machine on the Threefold Grid -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Solutions** - Click on **Micro Virtual Machine** diff --git a/collections/dashboard/solutions/vm_intro.md b/collections/dashboard/solutions/vm_intro.md index d9cc0a7..be0bf5f 100644 --- a/collections/dashboard/solutions/vm_intro.md +++ b/collections/dashboard/solutions/vm_intro.md @@ -4,8 +4,8 @@ On the TFGrid, you can deploy both micro and full virtual machines.

Table of Contents

-- [Micro and Full VM Differences ](./vm_differences.md) -- [Full Virtual Machine](./fullVm.md) -- [Micro Virtual Machine](./vm.md) -- [Nixos MicroVM](./nixos_micro.md) -- [Add a Domain](./add_domain.md) \ No newline at end of file +- [Micro and Full VM Differences ](vm_differences.md) +- [Full Virtual Machine](fullVm.md) +- [Micro Virtual Machine](vm.md) +- [Nixos MicroVM](nixos_micro.md) +- [Add a Domain](add_domain.md) \ No newline at end of file diff --git a/collections/dashboard/solutions/wordpress.md b/collections/dashboard/solutions/wordpress.md index 57f2938..c8c72d4 100644 --- a/collections/dashboard/solutions/wordpress.md +++ b/collections/dashboard/solutions/wordpress.md @@ -24,7 +24,7 @@ # Prerequisites -- Make sure you have a [wallet](../wallet_connector.md) +- Make sure you have a [wallet](wallet_connector.md) - From the sidebar click on **Solutions** - Click on **Wordpress** diff --git a/collections/dashboard/tfchain/tf_dao.md b/collections/dashboard/tfchain/tf_dao.md index be2cf0e..4803f4c 100644 --- a/collections/dashboard/tfchain/tf_dao.md +++ b/collections/dashboard/tfchain/tf_dao.md @@ -23,7 +23,7 @@ DAOs are internet-native organizations collectively owned and managed by their m Voting for a DAO proposal is very simple. You first need to meet certain requirements to be able to vote. -- Have a [Threefold farm](../farms/farms.md) +- Have a [Threefold farm](farms.md) - Have at least one active [3node server](farmers@@3node_building) on the farm - If you created your farm with the Threefold Connect app - [Import your farm on the Threefold Dashboard](threefold_token@@tf_connect_app.md#move-farm-from-the-tf-connect-app-to-the-tf-portal-polkadotjs) diff --git a/collections/dashboard/tfchain/tfchain.md b/collections/dashboard/tfchain/tfchain.md index bda6640..d94c90f 100644 --- a/collections/dashboard/tfchain/tfchain.md +++ b/collections/dashboard/tfchain/tfchain.md @@ -2,19 +2,19 @@ Here you will find everything related to the ThreeFold chain. this includes: -- Detailed account information from the [Your Profile](./your_profile.md) section. -- Information about what DAO is and how to vote on DAO proposals from the [TF DAO](./tf_dao.md) section. -- Transferring TFTs on different chains from the [TF Token Bridge](./tf_token_bridge.md) section. -- Transferring TFTs on the TFChain from the [TF Token Transfer](./tf_token_transfer.md) section. -- getting miniting reports from the [TF Minting Reports](./tf_minting_reports.md) section. +- Detailed account information from the [Your Profile](your_profile.md) section. +- Information about what DAO is and how to vote on DAO proposals from the [TF DAO](tf_dao.md) section. +- Transferring TFTs on different chains from the [TF Token Bridge](tf_token_bridge.md) section. +- Transferring TFTs on the TFChain from the [TF Token Transfer](tf_token_transfer.md) section. +- getting miniting reports from the [TF Minting Reports](tf_minting_reports.md) section. ![](../img/sidebar_4.png) *** ## Table of Content -- [Your Profile](./your_profile.md) -- [TF DAO](./tf_dao.md) -- [TF Token Bridge](./tf_token_bridge.md) -- [TF Token Transfer](./tf_token_transfer.md) -- [TF Minting Reports](./tf_minting_reports.md) \ No newline at end of file +- [Your Profile](your_profile.md) +- [TF DAO](tf_dao.md) +- [TF Token Bridge](tf_token_bridge.md) +- [TF Token Transfer](tf_token_transfer.md) +- [TF Minting Reports](tf_minting_reports.md) \ No newline at end of file diff --git a/collections/dashboard/tfchain/your_profile.md b/collections/dashboard/tfchain/your_profile.md index 091cffe..4299c03 100644 --- a/collections/dashboard/tfchain/your_profile.md +++ b/collections/dashboard/tfchain/your_profile.md @@ -10,4 +10,4 @@ The twin details consists of three main items. - `Address` Your public address on the ThreeFold chain. - `Relay` A relay is a component that facilitates the reliable and secure transfer of messages between different entities within the ThreeFold ecosystem. -To create a twin check the [Wallet Connector](../wallet_connector.md) Section. \ No newline at end of file +To create a twin check the [Wallet Connector](wallet_connector.md) Section. \ No newline at end of file diff --git a/collections/dashboard/tfgrid/tfgrid.md b/collections/dashboard/tfgrid/tfgrid.md index 2b06d9b..f9f2dde 100644 --- a/collections/dashboard/tfgrid/tfgrid.md +++ b/collections/dashboard/tfgrid/tfgrid.md @@ -2,9 +2,9 @@ Check and use all things related to the threefold grid. Including: -- The status of ThreeFold services from the [Grid Status](./grid_status.md) website. -- The statistics of all nodes that are available on the ThreeFold grid from [Node Statistics](./node_statistics.md). -- The health and status of Zero-OS nodes that are available on the ThreeFold grid from [Node Monitoring](./node_monitoring.md). +- The status of ThreeFold services from the [Grid Status](grid_status.md) website. +- The statistics of all nodes that are available on the ThreeFold grid from [Node Statistics](node_statistics.md). +- The health and status of Zero-OS nodes that are available on the ThreeFold grid from [Node Monitoring](node_monitoring.md). ![](../img/sidebar_1.png) @@ -12,6 +12,6 @@ Check and use all things related to the threefold grid. Including: ## Table of Content -- [Grid Status](./grid_status.md) -- [Node Statistics](./node_statistics.md) -- [Node Monitoring](./node_monitoring.md) \ No newline at end of file +- [Grid Status](grid_status.md) +- [Node Statistics](node_statistics.md) +- [Node Monitoring](node_monitoring.md) \ No newline at end of file diff --git a/collections/dashboard/toc.md b/collections/dashboard/toc.md index 5507842..f71eac7 100644 --- a/collections/dashboard/toc.md +++ b/collections/dashboard/toc.md @@ -1,8 +1,8 @@ ## Dashboard TOC -- [Home](./home.md) -- [Wallet Connector](./wallet_connector.md) -- [CapRover](./caprover.md) -- [Virtual Machine](./vm.md) -- [Funkwhale](./funkwhale.md) -- [Peertube](./peertube.md) +- [Home](home.md) +- [Wallet Connector](wallet_connector.md) +- [CapRover](caprover.md) +- [Virtual Machine](vm.md) +- [Funkwhale](funkwhale.md) +- [Peertube](peertube.md) diff --git a/collections/dashboard/vm_presearch.md b/collections/dashboard/vm_presearch.md index f438507..e04ea53 100644 --- a/collections/dashboard/vm_presearch.md +++ b/collections/dashboard/vm_presearch.md @@ -3,7 +3,7 @@ The fastest way to mount a Presearch node on TFGrid3 is inside a VM. Steps : -- Set up a VM, see [here](./vm.md). It is recommended to reserve a fix IP. You can also try out the planetary network (so reserve a VM without public IP), as long as the node you select is connected to the internet through an IPv4 address that isn't used yet for a Presearch node, you don't explicitly need to reserve a public IPv4 address. However, the planetary network is still in beta phase and might generate performance issues. +- Set up a VM, see [here](vm.md). It is recommended to reserve a fix IP. You can also try out the planetary network (so reserve a VM without public IP), as long as the node you select is connected to the internet through an IPv4 address that isn't used yet for a Presearch node, you don't explicitly need to reserve a public IPv4 address. However, the planetary network is still in beta phase and might generate performance issues. - 1 CPU is enough for a PRE node. As we still need to install Docker on the VM before deploying a PRE node, please choose 8192 memory size. - Once your VM is set up, SSH into our machine. diff --git a/collections/developers/flist/flist.md b/collections/developers/flist/flist.md index 7a59391..7845bd5 100644 --- a/collections/developers/flist/flist.md +++ b/collections/developers/flist/flist.md @@ -5,7 +5,7 @@ - [Zero-OS Hub](zos_hub.md) - [Generate an API Token](api_token.md) - [Convert Docker Image Into Flist](convert_docker_image.md) -- [Supported Flists](./grid3_supported_flists.md) +- [Supported Flists](grid3_supported_flists.md) - [Flist Case Studies](flist_case_studies.md) - [Case Study: Debian 12](flist_debian_case_study.md) - [Case Study: Nextcloud AIO](flist_nextcloud_case_study.md) \ No newline at end of file diff --git a/collections/developers/flist/flist_case_studies/flist_case_studies.md b/collections/developers/flist/flist_case_studies/flist_case_studies.md index b258836..db29990 100644 --- a/collections/developers/flist/flist_case_studies/flist_case_studies.md +++ b/collections/developers/flist/flist_case_studies/flist_case_studies.md @@ -2,5 +2,5 @@

Table of Contents

-- [Case Study: Debian 12](./flist_debian_case_study.md) -- [Case Study: Nextcloud AIO](./flist_nextcloud_case_study.md) \ No newline at end of file +- [Case Study: Debian 12](flist_debian_case_study.md) +- [Case Study: Nextcloud AIO](flist_nextcloud_case_study.md) \ No newline at end of file diff --git a/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md b/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md index 86964bf..fce105f 100644 --- a/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md +++ b/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md @@ -39,7 +39,7 @@ # Introduction -In this case study, we explain how to create a new flist on the ThreeFold ecosystem. We will show the process of creating a Nextcloud All-in-One flist and we will deploy a micro VM on the ThreeFold Playground to access our Nextcloud instance. As a reference, the official Nextcloud flist is available [here](https://hub.grid.tf/tf-official-apps/threefoldtech-nextcloudaio-latest.flist.md). +In this case study, we explain how to create a new flist on the ThreeFold ecosystem. We will show the process of creating a Nextcloud All-in-One flist and we will deploy a micro VM on the ThreeFold Playground to access our Nextcloud instance. As a reference, the official Nextcloud flist is available [here](threefoldtech-nextcloudaio-latest.flist.md). To achieve all this, we will need to create a Docker Hub account, create a Dockerfile and its associated files, a docker image and a docker container, then convert the docker image to a Zero-OS flist. After all this, we will be deploying our Nextcloud instance on the ThreeFold Playground. @@ -242,9 +242,9 @@ Finally, we set an entrypoint in our Dockerfile. As per the [Docker documentatio The **README.md** file has the main goal of explaining clearly to the user the functioning of the Nextcloud directory and its associated flist. In this file, we can explain what our code is doing and offer steps to properly configure the whole deployment. -We also give the necessary steps to create the Docker image and convert it into an flist starting directly with the Nextcloud directory. This can be useful for users that want to create their own flist, instead of using the [official ThreeFold Nextcloud flist](https://hub.grid.tf/tf-official-apps/threefoldtech-nextcloudaio-latest.flist.md). +We also give the necessary steps to create the Docker image and convert it into an flist starting directly with the Nextcloud directory. This can be useful for users that want to create their own flist, instead of using the [official ThreeFold Nextcloud flist](threefoldtech-nextcloudaio-latest.flist.md). -To read the complete README.md file, go to [this link](https://github.com/threefoldtech/tf-images/blob/development/tfgrid3/nextcloud/README.md). +To read the complete README.md file, go to [this link](README.md). ## scripts Folder @@ -661,7 +661,7 @@ We will now convert the Docker image into a Zero-OS flist. ``` * Example: * ``` - https://hub.grid.tf/tf-official-apps/threefoldtech-nextcloudaio-latest.flist + threefoldtech-nextcloudaio-latest.flist ``` # Deploy Nextcloud AIO on the TFGrid with Terraform @@ -693,7 +693,7 @@ gateway_id = "50" vm1_id = "5453" deployment_name = "nextcloudgateway" -nextcloud_flist = "https://hub.grid.tf/tf-official-apps/threefoldtech-nextcloudaio-latest.flist" +nextcloud_flist = "threefoldtech-nextcloudaio-latest.flist" ``` Make sure to add your own seed phrase and SSH public key. Simply replace the three dots by the content. Note that you can deploy on a different node than node 5453 for the **vm1** node. If you want to deploy on another node than node 5453 for the **gateway** node, make sure that you choose a gateway node. To find a gateway node, go on the [ThreeFold Dashboard](https://dashboard.grid.tf/) Nodes section of the Explorer and select **Gateways (Only)**. diff --git a/collections/developers/flist/flist_hub/zos_hub.md b/collections/developers/flist/flist_hub/zos_hub.md index 98d398c..8f79973 100644 --- a/collections/developers/flist/flist_hub/zos_hub.md +++ b/collections/developers/flist/flist_hub/zos_hub.md @@ -40,7 +40,7 @@ You don't need to take care about the base system yourself, just merge it with t The ZOS Hub allows you to convert Docker Hub images and Tar files into flists thanks to the Docker Hub Converter. -You can convert a docker image (eg: `busybox`, `ubuntu`, `fedora`, `couchdb`, ...) to an flist directly from the backend, this allows you to use your existing docker image in our infrastructure out-of-the-box. Go to the [Docker Hub Converter](https://hub.grid.tf/docker-convert) to use this feature. For more information on the process, read the section [Convert Docker Image to flist](./convert_docker_image.md) of the TF Manual. +You can convert a docker image (eg: `busybox`, `ubuntu`, `fedora`, `couchdb`, ...) to an flist directly from the backend, this allows you to use your existing docker image in our infrastructure out-of-the-box. Go to the [Docker Hub Converter](https://hub.grid.tf/docker-convert) to use this feature. For more information on the process, read the section [Convert Docker Image to flist](convert_docker_image.md) of the TF Manual. You can also easily convert a Tar file into an flist via the [Upload section](https://hub.grid.tf/upload) of the ZOS Hub. @@ -59,7 +59,7 @@ and gives you the full control of the chain. The only restriction is that the co on the flist needs to exists on the backend, otherwise your flist will be rejected. ## Authenticate via 3Bot -All the operations on the ZOS Hub needs to be done via a `3Bot` (default) authentication. Only downloading a flist can be done anonymously. To authenticate request via the API, you need to generate an API Token as shown in the section [ZOS Hub API Token](./api_token.md). +All the operations on the ZOS Hub needs to be done via a `3Bot` (default) authentication. Only downloading a flist can be done anonymously. To authenticate request via the API, you need to generate an API Token as shown in the section [ZOS Hub API Token](api_token.md). ## Get and Update Information Through the API The hub host a basic REST API which can gives you some informations about flists, renaming them, remove them, etc. diff --git a/collections/developers/flist/grid3_supported_flists.md b/collections/developers/flist/grid3_supported_flists.md index 537d0b3..d41403c 100644 --- a/collections/developers/flist/grid3_supported_flists.md +++ b/collections/developers/flist/grid3_supported_flists.md @@ -16,10 +16,10 @@ We provide basic information on the currently supported Flists. |flist|entrypoint|env vars| |:--:|:--:|--| -|[Alpine](https://hub.grid.tf/tf-official-apps/threefoldtech-alpine-3.flist.md)|`/entrypoint.sh`|`SSH_KEY`| -|[Ubuntu](https://hub.grid.tf/tf-official-apps/threefoldtech-ubuntu-22.04.flist.md)|`/init.sh`|`SSH_KEY`| -|[CentOS](https://hub.grid.tf/tf-official-apps/threefoldtech-centos-8.flist.md)|`/entrypoint.sh`|`SSH_KEY`| -|[K3s](https://hub.grid.tf/tf-official-apps/threefoldtech-k3s-latest.flist.md)|`/sbin/zinit init`|- `SSH_KEY`
- `K3S_TOKEN`
- `K3S_DATA_DIR`
- `K3S_FLANNEL_IFACE`
- `K3S_NODE_NAME`
- `K3S_URL` `https://${masterIp}:6443`| +|[Alpine](threefoldtech-alpine-3.flist.md)|`/entrypoint.sh`|`SSH_KEY`| +|[Ubuntu](threefoldtech-ubuntu-22.04.flist.md)|`/init.sh`|`SSH_KEY`| +|[CentOS](threefoldtech-centos-8.flist.md)|`/entrypoint.sh`|`SSH_KEY`| +|[K3s](threefoldtech-k3s-latest.flist.md)|`/sbin/zinit init`|- `SSH_KEY`
- `K3S_TOKEN`
- `K3S_DATA_DIR`
- `K3S_FLANNEL_IFACE`
- `K3S_NODE_NAME`
- `K3S_URL` `https://${masterIp}:6443`| ## More Flists diff --git a/collections/developers/go/grid3_go_gateways.md b/collections/developers/go/grid3_go_gateways.md index 66f5f68..23ecf77 100644 --- a/collections/developers/go/grid3_go_gateways.md +++ b/collections/developers/go/grid3_go_gateways.md @@ -12,7 +12,7 @@ ## Introduction -After [deploying a VM](./grid3_go_vm.md) you can deploy Gateways to further expose your VM. +After [deploying a VM](grid3_go_vm.md) you can deploy Gateways to further expose your VM. ## Gateway Name diff --git a/collections/developers/grid_deployment/grid_deployment.md b/collections/developers/grid_deployment/grid_deployment.md index 14fa506..2680eb5 100644 --- a/collections/developers/grid_deployment/grid_deployment.md +++ b/collections/developers/grid_deployment/grid_deployment.md @@ -4,6 +4,6 @@ The TFGrid whole source code is open-source and instances of the grid can be dep ## Table of Contents -- [TFGrid Stacks](./tfgrid_stacks.md) -- [Full VM Grid Deployment](./grid_deployment_full_vm.md) -- [Grid Snapshots](./snapshots.md) \ No newline at end of file +- [TFGrid Stacks](tfgrid_stacks.md) +- [Full VM Grid Deployment](grid_deployment_full_vm.md) +- [Grid Snapshots](snapshots.md) \ No newline at end of file diff --git a/collections/developers/grid_deployment/snapshots.md b/collections/developers/grid_deployment/snapshots.md index 1e8f0ff..f88da46 100644 --- a/collections/developers/grid_deployment/snapshots.md +++ b/collections/developers/grid_deployment/snapshots.md @@ -18,7 +18,7 @@ To facilitate deploying grid backend services, we provide snapshots to significantly reduce sync time. This can be setup anywhere from scratch. Once all services are synced, one can use the scripts to create snapshots automatically. -To learn how to deploy your own grid stack, read [this section](./grid_deployment_full_vm.md). +To learn how to deploy your own grid stack, read [this section](grid_deployment_full_vm.md). ## Services diff --git a/collections/developers/grid_deployment/tfgrid_stacks.md b/collections/developers/grid_deployment/tfgrid_stacks.md index 7845722..6f3b6e8 100644 --- a/collections/developers/grid_deployment/tfgrid_stacks.md +++ b/collections/developers/grid_deployment/tfgrid_stacks.md @@ -29,4 +29,4 @@ The overall ThreeFold ecosystem becomes more resilient to failures of individual To set your own instance of the TFGrid, you can download a snapshot of the grid and deploy the TFGrid services with Docker. We even provide scripts to quicken the whole process! -Read more about snapshots in the [next section](./grid_deployment_full_vm.md). \ No newline at end of file +Read more about snapshots in the [next section](grid_deployment_full_vm.md). \ No newline at end of file diff --git a/collections/developers/internals/rmb/rmb_intro.md b/collections/developers/internals/rmb/rmb_intro.md index bb08f99..23ec314 100644 --- a/collections/developers/internals/rmb/rmb_intro.md +++ b/collections/developers/internals/rmb/rmb_intro.md @@ -48,7 +48,7 @@ Starting from this we came up with a more detailed requirements: *** ## Specifications -For details about protocol itself please check the [specs](./rmb_specs.md). +For details about protocol itself please check the [specs](rmb_specs.md). *** ## How to Use RMB @@ -83,7 +83,7 @@ think of `rmb-peer` as a gateway that stands between you and the `relay`. `rmb-p Then it provide a simple (plain-text) api over `redis`. means to send messages (or handle requests) you just need to be able to push and pop messages from some redis queues. Messages are simple plain text json. -> More details can be found [here](./rmb_specs.md) +> More details can be found [here](rmb_specs.md) *** ## Download diff --git a/collections/developers/internals/zos/development/readme.md b/collections/developers/internals/zos/development/readme.md index 63b7034..c12493d 100644 --- a/collections/developers/internals/zos/development/readme.md +++ b/collections/developers/internals/zos/development/readme.md @@ -1,6 +1,6 @@ Development =========== -* [Quick start](./quickstart.md) -* [Testing](./testing.md) -* [Binary packages](./packages.md) \ No newline at end of file +* [Quick start](quickstart.md) +* [Testing](testing.md) +* [Binary packages](packages.md) \ No newline at end of file diff --git a/collections/developers/internals/zos/internals/internals.md b/collections/developers/internals/zos/internals/internals.md index 21ec057..25c5fca 100644 --- a/collections/developers/internals/zos/internals/internals.md +++ b/collections/developers/internals/zos/internals/internals.md @@ -85,4 +85,4 @@ Here is a list of the major ZOS modules. ## Capacity -In [this document](./capacity.md), you can find detail description of how ZOS does capacity planning. +In [this document](capacity.md), you can find detail description of how ZOS does capacity planning. diff --git a/collections/developers/internals/zos/internals/network/network_readme.md b/collections/developers/internals/zos/internals/network/network_readme.md index 3958cf6..bab6c1e 100644 --- a/collections/developers/internals/zos/internals/network/network_readme.md +++ b/collections/developers/internals/zos/internals/network/network_readme.md @@ -2,7 +2,7 @@

Table of Contents

-- [Introduction to networkd](./introduction.md) -- [Vocabulary Definitions](./definitions.md) -- [Wireguard Mesh Details](./mesh.md) -- [Farm Network Setup](./setup_farm_network.md) \ No newline at end of file +- [Introduction to networkd](introduction.md) +- [Vocabulary Definitions](definitions.md) +- [Wireguard Mesh Details](mesh.md) +- [Farm Network Setup](setup_farm_network.md) \ No newline at end of file diff --git a/collections/developers/internals/zos/manual/manual.md b/collections/developers/internals/zos/manual/manual.md index f2f39c2..89058d3 100644 --- a/collections/developers/internals/zos/manual/manual.md +++ b/collections/developers/internals/zos/manual/manual.md @@ -180,7 +180,7 @@ type Workload struct { ### API Node is always connected to the RMB network with the node `twin`. Means the node is always reachable over RMB with the node `twin-id` as an address. -The [node client](https://github.com/threefoldtech/zos/blob/main/client/node.go) should have a complete list of all available functions. documentations of the API can be found [here](./api.md) +The [node client](https://github.com/threefoldtech/zos/blob/main/client/node.go) should have a complete list of all available functions. documentations of the API can be found [here](api.md) ## Raid Controller Configuration diff --git a/collections/developers/internals/zos/manual/workload_types.md b/collections/developers/internals/zos/manual/workload_types.md index a9e2d85..9d1f540 100644 --- a/collections/developers/internals/zos/manual/workload_types.md +++ b/collections/developers/internals/zos/manual/workload_types.md @@ -66,7 +66,7 @@ For more details on all parameters needed to run a `zmachine` please refer to [` #### Building your `flist` -Please refer to [this document](./manual.md) here about how to build an compatible `zmachine flist` +Please refer to [this document](manual.md) here about how to build an compatible `zmachine flist` ### `zlogs` type diff --git a/collections/developers/internals/zos/manual/zmachine/readme.md b/collections/developers/internals/zos/manual/zmachine/readme.md index e94a0e7..99e01e3 100644 --- a/collections/developers/internals/zos/manual/zmachine/readme.md +++ b/collections/developers/internals/zos/manual/zmachine/readme.md @@ -10,4 +10,4 @@ For more details on all parameters needed to run a `zmachine` please refer to [`zmachine` data](https://github.com/threefoldtech/zos/blob/main/pkg/gridtypes/zos/zmachine.go) # Building your `flist`. -Please refer to [this document](../manual.md) here about how to build an compatible `zmachine flist` +Please refer to [this document](manual.md) here about how to build an compatible `zmachine flist` diff --git a/collections/developers/internals/zos/performance/performance.md b/collections/developers/internals/zos/performance/performance.md index 7f3ea76..f9585f6 100644 --- a/collections/developers/internals/zos/performance/performance.md +++ b/collections/developers/internals/zos/performance/performance.md @@ -80,10 +80,10 @@ Notes: ## Registered Tests -- [Public IP Validation](./publicips.md) -- [CPUBenchmark](./cpubench.md) -- [IPerf](./iperf.md) -- [Health Check](./healthcheck.md) +- [Public IP Validation](publicips.md) +- [CPUBenchmark](cpubench.md) +- [IPerf](iperf.md) +- [Health Check](healthcheck.md) ## Test Suite diff --git a/collections/developers/internals/zos/release/readme.md b/collections/developers/internals/zos/release/readme.md index 6af1a51..09ddc7b 100644 --- a/collections/developers/internals/zos/release/readme.md +++ b/collections/developers/internals/zos/release/readme.md @@ -3,7 +3,7 @@ We use a simple pipeline release workflow. Building and file distribution are made using GitHub Actions. Usable files are available on the [Zero-OS Hub](https://hub.grid.tf/tf-zos). -This pipeline is made to match the 3 different type of running mode of 0-OS. For more information head to the [upgrade documentation](../identity/upgrade.md). +This pipeline is made to match the 3 different type of running mode of 0-OS. For more information head to the [upgrade documentation](upgrade.md). ## Development build diff --git a/collections/developers/javascript/grid3_javascript_caprover.md b/collections/developers/javascript/grid3_javascript_caprover.md index 1b1e1e3..ccdaacb 100644 --- a/collections/developers/javascript/grid3_javascript_caprover.md +++ b/collections/developers/javascript/grid3_javascript_caprover.md @@ -17,7 +17,7 @@ In this section, we show how to deploy CapRover with the Javascript client. -This deployment is very similar to what we have in the section [Deploy a VM](./grid3_javascript_vm.md), but the environment variables are different. +This deployment is very similar to what we have in the section [Deploy a VM](grid3_javascript_vm.md), but the environment variables are different. ## Leader Node diff --git a/collections/developers/javascript/grid3_javascript_kubernetes.md b/collections/developers/javascript/grid3_javascript_kubernetes.md index 645f3e2..e9eeab7 100644 --- a/collections/developers/javascript/grid3_javascript_kubernetes.md +++ b/collections/developers/javascript/grid3_javascript_kubernetes.md @@ -21,7 +21,7 @@ We show how to deploy a Kubernetes cluster on the TFGrid with the Javascript cli ## Prerequisites -- Make sure you have your [client](./grid3_javascript_loadclient.md) prepared +- Make sure you have your [client](grid3_javascript_loadclient.md) prepared ## Example code diff --git a/collections/developers/javascript/grid3_javascript_kvstore.md b/collections/developers/javascript/grid3_javascript_kvstore.md index 5075086..25b6208 100644 --- a/collections/developers/javascript/grid3_javascript_kvstore.md +++ b/collections/developers/javascript/grid3_javascript_kvstore.md @@ -18,7 +18,7 @@ As part of the tfchain, we support a keyvalue store module that can be used for ## Prerequisites -- Make sure you have your [client](./grid3_javascript_loadclient.md) prepared +- Make sure you have your [client](grid3_javascript_loadclient.md) prepared ## Example code diff --git a/collections/developers/javascript/grid3_javascript_loadclient.md b/collections/developers/javascript/grid3_javascript_loadclient.md index 6376d67..11956c3 100644 --- a/collections/developers/javascript/grid3_javascript_loadclient.md +++ b/collections/developers/javascript/grid3_javascript_loadclient.md @@ -60,7 +60,7 @@ using e2e. That's similar to home servers by matrix - BackendStorage : can be `auto` which willl automatically adapt if running in node environment to use `filesystem backend` or the browser enviornment to use `localstorage backend`. Also you can set it to `kvstore` to use the tfchain keyvalue store module. - keypairType: is defaulted to `sr25519`, most likely you will never need to change it. `ed25519` is supported too. -for more details, check [client options](https://github.com/threefoldtech/tfgrid-sdk-ts/blob/development/packages/grid_client/docs/client_configuration.md) +for more details, check [client options](client_configuration.md) > Note: The choice of the node is completely up to the user at this point. They need to do the capacity planning. Check [Node Finder](dashboard@@node_finder) to know which nodes fits your deployment criteria. diff --git a/collections/developers/javascript/grid3_javascript_qsfs.md b/collections/developers/javascript/grid3_javascript_qsfs.md index df6b02a..1ef0d68 100644 --- a/collections/developers/javascript/grid3_javascript_qsfs.md +++ b/collections/developers/javascript/grid3_javascript_qsfs.md @@ -15,7 +15,7 @@ ## Prerequisites -First, make sure that you have your [client](./grid3_javascript_loadclient.md) prepared. +First, make sure that you have your [client](grid3_javascript_loadclient.md) prepared. ## Code Example @@ -257,7 +257,7 @@ log(">>>>>>>>>>>>>>>vm has been created<<<<<<<<<<<<<<<"); log(vm_res); ``` -So this deployment is almost similiar to what we have in the [vm deployment section](./grid3_javascript_vm.md). We only have a new section `qsfs_disks` +So this deployment is almost similiar to what we have in the [vm deployment section](grid3_javascript_vm.md). We only have a new section `qsfs_disks` ```ts qsfs_disks: [{ diff --git a/collections/developers/javascript/grid3_javascript_qsfs_zdbs.md b/collections/developers/javascript/grid3_javascript_qsfs_zdbs.md index 9c3a3f2..e7a02a6 100644 --- a/collections/developers/javascript/grid3_javascript_qsfs_zdbs.md +++ b/collections/developers/javascript/grid3_javascript_qsfs_zdbs.md @@ -21,7 +21,7 @@ We show how to deploy ZDBs for QSFS on the TFGrid with the Javascript client. ## Prerequisites -- Make sure you have your [client](./grid3_javascript_loadclient.md) prepared +- Make sure you have your [client](grid3_javascript_loadclient.md) prepared ## Example code diff --git a/collections/developers/javascript/grid3_javascript_readme.md b/collections/developers/javascript/grid3_javascript_readme.md index 62dc875..dc98621 100644 --- a/collections/developers/javascript/grid3_javascript_readme.md +++ b/collections/developers/javascript/grid3_javascript_readme.md @@ -8,17 +8,17 @@ Please make sure to check the [basics](system_administrators@@tfgrid3_getstarted

Table of Contents

-- [Installation](./grid3_javascript_installation.md) -- [Loading Client](./grid3_javascript_loadclient.md) -- [Deploy a VM](./grid3_javascript_vm.md) -- [Capacity Planning](./grid3_javascript_capacity_planning.md) -- [Deploy Multiple VMs](./grid3_javascript_vms.md) -- [Deploy CapRover](./grid3_javascript_caprover.md) -- [Gateways](./grid3_javascript_vm_gateways.md) -- [Deploy a Kubernetes Cluster](./grid3_javascript_kubernetes.md) -- [Deploy a ZDB](./grid3_javascript_zdb.md) -- [Deploy ZDBs for QSFS](./grid3_javascript_qsfs_zdbs.md) -- [QSFS](./grid3_javascript_qsfs.md) -- [Key Value Store](./grid3_javascript_kvstore.md) -- [VM with Wireguard and Gateway](./grid3_wireguard_gateway.md) -- [GPU Support](./grid3_javascript_gpu_support.md) \ No newline at end of file +- [Installation](grid3_javascript_installation.md) +- [Loading Client](grid3_javascript_loadclient.md) +- [Deploy a VM](grid3_javascript_vm.md) +- [Capacity Planning](grid3_javascript_capacity_planning.md) +- [Deploy Multiple VMs](grid3_javascript_vms.md) +- [Deploy CapRover](grid3_javascript_caprover.md) +- [Gateways](grid3_javascript_vm_gateways.md) +- [Deploy a Kubernetes Cluster](grid3_javascript_kubernetes.md) +- [Deploy a ZDB](grid3_javascript_zdb.md) +- [Deploy ZDBs for QSFS](grid3_javascript_qsfs_zdbs.md) +- [QSFS](grid3_javascript_qsfs.md) +- [Key Value Store](grid3_javascript_kvstore.md) +- [VM with Wireguard and Gateway](grid3_wireguard_gateway.md) +- [GPU Support](grid3_javascript_gpu_support.md) \ No newline at end of file diff --git a/collections/developers/javascript/grid3_javascript_vm_gateways.md b/collections/developers/javascript/grid3_javascript_vm_gateways.md index 052d9f3..ef02a78 100644 --- a/collections/developers/javascript/grid3_javascript_vm_gateways.md +++ b/collections/developers/javascript/grid3_javascript_vm_gateways.md @@ -19,7 +19,7 @@ ## Introduction -After the [deployment of a VM](./grid3_javascript_vm.md), now it's time to expose it to the world +After the [deployment of a VM](grid3_javascript_vm.md), now it's time to expose it to the world ## Example code @@ -104,7 +104,7 @@ log(d); ## Deploying a VM and exposing it over a Gateway using a Full domain -After the [deployment of a VM](./grid3_javascript_vm.md), now it's time to expose it to the world +After the [deployment of a VM](grid3_javascript_vm.md), now it's time to expose it to the world ## Example code diff --git a/collections/developers/javascript/grid3_javascript_zdb.md b/collections/developers/javascript/grid3_javascript_zdb.md index d773269..12466ef 100644 --- a/collections/developers/javascript/grid3_javascript_zdb.md +++ b/collections/developers/javascript/grid3_javascript_zdb.md @@ -21,7 +21,7 @@ We show how to deploy ZDB on the TFGrid with the Javascript client. ## Prerequisites -- Make sure you have your [client](./grid3_javascript_loadclient.md) prepared +- Make sure you have your [client](grid3_javascript_loadclient.md) prepared ## Example code diff --git a/collections/developers/javascript/grid3_wireguard_gateway.md b/collections/developers/javascript/grid3_wireguard_gateway.md index 7677789..449b08d 100644 --- a/collections/developers/javascript/grid3_wireguard_gateway.md +++ b/collections/developers/javascript/grid3_wireguard_gateway.md @@ -26,7 +26,7 @@ We present here the relevant information when it comes to deploying a virtual ma ## Client Configurations -To configure the client, have a look at [this section](./grid3_javascript_loadclient.md). +To configure the client, have a look at [this section](grid3_javascript_loadclient.md). diff --git a/collections/developers/proxy/contributions.md b/collections/developers/proxy/contributions.md index 3960676..1b4a132 100644 --- a/collections/developers/proxy/contributions.md +++ b/collections/developers/proxy/contributions.md @@ -45,11 +45,11 @@ The main structure of the code base is as follows: Adding a new endpoint should be accompanied with a corresponding test. Ideally every change or bug fix should include a test to ensure the new behavior/fix is working as intended. -Since these are integration tests, you need to first make sure that your local db is already seeded with the ncessary data. See tools [doc](./db_testing.md) for more information about how to prepare your db. +Since these are integration tests, you need to first make sure that your local db is already seeded with the ncessary data. See tools [doc](db_testing.md) for more information about how to prepare your db. Testing tools offer two clients that are the basic of most tests: - `local`: this client connects to the local db - `proxy client`: this client connects to the running local instance -You need to start an instance of the server before running the tests. Check [here](./commands.md) for how to start. +You need to start an instance of the server before running the tests. Check [here](commands.md) for how to start. diff --git a/collections/developers/proxy/proxy.md b/collections/developers/proxy/proxy.md index ac87fbc..8962912 100644 --- a/collections/developers/proxy/proxy.md +++ b/collections/developers/proxy/proxy.md @@ -50,7 +50,7 @@ By default, the instance runs against devnet. to configure that you will need to 3. **Docker**: Containerize the running services such as Postgres and Redis. 4. **Mnemonics**: Secret seeds for adummy identity to use for the relay client. -For more about the prerequisites and how to set up and configure them. follow the [Setup guide](./setup.md) +For more about the prerequisites and how to set up and configure them. follow the [Setup guide](setup.md) @@ -90,7 +90,7 @@ To start the services for development or testing make sure first you have all th make docs ``` -To run in development environment see [here](./db_testing.md) how to generate test db or load a db dump then use: +To run in development environment see [here](db_testing.md) how to generate test db or load a db dump then use: ```sh go run cmds/proxy_server/main.go --address :8080 --log-level debug -no-cert --postgres-host 127.0.0.1 --postgres-db tfgrid-graphql --postgres-password postgres --postgres-user postgres --mnemonics @@ -98,7 +98,7 @@ go run cmds/proxy_server/main.go --address :8080 --log-level debug -no-cert --po Then visit `http://localhost:8080/` -For more illustrations about the commands needed to work on the project, see the section [Commands](./commands.md). For more info about the project structure and contributions guidelines check the section [Contributions](./contributions.md). +For more illustrations about the commands needed to work on the project, see the section [Commands](commands.md). For more info about the project structure and contributions guidelines check the section [Contributions](contributions.md). diff --git a/collections/developers/proxy/proxy_readme.md b/collections/developers/proxy/proxy_readme.md index aaf4266..3e74412 100644 --- a/collections/developers/proxy/proxy_readme.md +++ b/collections/developers/proxy/proxy_readme.md @@ -14,12 +14,12 @@ To assist you on your journey, we have organized the content into distinct chapt

Table of Contents

-- [Introducing Grid Proxy](./proxy.md) -- [Setup](./setup.md) -- [DB Testing](./db_testing.md) -- [Commands](./commands.md) -- [Contributions](./contributions.md) -- [Explorer](./explorer.md) -- [Database](./database.md) -- [Production](./production.md) -- [Release](./release.md) \ No newline at end of file +- [Introducing Grid Proxy](proxy.md) +- [Setup](setup.md) +- [DB Testing](db_testing.md) +- [Commands](commands.md) +- [Contributions](contributions.md) +- [Explorer](explorer.md) +- [Database](database.md) +- [Production](production.md) +- [Release](release.md) \ No newline at end of file diff --git a/collections/developers/tfcmd/tfcmd.md b/collections/developers/tfcmd/tfcmd.md index b0653ae..5389038 100644 --- a/collections/developers/tfcmd/tfcmd.md +++ b/collections/developers/tfcmd/tfcmd.md @@ -6,10 +6,10 @@ Consult the [ThreeFoldTech TFCMD repository](https://github.com/threefoldtech/tf

Table of Contents

-- [Getting Started](./tfcmd_basics.md) -- [Deploy a VM](./tfcmd_vm.md) -- [Deploy Kubernetes](./tfcmd_kubernetes.md) -- [Deploy ZDB](./tfcmd_zdbs.md) -- [Gateway FQDN](./tfcmd_gateway_fqdn.md) -- [Gateway Name](./tfcmd_gateway_name.md) -- [Contracts](./tfcmd_contracts.md) \ No newline at end of file +- [Getting Started](tfcmd_basics.md) +- [Deploy a VM](tfcmd_vm.md) +- [Deploy Kubernetes](tfcmd_kubernetes.md) +- [Deploy ZDB](tfcmd_zdbs.md) +- [Gateway FQDN](tfcmd_gateway_fqdn.md) +- [Gateway Name](tfcmd_gateway_name.md) +- [Contracts](tfcmd_contracts.md) \ No newline at end of file diff --git a/collections/developers/tfrobot/tfrobot.md b/collections/developers/tfrobot/tfrobot.md index 40ba063..0f7aa92 100644 --- a/collections/developers/tfrobot/tfrobot.md +++ b/collections/developers/tfrobot/tfrobot.md @@ -6,8 +6,8 @@ Consult the [ThreeFoldTech TFROBOT repository](https://github.com/threefoldtech/

Table of Contents

-- [Installation](./tfrobot_installation.md) -- [Configuration File](./tfrobot_config.md) -- [Deployment](./tfrobot_deploy.md) -- [Commands and Flags](./tfrobot_commands_flags.md) -- [Supported Configurations](./tfrobot_configurations.md) \ No newline at end of file +- [Installation](tfrobot_installation.md) +- [Configuration File](tfrobot_config.md) +- [Deployment](tfrobot_deploy.md) +- [Commands and Flags](tfrobot_commands_flags.md) +- [Supported Configurations](tfrobot_configurations.md) \ No newline at end of file diff --git a/collections/developers/tfrobot/tfrobot_deploy.md b/collections/developers/tfrobot/tfrobot_deploy.md index 2c7d62a..eb7a19f 100644 --- a/collections/developers/tfrobot/tfrobot_deploy.md +++ b/collections/developers/tfrobot/tfrobot_deploy.md @@ -20,7 +20,7 @@ We present how to deploy workloads on the ThreeFold Grid using TFROBOT. ## Prerequisites -To deploy workloads on the TFGrid with TFROBOT, you first need to [install TFROBOT](./tfrobot_installation.md) on your machine and create a [configuration file](./tfrobot_config.md). +To deploy workloads on the TFGrid with TFROBOT, you first need to [install TFROBOT](tfrobot_installation.md) on your machine and create a [configuration file](tfrobot_config.md). ## Deploy Workloads diff --git a/collections/farmers/3node_building/3_set_hardware.md b/collections/farmers/3node_building/3_set_hardware.md index 1dfd77d..7e19e5a 100644 --- a/collections/farmers/3node_building/3_set_hardware.md +++ b/collections/farmers/3node_building/3_set_hardware.md @@ -39,7 +39,7 @@ Note that you can run Zero-OS on a Virtual Machine (VM), but you won't farm any Also, note that ThreeFold runs its own OS, which is Zero-OS. You thus need to start with completely wiped disks. You cannot farm TFT with Windows, Linux or MAC OS installed on your disks. If you need to use such OS temporarily, boot it in Try mode with a removable media (USB key). -Note: Once you have the necessary hardware, you need to [create a farm](./1_create_farm.md), [create a Zero-OS bootstrap image](./2_bootstrap_image.md), [wipe your disks](./4_wipe_all_disks.md) and [set the BIOS/UEFI](./5_set_bios_uefi.md) . Then you can [boot your 3Node](./6_boot_3node.md). If you are planning in building a farm in data center, [read this section](advanced_networking_toc.md). +Note: Once you have the necessary hardware, you need to [create a farm](1_create_farm.md), [create a Zero-OS bootstrap image](2_bootstrap_image.md), [wipe your disks](4_wipe_all_disks.md) and [set the BIOS/UEFI](5_set_bios_uefi.md) . Then you can [boot your 3Node](6_boot_3node.md). If you are planning in building a farm in data center, [read this section](advanced_networking_toc.md). diff --git a/collections/farmers/3node_building/3node_building.md b/collections/farmers/3node_building/3node_building.md index c7fe3f9..bf94262 100644 --- a/collections/farmers/3node_building/3node_building.md +++ b/collections/farmers/3node_building/3node_building.md @@ -6,9 +6,9 @@ For advanced farming information, such as GPU farming and room parameters, refer

Table of Contents

-- [1. Create a Farm](./1_create_farm.md) -- [2. Create a Zero-OS Bootstrap Image](./2_bootstrap_image.md) -- [3. Set the Hardware](./3_set_hardware.md) -- [4. Wipe All the Disks](./4_wipe_all_disks.md) -- [5. Set the BIOS/UEFI](./5_set_bios_uefi.md) -- [6. Boot the 3Node](./6_boot_3node.md) \ No newline at end of file +- [1. Create a Farm](1_create_farm.md) +- [2. Create a Zero-OS Bootstrap Image](2_bootstrap_image.md) +- [3. Set the Hardware](3_set_hardware.md) +- [4. Wipe All the Disks](4_wipe_all_disks.md) +- [5. Set the BIOS/UEFI](5_set_bios_uefi.md) +- [6. Boot the 3Node](6_boot_3node.md) \ No newline at end of file diff --git a/collections/farmers/3node_building/5_set_bios_uefi.md b/collections/farmers/3node_building/5_set_bios_uefi.md index 4c6c3e9..fa45624 100644 --- a/collections/farmers/3node_building/5_set_bios_uefi.md +++ b/collections/farmers/3node_building/5_set_bios_uefi.md @@ -159,7 +159,7 @@ Choices 1 and 2 are for UEFI (newer models). Choices 4 and 5 are for BIOS (newer models). Choices 3 and 6 are mainly for network boot. -Refer to [this previous section](./2_bootstrap_image.md) for more information on creating a Zero-OS bootstrap image. +Refer to [this previous section](2_bootstrap_image.md) for more information on creating a Zero-OS bootstrap image. For information on how to boot Zero-OS with iPXE, read [this section](./6_boot_3node.md#advanced-booting-methods-optional). diff --git a/collections/farmers/3node_building/6_boot_3node.md b/collections/farmers/3node_building/6_boot_3node.md index 404e2e9..0b5a6be 100644 --- a/collections/farmers/3node_building/6_boot_3node.md +++ b/collections/farmers/3node_building/6_boot_3node.md @@ -23,19 +23,19 @@ One of the great features of Zero-OS is that it can be completely run within the ## 1. Booting the 3Node with Zero-OS -To boot Zero-OS, insert your Zero-OS bootstrap image USB key, power on your computer and choose the right booting sequence and parameters ([BIOS or UEFI](./5_set_bios_uefi.md)) in your BIOS/UEFI settings. Then, restart the 3Node. Zero-OS should boot automatically. +To boot Zero-OS, insert your Zero-OS bootstrap image USB key, power on your computer and choose the right booting sequence and parameters ([BIOS or UEFI](5_set_bios_uefi.md)) in your BIOS/UEFI settings. Then, restart the 3Node. Zero-OS should boot automatically. Note that you need an ethernet cable connected to your router or switch. You cannot farm on the ThreeFold Grid with Wifi. The first time you boot a 3Node, it will be written: “This node is not registered (farmer : NameOfFarm). This is normal. The Grid will create a node ID and you will be able to see it on screen. This can take a couple of minutes. -If time passes (an hour and more) and the node does not get registered, in many cases, [wiping the disks](./4_wipe_all_disks.md) all over again and trying another reboot usually resolves this issue. +If time passes (an hour and more) and the node does not get registered, in many cases, [wiping the disks](4_wipe_all_disks.md) all over again and trying another reboot usually resolves this issue. Once you have your node ID, you can also go on the ThreeFold Dashboard to see your 3Node and verify that your 3Node is online. ## 2. Check the 3Node Status Online -You can use the ThreeFold [Node Finder](../../dashboard/deploy/node_finder.md) to verify that your 3Node is online. +You can use the ThreeFold [Node Finder](node_finder.md) to verify that your 3Node is online. * [ThreeFold Main Net Dashboard](https://dashboard.grid.tf/) * [ThreeFold Test Net Dashboard](https://dashboard.test.grid.tf/) diff --git a/collections/farmers/3node_building/gpu_farming.md b/collections/farmers/3node_building/gpu_farming.md index f355525..f0096d8 100644 --- a/collections/farmers/3node_building/gpu_farming.md +++ b/collections/farmers/3node_building/gpu_farming.md @@ -48,7 +48,7 @@ If you are using the Farmerbot, it might be a good idea to first boot the GPU no ## Set a Price for the GPU Node -You can [set additional fees](../farming_optimization/set_additional_fees.md) for your GPU dedicated node on the [TF Dashboard](https://dashboard.grid.tf/). +You can [set additional fees](set_additional_fees.md) for your GPU dedicated node on the [TF Dashboard](https://dashboard.grid.tf/). When a user reserves your 3Node as a dedicated node, you will receive TFT payments once every 24 hours. These TFT payments will be sent to the TFChain account of your farm's twin. @@ -65,7 +65,7 @@ You can use the [Node Finder](dashboard@@node_finder) on the [TF Dashboard](http ## Reserving the GPU Node -Now, users can reserve the node in the **Dedicated Nodes** section of the Dashboard and then deploy workloads using the GPU. For more information, read [this documentation](../../dashboard/deploy/dedicated_machines.md). +Now, users can reserve the node in the **Dedicated Nodes** section of the Dashboard and then deploy workloads using the GPU. For more information, read [this documentation](dedicated_machines.md). ## Questions and Feedback diff --git a/collections/farmers/advanced_networking/advanced_networking_toc.md b/collections/farmers/advanced_networking/advanced_networking_toc.md index f30a86f..4aecc82 100644 --- a/collections/farmers/advanced_networking/advanced_networking_toc.md +++ b/collections/farmers/advanced_networking/advanced_networking_toc.md @@ -6,8 +6,8 @@ In this section, we provide advanced networking tips for farms with public IPs a

Table of Contents

-- [Networking Overview](./networking_overview.md) -- [Network Considerations](./network_considerations.md) -- [Network Setup](./network_setup.md) +- [Networking Overview](networking_overview.md) +- [Network Considerations](network_considerations.md) +- [Network Setup](network_setup.md) > Note: This documentation does not constitute a complete set of knowledge on setting farms with public IP addresses in a data center. Please make sure to do your own research and communicate with your data center and your Internet service provider for any additional information. \ No newline at end of file diff --git a/collections/farmers/advanced_networking/networking_overview.md b/collections/farmers/advanced_networking/networking_overview.md index c4bc322..8a9f68f 100644 --- a/collections/farmers/advanced_networking/networking_overview.md +++ b/collections/farmers/advanced_networking/networking_overview.md @@ -22,7 +22,7 @@ In this section, we provide advanced networking tips for farms with public IPs a For farmers who have public IPs, extra considerations are needed in setting up the network of the farm. We will go through the main considerations in this section. -First, we must acknowledge that by the open-source and design of ThreeFold farming, a farm can range from a simple [single 3Node](../3node_building/3node_building.md) setup, to a multi-rack farm hosted in a typical data center, and everything in-between, from the farmer experiencing with public IP blocks, to the entrepreneur who builds their own data center at home. +First, we must acknowledge that by the open-source and design of ThreeFold farming, a farm can range from a simple [single 3Node](3node_building.md) setup, to a multi-rack farm hosted in a typical data center, and everything in-between, from the farmer experiencing with public IP blocks, to the entrepreneur who builds their own data center at home. There are thus many types of farms and each will have varying configurations. The simplest way to set up a farm has been extensively discussed in the first steps of creating a farm. But what are the other more complex configurations possible? Let's go through some of those: diff --git a/collections/farmers/complete_diy_guides/3node_diy_rack_server/3node_diy_rack_server.md b/collections/farmers/complete_diy_guides/3node_diy_rack_server/3node_diy_rack_server.md index e7e1c5e..27cd910 100644 --- a/collections/farmers/complete_diy_guides/3node_diy_rack_server/3node_diy_rack_server.md +++ b/collections/farmers/complete_diy_guides/3node_diy_rack_server/3node_diy_rack_server.md @@ -280,7 +280,7 @@ You can [create a ThreeFold farm](threefold_token@@tf_connect_app) with the Thre ## Wiping All the Disks -You might need to wipe your disks if they are not brand new. To wipe your disks, read the section [Wipe All the Disks](../../3node_building/4_wipe_all_disks.md) of the ThreeFold Farming Documentation. +You might need to wipe your disks if they are not brand new. To wipe your disks, read the section [Wipe All the Disks](4_wipe_all_disks.md) of the ThreeFold Farming Documentation. ## Downloading the Zero-OS Bootstrap Image @@ -319,7 +319,7 @@ When you start the server, press F2 to get into System Setup. Then, select System BIOS. In System BIOS settings, select Processor Settings. -Note: More details are available for BIOS Settings in this [documentation](../../3node_building/5_set_bios_uefi.md). +Note: More details are available for BIOS Settings in this [documentation](5_set_bios_uefi.md). ## Processor Settings diff --git a/collections/farmers/farmerbot/farmerbot_information.md b/collections/farmers/farmerbot/farmerbot_information.md index ef86e19..ced9b35 100644 --- a/collections/farmers/farmerbot/farmerbot_information.md +++ b/collections/farmers/farmerbot/farmerbot_information.md @@ -191,7 +191,7 @@ To download the Zero-OS bootstrap image, go to the usual bootstrap link [https:/ ![test_net|690x422](img/farmerbot_5.png) -Once you have your new bootstrap image for the new network, [wipe your disks](../3node_building/4_wipe_all_disks.md), insert the new bootstrap image and reboot the 3Node. +Once you have your new bootstrap image for the new network, [wipe your disks](4_wipe_all_disks.md), insert the new bootstrap image and reboot the 3Node. ## The differences between power "state" and power "target" @@ -282,7 +282,7 @@ Note that each node managed by the Farmerbot will randomly wakeup on average 10 ## Upgrade to the new Farmerbot -If you are still running the old version of the Farmerbot (written in V), you can easily upgrade to the new Farmerbot (written in Go). You simply need to properly stop the old Farmerbot and then follow the new [Farmerbot guide](./farmerbot_quick.md). +If you are still running the old version of the Farmerbot (written in V), you can easily upgrade to the new Farmerbot (written in Go). You simply need to properly stop the old Farmerbot and then follow the new [Farmerbot guide](farmerbot_quick.md). Here are the steps to properly stop the old Farmerbot. @@ -299,7 +299,7 @@ Here are the steps to properly stop the old Farmerbot. docker container rm -f -v NAME_OF_CONTAINER ``` -Once the old Farmerbot is properly stopped and deleted, follow the new [Farmerbot guide](./farmerbot_quick.md). +Once the old Farmerbot is properly stopped and deleted, follow the new [Farmerbot guide](farmerbot_quick.md). ## Set the Farmerbot without the mnemonics of a ThreeFold Dashboard account diff --git a/collections/farmers/farmerbot/farmerbot_intro.md b/collections/farmers/farmerbot/farmerbot_intro.md index 96d19b3..b398313 100644 --- a/collections/farmers/farmerbot/farmerbot_intro.md +++ b/collections/farmers/farmerbot/farmerbot_intro.md @@ -8,8 +8,8 @@ For more information on the Farmerbot, you can visit the [Farmerbot repository](

Table of Contents

-- [Quick Guide](./farmerbot_quick.md) -- [Additional Information](./farmerbot_information.md) -- [Minting and the Farmerbot](./farmerbot_minting.md) +- [Quick Guide](farmerbot_quick.md) +- [Additional Information](farmerbot_information.md) +- [Minting and the Farmerbot](farmerbot_minting.md) > Note: The Farmerbot is an optional feature developed by ThreeFold. Please use at your own risk. While ThreeFold will do its best to fix any issues with the Farmerbot and minting, if minting is affected by the use of the Farmerbot, ThreeFold cannot be held responsible. \ No newline at end of file diff --git a/collections/farmers/farmerbot/farmerbot_quick.md b/collections/farmers/farmerbot/farmerbot_quick.md index 4177ef8..8094789 100644 --- a/collections/farmers/farmerbot/farmerbot_quick.md +++ b/collections/farmers/farmerbot/farmerbot_quick.md @@ -285,7 +285,7 @@ farmerbot2.service This guide is meant to get you started quickly with the Farmerbot. That being said, there is a lot more that can be done with the Farmerbot. -For more information on the Farmerbot, please refer to the [Additional Information section](./farmerbot_information.md). You can also consult the [official Farmerbot Go repository](https://github.com/threefoldtech/tfgrid-sdk-go/tree/development/farmerbot). +For more information on the Farmerbot, please refer to the [Additional Information section](farmerbot_information.md). You can also consult the [official Farmerbot Go repository](https://github.com/threefoldtech/tfgrid-sdk-go/tree/development/farmerbot). If you have any questions, you can ask the ThreeFold community for help on the [ThreeFold Forum](https://forum.threefold.io/) or on the [ThreeFold Farmers Chat](https://t.me/threefoldfarmers) on Telegram. diff --git a/collections/farmers/farmers.md b/collections/farmers/farmers.md index f9428a7..3571faa 100644 --- a/collections/farmers/farmers.md +++ b/collections/farmers/farmers.md @@ -8,29 +8,29 @@ To buy a certified node from an official ThreeFold vendor, check the [ThreeFold

Table of Contents

-- [Build a 3Node](./3node_building/3node_building.md) - - [1. Create a Farm](./3node_building/1_create_farm.md) - - [2. Create a Zero-OS Bootstrap Image](./3node_building/2_bootstrap_image.md) - - [3. Set the Hardware](./3node_building/3_set_hardware.md) - - [4. Wipe All the Disks](./3node_building/4_wipe_all_disks.md) - - [5. Set the BIOS/UEFI](./3node_building/5_set_bios_uefi.md) - - [6. Boot the 3Node](./3node_building/6_boot_3node.md) -- [Farming Optimization](./farming_optimization/farming_optimization.md) - - [GPU Farming](./3node_building/gpu_farming.md) - - [Set Additional Fees](./farming_optimization/set_additional_fees.md) - - [Minting Receipts](./3node_building/minting_receipts.md) - - [Minting Periods](./farming_optimization/minting_periods.md) - - [Room Parameters](./farming_optimization/farm_room_parameters.md) - - [Farming Costs](./farming_optimization/farming_costs.md) - - [Calculate Your ROI](./farming_optimization/calculate_roi.md) -- [Advanced Networking](./advanced_networking/advanced_networking_toc.md) - - [Networking Overview](./advanced_networking/networking_overview.md) - - [Network Considerations](./advanced_networking/network_considerations.md) - - [Network Setup](./advanced_networking/network_setup.md) -- [Farmerbot](./farmerbot/farmerbot_intro.md) - - [Quick Guide](./farmerbot/farmerbot_quick.md) - - [Additional Information](./farmerbot/farmerbot_information.md) - - [Minting and the Farmerbot](./farmerbot/farmerbot_minting.md) +- [Build a 3Node](3node_building.md) + - [1. Create a Farm](1_create_farm.md) + - [2. Create a Zero-OS Bootstrap Image](2_bootstrap_image.md) + - [3. Set the Hardware](3_set_hardware.md) + - [4. Wipe All the Disks](4_wipe_all_disks.md) + - [5. Set the BIOS/UEFI](5_set_bios_uefi.md) + - [6. Boot the 3Node](6_boot_3node.md) +- [Farming Optimization](farming_optimization.md) + - [GPU Farming](gpu_farming.md) + - [Set Additional Fees](set_additional_fees.md) + - [Minting Receipts](minting_receipts.md) + - [Minting Periods](minting_periods.md) + - [Room Parameters](farm_room_parameters.md) + - [Farming Costs](farming_costs.md) + - [Calculate Your ROI](calculate_roi.md) +- [Advanced Networking](advanced_networking_toc.md) + - [Networking Overview](networking_overview.md) + - [Network Considerations](network_considerations.md) + - [Network Setup](network_setup.md) +- [Farmerbot](farmerbot_intro.md) + - [Quick Guide](farmerbot_quick.md) + - [Additional Information](farmerbot_information.md) + - [Minting and the Farmerbot](farmerbot_minting.md) - [Farmers FAQ](faq@@faq) > Note: Bugs in the code (e.g. ZOS or other components) can happen. If this is the case, there might be a loss of tokens during minting which won't be refunded by ThreeFold. If there are minting code errors, ThreeFold will try its best to fix the minting code and remint nodes that were affected by such errors. diff --git a/collections/farmers/farming_optimization/farming_costs.md b/collections/farmers/farming_optimization/farming_costs.md index f10e6a8..0bef500 100644 --- a/collections/farmers/farming_optimization/farming_costs.md +++ b/collections/farmers/farming_optimization/farming_costs.md @@ -178,7 +178,7 @@ Then within 9 months, this farm would have paid itself and from now on, it would We note that this takes into consideration that we are using the AC system 24/7. This would surely not be the case in real life. This means that the real ROI would be even better. It is a common practice to do estimates with stricter parameters. If you predict being profitable with strict parameters, you will surely be profitable in real life, even when "things" happen and not everything goes as planned. As always, this is not financial advice. -We recall that in the section [Calculate the ROI of a DIY 3Node](./calculate_roi.md), we found a simpler ROI of 6.25 months, say 7 months, that wasn't taking into consideration the additional costs of Internet and electricity. We now have a more realistic ROI of 9 months based on a fixed TFT price of 0.08$ USD. You will need to use to equations and check with your current TF farm and 3Nodes, as well as the current TFT market price. +We recall that in the section [Calculate the ROI of a DIY 3Node](calculate_roi.md), we found a simpler ROI of 6.25 months, say 7 months, that wasn't taking into consideration the additional costs of Internet and electricity. We now have a more realistic ROI of 9 months based on a fixed TFT price of 0.08$ USD. You will need to use to equations and check with your current TF farm and 3Nodes, as well as the current TFT market price. ### Check Revenue with the ThreeFold Simulator diff --git a/collections/farmers/farming_optimization/farming_optimization.md b/collections/farmers/farming_optimization/farming_optimization.md index 10f14b0..1097c24 100644 --- a/collections/farmers/farming_optimization/farming_optimization.md +++ b/collections/farmers/farming_optimization/farming_optimization.md @@ -1,13 +1,13 @@

Farming Optimization

-The section [Build a 3Node](../3node_building/3node_building.md) covered the notions necessary to build a DIY 3Node server. The following section will give you additional information with the goal of optimizing your farm while also being able to plan ahead the costs in terms of energy and capitals. We also cover how to set a GPU node and more. +The section [Build a 3Node](3node_building.md) covered the notions necessary to build a DIY 3Node server. The following section will give you additional information with the goal of optimizing your farm while also being able to plan ahead the costs in terms of energy and capitals. We also cover how to set a GPU node and more.

Table of Contents

-- [GPU Farming](../3node_building/gpu_farming.md) -- [Set Additional Fees](./set_additional_fees.md) -- [Minting Receipts](../3node_building/minting_receipts.md) -- [Minting Periods](./minting_periods.md) -- [Room Parameters](./farm_room_parameters.md) -- [Farming Costs](./farming_costs.md) -- [Calculate Your ROI](./calculate_roi.md) \ No newline at end of file +- [GPU Farming](gpu_farming.md) +- [Set Additional Fees](set_additional_fees.md) +- [Minting Receipts](minting_receipts.md) +- [Minting Periods](minting_periods.md) +- [Room Parameters](farm_room_parameters.md) +- [Farming Costs](farming_costs.md) +- [Calculate Your ROI](calculate_roi.md) \ No newline at end of file diff --git a/collections/farming/farming_reward_disclaimer.md b/collections/farming/farming_reward_disclaimer.md index 5485865..d8ca3ef 100644 --- a/collections/farming/farming_reward_disclaimer.md +++ b/collections/farming/farming_reward_disclaimer.md @@ -2,7 +2,7 @@ > Important note: The ThreeFold Token (TFT) is not an investment instrument. > TFTs are used to buy and sell IT capacity on the ThreeFold Grid. -> More info: see [Proof of Capacity DAO rules](./poc_dao_rules.md) +> More info: see [Proof of Capacity DAO rules](poc_dao_rules.md) diff --git a/collections/farming/farming_toc.md b/collections/farming/farming_toc.md index 166db4f..b53b9cd 100644 --- a/collections/farming/farming_toc.md +++ b/collections/farming/farming_toc.md @@ -6,7 +6,7 @@ To farm on the ThreeFold Grid, refer to the [Farmers](farmers@@farmers) section.

Table of Contents

-- [Farming Rewards](./farming_reward.md) -- [Proof-of-Capacity](./proof_of_capacity.md) -- [Proof-of-Utilization](./proof_of_utilization.md) -- [PoC DAO Rules](./poc_dao_rules.md) \ No newline at end of file +- [Farming Rewards](farming_reward.md) +- [Proof-of-Capacity](proof_of_capacity.md) +- [Proof-of-Utilization](proof_of_utilization.md) +- [PoC DAO Rules](poc_dao_rules.md) \ No newline at end of file diff --git a/collections/farming/proof_of_capacity.md b/collections/farming/proof_of_capacity.md index 01b3824..bceaa3d 100644 --- a/collections/farming/proof_of_capacity.md +++ b/collections/farming/proof_of_capacity.md @@ -50,7 +50,7 @@ The main advantage of PoC to farmers it makes it really easy to run a 3Node. It ## PoC Rewards -100% of specified [farming rewards](./farming_reward.md) goes to the farmer. +100% of specified [farming rewards](farming_reward.md) goes to the farmer. ## Farming Reward Calculation diff --git a/collections/farming/proof_of_utilization.md b/collections/farming/proof_of_utilization.md index 5b0a25e..abadba4 100644 --- a/collections/farming/proof_of_utilization.md +++ b/collections/farming/proof_of_utilization.md @@ -15,7 +15,7 @@ ## Introduction -ThreeFold Token ("TFT") is an Utility token and gets generated by ThreeFold Farmers, see [proof-of-capacity](./proof_of_capacity.md) for more information. +ThreeFold Token ("TFT") is an Utility token and gets generated by ThreeFold Farmers, see [proof-of-capacity](proof_of_capacity.md) for more information. Each ThreeFold Grid user can now use this capacity. The ThreeFold Chain ("TFChain") - ThreeFold Blockchain will track the utilization of this capacity. This process is called Proof-of-Utilization. Each hour the utilization is being tracked on the blockchain and charged to the capacity's user. diff --git a/collections/legal/terms_conditions_toc.md b/collections/legal/terms_conditions_toc.md index de9638f..2ee43de 100644 --- a/collections/legal/terms_conditions_toc.md +++ b/collections/legal/terms_conditions_toc.md @@ -2,8 +2,8 @@

Table of Contents

-- [Terms & Conditions ThreeFold Related Websites](./terms_conditions_websites.md) -- [Terms & Conditions TFGrid Users TFGrid 3](./terms_conditions_griduser.md) - - [TFTA to TFT](./tfta_to_tft.md) -- [Terms & Conditions TFGrid Farmers TFGrid 3](./terms_conditions_farmer3.md) -- [Terms & Conditions Sales](./terms_conditions_sales.md) \ No newline at end of file +- [Terms & Conditions ThreeFold Related Websites](terms_conditions_websites.md) +- [Terms & Conditions TFGrid Users TFGrid 3](terms_conditions_griduser.md) + - [TFTA to TFT](tfta_to_tft.md) +- [Terms & Conditions TFGrid Farmers TFGrid 3](terms_conditions_farmer3.md) +- [Terms & Conditions Sales](terms_conditions_sales.md) \ No newline at end of file diff --git a/collections/legal/tf_grid_testnet_disclaimer.md b/collections/legal/tf_grid_testnet_disclaimer.md index 6541f1c..4bfd2c1 100644 --- a/collections/legal/tf_grid_testnet_disclaimer.md +++ b/collections/legal/tf_grid_testnet_disclaimer.md @@ -5,7 +5,7 @@ ThreeFold_Grid is currently running on a demo version, here referred to as **Demo**, **TF Grid Demo**, or **ThreeFold_Grid Demo**, as well as **3Bot Admin Panel**, **3Bot Sys-Admin**, **3Bot**, to demonstrate the capabilities of our new marketplace and deployable solutions. This version of ThreeFold_Grid is running on both Main Net and Testnet. As a demo version, there would be no guarantees whatsoever provided to users including but not limited to uptime, or data availability. -By using this early version of all products, including but not limited to **Demo**, **3Bot** on Main Net and Test Net, you (the User) agree to **Threefold's** [**Terms & Conditions**](https://github.com/threefoldfoundation/info_legal/blob/master/wiki/terms_conditions_all.md). +By using this early version of all products, including but not limited to **Demo**, **3Bot** on Main Net and Test Net, you (the User) agree to **Threefold's** [**Terms & Conditions**](terms_conditions_all.md). All content provided on all products, including but not limited to Demo, 3Bot on Main Net and Testnet are provided without any representations or warranties of any kind. No Party involved in, or having contributed to the development of Demo and Testnet accept any responsibility or liability to Users or any third parties in relation to materials or information accessed or downloaded via the Demo and Testnet, and their related websites or information sources. diff --git a/collections/system_administrators/advanced/advanced.md b/collections/system_administrators/advanced/advanced.md index 92a95c3..fbe0fc7 100644 --- a/collections/system_administrators/advanced/advanced.md +++ b/collections/system_administrators/advanced/advanced.md @@ -4,11 +4,11 @@ In this section, we delve into sophisticated topics and powerful functionalities

Table of Contents

-- [Token Transfer Keygenerator](./token_transfer_keygenerator.md) -- [Cancel Contracts](./cancel_contracts.md) -- [Contract Bills Reports](./contract_bill_report.md) -- [Listing Free Public IPs](./list_public_ips.md) -- [Redis](./grid3_redis.md) -- [IPFS](./ipfs/ipfs_toc.md) - - [IPFS on a Full VM](./ipfs/ipfs_fullvm.md) - - [IPFS on a Micro VM](./ipfs/ipfs_microvm.md) +- [Token Transfer Keygenerator](token_transfer_keygenerator.md) +- [Cancel Contracts](cancel_contracts.md) +- [Contract Bills Reports](contract_bill_report.md) +- [Listing Free Public IPs](list_public_ips.md) +- [Redis](grid3_redis.md) +- [IPFS](ipfs_toc.md) + - [IPFS on a Full VM](ipfs_fullvm.md) + - [IPFS on a Micro VM](ipfs_microvm.md) diff --git a/collections/system_administrators/advanced/cancel_contracts.md b/collections/system_administrators/advanced/cancel_contracts.md index efab0ff..1cbf826 100644 --- a/collections/system_administrators/advanced/cancel_contracts.md +++ b/collections/system_administrators/advanced/cancel_contracts.md @@ -45,4 +45,4 @@ Go to `Extrinsics`, choose the `smartContract` module and `cancelContract` extri In order to use the `grid3_client_ts` module, it is essential to first clone our official mono-repo containing the module and then navigate to it. If you are looking for a quick and efficient way to cancel contracts, we offer a code-based solution that can be found [here](https://github.com/threefoldtech/tfgrid-sdk-ts/blob/development/packages/grid_client/scripts/delete_all_contracts.ts). -To make the most of `grid_client`, we highly recommend following our [Grid-Client guide](https://github.com/threefoldtech/tfgrid-sdk-ts/blob/development/packages/grid_client/README.md) for a comprehensive overview of the many advanced capabilities offered by this powerful tool. With features like contract creation, modification, and retrieval, `grid_client` provides an intuitive and easy-to-use solution for managing your contracts effectively. +To make the most of `grid_client`, we highly recommend following our [Grid-Client guide](README.md) for a comprehensive overview of the many advanced capabilities offered by this powerful tool. With features like contract creation, modification, and retrieval, `grid_client` provides an intuitive and easy-to-use solution for managing your contracts effectively. diff --git a/collections/system_administrators/advanced/ipfs/ipfs_toc.md b/collections/system_administrators/advanced/ipfs/ipfs_toc.md index 15d9c4a..95d1893 100644 --- a/collections/system_administrators/advanced/ipfs/ipfs_toc.md +++ b/collections/system_administrators/advanced/ipfs/ipfs_toc.md @@ -2,5 +2,5 @@

Table of Contents

-- [IPFS on a Full VM](./ipfs_fullvm.md) -- [IPFS on a Micro VM](./ipfs_microvm.md) \ No newline at end of file +- [IPFS on a Full VM](ipfs_fullvm.md) +- [IPFS on a Micro VM](ipfs_microvm.md) \ No newline at end of file diff --git a/collections/system_administrators/computer_it_basics/computer_it_basics.md b/collections/system_administrators/computer_it_basics/computer_it_basics.md index c1dfdfd..a78bebd 100644 --- a/collections/system_administrators/computer_it_basics/computer_it_basics.md +++ b/collections/system_administrators/computer_it_basics/computer_it_basics.md @@ -6,10 +6,10 @@ In this section, tailored specifically for system administrators, we'll delve in

Table of Contents

-- [CLI and Scripts Basics](./cli_scripts_basics.md) -- [Docker Basics](./docker_basics.md) -- [Git and GitHub Basics](./git_github_basics.md) -- [Firewall Basics](./firewall_basics/firewall_basics.md) - - [UFW Basics](./firewall_basics/ufw_basics.md) - - [Firewalld Basics](./firewall_basics/firewalld_basics.md) -- [File Transfer](./file_transfer.md) \ No newline at end of file +- [CLI and Scripts Basics](cli_scripts_basics.md) +- [Docker Basics](docker_basics.md) +- [Git and GitHub Basics](git_github_basics.md) +- [Firewall Basics](firewall_basics.md) + - [UFW Basics](ufw_basics.md) + - [Firewalld Basics](firewalld_basics.md) +- [File Transfer](file_transfer.md) \ No newline at end of file diff --git a/collections/system_administrators/computer_it_basics/docker_basics.md b/collections/system_administrators/computer_it_basics/docker_basics.md index 5a7f297..ede603f 100644 --- a/collections/system_administrators/computer_it_basics/docker_basics.md +++ b/collections/system_administrators/computer_it_basics/docker_basics.md @@ -164,7 +164,7 @@ docker run --rm quay.io/skopeo/stable list-tags docker://ghcr.io// Table of Contents -- [UFW Basics](./ufw_basics.md) -- [Firewalld Basics](./firewalld_basics.md) \ No newline at end of file +- [UFW Basics](ufw_basics.md) +- [Firewalld Basics](firewalld_basics.md) \ No newline at end of file diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md index 6a08a66..fb7bae4 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md @@ -17,9 +17,9 @@ In this Threefold Guide, we show how easy it is to deploy a full VM and access Cockpit, a web-based interface to manage servers. For more information on Cockpit, visit this [link](https://cockpit-project.org/). -For more information on deploying a full VM and using SSH remote connection, read [this SSH guide](../../ssh_guide/ssh_guide.md). +For more information on deploying a full VM and using SSH remote connection, read [this SSH guide](ssh_guide.md). -If you are new to the Threefold ecosystem and you want to deploy workloads on the Threefold Grid, read the [Get Started section](../../tfgrid3_getstarted.md) of the Threefold Manual. +If you are new to the Threefold ecosystem and you want to deploy workloads on the Threefold Grid, read the [Get Started section](tfgrid3_getstarted.md) of the Threefold Manual. Note that the two sections [Change the Network System Daemon](#change-the-network-system-daemon) and [Set a Firewall](#set-a-firewall) are optional. That being said, they provide more features and security to the deployment. @@ -27,7 +27,7 @@ Note that the two sections [Change the Network System Daemon](#change-the-networ ## Deploy a Full VM and Create a Root-Access User -To start, you must [deploy and SSH into a full VM](../../ssh_guide/ssh_guide.md). +To start, you must [deploy and SSH into a full VM](ssh_guide.md). * Go to the [Threefold dashboard](https://dashboard.grid.tf/#/) * Deploy a full VM (e.g. Ubuntu 22.04) diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md index d41569e..6a6738e 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md @@ -21,9 +21,9 @@ The Apache Guacamole instance has a two-factor authorization to give further sec With Apache Guacamole, a user can access different deployments and command servers remotely, with desktop access. -This guide can be done on a Windows, MAC, or Linux computer. For more information on deploying a full VM and using SSH remote connection, read this [SSH guide](../../ssh_guide/ssh_guide.md). +This guide can be done on a Windows, MAC, or Linux computer. For more information on deploying a full VM and using SSH remote connection, read this [SSH guide](ssh_guide.md). -If you are new to the Threefold ecosystem and you want to deploy workloads on the Threefold Grid, read the [Get Started section](../../tfgrid3_getstarted.md) of the Threefold Manual. +If you are new to the Threefold ecosystem and you want to deploy workloads on the Threefold Grid, read the [Get Started section](tfgrid3_getstarted.md) of the Threefold Manual. diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/remote_desktop_gui.md b/collections/system_administrators/getstarted/remote-desktop_gui/remote_desktop_gui.md index d801b48..a06c016 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/remote_desktop_gui.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/remote_desktop_gui.md @@ -6,6 +6,6 @@ If you have any questions, or if you would like to see a specific guide on remot

Table of Contents

-- [Cockpit: a Web-based Graphical Interface for Servers](./cockpit_guide/cockpit_guide.md) -- [XRDP: an Open-Source Remote Desktop Procol](./xrdp_guide/xrdp_guide.md) -- [Apache Guacamole: a Clientless Remote Desktop Gateway.](./guacamole_guide/guacamole_guide.md) +- [Cockpit: a Web-based Graphical Interface for Servers](cockpit_guide.md) +- [XRDP: an Open-Source Remote Desktop Procol](xrdp_guide.md) +- [Apache Guacamole: a Clientless Remote Desktop Gateway.](guacamole_guide.md) diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md index e1648ab..24f2389 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md @@ -18,9 +18,9 @@ We access Ubuntu with a desktop environment to offer a graphical user interface This guide can be done on a Windows, MAC, or Linux computer. The only difference will be in the Remote Desktop app. The steps are very similar. -For more information on deploying a full VM and using SSH remote connection, read this [SSH guide](../../ssh_guide/ssh_guide.md). +For more information on deploying a full VM and using SSH remote connection, read this [SSH guide](ssh_guide.md). -If you are new to the Threefold ecosystem and you want to deploy workloads on the Threefold Grid, read the [Get Started section](../../tfgrid3_getstarted.md) of the Threefold Manual. +If you are new to the Threefold ecosystem and you want to deploy workloads on the Threefold Grid, read the [Get Started section](tfgrid3_getstarted.md) of the Threefold Manual. diff --git a/collections/system_administrators/getstarted/ssh_guide/ssh_guide.md b/collections/system_administrators/getstarted/ssh_guide/ssh_guide.md index 020e2ad..62b83a4 100644 --- a/collections/system_administrators/getstarted/ssh_guide/ssh_guide.md +++ b/collections/system_administrators/getstarted/ssh_guide/ssh_guide.md @@ -4,7 +4,7 @@ SSH is a secure protocol used as the primary means of connecting to Linux server

Table of Contents

-- [SSH with OpenSSH](./ssh_openssh.md) -- [SSH with PuTTY](./ssh_putty.md) -- [SSH with WSL](./ssh_wsl.md) -- [WireGuard Access](./ssh_wireguard.md) \ No newline at end of file +- [SSH with OpenSSH](ssh_openssh.md) +- [SSH with PuTTY](ssh_putty.md) +- [SSH with WSL](ssh_wsl.md) +- [WireGuard Access](ssh_wireguard.md) \ No newline at end of file diff --git a/collections/system_administrators/getstarted/ssh_guide/ssh_openssh.md b/collections/system_administrators/getstarted/ssh_guide/ssh_openssh.md index 6598350..4762cf2 100644 --- a/collections/system_administrators/getstarted/ssh_guide/ssh_openssh.md +++ b/collections/system_administrators/getstarted/ssh_guide/ssh_openssh.md @@ -20,7 +20,7 @@ # Introduction -In this Threefold Guide, we show how easy it is to deploy a full virtual machine (VM) and SSH into a 3Node with [OpenSSH](https://www.openssh.com/) on Linux, MAC and Windows with both an IPv4 and a Planetary Network connection. To connect to the 3Node with WireGuard, read [this documentation](./ssh_wireguard.md). +In this Threefold Guide, we show how easy it is to deploy a full virtual machine (VM) and SSH into a 3Node with [OpenSSH](https://www.openssh.com/) on Linux, MAC and Windows with both an IPv4 and a Planetary Network connection. To connect to the 3Node with WireGuard, read [this documentation](ssh_wireguard.md). To deploy different workloads, the SSH connection process should be very similar. diff --git a/collections/system_administrators/getstarted/ssh_guide/ssh_wireguard.md b/collections/system_administrators/getstarted/ssh_guide/ssh_wireguard.md index 260fab0..69fa20a 100644 --- a/collections/system_administrators/getstarted/ssh_guide/ssh_wireguard.md +++ b/collections/system_administrators/getstarted/ssh_guide/ssh_wireguard.md @@ -19,7 +19,7 @@ In this Threefold Guide, we show how to set up [WireGuard](https://www.wireguard.com/) to access a 3Node deployment with an SSH connection. -Note that WireGuard provides the connection to the 3Node deployment. It is up to you to decide which SSH client you want to use. This means that the steps to SSH into a 3Node deployment will be similar to the steps proposed in the guides for [Open-SSH](./ssh_openssh.md), [PuTTy](ssh_putty.md) and [WSL](./ssh_wsl.md). Please refer to [this documentation](./ssh_guide.md) if you have any questions concerning SSH clients. The main difference will be that we connect to the 3Node deployment using a WireGuard connection instead of an IPv4 or a Planetary Network connection. +Note that WireGuard provides the connection to the 3Node deployment. It is up to you to decide which SSH client you want to use. This means that the steps to SSH into a 3Node deployment will be similar to the steps proposed in the guides for [Open-SSH](ssh_openssh.md), [PuTTy](ssh_putty.md) and [WSL](ssh_wsl.md). Please refer to [this documentation](ssh_guide.md) if you have any questions concerning SSH clients. The main difference will be that we connect to the 3Node deployment using a WireGuard connection instead of an IPv4 or a Planetary Network connection. @@ -28,15 +28,15 @@ Note that WireGuard provides the connection to the 3Node deployment. It is up to Make sure to [read the introduction](../tfgrid3_getstarted.md#get-started---your-first-deployment) before going further. * SSH client of your choice - * [Open-SSH](./ssh_openssh.md) + * [Open-SSH](ssh_openssh.md) * [PuTTy](ssh_putty.md) - * [WSL](./ssh_wsl.md) + * [WSL](ssh_wsl.md) # Deploy a Weblet with WireGuard Access -For this guide on WireGuard access, we deploy a [Full VM](../../../dashboard/solutions/fullVm.md). Note that the whole process is similar with other types of ThreeFold weblets on the Dashboard. +For this guide on WireGuard access, we deploy a [Full VM](fullVm.md). Note that the whole process is similar with other types of ThreeFold weblets on the Dashboard. * On the [Threefold Dashboard](https://dashboard.grid.tf/), go to: Deploy -> Virtual Machines -> Full Virtual Machine * Choose the parameters you want diff --git a/collections/system_administrators/getstarted/tfgrid3_getstarted.md b/collections/system_administrators/getstarted/tfgrid3_getstarted.md index d7ef097..d479cb3 100644 --- a/collections/system_administrators/getstarted/tfgrid3_getstarted.md +++ b/collections/system_administrators/getstarted/tfgrid3_getstarted.md @@ -8,11 +8,11 @@ It's easy to get started on the TFGrid and deploy applications. - [Get TFT](threefold_token@@buy_sell_tft) - [Bridge TFT to TChain](threefold_token@@tft_bridges) - [Deploy an Application](dashboard@@deploy) -- [SSH Remote Connection](./ssh_guide/ssh_guide.md) - - [SSH with OpenSSH](./ssh_guide/ssh_openssh.md) - - [SSH with PuTTY](./ssh_guide/ssh_putty.md) - - [SSH with WSL](./ssh_guide/ssh_wsl.md) - - [SSH and WireGuard](./ssh_guide/ssh_wireguard.md) +- [SSH Remote Connection](ssh_guide.md) + - [SSH with OpenSSH](ssh_openssh.md) + - [SSH with PuTTY](ssh_putty.md) + - [SSH with WSL](ssh_wsl.md) + - [SSH and WireGuard](ssh_wireguard.md) ## Grid Platforms @@ -21,11 +21,11 @@ It's easy to get started on the TFGrid and deploy applications. ## TFGrid Services and Resources -- [TFGrid Services](./tfgrid_services/tf_grid_services_readme.md) +- [TFGrid Services](tf_grid_services_readme.md) ## Advanced Deployment Techniques -- [Advanced Topics](../advanced/advanced.md) +- [Advanced Topics](advanced.md) *** diff --git a/collections/system_administrators/getstarted/tfgrid3_what_to_know.md b/collections/system_administrators/getstarted/tfgrid3_what_to_know.md index 2a47adf..a72590b 100644 --- a/collections/system_administrators/getstarted/tfgrid3_what_to_know.md +++ b/collections/system_administrators/getstarted/tfgrid3_what_to_know.md @@ -1,13 +1,13 @@ # TFGrid 3.0 Whats There To Know -- [Storage Concepts](./tfgrid3_storage_concepts.md) -- [Network Concepts](./tfgrid3_network_concepts.md) +- [Storage Concepts](tfgrid3_storage_concepts.md) +- [Network Concepts](tfgrid3_network_concepts.md) ## Networking ### Private network (ZNET) -For a project that needs a private network, we need a network that can span across multiple nodes, this can be achieved by the network workload reservation [Network](/getstarted/tfgrid3_network_concepts.md) +For a project that needs a private network, we need a network that can span across multiple nodes, this can be achieved by the network workload reservation [Network](tfgrid3_network_concepts.md) ### Planetary network @@ -35,7 +35,7 @@ As a user, you have two options ## Compute -VM workload is the only workload that you will need to run a full blown VM or an [flist-based](/flist_hub/flist_hub.md) container +VM workload is the only workload that you will need to run a full blown VM or an [flist-based](flist_hub.md) container ### How can I create an flist? @@ -54,5 +54,5 @@ You can easily check using [explorer-ui](dashboard@@explorer_home) , also to pla ## Getting started -Please check [Getting started](/getstarted/tfgrid3_getstarted.md) to get the necessary software / configurations +Please check [Getting started](tfgrid3_getstarted.md) to get the necessary software / configurations diff --git a/collections/system_administrators/gpu/gpu.md b/collections/system_administrators/gpu/gpu.md index 96c5112..581d26f 100644 --- a/collections/system_administrators/gpu/gpu.md +++ b/collections/system_administrators/gpu/gpu.md @@ -52,7 +52,7 @@ When you have decided which node to reserve, click on **Reserve** under the colu ## Deploy a VM with GPU -Now that you've reserverd a dedicated GPU node, it's time to deploy a VM to make use of the GPU! There are many ways to proceed. You can use the [Dashboard](../../dashboard/solutions/fullVm.md), [Go](developers@@grid3_go_gpu), [Terraform](../terraform/terraform_gpu_support.md), etc. +Now that you've reserverd a dedicated GPU node, it's time to deploy a VM to make use of the GPU! There are many ways to proceed. You can use the [Dashboard](fullVm.md), [Go](developers@@grid3_go_gpu), [Terraform](terraform_gpu_support.md), etc. For example, deploying a VM with GPU on the Dashboard is easy. Simply set the GPU option and make sure to select your dedicated node, as show here: ![image](./img/gpu_3.png) @@ -120,4 +120,4 @@ Here are some useful links to troubleshoot your GPU installation. ## GPU Support Links -You can consult the [GPU Table of Contents](./gpu_toc.md) to see all available GPU support links on the ThreeFold Manual. \ No newline at end of file +You can consult the [GPU Table of Contents](gpu_toc.md) to see all available GPU support links on the ThreeFold Manual. \ No newline at end of file diff --git a/collections/system_administrators/gpu/gpu_toc.md b/collections/system_administrators/gpu/gpu_toc.md index ea2a846..b0ccaca 100644 --- a/collections/system_administrators/gpu/gpu_toc.md +++ b/collections/system_administrators/gpu/gpu_toc.md @@ -6,14 +6,14 @@ Feel free to explore the different possibilities!

Table of Contents

-- [GPU Support](./gpu.md) +- [GPU Support](gpu.md) - [Node Finder and GPU](dashboard@@node_finder) - [Javascript Client and GPU](developers@@grid3_javascript_gpu_support) - [GPU and Go](developers@@grid3_go_gpu) - [GPU Support](developers@@grid3_go_gpu_support) - [Deploy a VM with GPU](developers@@grid3_go_vm_with_gpu) - [TFCMD and GPU](developers@@tfcmd_vm) -- [Terraform and GPU](../terraform/terraform_gpu_support.md) +- [Terraform and GPU](terraform_gpu_support.md) - [Full VM and GPU](dashboard@@fullvm) - [Zero-OS API and GPU](developers@@api) - [GPU Farming](farmers@@gpu_farming) \ No newline at end of file diff --git a/collections/system_administrators/mycelium/information.md b/collections/system_administrators/mycelium/information.md index d900e82..890c0db 100644 --- a/collections/system_administrators/mycelium/information.md +++ b/collections/system_administrators/mycelium/information.md @@ -116,8 +116,8 @@ same data stream used by L3 packets. As such, intermediate nodes can't distingui and message data. The primary way to interact with the message system is through [the API](#API). The message API is -documented in [here](./api_yaml.md). For some more info about how to -use the message system, see [the Message section](./message.md). +documented in [here](api_yaml.md). For some more info about how to +use the message system, see [the Message section](message.md). ## Inspecting Node Keys diff --git a/collections/system_administrators/mycelium/message.md b/collections/system_administrators/mycelium/message.md index f132367..c7edbd3 100644 --- a/collections/system_administrators/mycelium/message.md +++ b/collections/system_administrators/mycelium/message.md @@ -13,7 +13,7 @@ The message subsystem can be used to send arbitrary length messages to receivers. A receiver is any other node in the network. It can be identified both by its public key, or an IP address in its announced range. The message subsystem can be interacted with both via the HTTP API, which is -[documented here](./api_yaml.md), or via the `mycelium` binary. By default, the messages do not interpret +[documented here](api_yaml.md), or via the `mycelium` binary. By default, the messages do not interpret the data in any way. When using the binary, the message is slightly modified to include an optional topic at the start of the message. Note that in the HTTP API, all messages are encoded in base64. This might make it difficult to consume these messages without additional tooling. diff --git a/collections/system_administrators/mycelium/mycelium_toc.md b/collections/system_administrators/mycelium/mycelium_toc.md index 817771d..c95199e 100644 --- a/collections/system_administrators/mycelium/mycelium_toc.md +++ b/collections/system_administrators/mycelium/mycelium_toc.md @@ -5,10 +5,10 @@ In this section, we present [Mycelium](https://github.com/threefoldtech/mycelium

Table of Contents

-- [Overview](./overview.md) -- [Installation](./installation.md) -- [Additional Information](./information.md) -- [Message](./message.md) -- [Packet](./packet.md) -- [Data Packet](./data_packet.md) -- [API YAML](./api_yaml.md) \ No newline at end of file +- [Overview](overview.md) +- [Installation](installation.md) +- [Additional Information](information.md) +- [Message](message.md) +- [Packet](packet.md) +- [Data Packet](data_packet.md) +- [API YAML](api_yaml.md) \ No newline at end of file diff --git a/collections/system_administrators/pulumi/pulumi_deployment_details.md b/collections/system_administrators/pulumi/pulumi_deployment_details.md index 5dc808c..282fd49 100644 --- a/collections/system_administrators/pulumi/pulumi_deployment_details.md +++ b/collections/system_administrators/pulumi/pulumi_deployment_details.md @@ -29,7 +29,7 @@ Please note that the Pulumi plugin for ThreeFold Grid is not yet officially publ ## Installation -If this isn't already done, [install Pulumi](./pulumi_install.md) on your machine. +If this isn't already done, [install Pulumi](pulumi_install.md) on your machine. ## Essential Workflow diff --git a/collections/system_administrators/pulumi/pulumi_examples.md b/collections/system_administrators/pulumi/pulumi_examples.md index 73363c3..ee8ab14 100644 --- a/collections/system_administrators/pulumi/pulumi_examples.md +++ b/collections/system_administrators/pulumi/pulumi_examples.md @@ -23,7 +23,7 @@ Please note that the Pulumi plugin for ThreeFold Grid is not yet officially publ There are a few things to set up before exploring Pulumi. Since we will be using the examples in the ThreeFold Pulumi repository, we must clone the repository before going further. -* [Install Pulumi](./pulumi_install.md) on your machine +* [Install Pulumi](pulumi_install.md) on your machine * Clone the **Pulumi-ThreeFold** repository * ``` git clone https://github.com/threefoldtech/pulumi-threefold diff --git a/collections/system_administrators/pulumi/pulumi_readme.md b/collections/system_administrators/pulumi/pulumi_readme.md index 0cc318c..31b4cf0 100644 --- a/collections/system_administrators/pulumi/pulumi_readme.md +++ b/collections/system_administrators/pulumi/pulumi_readme.md @@ -6,7 +6,7 @@ In this section, we will explore the dynamic world of infrastructure as code (Ia

Table of Contents

-- [Introduction to Pulumi](./pulumi_intro.md) -- [Installing Pulumi](./pulumi_install.md) -- [Deployment Examples](./pulumi_examples.md) -- [Deployment Details](./pulumi_deployment_details.md) \ No newline at end of file +- [Introduction to Pulumi](pulumi_intro.md) +- [Installing Pulumi](pulumi_install.md) +- [Deployment Examples](pulumi_examples.md) +- [Deployment Details](pulumi_deployment_details.md) \ No newline at end of file diff --git a/collections/system_administrators/system_administrators.md b/collections/system_administrators/system_administrators.md index 8d133d6..f76b33a 100644 --- a/collections/system_administrators/system_administrators.md +++ b/collections/system_administrators/system_administrators.md @@ -6,78 +6,78 @@ For complementary information on ThreeFold grid and its cloud component, refer t

Table of Contents

-- [Getting Started](./getstarted/tfgrid3_getstarted.md) - - [SSH Remote Connection](./getstarted/ssh_guide/ssh_guide.md) - - [SSH with OpenSSH](./getstarted/ssh_guide/ssh_openssh.md) - - [SSH with PuTTY](./getstarted/ssh_guide/ssh_putty.md) - - [SSH with WSL](./getstarted/ssh_guide/ssh_wsl.md) - - [WireGuard Access](./getstarted/ssh_guide/ssh_wireguard.md) - - [Remote Desktop and GUI](./getstarted/remote-desktop_gui/remote-desktop_gui.md) - - [Cockpit: a Web-based Interface for Servers](./getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md) - - [XRDP: an Open-Source Remote Desktop Protocol](./getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md) - - [Apache Guacamole: a Clientless Remote Desktop Gateway](./getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md) -- [Planetary Network](./getstarted/planetarynetwork.md) -- [TFGrid Services](./getstarted/tfgrid_services/tf_grid_services_readme.md) -- [GPU](./gpu/gpu_toc.md) - - [GPU Support](./gpu/gpu.md) -- [Terraform](./terraform/terraform_toc.md) - - [Overview](./terraform/terraform_readme.md) - - [Installing Terraform](./terraform/terraform_install.md) - - [Terraform Basics](./terraform/terraform_basics.md) - - [Full VM Deployment](./terraform/terraform_full_vm.md) - - [GPU Support](./terraform/terraform_gpu_support.md) - - [Resources](./terraform/resources/terraform_resources_readme.md) - - [Using Scheduler](./terraform/resources/terraform_scheduler.md) - - [Virtual Machine](./terraform/resources/terraform_vm.md) - - [Web Gateway](./terraform/resources/terraform_vm_gateway.md) - - [Kubernetes Cluster](./terraform/resources/terraform_k8s.md) - - [ZDB](./terraform/resources/terraform_zdb.md) - - [Quantum Safe Filesystem](./terraform/resources/terraform_qsfs.md) - - [QSFS on Micro VM](./terraform/resources/terraform_qsfs_on_microvm.md) - - [QSFS on Full VM](./terraform/resources/terraform_qsfs_on_full_vm.md) - - [CapRover](./terraform/resources/terraform_caprover.md) - - [Advanced](./terraform/advanced/terraform_advanced_readme.md) - - [Terraform Provider](./terraform/advanced/terraform_provider.md) - - [Terraform Provisioners](./terraform/advanced/terraform_provisioners.md) - - [Mounts](./terraform/advanced/terraform_mounts.md) - - [Capacity Planning](./terraform/advanced/terraform_capacity_planning.md) - - [Updates](./terraform/advanced/terraform_updates.md) - - [SSH Connection with Wireguard](./terraform/advanced/terraform_wireguard_ssh.md) - - [Set a Wireguard VPN](./terraform/advanced/terraform_wireguard_vpn.md) - - [Synced MariaDB Databases](./terraform/advanced/terraform_mariadb_synced_databases.md) - - [Nomad](./terraform/advanced/terraform_nomad.md) - - [Nextcloud Deployments](./terraform/advanced/terraform_nextcloud_toc.md) - - [Nextcloud All-in-One Deployment](./terraform/advanced/terraform_nextcloud_aio.md) - - [Nextcloud Single Deployment](./terraform/advanced/terraform_nextcloud_single.md) - - [Nextcloud Redundant Deployment](./terraform/advanced/terraform_nextcloud_redundant.md) - - [Nextcloud 2-Node VPN Deployment](./terraform/advanced/terraform_nextcloud_vpn.md) -- [Pulumi](./pulumi/pulumi_readme.md) - - [Introduction to Pulumi](./pulumi/pulumi_intro.md) - - [Installing Pulumi](./pulumi/pulumi_install.md) - - [Deployment Examples](./pulumi/pulumi_examples.md) - - [Deployment Details](./pulumi/pulumi_deployment_details.md) -- [Mycelium](./mycelium/mycelium_toc.md) - - [Overview](./mycelium/overview.md) - - [Installation](./mycelium/installation.md) - - [Additional Information](./mycelium/information.md) - - [Message](./mycelium/message.md) - - [Packet](./mycelium/packet.md) - - [Data Packet](./mycelium/data_packet.md) - - [API YAML](./mycelium/api_yaml.md) -- [Computer and IT Basics](./computer_it_basics/computer_it_basics.md) - - [CLI and Scripts Basics](./computer_it_basics/cli_scripts_basics.md) - - [Docker Basics](./computer_it_basics/docker_basics.md) - - [Git and GitHub Basics](./computer_it_basics/git_github_basics.md) - - [Firewall Basics](./computer_it_basics/firewall_basics/firewall_basics.md) - - [UFW Basics](./computer_it_basics/firewall_basics/ufw_basics.md) - - [Firewalld Basics](./computer_it_basics/firewall_basics/firewalld_basics.md) - - [File Transfer](./computer_it_basics/file_transfer.md) -- [Advanced](./advanced/advanced.md) - - [Token Transfer Keygenerator](./advanced/token_transfer_keygenerator.md) - - [Cancel Contracts](./advanced/cancel_contracts.md) - - [Contract Bills Reports](./advanced/contract_bill_report.md) - - [Listing Free Public IPs](./advanced/list_public_ips.md) - - [Redis](./advanced/grid3_redis.md) - - [IPFS](./advanced/ipfs/ipfs_toc.md) - - [IPFS on a Full VM](./advanced/ipfs/ipfs_fullvm.md) - - [IPFS on a Micro VM](./advanced/ipfs/ipfs_microvm.md) \ No newline at end of file +- [Getting Started](tfgrid3_getstarted.md) + - [SSH Remote Connection](ssh_guide.md) + - [SSH with OpenSSH](ssh_openssh.md) + - [SSH with PuTTY](ssh_putty.md) + - [SSH with WSL](ssh_wsl.md) + - [WireGuard Access](ssh_wireguard.md) + - [Remote Desktop and GUI](remote-desktop_gui.md) + - [Cockpit: a Web-based Interface for Servers](cockpit_guide.md) + - [XRDP: an Open-Source Remote Desktop Protocol](xrdp_guide.md) + - [Apache Guacamole: a Clientless Remote Desktop Gateway](guacamole_guide.md) +- [Planetary Network](planetarynetwork.md) +- [TFGrid Services](tf_grid_services_readme.md) +- [GPU](gpu_toc.md) + - [GPU Support](gpu.md) +- [Terraform](terraform_toc.md) + - [Overview](terraform_readme.md) + - [Installing Terraform](terraform_install.md) + - [Terraform Basics](terraform_basics.md) + - [Full VM Deployment](terraform_full_vm.md) + - [GPU Support](terraform_gpu_support.md) + - [Resources](terraform_resources_readme.md) + - [Using Scheduler](terraform_scheduler.md) + - [Virtual Machine](terraform_vm.md) + - [Web Gateway](terraform_vm_gateway.md) + - [Kubernetes Cluster](terraform_k8s.md) + - [ZDB](terraform_zdb.md) + - [Quantum Safe Filesystem](terraform_qsfs.md) + - [QSFS on Micro VM](terraform_qsfs_on_microvm.md) + - [QSFS on Full VM](terraform_qsfs_on_full_vm.md) + - [CapRover](terraform_caprover.md) + - [Advanced](terraform_advanced_readme.md) + - [Terraform Provider](terraform_provider.md) + - [Terraform Provisioners](terraform_provisioners.md) + - [Mounts](terraform_mounts.md) + - [Capacity Planning](terraform_capacity_planning.md) + - [Updates](terraform_updates.md) + - [SSH Connection with Wireguard](terraform_wireguard_ssh.md) + - [Set a Wireguard VPN](terraform_wireguard_vpn.md) + - [Synced MariaDB Databases](terraform_mariadb_synced_databases.md) + - [Nomad](terraform_nomad.md) + - [Nextcloud Deployments](terraform_nextcloud_toc.md) + - [Nextcloud All-in-One Deployment](terraform_nextcloud_aio.md) + - [Nextcloud Single Deployment](terraform_nextcloud_single.md) + - [Nextcloud Redundant Deployment](terraform_nextcloud_redundant.md) + - [Nextcloud 2-Node VPN Deployment](terraform_nextcloud_vpn.md) +- [Pulumi](pulumi_readme.md) + - [Introduction to Pulumi](pulumi_intro.md) + - [Installing Pulumi](pulumi_install.md) + - [Deployment Examples](pulumi_examples.md) + - [Deployment Details](pulumi_deployment_details.md) +- [Mycelium](mycelium_toc.md) + - [Overview](overview.md) + - [Installation](installation.md) + - [Additional Information](information.md) + - [Message](message.md) + - [Packet](packet.md) + - [Data Packet](data_packet.md) + - [API YAML](api_yaml.md) +- [Computer and IT Basics](computer_it_basics.md) + - [CLI and Scripts Basics](cli_scripts_basics.md) + - [Docker Basics](docker_basics.md) + - [Git and GitHub Basics](git_github_basics.md) + - [Firewall Basics](firewall_basics.md) + - [UFW Basics](ufw_basics.md) + - [Firewalld Basics](firewalld_basics.md) + - [File Transfer](file_transfer.md) +- [Advanced](advanced.md) + - [Token Transfer Keygenerator](token_transfer_keygenerator.md) + - [Cancel Contracts](cancel_contracts.md) + - [Contract Bills Reports](contract_bill_report.md) + - [Listing Free Public IPs](list_public_ips.md) + - [Redis](grid3_redis.md) + - [IPFS](ipfs_toc.md) + - [IPFS on a Full VM](ipfs_fullvm.md) + - [IPFS on a Micro VM](ipfs_microvm.md) \ No newline at end of file diff --git a/collections/system_administrators/terraform/advanced/terraform_advanced_readme.md b/collections/system_administrators/terraform/advanced/terraform_advanced_readme.md index 67168e0..b3d5f25 100644 --- a/collections/system_administrators/terraform/advanced/terraform_advanced_readme.md +++ b/collections/system_administrators/terraform/advanced/terraform_advanced_readme.md @@ -7,12 +7,12 @@ - [Mounts](./terraform_mounts.html) - [Capacity Planning](./terraform_capacity_planning.html) - [Updates](./terraform_updates.html) -- [SSH Connection with Wireguard](./terraform_wireguard_ssh.md) -- [Set a Wireguard VPN](./terraform_wireguard_vpn.md) -- [Synced MariaDB Databases](./terraform_mariadb_synced_databases.md) -- [Nomad](./terraform_nomad.md) -- [Nextcloud Deployments](./terraform_nextcloud_toc.md) - - [Nextcloud All-in-One Deployment](./terraform_nextcloud_aio.md) - - [Nextcloud Single Deployment](./terraform_nextcloud_single.md) - - [Nextcloud Redundant Deployment](./terraform_nextcloud_redundant.md) - - [Nextcloud 2-Node VPN Deployment](./terraform_nextcloud_vpn.md) \ No newline at end of file +- [SSH Connection with Wireguard](terraform_wireguard_ssh.md) +- [Set a Wireguard VPN](terraform_wireguard_vpn.md) +- [Synced MariaDB Databases](terraform_mariadb_synced_databases.md) +- [Nomad](terraform_nomad.md) +- [Nextcloud Deployments](terraform_nextcloud_toc.md) + - [Nextcloud All-in-One Deployment](terraform_nextcloud_aio.md) + - [Nextcloud Single Deployment](terraform_nextcloud_single.md) + - [Nextcloud Redundant Deployment](terraform_nextcloud_redundant.md) + - [Nextcloud 2-Node VPN Deployment](terraform_nextcloud_vpn.md) \ No newline at end of file diff --git a/collections/system_administrators/terraform/advanced/terraform_capacity_planning.md b/collections/system_administrators/terraform/advanced/terraform_capacity_planning.md index 63c96ad..61b1d65 100644 --- a/collections/system_administrators/terraform/advanced/terraform_capacity_planning.md +++ b/collections/system_administrators/terraform/advanced/terraform_capacity_planning.md @@ -117,7 +117,7 @@ resource "grid_scheduler" "sched" { Here we define a `list` of requests, each request has a name and filter options e.g `cru`, `sru`, `mru`, `hru`, having `public_config` or not, `public_ips_count` for this deployment, whether or not this node should be `dedicated`, whether or not this node should be `distinct` from other nodes in this plannder, `farm_id` to search in, nodes to exlude from search in `node_exclude`, and whether or not this node should be `certified`. -The full docs for the capacity planner `scheduler` are found [here](https://github.com/threefoldtech/terraform-provider-grid/blob/development/docs/resources/scheduler.md) +The full docs for the capacity planner `scheduler` are found [here](scheduler.md) And after that in our code we can reference the grid_scheduler object with the request name to be used instead of node_id. diff --git a/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md b/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md index 2fe3394..bf911db 100644 --- a/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md +++ b/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md @@ -305,7 +305,7 @@ Note that, at any moment, if you want to see the information on your Terraform d ### SSH into the 3Nodes -* To [SSH into the 3Nodes](../../getstarted/ssh_guide/ssh_guide.md), write the following while making sure to set the proper IP address for each VM: +* To [SSH into the 3Nodes](ssh_guide.md), write the following while making sure to set the proper IP address for each VM: * ``` ssh root@3node_IPv4_Address ``` @@ -362,7 +362,7 @@ This should set everything properly. If you correctly receive the packets for the two VMs, you know that the VPN is properly set. -For more information on WireGuard, notably in relation to Windows, please read [this documentation](../../getstarted/ssh_guide/ssh_wireguard.md). +For more information on WireGuard, notably in relation to Windows, please read [this documentation](ssh_wireguard.md). diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_aio.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_aio.md index 16f3390..87dcf9b 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_aio.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_aio.md @@ -20,7 +20,7 @@ We present a quick way to install Nextcloud All-in-One on the TFGrid. This guide ## Deploy a Full VM -* Deploy a Full VM with the [TF Dashboard](../../getstarted/ssh_guide/ssh_openssh.md) or [Terraform](../terraform_full_vm.md) +* Deploy a Full VM with the [TF Dashboard](ssh_openssh.md) or [Terraform](terraform_full_vm.md) * Minimum specs: * IPv4 Address * 2 vcores diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md index 940a270..b052848 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md @@ -75,7 +75,7 @@ To get an overview of the whole process, we present the main steps: # Prerequisites -* [Install Terraform](../terraform_install.md) +* [Install Terraform](terraform_install.md) * [Install Wireguard](https://www.wireguard.com/install/) You need to download and install properly Terraform and Wireguard on your local computer. Simply follow the documentation depending on your operating system (Linux, MAC and Windows). @@ -320,7 +320,7 @@ After deployments, take note of the 3nodes' IPv4 address. You will need those ad ### SSH into the 3nodes -* To [SSH into the 3nodes](../../getstarted/ssh_guide/ssh_guide.md), write the following: +* To [SSH into the 3nodes](ssh_guide.md), write the following: * ``` ssh root@VM_IPv4_Address ``` @@ -343,7 +343,7 @@ After deployments, take note of the 3nodes' IPv4 address. You will need those ad We now want to ping the VMs using Wireguard. This will ensure the connection is properly established. -For more information on WireGuard, notably in relation to Windows, please read [this documentation](../../getstarted/ssh_guide/ssh_wireguard.md). +For more information on WireGuard, notably in relation to Windows, please read [this documentation](ssh_wireguard.md). First, we set Wireguard with the Terraform output. diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md index 5ad8116..9c54dea 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md @@ -61,7 +61,7 @@ To get an overview of the whole process, we present the main steps: # Prerequisites -- [Install Terraform](../terraform_install.md) +- [Install Terraform](terraform_install.md) You need to download and install properly Terraform on your local computer. Simply follow the documentation depending on your operating system (Linux, MAC and Windows). @@ -262,7 +262,7 @@ After deployments, take note of the 3Node's IPv4 address. You will need this add ## SSH into the 3Node -* To [SSH into the 3Node](../../getstarted/ssh_guide/ssh_guide.md), write the following: +* To [SSH into the 3Node](ssh_guide.md), write the following: * ``` ssh root@VM_IPv4_Address ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_toc.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_toc.md index 4152838..195f04e 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_toc.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_toc.md @@ -4,7 +4,7 @@ We present here different Nextcloud deployments. While this section is focused o

Table of Contents

-- [Nextcloud All-in-One Deployment](./terraform_nextcloud_aio.md) -- [Nextcloud Single Deployment](./terraform_nextcloud_single.md) -- [Nextcloud Redundant Deployment](./terraform_nextcloud_redundant.md) -- [Nextcloud 2-Node VPN Deployment](./terraform_nextcloud_vpn.md) \ No newline at end of file +- [Nextcloud All-in-One Deployment](terraform_nextcloud_aio.md) +- [Nextcloud Single Deployment](terraform_nextcloud_single.md) +- [Nextcloud Redundant Deployment](terraform_nextcloud_redundant.md) +- [Nextcloud 2-Node VPN Deployment](terraform_nextcloud_vpn.md) \ No newline at end of file diff --git a/collections/system_administrators/terraform/advanced/terraform_nomad.md b/collections/system_administrators/terraform/advanced/terraform_nomad.md index debc309..13fbde5 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nomad.md +++ b/collections/system_administrators/terraform/advanced/terraform_nomad.md @@ -42,7 +42,7 @@ Nomad's versatility extends beyond its user-friendliness. It seamlessly handles You need to download and install properly Terraform and Wireguard on your local computer. Simply follow the documentation depending on your operating system (Linux, MAC and Windows). -If you are new to Terraform, feel free to read this basic [Terraform Full VM guide](../terraform_full_vm.md) to get you started. +If you are new to Terraform, feel free to read this basic [Terraform Full VM guide](terraform_full_vm.md) to get you started. @@ -299,7 +299,7 @@ Note that the IP addresses will be shown under `Outputs` after running the comma ### SSH with the Planetary Network -* To [SSH with the Planetary network](../../getstarted/ssh_guide/ssh_openssh.md), write the following with the proper IP address +* To [SSH with the Planetary network](ssh_openssh.md), write the following with the proper IP address * ``` ssh root@planetary_ip ``` @@ -334,7 +334,7 @@ We are now ready to SSH into the client and server nodes with WireGuard. ssh root@wg_ip ``` -You now have an SSH connection access over WireGuard to the client and server nodes of your Nomad cluster. For more information on connecting with WireGuard, read [this documentation](../../getstarted/ssh_guide/ssh_wireguard.md). +You now have an SSH connection access over WireGuard to the client and server nodes of your Nomad cluster. For more information on connecting with WireGuard, read [this documentation](ssh_wireguard.md). diff --git a/collections/system_administrators/terraform/advanced/terraform_provider.md b/collections/system_administrators/terraform/advanced/terraform_provider.md index eafe66c..03ac574 100644 --- a/collections/system_administrators/terraform/advanced/terraform_provider.md +++ b/collections/system_administrators/terraform/advanced/terraform_provider.md @@ -49,5 +49,5 @@ The *_URL variables can be used to override the dafault urls associated with the ## Remarks - Grid terraform provider is hosted on terraform registry [here](https://registry.terraform.io/providers/threefoldtech/grid/latest/docs?pollNotifications=true) -- All provider input variables and their description can be found [here](https://github.com/threefoldtech/terraform-provider-grid/blob/development/docs/index.md) +- All provider input variables and their description can be found [here](index.md) - Capitalized environment variables can be used instead of writing them in the provider (e.g. MNEMONICS) diff --git a/collections/system_administrators/terraform/advanced/terraform_wireguard_ssh.md b/collections/system_administrators/terraform/advanced/terraform_wireguard_ssh.md index 174bc3a..b357ad1 100644 --- a/collections/system_administrators/terraform/advanced/terraform_wireguard_ssh.md +++ b/collections/system_administrators/terraform/advanced/terraform_wireguard_ssh.md @@ -22,7 +22,7 @@ In this ThreeFold Guide, we show how simple it is to deploy a micro VM on the Th ## Prerequisites -* [Install Terraform](../terraform_install.md) +* [Install Terraform](terraform_install.md) * [Install Wireguard](https://www.wireguard.com/install/) You need to download and install properly Terraform and Wireguard on your local computer. Simply follow the linked documentation depending on your operating system (Linux, MAC and Windows). @@ -220,7 +220,7 @@ Note that, at any moment, if you want to see the information on your Terraform d To set the Wireguard connection, on your local computer, you will need to take the Terraform `wg_config` output and create a `wg.conf` file in the directory: `/usr/local/etc/wireguard/wg.conf`. Note that the Terraform output starts and ends with EOT. -For more information on WireGuard, notably in relation to Windows, please read [this documentation](../../getstarted/ssh_guide/ssh_wireguard.md). +For more information on WireGuard, notably in relation to Windows, please read [this documentation](ssh_wireguard.md). * Create a file named `wg.conf` in the directory: `/usr/local/etc/wireguard/wg.conf`. * ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md b/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md index d8d27ea..7c6d3ef 100644 --- a/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md +++ b/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md @@ -23,7 +23,7 @@ Note that this concept can be extended with more than two micro VMs. Once you un ## Prerequisites -* [Install Terraform](../terraform_install.md) +* [Install Terraform](terraform_install.md) * [Install Wireguard](https://www.wireguard.com/install/) You need to download and install properly Terraform and Wireguard on your local computer. Simply follow the linked documentation depending on your operating system (Linux, MAC and Windows). @@ -276,7 +276,7 @@ Note that, at any moment, if you want to see the information on your Terraform d To set the Wireguard connection, on your local computer, you will need to take the terraform `wg_config` output and create a `wg.conf` file in the directory: `/usr/local/etc/wireguard/wg.conf`. Note that the Terraform output starts and ends with EOT. -For more information on WireGuard, notably in relation to Windows, please read [this documentation](../../getstarted/ssh_guide/ssh_wireguard.md). +For more information on WireGuard, notably in relation to Windows, please read [this documentation](ssh_wireguard.md). * Create a file named `wg.conf` in the directory: `/usr/local/etc/wireguard/wg.conf`. * ``` diff --git a/collections/system_administrators/terraform/resources/terraform_k8s.md b/collections/system_administrators/terraform/resources/terraform_k8s.md index 2b3f992..7f0f004 100644 --- a/collections/system_administrators/terraform/resources/terraform_k8s.md +++ b/collections/system_administrators/terraform/resources/terraform_k8s.md @@ -199,7 +199,7 @@ We will be mainly interested in the master node public ip `computed IP` and the ## More Info -A complete list of k8s resource parameters can be found [here](https://github.com/threefoldtech/terraform-provider-grid/blob/development/docs/resources/kubernetes.md). +A complete list of k8s resource parameters can be found [here](kubernetes.md). ## Demo Video diff --git a/collections/system_administrators/terraform/resources/terraform_qsfs.md b/collections/system_administrators/terraform/resources/terraform_qsfs.md index 3dcffc7..ff125ef 100644 --- a/collections/system_administrators/terraform/resources/terraform_qsfs.md +++ b/collections/system_administrators/terraform/resources/terraform_qsfs.md @@ -2,8 +2,8 @@

Table of Contents

-- [QSFS on Micro VM](./terraform_qsfs_on_microvm.md) -- [QSFS on Full VM](./terraform_qsfs_on_full_vm.md) +- [QSFS on Micro VM](terraform_qsfs_on_microvm.md) +- [QSFS on Full VM](terraform_qsfs_on_full_vm.md) *** diff --git a/collections/system_administrators/terraform/resources/terraform_qsfs_on_full_vm.md b/collections/system_administrators/terraform/resources/terraform_qsfs_on_full_vm.md index 8fe3628..d68973b 100644 --- a/collections/system_administrators/terraform/resources/terraform_qsfs_on_full_vm.md +++ b/collections/system_administrators/terraform/resources/terraform_qsfs_on_full_vm.md @@ -23,7 +23,7 @@ The main goal of this guide is to show you all the necessary steps to deploy a F ## Prerequisites -- [Install Terraform](../terraform_install.md) +- [Install Terraform](terraform_install.md) You need to download and install properly Terraform. Simply follow the documentation depending on your operating system (Linux, MAC and Windows). @@ -36,7 +36,7 @@ Deploying a FullVM is a bit different than deploying a MicroVM, let take a look - QSFS disk is based on `virtiofs`, and you can't use QSFS disk as the first mount in a FullVM, instead you need a regular disk. - Any extra disks/mounts will be available on the vm but unlike mounts on MicroVMs, extra disks won't be mounted automatically. you will need to mount it manually after the deployment. -Let modify the qsfs-on-microVM [example](./terraform_qsfs_on_microvm.md) to deploy a QSFS on FullVM this time: +Let modify the qsfs-on-microVM [example](terraform_qsfs_on_microvm.md) to deploy a QSFS on FullVM this time: - Inside the `grid_deployment` resource we will need to add a disk for the vm root fs. diff --git a/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md b/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md index 9b3a609..dcc2a18 100644 --- a/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md +++ b/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md @@ -23,7 +23,7 @@ In this ThreeFold Guide, we will learn how to deploy a Quantum Safe File System In this guide, we will be using Terraform to deploy a QSFS workload on a micro VM that runs on the TFGrid. Make sure to have the latest Terraform version. -- [Install Terraform](../terraform_install.md) +- [Install Terraform](terraform_install.md) diff --git a/collections/system_administrators/terraform/resources/terraform_resources_readme.md b/collections/system_administrators/terraform/resources/terraform_resources_readme.md index 6f11322..abf43bc 100644 --- a/collections/system_administrators/terraform/resources/terraform_resources_readme.md +++ b/collections/system_administrators/terraform/resources/terraform_resources_readme.md @@ -2,12 +2,12 @@

Table of Contents

-- [Using Scheduler](./terraform_scheduler.md) +- [Using Scheduler](terraform_scheduler.md) - [Virtual Machine](./terraform_vm.html) - [Web Gateway](./terraform_vm_gateway.html) - [Kubernetes Cluster](./terraform_k8s.html) - [ZDB](./terraform_zdb.html) -- [Quantum Safe Filesystem](./terraform_qsfs.md) - - [QSFS on Micro VM](./terraform_qsfs_on_microvm.md) - - [QSFS on Full VM](./terraform_qsfs_on_full_vm.md) +- [Quantum Safe Filesystem](terraform_qsfs.md) + - [QSFS on Micro VM](terraform_qsfs_on_microvm.md) + - [QSFS on Full VM](terraform_qsfs_on_full_vm.md) - [CapRover](./terraform_caprover.html) diff --git a/collections/system_administrators/terraform/resources/terraform_vm.md b/collections/system_administrators/terraform/resources/terraform_vm.md index 1b88f43..03ab0db 100644 --- a/collections/system_administrators/terraform/resources/terraform_vm.md +++ b/collections/system_administrators/terraform/resources/terraform_vm.md @@ -171,7 +171,7 @@ It's bit long for sure but let's try to dissect it a bit ## Which flists to use -see [list of flists](../../../developers/flist/grid3_supported_flists.md) +see [list of flists](grid3_supported_flists.md) ## Remark multiple VMs @@ -204,7 +204,7 @@ So to add a VM ``` - We give it a name within our deployment `vm1` -- `flist` is used to define the flist to run within the VM. Check the [list of flists](../../../developers/flist/grid3_supported_flists.md) +- `flist` is used to define the flist to run within the VM. Check the [list of flists](grid3_supported_flists.md) - `cpu` and `memory` are used to define the cpu and memory - `publicip` is usued to define if it requires a public IP or not - `entrypoint` is used define the entrypoint which in most of the cases in `/sbin/zinit init`, but in case of flists based on vms it can be specific to each flist diff --git a/collections/system_administrators/terraform/resources/terraform_vm_gateway.md b/collections/system_administrators/terraform/resources/terraform_vm_gateway.md index d7feb5d..d7dc709 100644 --- a/collections/system_administrators/terraform/resources/terraform_vm_gateway.md +++ b/collections/system_administrators/terraform/resources/terraform_vm_gateway.md @@ -15,7 +15,7 @@ In this section, we provide the basic information for a VM web gateway using Ter ## Expose with Prefix -A complete list of gateway name workload parameters can be found [here](https://github.com/threefoldtech/terraform-provider-grid/blob/development/docs/resources/name_proxy.md). +A complete list of gateway name workload parameters can be found [here](name_proxy.md). ``` terraform { @@ -93,7 +93,7 @@ Here ## Expose with Full Domain -A complete list of gateway fqdn workload parameters can be found [here](https://github.com/threefoldtech/terraform-provider-grid/blob/development/docs/resources/fqdn_proxy.md). +A complete list of gateway fqdn workload parameters can be found [here](fqdn_proxy.md). it is more like the above example the only difference is you need to create an `A record` on your name provider for `remote.omar.grid.tf` to gateway node `7` IPv4. diff --git a/collections/system_administrators/terraform/terraform_basics.md b/collections/system_administrators/terraform/terraform_basics.md index 4102d2a..9d6e34e 100644 --- a/collections/system_administrators/terraform/terraform_basics.md +++ b/collections/system_administrators/terraform/terraform_basics.md @@ -24,14 +24,14 @@ We cover some important aspects of Terraform deployments on the ThreeFold Grid. -For a complete guide on deploying a full VM on the TFGrid, read [this documentation](./terraform_full_vm.md). +For a complete guide on deploying a full VM on the TFGrid, read [this documentation](terraform_full_vm.md). ## Requirements Here are the requirements to use Terraform on the TFGrid: -- [Set your TFGrid account](../getstarted/tfgrid3_getstarted.md) -- [Install Terraform](../terraform/terraform_install.md) +- [Set your TFGrid account](tfgrid3_getstarted.md) +- [Install Terraform](terraform_install.md) ## Basic Commands @@ -48,7 +48,7 @@ Here are some very useful commands to use with Terraform: There are two options when it comes to finding a node to deploy on. You can use the scheduler or search for a node with the Nodes Explorer. -- Use the [scheduler](resources/terraform_scheduler.md) +- Use the [scheduler](terraform_scheduler.md) - Scheduler will help you find a node that matches your criteria - Use the Nodes Explorer - You can check the [Node Finder](dashboard@@node_finder) to know which nodes fits your deployment criteria. @@ -117,7 +117,7 @@ When writing the main file, you can decide to leave a variable content empty. In export NETWORK="..." ``` -For more info, consult the [Provider Manual](./advanced/terraform_provider.md). +For more info, consult the [Provider Manual](terraform_provider.md). ### Output Section @@ -184,4 +184,4 @@ This gives you the following benefits: ## Conclusion -This was a quick introduction to Terraform, for a complete guide, please read [this documentation](./terraform_full_vm.md). For advanced tutorials and deployments, read [this section](./advanced/terraform_advanced_readme.md). To learn more about the different resources to deploy with Terraform on the TFGrid, read [this section](./resources/terraform_resources_readme.md). \ No newline at end of file +This was a quick introduction to Terraform, for a complete guide, please read [this documentation](terraform_full_vm.md). For advanced tutorials and deployments, read [this section](terraform_advanced_readme.md). To learn more about the different resources to deploy with Terraform on the TFGrid, read [this section](terraform_resources_readme.md). \ No newline at end of file diff --git a/collections/system_administrators/terraform/terraform_full_vm.md b/collections/system_administrators/terraform/terraform_full_vm.md index 42ceee2..860fc76 100644 --- a/collections/system_administrators/terraform/terraform_full_vm.md +++ b/collections/system_administrators/terraform/terraform_full_vm.md @@ -42,7 +42,7 @@ Once this is done, initialize and apply Terraform to deploy your workload, then ## Prerequisites -- [Install Terraform](./terraform_install.md) +- [Install Terraform](terraform_install.md) You need to download and install properly Terraform. Simply follow the documentation depending on your operating system (Linux, MAC and Windows). @@ -58,7 +58,7 @@ We present two options to find a suitable node: the scheduler and the TFGrid Exp ### Using the Grid Scheduler -Using the TFGrid scheduler can be very efficient depending on what you are trying to achieve. To learn more about the scheduler, please refer to this [Scheduler Guide](resources/terraform_scheduler.md). +Using the TFGrid scheduler can be very efficient depending on what you are trying to achieve. To learn more about the scheduler, please refer to this [Scheduler Guide](terraform_scheduler.md). @@ -254,7 +254,7 @@ After deployments, take note of the 3Node' IPv4 address. You will need this addr ## SSH into the 3Node -- To [SSH into the 3Node](../getstarted/ssh_guide/ssh_guide.md), write the following: +- To [SSH into the 3Node](ssh_guide.md), write the following: - ``` ssh root@VM_IPv4_Address ``` diff --git a/collections/system_administrators/terraform/terraform_get_started.md b/collections/system_administrators/terraform/terraform_get_started.md index a4693da..98036cd 100644 --- a/collections/system_administrators/terraform/terraform_get_started.md +++ b/collections/system_administrators/terraform/terraform_get_started.md @@ -56,7 +56,7 @@ export NETWORK="....." ``` -For more info see [Provider Manual](./advanced/terraform_provider.md) +For more info see [Provider Manual](terraform_provider.md) ### output section @@ -84,4 +84,4 @@ Output parameters show what has been done: ### Which flists to use in VM -see [list of flists](../manual3_iac/grid3_supported_flists.md) +see [list of flists](grid3_supported_flists.md) diff --git a/collections/system_administrators/terraform/terraform_toc.md b/collections/system_administrators/terraform/terraform_toc.md index 15a7c78..dbccb0c 100644 --- a/collections/system_administrators/terraform/terraform_toc.md +++ b/collections/system_administrators/terraform/terraform_toc.md @@ -2,33 +2,33 @@

Table of Contents

-- [Overview](./terraform_readme.md) -- [Installing Terraform](./terraform_install.md) -- [Terraform Basics](./terraform_basics.md) -- [Full VM Deployment](./terraform_full_vm.md) -- [GPU Support](./terraform_gpu_support.md) -- [Resources](./resources/terraform_resources_readme.md) - - [Using Scheduler](./resources/terraform_scheduler.md) - - [Virtual Machine](./resources/terraform_vm.md) - - [Web Gateway](./resources/terraform_vm_gateway.md) - - [Kubernetes Cluster](./resources/terraform_k8s.md) - - [ZDB](./resources/terraform_zdb.md) - - [Quantum Safe Filesystem](./resources/terraform_qsfs.md) -- [QSFS on Micro VM](./resources/terraform_qsfs_on_microvm.md) -- [QSFS on Full VM](./resources/terraform_qsfs_on_full_vm.md) - - [CapRover](./resources/terraform_caprover.md) -- [Advanced](./advanced/terraform_advanced_readme.md) - - [Terraform Provider](./advanced/terraform_provider.md) - - [Terraform Provisioners](./advanced/terraform_provisioners.md) - - [Mounts](./advanced/terraform_mounts.md) - - [Capacity Planning](./advanced/terraform_capacity_planning.md) - - [Updates](./advanced/terraform_updates.md) - - [SSH Connection with Wireguard](./advanced/terraform_wireguard_ssh.md) - - [Set a Wireguard VPN](./advanced/terraform_wireguard_vpn.md) - - [Synced MariaDB Databases](./advanced/terraform_mariadb_synced_databases.md) - - [Nomad](./advanced/terraform_nomad.md) - - [Nextcloud Deployments](./advanced/terraform_nextcloud_toc.md) - - [Nextcloud All-in-One Deployment](./advanced/terraform_nextcloud_aio.md) - - [Nextcloud Single Deployment](./advanced/terraform_nextcloud_single.md) - - [Nextcloud Redundant Deployment](./advanced/terraform_nextcloud_redundant.md) - - [Nextcloud 2-Node VPN Deployment](./advanced/terraform_nextcloud_vpn.md) \ No newline at end of file +- [Overview](terraform_readme.md) +- [Installing Terraform](terraform_install.md) +- [Terraform Basics](terraform_basics.md) +- [Full VM Deployment](terraform_full_vm.md) +- [GPU Support](terraform_gpu_support.md) +- [Resources](terraform_resources_readme.md) + - [Using Scheduler](terraform_scheduler.md) + - [Virtual Machine](terraform_vm.md) + - [Web Gateway](terraform_vm_gateway.md) + - [Kubernetes Cluster](terraform_k8s.md) + - [ZDB](terraform_zdb.md) + - [Quantum Safe Filesystem](terraform_qsfs.md) +- [QSFS on Micro VM](terraform_qsfs_on_microvm.md) +- [QSFS on Full VM](terraform_qsfs_on_full_vm.md) + - [CapRover](terraform_caprover.md) +- [Advanced](terraform_advanced_readme.md) + - [Terraform Provider](terraform_provider.md) + - [Terraform Provisioners](terraform_provisioners.md) + - [Mounts](terraform_mounts.md) + - [Capacity Planning](terraform_capacity_planning.md) + - [Updates](terraform_updates.md) + - [SSH Connection with Wireguard](terraform_wireguard_ssh.md) + - [Set a Wireguard VPN](terraform_wireguard_vpn.md) + - [Synced MariaDB Databases](terraform_mariadb_synced_databases.md) + - [Nomad](terraform_nomad.md) + - [Nextcloud Deployments](terraform_nextcloud_toc.md) + - [Nextcloud All-in-One Deployment](terraform_nextcloud_aio.md) + - [Nextcloud Single Deployment](terraform_nextcloud_single.md) + - [Nextcloud Redundant Deployment](terraform_nextcloud_redundant.md) + - [Nextcloud 2-Node VPN Deployment](terraform_nextcloud_vpn.md) \ No newline at end of file diff --git a/collections/tech/innovations/key_innovations_overview.md b/collections/tech/innovations/key_innovations_overview.md index 20c07b3..5ee8c07 100644 --- a/collections/tech/innovations/key_innovations_overview.md +++ b/collections/tech/innovations/key_innovations_overview.md @@ -1,15 +1,15 @@ -

Key Innovations

- -Throughout the years, we've built innovative products that are now part of a whole ecosystem. - -![](dream_comes_true.png) - -

Table of Contents

- -- [Mycelium: a new network layer for the internet](mycelium_innovation.md) -- [Zero-OS: a minimalistic and more efficient server operating system](zos_innovation) -- [Quantum Safe Storage](zstor_innovation.md) -- [Quantum Safe Filesystem](qsfs_innovation.md) -- [FList: a new way to deal with OS Images](flist_innovation.md) -- [FungiStor](fungistor_innovation.md) +

Key Innovations

+ +Throughout the years, we've built innovative products that are now part of a whole ecosystem. + +![](dream_comes_true.png) + +

Table of Contents

+ +- [Mycelium: a new network layer for the internet](mycelium_innovation.md) +- [Zero-OS: a minimalistic and more efficient server operating system](zos_innovation) +- [Quantum Safe Storage](zstor_innovation.md) +- [Quantum Safe Filesystem](qsfs_innovation.md) +- [FList: a new way to deal with OS Images](flist_innovation.md) +- [FungiStor](fungistor_innovation.md) - [Network Wall](network_wall_innovation.md) \ No newline at end of file diff --git a/collections/tech/innovations/mycelium_innovation_short.md b/collections/tech/innovations/mycelium_innovation_short.md index c982d6d..9b58836 100644 --- a/collections/tech/innovations/mycelium_innovation_short.md +++ b/collections/tech/innovations/mycelium_innovation_short.md @@ -1,25 +1,25 @@ - -### The Problem - -The current centralized state of the internet poses significant security risks, with compromised routers and growing cyber threats (trillions of USD per year now), making everyone vulnerable to hacking. Industry responses involve disabling original features, hindering true peer-to-peer connectivity and personal server capabilities. Workarounds and system hacks have become the norm. - -**Our Internet is seriously broken. We need new ways to communicate** - -### Introducing Mycelium - -Mycelium is an overlay network layer designed to enhance the existing internet infrastructure while remaining compatible with all current applications. It empowers true peer-to-peer communication. By installing a Network Agent on your device, you gain the ability to securely connect with any other participant on this network. Mycelium intelligently reroutes traffic to maintain connectivity taking location of you and your peer into consideration. - -### The Benefits - -- **Continuous connectivity:** Mycelium ensures uninterrupted connectivity by dynamically rerouting traffic through available connections (friends, satellites, 4/5G, fiber). -- **End-to-end encryption:** robust encryption stops man-in-the-middle attacks, guaranteeing secure communication. -- **Proof of authenticity ([POA](p2p:poa.md))**: ensures that we know who we are communicating with -- **Optimized routing:** Mycelium finds the shortest path between network participants, reducing latency and keeping traffic localized. -- **Universal server capability:** empowers individuals to act as servers, a foundational element for any peer-to-peer system. -- **Full Compatibility:** Mycelium seamlessly integrates with the current internet, supporting any application. -- **Impressive speed:** achieves 1 Gbps per Network Agent, ensuring rapid data transfer. - -### Status - -In beta and usable from TFGrid 3.13, its our 3e generation approach to networking and took us years to do. We are looking forward to your feedback. - + +### The Problem + +The current centralized state of the internet poses significant security risks, with compromised routers and growing cyber threats (trillions of USD per year now), making everyone vulnerable to hacking. Industry responses involve disabling original features, hindering true peer-to-peer connectivity and personal server capabilities. Workarounds and system hacks have become the norm. + +**Our Internet is seriously broken. We need new ways to communicate** + +### Introducing Mycelium + +Mycelium is an overlay network layer designed to enhance the existing internet infrastructure while remaining compatible with all current applications. It empowers true peer-to-peer communication. By installing a Network Agent on your device, you gain the ability to securely connect with any other participant on this network. Mycelium intelligently reroutes traffic to maintain connectivity taking location of you and your peer into consideration. + +### The Benefits + +- **Continuous connectivity:** Mycelium ensures uninterrupted connectivity by dynamically rerouting traffic through available connections (friends, satellites, 4/5G, fiber). +- **End-to-end encryption:** robust encryption stops man-in-the-middle attacks, guaranteeing secure communication. +- **Proof of authenticity ([POA](p2p:poa.md))**: ensures that we know who we are communicating with +- **Optimized routing:** Mycelium finds the shortest path between network participants, reducing latency and keeping traffic localized. +- **Universal server capability:** empowers individuals to act as servers, a foundational element for any peer-to-peer system. +- **Full Compatibility:** Mycelium seamlessly integrates with the current internet, supporting any application. +- **Impressive speed:** achieves 1 Gbps per Network Agent, ensuring rapid data transfer. + +### Status + +In beta and usable from TFGrid 3.13, its our 3e generation approach to networking and took us years to do. We are looking forward to your feedback. + diff --git a/collections/tech/primitives/primitives.md b/collections/tech/primitives/primitives.md index e83845e..8769ba2 100644 --- a/collections/tech/primitives/primitives.md +++ b/collections/tech/primitives/primitives.md @@ -9,35 +9,35 @@ Any application which can run on linux can run on the TFGrid. ### Compute (uses CU) -- [ZKube](compute/zkube.md) +- [ZKube](zkube.md) - kubernetes deployment -- [ZMachine](compute/zmachine.md) +- [ZMachine](zmachine.md) - the container or virtual machine running inside ZOS -- [CoreX](compute/corex.md) +- [CoreX](corex.md) - process manager (optional), can be used to get remote access to your zmachine A 3Node is a Zero-OS enabled computer which is hosted by any cloud operator. ### There are 4 storage mechanisms which can be used to store your data: -- [ZOS FS](storage/zos_fs.md) +- [ZOS FS](zos_fs.md) - is our dedupe unique filesystem, replaces docker images -- [ZOS Mount](storage/zmount.md) +- [ZOS Mount](zmount.md) - is a mounted disk location on SSD, this can be used as faster storage location -- [Quamtum Safe Filesystem](../qsss/qss_filesystem.md) +- [Quamtum Safe Filesystem](qss_filesystem.md) - this is a super unique storage system, data can never be lost or corrupted. Please be reminded that this storage layer is only meant to be used for secondary storage applications -- [ZOS Disk](storage/zdisk.md) +- [ZOS Disk](zdisk.md) - a virtual disk technology, only for TFTech OEM partners ### There are 4 ways how networks can be connected to a Z-Machine. -- [Planetary network](network/planetary_network.md): +- [Planetary network](planetary_network.md): - is a planetary scalable network, we have clients for windows, osx, android and iphone -- [ZOS Net](network/znet.md): +- [ZOS Net](znet.md): - is a fast end2end encrypted network technology, keep your traffic between your z_machines 100% private -- [ZOS NIC](network/znic.md): +- [ZOS NIC](znic.md): - connection to a public ipaddress -- [WEB GW](network/webgw.md): +- [WEB GW](webgw.md): - web gateway, a secure way to allow internet traffic reach your secure Z-Machine. diff --git a/collections/tech/primitives/storage/qsfs.md b/collections/tech/primitives/storage/qsfs.md index b596424..08b160e 100644 --- a/collections/tech/primitives/storage/qsfs.md +++ b/collections/tech/primitives/storage/qsfs.md @@ -23,7 +23,7 @@ presents itself as a filesystem to the ZMachine. see how its implemented in: -- [Quantum Safe Storage](../../qsss/qsss_home.md) -- [Quantum Safe Filesystem](../../qsss/qss_filesystem.md) -- [Quantum Safe Algo](../../qsss/qss_algorithm.md) +- [Quantum Safe Storage](qsss_home.md) +- [Quantum Safe Filesystem](qss_filesystem.md) +- [Quantum Safe Algo](qss_algorithm.md) diff --git a/collections/tech/primitives/storage/storage.md b/collections/tech/primitives/storage/storage.md index e8dec2e..488113e 100644 --- a/collections/tech/primitives/storage/storage.md +++ b/collections/tech/primitives/storage/storage.md @@ -6,4 +6,4 @@ - [Zero-DB](zdb.md) : the lowest level storage primitive, is a key value stor, used underneath other storage mechanisms typically - [Zero-Disk](zdisk.md) : OEM only, virtual disk format -Uses [Storage Units = SU](../../../grid/concepts/cloudunits.md). \ No newline at end of file +Uses [Storage Units = SU](cloudunits.md). \ No newline at end of file diff --git a/collections/tech/technology_toc.md b/collections/tech/technology_toc.md index 53db78c..b8085da 100644 --- a/collections/tech/technology_toc.md +++ b/collections/tech/technology_toc.md @@ -6,32 +6,32 @@ To build on the ThreeFold Grid, refer to the [Developers](developers@@developers

Table of Contents

-- [Introduction](tech/technology.md) -- [The Internet Today](tech/internet_today.md) - - [History of Computers](tech/history/c64.md) - - [Too Many Layers](tech/history/layers.md) -- [The Internet Re-invented](tech/how_does_it_work.md) - - [World Records](tech/world_records.md) -- [Key Innovations](tech/key_innovations_overview.md) - - [Mycelium Network](tech/mycelium_innovation.md) - - [Zero-OS](tech/zos_innovation.md) - - [Quantum Safe Storage](tech/zstor_innovation.md) - - [Quantum Safe Filesystem](tech/qsfs_innovation.md) - - [FList: Better OS Images](tech/flist_innovation.md) - - [FungiStor](tech/fungistor_innovation.md) - - [Network Wall](tech/network_wall_innovation.md) -- [Architecture](tech/architecture.md) -- [Energy Efficient](tech/energy_efficient.md) -- [Decentralized Cloud Core Capabilities](tech/features.md) - - [Storage](tech/qsss_home.md) - - [Quantum Safe Storage Algo](tech/qss_algorithm.md) - - [Zero Knowledge proof](tech/qss_zero_knowledge_proof.md) - - [NFT Storage](tech/nft_storage.md) +- [Introduction](technology.md) +- [The Internet Today](internet_today.md) + - [History of Computers](c64.md) + - [Too Many Layers](layers.md) +- [The Internet Re-invented](how_does_it_work.md) + - [World Records](world_records.md) +- [Key Innovations](key_innovations_overview.md) + - [Mycelium Network](mycelium_innovation.md) + - [Zero-OS](zos_innovation.md) + - [Quantum Safe Storage](zstor_innovation.md) + - [Quantum Safe Filesystem](qsfs_innovation.md) + - [FList: Better OS Images](flist_innovation.md) + - [FungiStor](fungistor_innovation.md) + - [Network Wall](network_wall_innovation.md) +- [Architecture](architecture.md) +- [Energy Efficient](energy_efficient.md) +- [Decentralized Cloud Core Capabilities](features.md) + - [Storage](qsss_home.md) + - [Quantum Safe Storage Algo](qss_algorithm.md) + - [Zero Knowledge proof](qss_zero_knowledge_proof.md) + - [NFT Storage](nft_storage.md) - [S3 Storage](tech/s3_interface) - - [File System](tech/qss_filesystem.md) - - [Network](tech/networking.md) - - [Mycelium](tech/mycelium.md) - - [Web Gateway](tech/webgw.md) + - [File System](qss_filesystem.md) + - [Network](networking.md) + - [Mycelium](mycelium.md) + - [Web Gateway](webgw.md) - [Partners Utilization](partners_utilization@@partners) - [Sikana](partners_utilization@@sikana) - [Vindo](partners_utilization@@vindo) diff --git a/collections/tech/zos/benefits/unbreakable_storage.md b/collections/tech/zos/benefits/unbreakable_storage.md index e06e85c..69ba1de 100644 --- a/collections/tech/zos/benefits/unbreakable_storage.md +++ b/collections/tech/zos/benefits/unbreakable_storage.md @@ -13,7 +13,7 @@ If you deploy a container with simple disk access, you don’t have it. Performance is around 50MB/second, if a bit more CPU is given for the distributed storage encoder, we achieve this performance. -More info see [Quantum Safe Storage](../../qsss/qsss_home.md). +More info see [Quantum Safe Storage](qsss_home.md). From 6c76ffbfe5e75e3a46db007ab9063a31cb7cabb7 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 10:49:26 -0400 Subject: [PATCH 073/134] manual, test parsing hero mdbook vs mdbook --- .../grid3_javascript_installation.md | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/collections/developers/javascript/grid3_javascript_installation.md b/collections/developers/javascript/grid3_javascript_installation.md index 1fcd64e..99e3943 100644 --- a/collections/developers/javascript/grid3_javascript_installation.md +++ b/collections/developers/javascript/grid3_javascript_installation.md @@ -55,18 +55,34 @@ yarn add @threefold/grid_client To use the Grid Client locally, clone the repository then install the Grid Client: - Clone the repository - - ```bash + ```bash git clone https://github.com/threefoldtech/tfgrid-sdk-ts ``` - Install the Grid Client - With yarn - - ```bash - yarn install - ``` + ```bash + yarn install + ``` - With npm - - ```bash - npm install - ``` + ```bash + npm install + ``` + +--- + +- Clone the repository +```bash + git clone https://github.com/threefoldtech/tfgrid-sdk-ts +``` +- Install the Grid Client + - With yarn +```bash + yarn install +``` + - With npm +```bash + npm install +``` > Note: In the directory **grid_client/scripts**, we provided a set of scripts to test the Grid Client. From 8ac3e56679b6c34490b31da1dd8adb52e2cf8db7 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:13:17 -0400 Subject: [PATCH 074/134] manual, parsing devs --- .../grid3_javascript_installation.md | 32 ++++--------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/collections/developers/javascript/grid3_javascript_installation.md b/collections/developers/javascript/grid3_javascript_installation.md index 99e3943..bac53cf 100644 --- a/collections/developers/javascript/grid3_javascript_installation.md +++ b/collections/developers/javascript/grid3_javascript_installation.md @@ -54,34 +54,16 @@ yarn add @threefold/grid_client To use the Grid Client locally, clone the repository then install the Grid Client: -- Clone the repository - ```bash - git clone https://github.com/threefoldtech/tfgrid-sdk-ts - ``` -- Install the Grid Client - - With yarn - ```bash - yarn install - ``` - - With npm - ```bash - npm install - ``` - ---- - - Clone the repository ```bash git clone https://github.com/threefoldtech/tfgrid-sdk-ts ``` -- Install the Grid Client - - With yarn +- Install the Grid Client with yarn or npm ```bash - yarn install +yarn install ``` - - With npm ```bash - npm install +npm install ``` > Note: In the directory **grid_client/scripts**, we provided a set of scripts to test the Grid Client. @@ -110,11 +92,11 @@ Make sure to set the client configuration properly before using the Grid Client. The easiest way to test the installation is to run the following command with either yarn or npm to generate the Grid Client documentation: * With yarn - * ``` + ``` yarn run serve-docs ``` * With npm - * ``` + ``` npm run serve-docs ``` @@ -127,11 +109,11 @@ You can explore the Grid Client by testing the different scripts proposed in **g - Update your customized deployments specs if needed - Run using [ts-node](https://www.npmjs.com/ts-node) - With yarn - - ```bash + ```bash yarn run ts-node --project tsconfig-node.json scripts/zdb.ts ``` - With npx - - ```bash + ```bash npx ts-node --project tsconfig-node.json scripts/zdb.ts ``` From 4757a8f2916f314716757f086b85f1a1a2b98a4f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:15:27 -0400 Subject: [PATCH 075/134] manual, parsing devs --- .../javascript/grid3_javascript_installation.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/collections/developers/javascript/grid3_javascript_installation.md b/collections/developers/javascript/grid3_javascript_installation.md index bac53cf..bf3b099 100644 --- a/collections/developers/javascript/grid3_javascript_installation.md +++ b/collections/developers/javascript/grid3_javascript_installation.md @@ -109,13 +109,13 @@ You can explore the Grid Client by testing the different scripts proposed in **g - Update your customized deployments specs if needed - Run using [ts-node](https://www.npmjs.com/ts-node) - With yarn - ```bash - yarn run ts-node --project tsconfig-node.json scripts/zdb.ts - ``` + ```bash + yarn run ts-node --project tsconfig-node.json scripts/zdb.ts + ``` - With npx - ```bash - npx ts-node --project tsconfig-node.json scripts/zdb.ts - ``` + ```bash + npx ts-node --project tsconfig-node.json scripts/zdb.ts + ``` ## Reference API From 567c558129f1e73124ade95ab6917eee8dd4ef8b Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:17:07 -0400 Subject: [PATCH 076/134] manual, parsing devs --- .../javascript/grid3_javascript_installation.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/collections/developers/javascript/grid3_javascript_installation.md b/collections/developers/javascript/grid3_javascript_installation.md index bf3b099..2bce32f 100644 --- a/collections/developers/javascript/grid3_javascript_installation.md +++ b/collections/developers/javascript/grid3_javascript_installation.md @@ -107,15 +107,13 @@ The easiest way to test the installation is to run the following command with ei You can explore the Grid Client by testing the different scripts proposed in **grid_client/scripts**. - Update your customized deployments specs if needed -- Run using [ts-node](https://www.npmjs.com/ts-node) - - With yarn - ```bash - yarn run ts-node --project tsconfig-node.json scripts/zdb.ts - ``` - - With npx - ```bash - npx ts-node --project tsconfig-node.json scripts/zdb.ts - ``` +- Run using [ts-node](https://www.npmjs.com/ts-node) with yarn or npx + ```bash + yarn run ts-node --project tsconfig-node.json scripts/zdb.ts + ``` + ```bash + npx ts-node --project tsconfig-node.json scripts/zdb.ts + ``` ## Reference API From 13586b10f080dbc8bf22cf791e569d4c8fe87a1b Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:20:17 -0400 Subject: [PATCH 077/134] manual, parsing devs go --- collections/developers/go/grid3_go_installation.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/collections/developers/go/grid3_go_installation.md b/collections/developers/go/grid3_go_installation.md index c07008c..6ca7085 100644 --- a/collections/developers/go/grid3_go_installation.md +++ b/collections/developers/go/grid3_go_installation.md @@ -22,19 +22,19 @@ Make sure that you have at least Go 1.19 installed on your machine. ## Steps * Create a new directory - * ```bash + ```bash mkdir tf_go_client ``` * Change directory - * ```bash + ```bash cd tf_go_client ``` * Creates a **go.mod** file to track the code's dependencies - * ```bash + ```bash go mod init main ``` * Install the Grid3 Go Client - * ```bash + ```bash go get github.com/threefoldtech/tfgrid-sdk-go/grid-client ``` From 2a6d648401fef7227f412fed903817f9c19ad7ff Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:27:10 -0400 Subject: [PATCH 078/134] manual, parsing devs tfcmd --- collections/developers/tfcmd/tfcmd_basics.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collections/developers/tfcmd/tfcmd_basics.md b/collections/developers/tfcmd/tfcmd_basics.md index 8816eea..406d0f4 100644 --- a/collections/developers/tfcmd/tfcmd_basics.md +++ b/collections/developers/tfcmd/tfcmd_basics.md @@ -21,11 +21,11 @@ TFCMD is available as binaries. Make sure to download the latest release and to An easy way to use TFCMD is to download and extract the TFCMD binaries to your path. - Download latest release from [releases](https://github.com/threefoldtech/tfgrid-sdk-go/releases) - - ``` + ``` wget ``` - Extract the binaries - - ``` + ``` tar -xvf ``` - Move `tfcmd` to any `$PATH` directory: From 422308e09583e7a9d5baf78cc1f243883784f394 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:28:36 -0400 Subject: [PATCH 079/134] manual, parsing devs tfcmd --- collections/developers/tfcmd/tfcmd_basics.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collections/developers/tfcmd/tfcmd_basics.md b/collections/developers/tfcmd/tfcmd_basics.md index 406d0f4..8816eea 100644 --- a/collections/developers/tfcmd/tfcmd_basics.md +++ b/collections/developers/tfcmd/tfcmd_basics.md @@ -21,11 +21,11 @@ TFCMD is available as binaries. Make sure to download the latest release and to An easy way to use TFCMD is to download and extract the TFCMD binaries to your path. - Download latest release from [releases](https://github.com/threefoldtech/tfgrid-sdk-go/releases) - ``` + - ``` wget ``` - Extract the binaries - ``` + - ``` tar -xvf ``` - Move `tfcmd` to any `$PATH` directory: From 80fbabab10de2ed301f22778b871eb5cb08fc335 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:30:30 -0400 Subject: [PATCH 080/134] manual, parsing devs tfcmd --- collections/developers/tfcmd/tfcmd_basics.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/collections/developers/tfcmd/tfcmd_basics.md b/collections/developers/tfcmd/tfcmd_basics.md index 8816eea..2edecb3 100644 --- a/collections/developers/tfcmd/tfcmd_basics.md +++ b/collections/developers/tfcmd/tfcmd_basics.md @@ -21,17 +21,17 @@ TFCMD is available as binaries. Make sure to download the latest release and to An easy way to use TFCMD is to download and extract the TFCMD binaries to your path. - Download latest release from [releases](https://github.com/threefoldtech/tfgrid-sdk-go/releases) - - ``` - wget - ``` + ``` + wget + ``` - Extract the binaries - - ``` - tar -xvf - ``` + ``` + tar -xvf + ``` - Move `tfcmd` to any `$PATH` directory: - ```bash - mv tfcmd /usr/local/bin - ``` + ``` + mv tfcmd /usr/local/bin + ``` ## Login From ca99c4cda4262257b5cd8d4ec95deaf74dc91684 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:33:41 -0400 Subject: [PATCH 081/134] manual, parsing devs tfrobot --- collections/developers/tfrobot/tfrobot_installation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/developers/tfrobot/tfrobot_installation.md b/collections/developers/tfrobot/tfrobot_installation.md index deec2b8..f020750 100644 --- a/collections/developers/tfrobot/tfrobot_installation.md +++ b/collections/developers/tfrobot/tfrobot_installation.md @@ -23,14 +23,14 @@ To install TFROBOT, simply download and extract the TFROBOT binaries to your pat cd tfgrid-sdk-go ``` - Download latest release from [releases](https://github.com/threefoldtech/tfgrid-sdk-go/releases) - - ``` + ``` wget https://github.com/threefoldtech/tfgrid-sdk-go/releases/download/v0.14.4/tfgrid-sdk-go_Linux_x86_64.tar.gz ``` - Extract the binaries - - ``` + ``` tar -xvf tfgrid-sdk-go_Linux_x86_64.tar.gz ``` - Move `tfrobot` to any `$PATH` directory: - ```bash + ``` mv tfrobot /usr/local/bin ``` \ No newline at end of file From 38f65801adb038fe24a97a07f220541f6e1dc6c0 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:54:28 -0400 Subject: [PATCH 082/134] manual, parsing devs flist --- .../flist_debian_case_study.md | 50 +++++++++---------- .../developers/flist/flist_hub/zos_hub.md | 8 +-- collections/developers/proxy/proxy.md | 16 +++--- 3 files changed, 36 insertions(+), 38 deletions(-) diff --git a/collections/developers/flist/flist_case_studies/flist_debian_case_study.md b/collections/developers/flist/flist_case_studies/flist_debian_case_study.md index 3777433..4a8c1a1 100644 --- a/collections/developers/flist/flist_case_studies/flist_debian_case_study.md +++ b/collections/developers/flist/flist_case_studies/flist_debian_case_study.md @@ -223,27 +223,27 @@ You now have access to the Docker Hub from your local computer. We will then pro * Make sure the Docker Daemon is running * Build the docker container * Template: - * ``` - docker build -t / . - ``` + ``` + docker build -t / . + ``` * Example: - * ``` - docker build -t username/debian12 . - ``` + ``` + docker build -t username/debian12 . + ``` * Push the docker container to the [Docker Hub](https://hub.docker.com/) * Template: - * ``` - docker push / - ``` + ``` + docker push / + ``` * Example: - * ``` - docker push username/debian12 - ``` + ``` + docker push username/debian12 + ``` * You should now see your docker image on the [Docker Hub](https://hub.docker.com/) when you go into the menu option `My Profile`. * Note that you can access this link quickly with the following template: - * ``` - https://hub.docker.com/u/ - ``` + ``` + https://hub.docker.com/u/ + ``` @@ -265,13 +265,13 @@ We will now convert the Docker image into a Zero-OS flist. This part is so easy * Under `Name`, you will see all your available flists. * Right-click on the flist you want and select `Copy Clean Link`. This URL will be used when deploying on the ThreeFold Playground. We show below the template and an example of what the flist URL looks like. * Template: - * ``` - https://hub.grid.tf/<3BOT_name.3bot>/--.flist - ``` + ``` + https://hub.grid.tf/<3BOT_name.3bot>/--.flist + ``` * Example: - * ``` - https://hub.grid.tf/idrnd.3bot/username-debian12-latest.flist - ``` + ``` + https://hub.grid.tf/idrnd.3bot/username-debian12-latest.flist + ``` @@ -283,16 +283,14 @@ We will now convert the Docker image into a Zero-OS flist. This part is so easy * Choose your parameters (name, VM specs, etc.). * Under `flist`, paste the Debian flist from the TF Hub you copied previously. * Make sure the entrypoint is as follows: - * ``` - /sbin/zinit init - ``` + ``` + /sbin/zinit init + ``` * Choose a 3Node to deploy on * Click `Deploy` That's it! You can now SSH into your Debian deployment and change the world one line of code at a time! -* - ## Conclusion In this case study, we've seen the overall process of creating a new flist to deploy a Debian workload on a Micro VM on the ThreeFold Playground. diff --git a/collections/developers/flist/flist_hub/zos_hub.md b/collections/developers/flist/flist_hub/zos_hub.md index 8f79973..6b14f5a 100644 --- a/collections/developers/flist/flist_hub/zos_hub.md +++ b/collections/developers/flist/flist_hub/zos_hub.md @@ -118,25 +118,25 @@ See example below. The main template to request information from the API is the following: -```bash +``` curl -H "Authorization: bearer " https://hub.grid.tf/api/flist/me/ -X ``` For example, if we take the command `DELETE` of the previous section and we want to delete the flist `example-latest.flist` with the API Token `abc12`, we would write the following line: -```bash +``` curl -H "Authorization: bearer abc12" https://hub.grid.tf/api/flist/me/example-latest.flist -X DELETE ``` As another template example, if we wanted to rename the flist `current-name-latest.flist` to `new-name-latest.flist`, we would use the following template: -```bash +``` curl -H "Authorization: bearer " https://hub.grid.tf/api/flist/me//rename/ -X GET ``` To upload an flist to the ZOS Hub, you would use the following template: -```bash +``` curl -H "Authorization: bearer " -X POST -F file=@my-local-archive.tar.gz \ https://hub.grid.tf/api/flist/me/upload ``` \ No newline at end of file diff --git a/collections/developers/proxy/proxy.md b/collections/developers/proxy/proxy.md index 8962912..25d5c10 100644 --- a/collections/developers/proxy/proxy.md +++ b/collections/developers/proxy/proxy.md @@ -60,33 +60,33 @@ To start the services for development or testing make sure first you have all th - Clone this repo - ```bash + ``` git clone https://github.com/threefoldtech/tfgrid-sdk-go.git cd tfgrid-sdk-go/grid-proxy ``` - The `Makefile` has all that you need to deal with Db, Explorer, Tests, and Docs. - ```bash + ``` make help # list all the available subcommands. ``` - For a quick test explorer server. - ```bash + ``` make all-start e= ``` Now you can access the server at `http://localhost:8080` - Run the tests - ```bash + ``` make test-all ``` - Generate docs. - ```bash + ``` make docs ``` @@ -108,7 +108,7 @@ For more illustrations about the commands needed to work on the project, see the - You can either build the project: - ```bash + ``` make build chmod +x cmd/proxy_server/server \ && mv cmd/proxy_server/server /usr/local/bin/gridproxy-server @@ -117,7 +117,7 @@ For more illustrations about the commands needed to work on the project, see the - Or download a release: Check the [releases](https://github.com/threefoldtech/tfgrid-sdk-go/releases) page and edit the next command with the chosen version. - ```bash + ``` wget https://github.com/threefoldtech/tfgrid-sdk-go/releases/download/v1.6.7-rc2/tfgridclient_proxy_1.6.7-rc2_linux_amd64.tar.gz \ && tar -xzf tfgridclient_proxy_1.6.7-rc2_linux_amd64.tar.gz \ && chmod +x server \ @@ -128,7 +128,7 @@ For more illustrations about the commands needed to work on the project, see the - Create the service file - ```bash + ``` cat << EOF > /etc/systemd/system/gridproxy-server.service [Unit] Description=grid proxy server From fb521d5446052a557b2ae542182ce5028b86cb74 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 11:57:07 -0400 Subject: [PATCH 083/134] manual, parsing devs flist nc --- .../flist_nextcloud_case_study.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md b/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md index fce105f..a7049be 100644 --- a/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md +++ b/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md @@ -616,25 +616,25 @@ You now have access to the Docker Hub from your local computer. We will then pro * Make sure the Docker Daemon is running * Build the docker container (note that, while the tag is optional, it can help to track different versions) * Template: - * ``` + ``` docker build -t /: . ``` * Example: - * ``` + ``` docker build -t dockerhubuser/nextcloudaio . ``` * Push the docker container to the [Docker Hub](https://hub.docker.com/) * Template: - * ``` + ``` docker push / ``` * Example: - * ``` + ``` docker push dockerhubuser/nextcloudaio ``` * You should now see your docker image on the [Docker Hub](https://hub.docker.com/) when you go into the menu option `My Profile`. * Note that you can access this link quickly with the following template: - * ``` + ``` https://hub.docker.com/u/ ``` @@ -656,11 +656,11 @@ We will now convert the Docker image into a Zero-OS flist. * Under `Name`, you will see all your available flists. * Right-click on the flist you want and select `Copy Clean Link`. This URL will be used when deploying on the ThreeFold Playground. We show below the template and an example of what the flist URL looks like. * Template: - * ``` + ``` https://hub.grid.tf/<3BOT_name.3bot>/--.flist ``` * Example: - * ``` + ``` threefoldtech-nextcloudaio-latest.flist ``` @@ -843,7 +843,7 @@ We now deploy Nextcloud with Terraform. Make sure that you are in the correct fo ``` Note that, at any moment, if you want to see the information on your Terraform deployment, write the following: - * ``` + ``` terraform show ``` From 678ca4b8422977466a685f361bde6992a4f18427 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:00:27 -0400 Subject: [PATCH 084/134] manual, parsing devs flist nc --- .../flist_nextcloud_case_study.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md b/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md index a7049be..78b9897 100644 --- a/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md +++ b/collections/developers/flist/flist_case_studies/flist_nextcloud_case_study.md @@ -833,19 +833,20 @@ output "fqdn" { We now deploy Nextcloud with Terraform. Make sure that you are in the correct folder containing the main and variables files. * Initialize Terraform: - * ``` - terraform init - ``` + ``` + terraform init + ``` * Apply Terraform to deploy Nextcloud: - * ``` - terraform apply - ``` + ``` + terraform apply + ``` Note that, at any moment, if you want to see the information on your Terraform deployment, write the following: - ``` - terraform show - ``` + +``` +terraform show +``` ## Nextcloud Setup From bc773126e098f45cd97ecd67beb89983aa17b911 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:09:00 -0400 Subject: [PATCH 085/134] manual, devs, set internals toc --- collections/developers/internals/internals.md | 23 ++++++++++++++++--- .../developers/internals/rmb/rmb_intro.md | 20 ++++++++-------- .../developers/internals/rmb/rmb_specs.md | 9 ++++---- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/collections/developers/internals/internals.md b/collections/developers/internals/internals.md index ce29a8c..44034d0 100644 --- a/collections/developers/internals/internals.md +++ b/collections/developers/internals/internals.md @@ -4,16 +4,33 @@ We present in this section of the developers book a partial list of system compo

Table of Contents

-- [Reliable Message Bus (RMB)](rmb_toc.md) +- [Reliable Message Bus - RMB](rmb_toc.md) - [Introduction to RMB](rmb_intro.md) - [RMB Specs](rmb_specs.md) - [RMB Peer](peer.md) - [RMB Relay](relay.md) - -- [ZOS](zos_readme.md) +- [Zero-OS](zos_readme.md) - [Manual](manual.md) - [Workload Types](workload_types.md) - [Internal Modules](internals.md) + - [Identity](identity_readme.md) + - [Node ID Generation](identity.md) + - [Node Upgrade](upgrade.md) + - [Node](node_readme.md) + - [Storage](storage_readme.md) + - [Network](network_readme.md) + - [Introduction](introduction.md) + - [Definitions](definitions.md) + - [Mesh](mesh.md) + - [Setup](setup_farm_network.md) + - [Flist](flist_readme.md) + - [Container](container_readme.md) + - [VM](vmd_readme.md) + - [Provision](provision_readme.md) - [Capacity](capacity.md) - [Performance Monitor Package](performance.md) + - [Public IPs Validation Task](publicips.md) + - [CPUBenchmark](cpubench.md) + - [IPerf](iperf.md) + - [Health Check](healthcheck.md) - [API](api.md) \ No newline at end of file diff --git a/collections/developers/internals/rmb/rmb_intro.md b/collections/developers/internals/rmb/rmb_intro.md index 23ec314..6062195 100644 --- a/collections/developers/internals/rmb/rmb_intro.md +++ b/collections/developers/internals/rmb/rmb_intro.md @@ -14,7 +14,7 @@ - [Building](#building) - [Running tests](#running-tests) -*** +--- ## What is RMB @@ -27,7 +27,7 @@ Out of the box RMB provides the following: - Support for 3rd party hosted relays. Anyone can host a relay and people can use it safely since there is no way messages can be inspected while using e2e. That's similar to `home` servers by `matrix` ![layout](img/layout.png) -*** + ## Why RMB is developed by ThreefoldTech to create a global network of nodes that are available to host capacity. Each node will act like a single bot where you can ask to host your capacity. This enforced a unique set of requirements: @@ -45,17 +45,17 @@ Starting from this we came up with a more detailed requirements: - Then each message then can be signed by the `bot` keys, hence make it easy to verify the identity of the sender of a message. This is done both ways. - To support federation (using 3rd party relays) we needed to add e2e encryption to make sure messages that are surfing the public internet can't be sniffed - e2e encryption is done by deriving an encryption key from the same identity seed, and share the public key on `tfchain` hence it's available to everyone to use -*** + ## Specifications For details about protocol itself please check the [specs](rmb_specs.md). -*** + ## How to Use RMB There are many ways to use `rmb` because it was built for `bots` and software to communicate. Hence, there is no mobile app for it for example, but instead a set of libraries where you can use to connect to the network, make chitchats with other bots then exit. Or you can keep the connection forever to answer other bots requests if you are providing a service. -*** + ## Libraries If there is a library in your preferred language, then you are in luck! Simply follow the library documentations to implement a service bot, or to make requests to other bots. @@ -64,14 +64,14 @@ If there is a library in your preferred language, then you are in luck! Simply f - Golang [rmb-sdk-go](https://github.com/threefoldtech/rmb-sdk-go) - Typescript [rmb-sdk-ts](https://github.com/threefoldtech/rmb-sdk-ts) -*** + ### No Known Libraries If there are no library in your preferred language, here's what you can do: - Implement a library in your preferred language - If it's too much to do all the signing, verification, e2e in your language then use `rmb-peer` -*** + ## What is rmb-peer think of `rmb-peer` as a gateway that stands between you and the `relay`. `rmb-peer` uses your mnemonics (your identity secret key) to assume your identity and it connects to the relay on your behalf, it maintains the connection forever and takes care of @@ -85,11 +85,11 @@ Then it provide a simple (plain-text) api over `redis`. means to send messages ( > More details can be found [here](rmb_specs.md) -*** + ## Download Please check the latest [releases](https://github.com/threefoldtech/rmb-rs/releases) normally you only need the `rmb-peer` binary, unless you want to host your own relay. -*** + ## Building ```bash @@ -97,7 +97,7 @@ git clone git@github.com:threefoldtech/rmb-rs.git cd rmb-rs cargo build --release --target=x86_64-unknown-linux-musl ``` -*** + ## Running tests While inside the repository diff --git a/collections/developers/internals/rmb/rmb_specs.md b/collections/developers/internals/rmb/rmb_specs.md index 2d28cbe..c6878ea 100644 --- a/collections/developers/internals/rmb/rmb_specs.md +++ b/collections/developers/internals/rmb/rmb_specs.md @@ -15,7 +15,7 @@ - [End2End Encryption](#end2end-encryption) - [Rate Limiting](#rate-limiting) -*** +--- # Introduction @@ -51,7 +51,7 @@ On the relay, the relay checks federation information set on the envelope and th When the relay receive a message that is destined to a `local` connected client, it queue it for delivery. The relay can maintain a queue of messages per twin to a limit. If the twin does not come back online to consume queued messages, the relay will start to drop messages for that specific twin client. Once a twin come online and connect to its peer, the peer will receive all queued messages. the messages are pushed over the web-socket as they are received. the client then can decide how to handle them (a message can be a request or a response). A message type can be inspected as defined by the schema. -*** + # Overview of the Operation of RMB Relay ![relay](img/relay.png) @@ -201,7 +201,6 @@ A response message is defined as follows this is what is sent as a response by a Your bot (server) need to make sure to set `destination` to the same value as the incoming request `source` -The > this response is what is pushed to `msgbus.system.reply` ```rust @@ -223,7 +222,7 @@ pub struct JsonOutgoingResponse { pub error: Option, } ``` -*** + # End2End Encryption Relay is totally opaque to the messages. Our implementation of the relay does not poke into messages except for the routing attributes (source, and destinations addresses, and federation information). But since the relay is designed to be hosted by other 3rd parties (hence federation) you should @@ -246,7 +245,7 @@ As you already understand e2e is completely up to the peers to implement, and ev - derive the same shared key - `shared = ecdh(B.sk, A.pk)` - `plain-data = aes-gcm.decrypt(shared-key, nonce, encrypted)` -*** + # Rate Limiting To avoid abuse of the server, and prevent DoS attacks on the relay, a rate limiter is used to limit the number of clients' requests.\ From 075e8453eafaf813a11dc0832833c5d4937f876f Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:11:12 -0400 Subject: [PATCH 086/134] manual, devs, set internals toc --- collections/developers/internals/internals.md | 23 +++---------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/collections/developers/internals/internals.md b/collections/developers/internals/internals.md index 44034d0..ce29a8c 100644 --- a/collections/developers/internals/internals.md +++ b/collections/developers/internals/internals.md @@ -4,33 +4,16 @@ We present in this section of the developers book a partial list of system compo

Table of Contents

-- [Reliable Message Bus - RMB](rmb_toc.md) +- [Reliable Message Bus (RMB)](rmb_toc.md) - [Introduction to RMB](rmb_intro.md) - [RMB Specs](rmb_specs.md) - [RMB Peer](peer.md) - [RMB Relay](relay.md) -- [Zero-OS](zos_readme.md) + +- [ZOS](zos_readme.md) - [Manual](manual.md) - [Workload Types](workload_types.md) - [Internal Modules](internals.md) - - [Identity](identity_readme.md) - - [Node ID Generation](identity.md) - - [Node Upgrade](upgrade.md) - - [Node](node_readme.md) - - [Storage](storage_readme.md) - - [Network](network_readme.md) - - [Introduction](introduction.md) - - [Definitions](definitions.md) - - [Mesh](mesh.md) - - [Setup](setup_farm_network.md) - - [Flist](flist_readme.md) - - [Container](container_readme.md) - - [VM](vmd_readme.md) - - [Provision](provision_readme.md) - [Capacity](capacity.md) - [Performance Monitor Package](performance.md) - - [Public IPs Validation Task](publicips.md) - - [CPUBenchmark](cpubench.md) - - [IPerf](iperf.md) - - [Health Check](healthcheck.md) - [API](api.md) \ No newline at end of file From 1fe25a93fbba7f5b7d784b1540d6dd6c3c66be9d Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:16:59 -0400 Subject: [PATCH 087/134] manual, devs, grid deployment --- .../developers/grid_deployment/snapshots.md | 96 +++++++++---------- collections/developers/internals/internals.md | 2 +- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/collections/developers/grid_deployment/snapshots.md b/collections/developers/grid_deployment/snapshots.md index f88da46..a0da310 100644 --- a/collections/developers/grid_deployment/snapshots.md +++ b/collections/developers/grid_deployment/snapshots.md @@ -65,30 +65,30 @@ You can set a cron job to execute a script running rsync to create the snapshots - First download the script. - Main net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/create_snapshot.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/create_snapshot.sh +``` - Test net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/create_snapshot.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/create_snapshot.sh +``` - Dev net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/create_snapshot.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/create_snapshot.sh +``` - Set the permissions of the script - ``` - chmod +x create_snapshot.sh - ``` +``` +chmod +x create_snapshot.sh +``` - Make sure to a adjust the snapshot creation script for your specific deployment - Set a cron job - ``` - crontab -e - ``` +``` +crontab -e +``` - Here is an example of a cron job where we execute the script every day at 1 AM and send the logs to `/var/log/snapshots/snapshots-cron.log`. - ```sh - 0 1 * * * sh /opt/snapshots/create-snapshot.sh > /var/log/snapshots/snapshots-cron.log 2>&1 - ``` +```sh +0 1 * * * sh /opt/snapshots/create-snapshot.sh > /var/log/snapshots/snapshots-cron.log 2>&1 +``` ### Start All the Services @@ -96,25 +96,25 @@ You can start all services by running the provided scripts. - Download the script. - Main net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/startall.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/startall.sh +``` - Test net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/startall.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/startall.sh +``` - Dev net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/startall.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/startall.sh +``` - Set the permissions of the script - ``` - chmod +x startall.sh - ``` +``` +chmod +x startall.sh +``` - Run the script to start all services via docker engine. - ``` - ./startall.sh - ``` +``` +./startall.sh +``` ### Stop All the Services @@ -122,25 +122,25 @@ You can stop all services by running the provided scripts. - Download the script. - Main net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/stopall.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/stopall.sh +``` - Test net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/stopall.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/stopall.sh +``` - Dev net - ``` - wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/stopall.sh - ``` +``` +wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/stopall.sh +``` - Set the permissions of the script - ``` - chmod +x stopall.sh - ``` +``` +chmod +x stopall.sh +``` - Run the script to stop all services via docker engine. - ``` - ./stopall.sh - ``` +``` +./stopall.sh +``` ## Expose the Snapshots with Rsync diff --git a/collections/developers/internals/internals.md b/collections/developers/internals/internals.md index ce29a8c..dd1d888 100644 --- a/collections/developers/internals/internals.md +++ b/collections/developers/internals/internals.md @@ -4,7 +4,7 @@ We present in this section of the developers book a partial list of system compo

Table of Contents

-- [Reliable Message Bus (RMB)](rmb_toc.md) +- [Reliable Message Bus - RMB](rmb_toc.md) - [Introduction to RMB](rmb_intro.md) - [RMB Specs](rmb_specs.md) - [RMB Peer](peer.md) From 44884956472d6dca2d7fa19a5f999c8d455b350d Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:19:23 -0400 Subject: [PATCH 088/134] manual, devs, grid deployment --- .../developers/grid_deployment/snapshots.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/collections/developers/grid_deployment/snapshots.md b/collections/developers/grid_deployment/snapshots.md index a0da310..e1ea730 100644 --- a/collections/developers/grid_deployment/snapshots.md +++ b/collections/developers/grid_deployment/snapshots.md @@ -64,15 +64,15 @@ You can use the start script to start all services and then set a cron job to ex You can set a cron job to execute a script running rsync to create the snapshots and generate logs at a given interval. - First download the script. - - Main net +- Main net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/create_snapshot.sh ``` - - Test net +- Test net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/create_snapshot.sh ``` - - Dev net +- Dev net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/create_snapshot.sh ``` @@ -95,15 +95,15 @@ crontab -e You can start all services by running the provided scripts. - Download the script. - - Main net +- Main net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/startall.sh ``` - - Test net +- Test net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/startall.sh ``` - - Dev net +- Dev net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/startall.sh ``` @@ -121,15 +121,15 @@ chmod +x startall.sh You can stop all services by running the provided scripts. - Download the script. - - Main net +- Main net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/mainnet/stopall.sh ``` - - Test net +- Test net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/testnet/stopall.sh ``` - - Dev net +- Dev net ``` wget https://github.com/threefoldtech/grid_deployment/blob/development/grid-snapshots/devnet/stopall.sh ``` From b8323a081521796f96f83f9b31cd61b3cfb13b2e Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:22:08 -0400 Subject: [PATCH 089/134] manual, farmers, bootstrap img --- .../img/dashboard_bootstrap_farm.png | Bin 0 -> 9259 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 collections/farmers/3node_building/img/dashboard_bootstrap_farm.png diff --git a/collections/farmers/3node_building/img/dashboard_bootstrap_farm.png b/collections/farmers/3node_building/img/dashboard_bootstrap_farm.png new file mode 100644 index 0000000000000000000000000000000000000000..82f8759aec2c5d540a9967dc88cded1e8f36e25d GIT binary patch literal 9259 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 ac_62=FAHz9C Date: Tue, 14 May 2024 12:24:06 -0400 Subject: [PATCH 090/134] manual, farmers, gpu --- collections/farmers/3node_building/2_bootstrap_image.md | 4 ++-- collections/farmers/3node_building/gpu_farming.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/farmers/3node_building/2_bootstrap_image.md b/collections/farmers/3node_building/2_bootstrap_image.md index 9234242..eed1aa2 100644 --- a/collections/farmers/3node_building/2_bootstrap_image.md +++ b/collections/farmers/3node_building/2_bootstrap_image.md @@ -7,7 +7,7 @@ - [Burn the Zero-OS Bootstrap Image](#burn-the-zero-os-bootstrap-image) - [CD/DVD BIOS](#cddvd-bios) - [USB Key BIOS+UEFI](#usb-key-biosuefi) - - [BalenaEtcher (MAC, Linux, Windows)](#balenaetcher-mac-linux-windows) + - [BalenaEtcher - MAC, Linux, Windows](#balenaetcher---mac-linux-windows) - [CLI (Linux)](#cli-linux) - [Rufus (Windows)](#rufus-windows) - [Additional Information (Optional)](#additional-information-optional) @@ -70,7 +70,7 @@ For the BIOS **ISO** image, download the file and burn it on a DVD. There are many ways to burn the bootstrap image on a USB key. The easiest way that works for all operating systems is to use BalenaEtcher. We also provide other methods. -#### BalenaEtcher (MAC, Linux, Windows) +#### BalenaEtcher - MAC, Linux, Windows For **MAC**, **Linux** and **Windows**, you can use [BalenaEtcher](https://www.balena.io/etcher/) to load/flash the image on a USB stick. This program also formats the USB in the process. This will work for the option **EFI IMG** for UEFI boot, and with the option **USB** for BIOS boot. Simply follow the steps presented to you and make sure you select the bootstrap image file you downloaded previously. diff --git a/collections/farmers/3node_building/gpu_farming.md b/collections/farmers/3node_building/gpu_farming.md index f0096d8..35cbf8e 100644 --- a/collections/farmers/3node_building/gpu_farming.md +++ b/collections/farmers/3node_building/gpu_farming.md @@ -35,7 +35,7 @@ We cover the basic steps to install the GPU on your 3Node. * Install the GPU on the server * Note: You might need to move or remove some pieces of your server to make room for the GPU * (Optional) Boot the 3Node with a Linux distro (e.g. Ubuntu) and use the terminal to check if the GPU is recognized by the system - * ``` + ``` sudo lshw -C Display ``` * Output example with an AMD Radeon (on the line `product: ...`) From f6c654db48c5ca0c741d2df27d35f628569807a9 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:28:35 -0400 Subject: [PATCH 091/134] manual, farmers, minting receipts --- collections/farmers/3node_building/minting_receipts.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/collections/farmers/3node_building/minting_receipts.md b/collections/farmers/3node_building/minting_receipts.md index 76633d3..fbba3de 100644 --- a/collections/farmers/3node_building/minting_receipts.md +++ b/collections/farmers/3node_building/minting_receipts.md @@ -37,7 +37,9 @@ The ThreeFold Alpha minting tool will present the following information for each - TFT Farmed - Payout Address - \ No newline at end of file +- Payout Address \ No newline at end of file From ef8576b061b76501b2e467d1d1c3d2e36ebcf9fb Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:33:54 -0400 Subject: [PATCH 093/134] manual, sysadmins, ssh --- .../farmers/farmerbot/farmerbot_quick.md | 2 +- .../getstarted/ssh_guide/ssh_openssh.md | 36 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/collections/farmers/farmerbot/farmerbot_quick.md b/collections/farmers/farmerbot/farmerbot_quick.md index 8094789..8ec6945 100644 --- a/collections/farmers/farmerbot/farmerbot_quick.md +++ b/collections/farmers/farmerbot/farmerbot_quick.md @@ -142,7 +142,7 @@ Once you've verified that the Farmerbot runs properly, you can stop the Farmerbo It is highly recommended to set a Ubuntu systemd service to keep the Farmerbot running after exiting the VM. * Create the service file - * ``` + ``` nano /etc/systemd/system/farmerbot.service ``` * Set the Farmerbot systemd service diff --git a/collections/system_administrators/getstarted/ssh_guide/ssh_openssh.md b/collections/system_administrators/getstarted/ssh_guide/ssh_openssh.md index 4762cf2..82170db 100644 --- a/collections/system_administrators/getstarted/ssh_guide/ssh_openssh.md +++ b/collections/system_administrators/getstarted/ssh_guide/ssh_openssh.md @@ -50,13 +50,13 @@ The main steps for the whole process are the following: Here are the steps to SSH into a 3Node with IPv4 on Linux. * To create the SSH key pair, write in the terminal - * ``` + ``` ssh-keygen ``` * Save in default location * Write a password (optional) * To see the public key, write in the terminal - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Select and copy the public key when needed @@ -72,7 +72,7 @@ Here are the steps to SSH into a 3Node with IPv4 on Linux. * To SSH into the VM once the 3Node is deployed * Copy the IPv4 address * Open the terminal, write the following with the deployment address and write **yes** to confirm - * ``` + ``` ssh root@IPv4_address ``` @@ -92,13 +92,13 @@ Here are the steps to SSH into a 3Node with the Planetary Network on Linux. * Disconnect your VPN if you have one * In the connector, click `Connect` * To create the SSH key pair, write in the terminal - * ``` + ``` ssh-keygen ``` * Save in default location * Write a password (optional) * To see the public key, write in the terminal - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Select and copy the public key when needed @@ -114,7 +114,7 @@ Here are the steps to SSH into a 3Node with the Planetary Network on Linux. * To SSH into the VM once the 3Node is deployed * Copy the Planetary Network address * Open the terminal, write the following with the deployment address and write **yes** to confirm - * ``` + ``` ssh root@planetary_network_address ``` @@ -129,13 +129,13 @@ You now have an SSH connection on Linux with the Planetary Network. Here are the steps to SSH into a 3Node with IPv4 on MAC. * To create the SSH key pair, in the terminal write - * ``` + ``` ssh-keygen ``` * Save in default location * Write a password (optional) * To see the public key, write in the terminal - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Select and copy the public key when needed @@ -151,7 +151,7 @@ Here are the steps to SSH into a 3Node with IPv4 on MAC. * To SSH into the VM once the 3Node is deployed * Copy the IPv4 address * Open the terminal, write the following with the deployment address and write **yes** to confirm - * ``` + ``` ssh root@IPv4_address ``` @@ -170,13 +170,13 @@ Here are the steps to SSH into a 3Node with the Planetary Network on MAC. * Disconnect your VPN if you have one * In the connector, click `Connect` * To create the SSH key pair, write in the terminal - * ``` + ``` ssh-keygen ``` * Save in default location * Write a password (optional) * To see the public key, write in the terminal - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Select and copy the public key when needed @@ -192,7 +192,7 @@ Here are the steps to SSH into a 3Node with the Planetary Network on MAC. * To SSH into the VM once the 3Node is deployed * Copy the Planetary Network address * Open the terminal, write the following with the deployment address and write **yes** to confirm - * ``` + ``` ssh root@planetary_network_address ``` @@ -214,13 +214,13 @@ You now have an SSH connection on MAC with the Planetary Network. * Search OpenSSH * Install OpenSSH Client and OpenSSH Server * To create the SSH key pair, open `PowerShell` and write - * ``` + ``` ssh-keygen ``` * Save in default location * Write a password (optional) * To see the public key, write in `PowerShell` - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Select and copy the public key when needed @@ -236,7 +236,7 @@ You now have an SSH connection on MAC with the Planetary Network. * To SSH into the VM once the 3Node is deployed * Copy the IPv4 address * Open `PowerShell`, write the following with the deployment address and write **yes** to confirm - * ``` + ``` ssh root@IPv4_address ``` @@ -262,13 +262,13 @@ You now have an SSH connection on Window with IPv4. * Search OpenSSH * Install OpenSSH Client and OpenSSH Server * To create the SSH key pair, open `PowerShell` and write - * ``` + ``` ssh-keygen ``` * Save in default location * Write a password (optional) * To see the public key, write in `PowerShell` - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Select and copy the public key when needed @@ -284,7 +284,7 @@ You now have an SSH connection on Window with IPv4. * To SSH into the VM once the 3Node is deployed * Copy the Planetary Network address * Open `PowerShell`, write the following with the deployment address and write **yes** to confirm - * ``` + ``` ssh root@planetary_network_address ``` From 2ac97d936c2660c25eaafb240113079a98a6477c Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:35:37 -0400 Subject: [PATCH 094/134] manual, sysadmins, wg --- .../getstarted/ssh_guide/ssh_wireguard.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/collections/system_administrators/getstarted/ssh_guide/ssh_wireguard.md b/collections/system_administrators/getstarted/ssh_guide/ssh_wireguard.md index 69fa20a..91cc986 100644 --- a/collections/system_administrators/getstarted/ssh_guide/ssh_wireguard.md +++ b/collections/system_administrators/getstarted/ssh_guide/ssh_wireguard.md @@ -69,19 +69,19 @@ To set the WireGuard connection on Linux or MAC, create a WireGuard configuratio * Copy the content **WireGuard Config** from the Dashboard **Details** window * Paste the content to a file with the extension `.conf` (e.g. **wg.conf**) in the directory `/etc/wireguard` - * ``` + ``` sudo nano /etc/wireguard/wg.conf ``` * Start WireGuard with the command **wg-quick** and, as a parameter, pass the configuration file without the extension (e.g. *wg.conf -> wg*) - * ``` + ``` wg-quick up wg ``` * Note that you can also specify a config file by path, stored in any location - * ``` + ``` wg-quick up /etc/wireguard/wg.conf ``` * If you want to stop the WireGuard service, you can write the following in the terminal - * ``` + ``` wg-quick down wg ``` @@ -105,7 +105,7 @@ To set the WireGuard connection on Windows, add and activate a tunnel with the W As a test, you can [ping](../../computer_it_basics/cli_scripts_basics.md#test-the-network-connectivity-of-a-domain-or-an-ip-address-with-ping) the virtual IP address of the VM to make sure the WireGuard connection is properly established. Make sure to replace `VM_WireGuard_IP` with the proper WireGuard IP address: * Ping the deployment - * ``` + ``` ping VM_WireGuard_IP ``` @@ -116,7 +116,7 @@ As a test, you can [ping](../../computer_it_basics/cli_scripts_basics.md#test-th To SSH into the deployment with Wireguard, use the **WireGuard IP** shown in the Dashboard **Details** window. * SSH into the deployment - * ``` + ``` ssh root@VM_WireGuard_IP ``` From 3b2e0f0241d82479c9a3696285e41d955be4f846 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:37:07 -0400 Subject: [PATCH 095/134] manual, sysadmins, gui --- .../cockpit_guide/cockpit_guide.md | 54 +++++++++---------- .../guacamole_guide/guacamole_guide.md | 40 +++++++------- .../xrdp_guide/xrdp_guide.md | 50 ++++++++--------- 3 files changed, 72 insertions(+), 72 deletions(-) diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md index fb7bae4..2686e18 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md @@ -34,38 +34,38 @@ To start, you must [deploy and SSH into a full VM](ssh_guide.md). * With an IPv4 Address * After deployment, copy the IPv4 address * Connect into the VM via SSH - * ``` + ``` ssh root@VM_IPv4_address ``` * Create a new user with root access * Here we use `newuser` as an example - * ``` + ``` adduser newuser ``` * To see the directory of the new user - * ``` + ``` ls /home ``` * Give sudo capacity to the new user - * ``` + ``` usermod -aG sudo newuser ``` * Make the new user accessible by SSH - * ``` + ``` su - newuser ``` - * ``` + ``` mkdir ~/.ssh ``` - * ``` + ``` nano ~/.ssh/authorized_keys ``` * add the authorized public key in the file, then save and quit * Exit the VM and reconnect with the new user - * ``` + ``` exit ``` - * ``` + ``` ssh newuser@VM_IPv4_address ``` @@ -74,11 +74,11 @@ To start, you must [deploy and SSH into a full VM](ssh_guide.md). ## Set the VM and Install Cockpit * Update and upgrade the VM - * ``` + ``` sudo apt update -y && sudo apt upgrade -y && sudo apt-get update -y ``` * Install Cockpit - * ``` + ``` . /etc/os-release && sudo apt install -t ${UBUNTU_CODENAME}-backports cockpit -y ``` @@ -89,24 +89,24 @@ To start, you must [deploy and SSH into a full VM](ssh_guide.md). We now change the system daemon that manages network configurations. We will be using [NetworkManager](https://networkmanager.dev/) instead of [networkd](https://wiki.archlinux.org/title/systemd-networkd). This will give us further possibilities on Cockpit. * Install NetworkManager. Note that it might already be installed. - * ``` + ``` sudo apt install network-manager -y ``` * Update the `.yaml` file * Go to netplan's directory - * ``` + ``` cd /etc/netplan ``` * Search for the proper `.yaml` file name - * ``` + ``` ls -l ``` * Update the `.yaml` file - * ``` + ``` sudo nano 50-cloud-init.yaml ``` * Add the following lines under `network:` - * ``` + ``` version: 2 renderer: NetworkManager ``` @@ -114,22 +114,22 @@ We now change the system daemon that manages network configurations. We will be * Remove `version: 2` at the bottom of the file * Save and exit the file * Disable networkd and enable NetworkManager - * ``` + ``` sudo systemctl disable systemd-networkd ``` - * ``` + ``` sudo systemctl enable NetworkManager ``` * Apply netplan to set NetworkManager - * ``` + ``` sudo netplan apply ``` * Reboot the system to load the new kernel and to properly set NetworkManager - * ``` + ``` sudo reboot ``` * Reconnect to the VM - * ``` + ``` ssh newuser@VM_IPv4_address ``` @@ -139,24 +139,24 @@ We now change the system daemon that manages network configurations. We will be We now set a firewall. We note that [ufw](https://wiki.ubuntu.com/UncomplicatedFirewall) is not compatible with Cockpit and for this reason, we will be using [firewalld](https://firewalld.org/). * Install firewalld - * ``` + ``` sudo apt install firewalld -y ``` * Add Cockpit to firewalld - * ``` + ``` sudo firewall-cmd --add-service=cockpit ``` - * ``` + ``` sudo firewall-cmd --add-service=cockpit --permanent ``` * See if Cockpit is available - * ``` + ``` sudo firewall-cmd --info-service=cockpit ``` * See the status of firewalld - * ``` + ``` sudo firewall-cmd --state ``` @@ -165,7 +165,7 @@ We now set a firewall. We note that [ufw](https://wiki.ubuntu.com/UncomplicatedF ## Access Cockpit * On your web browser, write the following URL with the proper VM IPv4 address - * ``` + ``` VM_IPv4_Address:9090 ``` * Enter the username and password of the root-access user diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md index 6a6738e..f0381ff 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md @@ -37,30 +37,30 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th * Minimum storage: 15Gb * After deployment, note the VM IPv4 address * Connect to the VM via SSH - * ``` + ``` ssh root@VM_IPv4_address ``` * Once connected, create a new user with root access (for this guide we use "newuser") - * ``` + ``` adduser newuser ``` * You should now see the new user directory - * ``` + ``` ls /home ``` * Give sudo capacity to the new user - * ``` + ``` usermod -aG sudo newuser ``` * Make the new user accessible by SSH - * ``` + ``` su - newuser ``` - * ``` + ``` mkdir ~/.ssh ``` * Add authorized public key in the file and save it - * ``` + ``` nano ~/.ssh/authorized_keys ``` * Exit the VM and reconnect with the new user @@ -70,21 +70,21 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th ## SSH with Root-Access User, Install Prerequisites and Apache Guacamole * SSH into the VM - * ``` + ``` ssh newuser@VM_IPv4_address ``` * Update and upgrade Ubuntu - * ``` + ``` sudo apt update && sudo apt upgrade -y && sudo apt-get install software-properties-common -y ``` * Download and run Apache Guacamole - * ``` + ``` wget -O guac-install.sh https://git.io/fxZq5 ``` - * ``` + ``` chmod +x guac-install.sh ``` - * ``` + ``` sudo ./guac-install.sh ``` @@ -93,11 +93,11 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th ## Access Apache Guacamole and Create Admin-Access User * On your local computer, open a browser and write the following URL with the proper IPv4 address - * ``` + ``` https://VM_IPv4_address:8080/guacamole ``` * On Guacamole, enter the following for both the username and the password - * ``` + ``` guacadmin ``` * Download the [TOTP](https://totp.app/) app on your Android or iOS @@ -120,23 +120,23 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th ## Download the Desktop Environment and Run xrdp * Download a Ubuntu desktop environment on the VM - * ``` + ``` sudo apt install tasksel -y && sudo apt install lightdm -y ``` * Choose lightdm * Run tasksel and choose `ubuntu desktop` - * ``` + ``` sudo tasksel ``` * Download and run xrdp - * ``` + ``` wget https://c-nergy.be/downloads/xRDP/xrdp-installer-1.4.6.zip ``` - * ``` + ``` unzip xrdp-installer-1.4.6.zip ``` - * ``` + ``` bash xrdp-installer-1.4.6.sh ``` @@ -146,7 +146,7 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th * Create an RDP connection on Guacamole * Open Guacamole - * ``` + ``` http://VM_IPv4_address:8080/guacamole/ ``` * Go to Settings diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md index 24f2389..8b47a0a 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md @@ -31,107 +31,107 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th * With an IPv4 Address * After deployment, copy the IPv4 address * To SSH into the VM, write in the terminal - * ``` + ``` ssh root@VM_IPv4_address ``` * Once connected, update, upgrade and install the desktop environment * Update - * ``` + ``` sudo apt update -y && sudo apt upgrade -y ``` * Install a light-weight desktop environment (Xfce) - * ``` + ``` sudo apt install xfce4 xfce4-goodies -y ``` * Create a user with root access - * ``` + ``` adduser newuser ``` - * ``` + ``` ls /home ``` * You should see the newuser directory * Give sudo capacity to newuser - * ``` + ``` usermod -aG sudo newuser ``` * Make newuser accessible by SSH - * ``` + ``` su - newuser ``` - * ``` + ``` mkdir ~/.ssh ``` - * ``` + ``` nano ~/.ssh/authorized_keys ``` * add authorized public key in file and save * Exit the VM and reconnect with new user - * ``` + ``` exit ``` * Reconnect to the VM terminal and install XRDP - * ``` + ``` ssh newuser@VM_IPv4_address ``` * Install XRDP - * ``` + ``` sudo apt install xrdp -y ``` * Check XRDP status - * ``` + ``` sudo systemctl status xrdp ``` * If not running, run manually: - * ``` + ``` sudo systemctl start xrdp ``` * If needed, configure xrdp (optional) - * ``` + ``` sudo nano /etc/xrdp/xrdp.ini ``` * Create a session with root-access user Move to home directory * Go to home directory of root-access user - * ``` + ``` cd ~ ``` * Create session - * ``` + ``` echo "xfce4-session" | tee .xsession ``` * Restart the server - * ``` + ``` sudo systemctl restart xrdp ``` * Find your local computer IP address * On your local computer terminal, write - * ``` + ``` curl ifconfig.me ``` * On the VM terminal, allow client computer port to the firewall (ufw) - * ``` + ``` sudo ufw allow from your_local_ip/32 to any port 3389 ``` * Allow SSH connection to your firewall - * ``` + ``` sudo ufw allow ssh ``` * Verify status of the firewall - * ``` + ``` sudo ufw status ``` * If not active, do the following: - * ``` + ``` sudo ufw disable ``` - * ``` + ``` sudo ufw enable ``` * Then the ufw status should show changes - * ``` + ``` sudo ufw status ``` From f0683c7c46fd5f52dd68d29d916737a4722b3993 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:42:19 -0400 Subject: [PATCH 096/134] manual, sysadmins, gui --- .../cockpit_guide/cockpit_guide.md | 89 +++++++++---------- .../guacamole_guide/guacamole_guide.md | 14 +-- 2 files changed, 50 insertions(+), 53 deletions(-) diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md index 2686e18..e9805d3 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md @@ -39,48 +39,45 @@ To start, you must [deploy and SSH into a full VM](ssh_guide.md). ``` * Create a new user with root access * Here we use `newuser` as an example - ``` - adduser newuser - ``` +``` +adduser newuser +``` * To see the directory of the new user - ``` - ls /home - ``` +``` +ls /home +``` * Give sudo capacity to the new user - ``` - usermod -aG sudo newuser - ``` +``` +usermod -aG sudo newuser +``` * Make the new user accessible by SSH - ``` - su - newuser - ``` - ``` - mkdir ~/.ssh - ``` - ``` - nano ~/.ssh/authorized_keys - ``` - * add the authorized public key in the file, then save and quit - * Exit the VM and reconnect with the new user - ``` - exit - ``` - ``` - ssh newuser@VM_IPv4_address - ``` +``` +su - newuser +mkdir ~/.ssh +nano ~/.ssh/authorized_keys +``` +* Add the authorized public key in the file, then save and quit +* Exit the VM +``` +exit +``` + * Reconnect with the new user +``` +ssh newuser@VM_IPv4_address +``` ## Set the VM and Install Cockpit * Update and upgrade the VM - ``` - sudo apt update -y && sudo apt upgrade -y && sudo apt-get update -y - ``` +``` +sudo apt update -y && sudo apt upgrade -y && sudo apt-get update -y +``` * Install Cockpit - ``` - . /etc/os-release && sudo apt install -t ${UBUNTU_CODENAME}-backports cockpit -y - ``` +``` +. /etc/os-release && sudo apt install -t ${UBUNTU_CODENAME}-backports cockpit -y +``` @@ -94,23 +91,23 @@ We now change the system daemon that manages network configurations. We will be ``` * Update the `.yaml` file * Go to netplan's directory - ``` - cd /etc/netplan - ``` +``` +cd /etc/netplan +``` * Search for the proper `.yaml` file name - ``` - ls -l - ``` +``` +ls -l +``` * Update the `.yaml` file - ``` - sudo nano 50-cloud-init.yaml - ``` +``` +sudo nano 50-cloud-init.yaml +``` * Add the following lines under `network:` - ``` - version: 2 - renderer: NetworkManager - ``` - * Note that these two lines should be aligned with `ethernets:` + ``` + version: 2 + renderer: NetworkManager + ``` +* Note that these two lines should be aligned with `ethernets:` * Remove `version: 2` at the bottom of the file * Save and exit the file * Disable networkd and enable NetworkManager diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md index f0381ff..9eb5fcb 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md @@ -120,14 +120,14 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th ## Download the Desktop Environment and Run xrdp * Download a Ubuntu desktop environment on the VM - ``` - sudo apt install tasksel -y && sudo apt install lightdm -y - ``` - * Choose lightdm +``` +sudo apt install tasksel -y && sudo apt install lightdm -y +``` +* Choose lightdm * Run tasksel and choose `ubuntu desktop` - ``` - sudo tasksel - ``` + ``` + sudo tasksel + ``` * Download and run xrdp ``` From bd835ef00ba752033fe94d27b63965a7f376cea4 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:43:45 -0400 Subject: [PATCH 097/134] manual, sysadmins, gui --- .../xrdp_guide/xrdp_guide.md | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md b/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md index 8b47a0a..444e96a 100644 --- a/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md +++ b/collections/system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md @@ -36,44 +36,44 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th ``` * Once connected, update, upgrade and install the desktop environment * Update - ``` - sudo apt update -y && sudo apt upgrade -y - ``` +``` +sudo apt update -y && sudo apt upgrade -y +``` * Install a light-weight desktop environment (Xfce) - ``` - sudo apt install xfce4 xfce4-goodies -y - ``` +``` +sudo apt install xfce4 xfce4-goodies -y +``` * Create a user with root access - ``` - adduser newuser - ``` - ``` - ls /home - ``` - * You should see the newuser directory +``` +adduser newuser +``` +``` +ls /home +``` + * You should see the newuser directory * Give sudo capacity to newuser - ``` - usermod -aG sudo newuser - ``` + ``` + usermod -aG sudo newuser + ``` * Make newuser accessible by SSH - ``` - su - newuser - ``` - ``` - mkdir ~/.ssh - ``` - ``` - nano ~/.ssh/authorized_keys - ``` - * add authorized public key in file and save + ``` + su - newuser + ``` + ``` + mkdir ~/.ssh + ``` + ``` + nano ~/.ssh/authorized_keys + ``` + * add authorized public key in file and save * Exit the VM and reconnect with new user - ``` - exit - ``` +``` +exit +``` * Reconnect to the VM terminal and install XRDP - ``` - ssh newuser@VM_IPv4_address - ``` +``` +ssh newuser@VM_IPv4_address +``` * Install XRDP ``` sudo apt install xrdp -y @@ -83,9 +83,9 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th sudo systemctl status xrdp ``` * If not running, run manually: - ``` - sudo systemctl start xrdp - ``` +``` +sudo systemctl start xrdp +``` * If needed, configure xrdp (optional) ``` sudo nano /etc/xrdp/xrdp.ini @@ -93,9 +93,9 @@ If you are new to the Threefold ecosystem and you want to deploy workloads on th * Create a session with root-access user Move to home directory * Go to home directory of root-access user - ``` - cd ~ - ``` +``` +cd ~ +``` * Create session ``` echo "xfce4-session" | tee .xsession @@ -107,9 +107,9 @@ Move to home directory * Find your local computer IP address * On your local computer terminal, write - ``` - curl ifconfig.me - ``` +``` +curl ifconfig.me +``` * On the VM terminal, allow client computer port to the firewall (ufw) ``` @@ -124,16 +124,16 @@ Move to home directory sudo ufw status ``` * If not active, do the following: - ``` - sudo ufw disable - ``` - ``` - sudo ufw enable - ``` +``` +sudo ufw disable +``` +``` +sudo ufw enable +``` * Then the ufw status should show changes - ``` - sudo ufw status - ``` +``` +sudo ufw status +``` ## Client Side: Install Remote Desktop Connection for Windows, MAC or Linux @@ -149,7 +149,7 @@ Simply download the app, open it and write the IPv4 address of the VM. You then * [Remote Desktop Connection app](https://apps.microsoft.com/store/detail/microsoft-remote-desktop/9WZDNCRFJ3PS?hl=en-ca&gl=ca&rtc=1) * MAC * Download in app store - * [Microsoft Remote Desktop Connection app](https://apps.apple.com/ca/app/microsoft-remote-desktop/id1295203466?mt=12) +* [Microsoft Remote Desktop Connection app](https://apps.apple.com/ca/app/microsoft-remote-desktop/id1295203466?mt=12) * Linux * [Remmina RDP Client](https://remmina.org/) From 982bd66987356797a6e7fe2a099330ea7a6454cc Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:47:52 -0400 Subject: [PATCH 098/134] manual, sysadmins, terra --- .../resources/terraform_qsfs_on_microvm.md | 48 +++++++++---------- .../terraform/terraform_basics.md | 10 ++-- .../terraform/terraform_full_vm.md | 16 +++---- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md b/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md index dcc2a18..b655166 100644 --- a/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md +++ b/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md @@ -65,31 +65,31 @@ We present two different methods to create the Terraform files. In the first met Creating the Terraform files is very straightforward. We want to clone the repository `terraform-provider-grid` locally and run some simple commands to properly set and start the deployment. * Clone the repository `terraform-provider-grid` - * ``` + ``` git clone https://github.com/threefoldtech/terraform-provider-grid ``` * Go to the subdirectory containing the examples - * ``` + ``` cd terraform-provider-grid/examples/resources/qsfs ``` * Set your own mnemonics (replace `mnemonics words` with your own mnemonics) - * ``` + ``` export MNEMONICS="mnemonics words" ``` * Set the network (replace `network` by the desired network, e.g. `dev`, `qa`, `test` or `main`) - * ``` + ``` export NETWORK="network" ``` * Initialize the Terraform deployment - * ``` + ``` terraform init ``` * Apply the Terraform deployment - * ``` + ``` terraform apply ``` * At any moment, you can destroy the deployment with the following line - * ``` + ``` terraform destroy ``` @@ -100,21 +100,21 @@ When using this method, you might need to change some parameters within the `mai For this method, we use two files to deploy with Terraform. The first file contains the environment variables (**credentials.auto.tfvars**) and the second file contains the parameters to deploy our workloads (**main.tf**). To facilitate the deployment, only the environment variables file needs to be adjusted. The **main.tf** file contains the environment variables (e.g. `var.size` for the disk size) and thus you do not need to change this file, but only the file **credentials.auto.tfvars**. * Open the terminal and go to the home directory (optional) - * ``` + ``` cd ~ ``` * Create the folder `terraform` and the subfolder `deployment-qsfs-microvm`: - * ``` - mkdir -p terraform && cd $_ - ``` - * ``` - mkdir deployment-qsfs-microvm && cd $_ - ``` + ``` + mkdir -p terraform && cd $_ + ``` + ``` + mkdir deployment-qsfs-microvm && cd $_ + ``` * Create the `main.tf` file: - * ``` - nano main.tf - ``` + ``` + nano main.tf + ``` * Copy the `main.tf` content and save the file. @@ -274,12 +274,12 @@ output "ygg_ip" { Note that we named the VM as **vm1**. * Create the `credentials.auto.tfvars` file: - * ``` - nano credentials.auto.tfvars - ``` + ``` + nano credentials.auto.tfvars + ``` * Copy the `credentials.auto.tfvars` content and save the file. - * ```terraform + ```terraform # Network network = "main" @@ -311,17 +311,17 @@ For the section QSFS Parameters, you can decide on how many VMs your data will b We now deploy the QSFS deployment with Terraform. Make sure that you are in the correct folder `terraform/deployment-qsfs-microvm` containing the main and variables files. * Initialize Terraform by writing the following in the terminal: - * ``` + ``` terraform init ``` * Apply the Terraform deployment: - * ``` + ``` terraform apply ``` * Terraform will then present you the actions it will perform. Write `yes` to confirm the deployment. Note that, at any moment, if you want to see the information on your Terraform deployments, write the following: - * ``` + ``` terraform show ``` diff --git a/collections/system_administrators/terraform/terraform_basics.md b/collections/system_administrators/terraform/terraform_basics.md index 9d6e34e..a302399 100644 --- a/collections/system_administrators/terraform/terraform_basics.md +++ b/collections/system_administrators/terraform/terraform_basics.md @@ -59,15 +59,15 @@ There are two options when it comes to finding a node to deploy on. You can use We cover the basic preparations beforing explaining the main file. - Make a directory for your project - - ``` + ``` mkdir myfirstproject ``` - Change directory - - ``` + ``` cd myfirstproject ``` - Create a main file and insert content - - ``` + ``` nano main.tf ``` @@ -109,11 +109,11 @@ provider "grid" { When writing the main file, you can decide to leave a variable content empty. In this case you can export the variable content as environment variables. * Export your mnemonics - * ``` + ``` export MNEMONICS="..." ``` * Export the network - * ``` + ``` export NETWORK="..." ``` diff --git a/collections/system_administrators/terraform/terraform_full_vm.md b/collections/system_administrators/terraform/terraform_full_vm.md index 860fc76..161858f 100644 --- a/collections/system_administrators/terraform/terraform_full_vm.md +++ b/collections/system_administrators/terraform/terraform_full_vm.md @@ -94,20 +94,20 @@ Open the terminal. - Go to the home folder - - ``` + ``` cd ~ ``` - Create the folder `terraform` and the subfolder `deployment-full-vm`: - - ``` + ``` mkdir -p terraform/deployment-full-vm ``` - - ``` + ``` cd terraform/deployment-full-vm ``` - Create the `main.tf` file: - - ``` + ``` nano main.tf ``` @@ -210,7 +210,7 @@ In this file, we name the VM as `vm1`. - Create the `credentials.auto.tfvars` file: - - ``` + ``` nano credentials.auto.tfvars ``` @@ -239,12 +239,12 @@ We now deploy the full VM with Terraform. Make sure that you are in the correct - Initialize Terraform: - - ``` + ``` terraform init ``` - Apply Terraform to deploy the full VM: - - ``` + ``` terraform apply ``` @@ -255,7 +255,7 @@ After deployments, take note of the 3Node' IPv4 address. You will need this addr ## SSH into the 3Node - To [SSH into the 3Node](ssh_guide.md), write the following: - - ``` + ``` ssh root@VM_IPv4_Address ``` From 9d539a31f161a6cd8ddfdeffcd0a5995b1b44f14 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:55:11 -0400 Subject: [PATCH 099/134] manual, sysadmins, terra nc --- .../terraform_mariadb_synced_databases.md | 84 +++++------ .../advanced/terraform_nextcloud_aio.md | 22 +-- .../advanced/terraform_nextcloud_redundant.md | 132 +++++++++--------- .../advanced/terraform_nextcloud_single.md | 78 +++++------ .../advanced/terraform_nextcloud_vpn.md | 26 ++-- .../terraform/advanced/terraform_nomad.md | 24 ++-- .../advanced/terraform_wireguard_ssh.md | 22 +-- .../advanced/terraform_wireguard_vpn.md | 31 ++-- 8 files changed, 209 insertions(+), 210 deletions(-) diff --git a/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md b/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md index bf911db..3a184ec 100644 --- a/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md +++ b/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md @@ -102,19 +102,19 @@ Modify the variable files to take into account your own seed phras and SSH keys. Open the terminal. * Go to the home folder - * ``` + ``` cd ~ ``` * Create the folder `terraform` and the subfolder `deployment-synced-db`: - * ``` + ``` mkdir -p terraform/deployment-synced-db ``` - * ``` + ``` cd terraform/deployment-synced-db ``` * Create the `main.tf` file: - * ``` + ``` nano main.tf ``` @@ -259,12 +259,12 @@ In this file, we name the first VM as `vm1` and the second VM as `vm2`. For ease In this guide, the virtual IP for `vm1` is 10.1.3.2 and the virtual IP for `vm2`is 10.1.4.2. This might be different during your own deployment. If so, change the codes in this guide accordingly. * Create the `credentials.auto.tfvars` file: - * ``` + ``` nano credentials.auto.tfvars ``` * Copy the `credentials.auto.tfvars` content and save the file. - * ``` + ``` mnemonics = "..." SSH_KEY = "..." @@ -285,19 +285,19 @@ Make sure to add your own seed phrase and SSH public key. You will also need to We now deploy the VPN with Terraform. Make sure that you are in the correct folder `terraform/deployment-synced-db` with the main and variables files. * Initialize Terraform: - * ``` + ``` terraform init ``` * Apply Terraform to deploy the VPN: - * ``` + ``` terraform apply ``` After deployments, take note of the 3Nodes' IPv4 address. You will need those addresses to SSH into the 3Nodes. Note that, at any moment, if you want to see the information on your Terraform deployments, write the following: - * ``` + ``` terraform show ``` @@ -306,7 +306,7 @@ Note that, at any moment, if you want to see the information on your Terraform d ### SSH into the 3Nodes * To [SSH into the 3Nodes](ssh_guide.md), write the following while making sure to set the proper IP address for each VM: - * ``` + ``` ssh root@3node_IPv4_Address ``` @@ -315,11 +315,11 @@ Note that, at any moment, if you want to see the information on your Terraform d ### Preparing the VMs for the Deployment * Update and upgrade the system - * ``` + ``` apt update && sudo apt upgrade -y && sudo apt-get install apache2 -y ``` * After download, you might need to reboot the system for changes to be fully taken into account - * ``` + ``` reboot ``` * Reconnect to the VMs @@ -333,19 +333,19 @@ We now want to ping the VMs using Wireguard. This will ensure the connection is First, we set Wireguard with the Terraform output. * On your local computer, take the Terraform's `wg_config` output and create a `wg.conf` file in the directory `/usr/local/etc/wireguard/wg.conf`. - * ``` + ``` nano /usr/local/etc/wireguard/wg.conf ``` * Paste the content provided by the Terraform deployment. You can use `terraform show` to see the Terraform output. The WireGuard output stands in between `EOT`. * Start the WireGuard on your local computer: - * ``` + ``` wg-quick up wg ``` * To stop the wireguard service: - * ``` + ``` wg-quick down wg ``` @@ -353,10 +353,10 @@ First, we set Wireguard with the Terraform output. This should set everything properly. * As a test, you can [ping](../../computer_it_basics/cli_scripts_basics.md#test-the-network-connectivity-of-a-domain-or-an-ip-address-with-ping) the virtual IP addresses of both VMs to make sure the Wireguard connection is correct: - * ``` + ``` ping 10.1.3.2 ``` - * ``` + ``` ping 10.1.4.2 ``` @@ -371,11 +371,11 @@ For more information on WireGuard, notably in relation to Windows, please read [ ## Download MariaDB and Configure the Database * Download the MariaDB server and client on both the master VM and the worker VM - * ``` + ``` apt install mariadb-server mariadb-client -y ``` * Configure the MariaDB database - * ``` + ``` nano /etc/mysql/mariadb.conf.d/50-server.cnf ``` * Do the following changes @@ -392,12 +392,12 @@ For more information on WireGuard, notably in relation to Windows, please read [ ``` * Restart MariaDB - * ``` + ``` systemctl restart mysql ``` * Launch Mariadb - * ``` + ``` mysql ``` @@ -406,7 +406,7 @@ For more information on WireGuard, notably in relation to Windows, please read [ ## Create User with Replication Grant * Do the following on both the master and the worker - * ``` + ``` CREATE USER 'repuser'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'%' ; FLUSH PRIVILEGES; @@ -429,17 +429,17 @@ For more information on WireGuard, notably in relation to Windows, please read [ ### TF Template Worker Server Data * Write the following in the Worker VM - * ``` + ``` CHANGE MASTER TO MASTER_HOST='10.1.3.2', MASTER_USER='repuser', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=328; ``` - * ``` + ``` start slave; ``` - * ``` + ``` show slave status\G; ``` @@ -448,17 +448,17 @@ For more information on WireGuard, notably in relation to Windows, please read [ ### TF Template Master Server Data * Write the following in the Master VM - * ``` + ``` CHANGE MASTER TO MASTER_HOST='10.1.4.2', MASTER_USER='repuser', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=328; ``` - * ``` + ``` start slave; ``` - * ``` + ``` show slave status\G; ``` @@ -503,71 +503,71 @@ We now set the MariaDB database. You should choose your own username and passwor We will now install and set [GlusterFS](https://www.gluster.org/), a free and open-source software scalable network filesystem. * Install GlusterFS on both the master and worker VMs - * ``` + ``` add-apt-repository ppa:gluster/glusterfs-7 -y && apt install glusterfs-server -y ``` * Start the GlusterFS service on both VMs - * ``` + ``` systemctl start glusterd.service && systemctl enable glusterd.service ``` * Set the master to worker probe IP on the master VM: - * ``` + ``` gluster peer probe 10.1.4.2 ``` * See the peer status on the worker VM: - * ``` + ``` gluster peer status ``` * Set the master and worker IP address on the master VM: - * ``` + ``` gluster volume create vol1 replica 2 10.1.3.2:/gluster-storage 10.1.4.2:/gluster-storage force ``` * Start Gluster: - * ``` + ``` gluster volume start vol1 ``` * Check the status on the worker VM: - * ``` + ``` gluster volume status ``` * Mount the server with the master IP on the master VM: - * ``` + ``` mount -t glusterfs 10.1.3.2:/vol1 /var/www ``` * See if the mount is there on the master VM: - * ``` + ``` df -h ``` * Mount the Server with the worker IP on the worker VM: - * ``` + ``` mount -t glusterfs 10.1.4.2:/vol1 /var/www ``` * See if the mount is there on the worker VM: - * ``` + ``` df -h ``` We now update the mount with the filse fstab on both master and worker. * To prevent the mount from being aborted if the server reboot, write the following on both servers: - * ``` + ``` nano /etc/fstab ``` * Add the following line in the `fstab` file to set the master VM with the master virtual IP (here it is 10.1.3.2): - * ``` + ``` 10.1.3.2:/vol1 /var/www glusterfs defaults,_netdev 0 0 ``` * Add the following line in the `fstab` file to set the worker VM with the worker virtual IP (here it is 10.1.4.2): - * ``` + ``` 10.1.4.2:/vol1 /var/www glusterfs defaults,_netdev 0 0 ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_aio.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_aio.md index 87dcf9b..290b988 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_aio.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_aio.md @@ -46,33 +46,33 @@ For our security rules, we want to allow SSH, HTTP and HTTPS (443 and 8443). We thus add the following rules: * Allow SSH (port 22) - * ``` + ``` ufw allow ssh ``` * Allow HTTP (port 80) - * ``` + ``` ufw allow http ``` * Allow https (port 443) - * ``` + ``` ufw allow https ``` * Allow port 8443 - * ``` + ``` ufw allow 8443 ``` * Allow port 3478 for Nextcloud Talk - * ``` + ``` ufw allow 3478 ``` * To enable the firewall, write the following: - * ``` + ``` ufw enable ``` * To see the current security rules, write the following: - * ``` + ``` ufw status verbose ``` @@ -90,7 +90,7 @@ You now have enabled the firewall with proper security rules for your Nextcloud * TTL: Automatic * It might take up to 30 minutes to set the DNS properly. * To check if the A record has been registered, you can use a common DNS checker: - * ``` + ``` https://dnschecker.org/#A/ ``` @@ -101,11 +101,11 @@ You now have enabled the firewall with proper security rules for your Nextcloud For the rest of the guide, we follow the steps availabe on the Nextcloud website's tutorial [How to Install the Nextcloud All-in-One on Linux](https://nextcloud.com/blog/how-to-install-the-nextcloud-all-in-one-on-linux/). * Install Docker - * ``` + ``` curl -fsSL get.docker.com | sudo sh ``` * Install Nextcloud AIO - * ``` + ``` sudo docker run \ --sig-proxy=false \ --name nextcloud-aio-mastercontainer \ @@ -118,7 +118,7 @@ For the rest of the guide, we follow the steps availabe on the Nextcloud website nextcloud/all-in-one:latest ``` * Reach the AIO interface on your browser: - * ``` + ``` https://:8443 ``` * Example: `https://nextcloudwebsite.com:8443` diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md index b052848..cfec0b4 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md @@ -126,19 +126,19 @@ Modify the variable files to take into account your own seed phrase and SSH keys Open the terminal. * Go to the home folder - * ``` + ``` cd ~ ``` * Create the folder `terraform` and the subfolder `deployment-nextcloud`: - * ``` + ``` mkdir -p terraform/deployment-nextcloud ``` - * ``` + ``` cd terraform/deployment-nextcloud ``` * Create the `main.tf` file: - * ``` + ``` nano main.tf ``` @@ -283,12 +283,12 @@ In this file, we name the first VM as `vm1` and the second VM as `vm2`. In the g In this guide, the virtual IP for `vm1` is 10.1.3.2 and the virtual IP for `vm2` is 10.1.4.2. This might be different during your own deployment. Change the codes in this guide accordingly. * Create the `credentials.auto.tfvars` file: - * ``` + ``` nano credentials.auto.tfvars ``` * Copy the `credentials.auto.tfvars` content and save the file. - * ``` + ``` mnemonics = "..." SSH_KEY = "..." @@ -307,12 +307,12 @@ Make sure to add your own seed phrase and SSH public key. You will also need to We now deploy the VPN with Terraform. Make sure that you are in the correct folder `terraform/deployment-nextcloud` with the main and variables files. * Initialize Terraform: - * ``` + ``` terraform init ``` * Apply Terraform to deploy the VPN: - * ``` + ``` terraform apply ``` @@ -321,18 +321,18 @@ After deployments, take note of the 3nodes' IPv4 address. You will need those ad ### SSH into the 3nodes * To [SSH into the 3nodes](ssh_guide.md), write the following: - * ``` + ``` ssh root@VM_IPv4_Address ``` ### Preparing the VMs for the Deployment * Update and upgrade the system - * ``` + ``` apt update && apt upgrade -y && apt-get install apache2 -y ``` * After download, reboot the system - * ``` + ``` reboot ``` * Reconnect to the VMs @@ -348,19 +348,19 @@ For more information on WireGuard, notably in relation to Windows, please read [ First, we set Wireguard with the Terraform output. * On your local computer, take the Terraform's `wg_config` output and create a `wg.conf` file in the directory `/etc/wireguard/wg.conf`. - * ``` + ``` nano /etc/wireguard/wg.conf ``` * Paste the content provided by the Terraform deployment. You can use `terraform show` to see the Terraform output. The Wireguard output stands in between `EOT`. * Start Wireguard on your local computer: - * ``` + ``` wg-quick up wg ``` * To stop the wireguard service: - * ``` + ``` wg-quick down wg ``` @@ -368,10 +368,10 @@ If it doesn't work and you already did a wireguard connection with the same file This should set everything properly. * As a test, you can [ping](../../computer_it_basics/cli_scripts_basics.md#test-the-network-connectivity-of-a-domain-or-an-ip-address-with-ping) the virtual IP addresses of both VMs to make sure the Wireguard connection is correct: - * ``` + ``` ping 10.1.3.2 ``` - * ``` + ``` ping 10.1.4.2 ``` @@ -384,11 +384,11 @@ If you correctly receive the packets from the two VMs, you know that the VPN is ## Download MariaDB and Configure the Database * Download MariaDB's server and client on both VMs - * ``` + ``` apt install mariadb-server mariadb-client -y ``` * Configure the MariaDB database - * ``` + ``` nano /etc/mysql/mariadb.conf.d/50-server.cnf ``` * Do the following changes @@ -405,19 +405,19 @@ If you correctly receive the packets from the two VMs, you know that the VPN is ``` * Restart MariaDB - * ``` + ``` systemctl restart mysql ``` * Launch MariaDB - * ``` + ``` mysql ``` ## Create User with Replication Grant * Do the following on both VMs - * ``` + ``` CREATE USER 'repuser'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'%' ; FLUSH PRIVILEGES; @@ -436,33 +436,33 @@ If you correctly receive the packets from the two VMs, you know that the VPN is ### TF Template Worker Server Data * Write the following in the worker VM - * ``` + ``` CHANGE MASTER TO MASTER_HOST='10.1.3.2', MASTER_USER='repuser', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=328; ``` - * ``` + ``` start slave; ``` - * ``` + ``` show slave status\G; ``` ### TF Template Master Server Data * Write the following in the master VM - * ``` + ``` CHANGE MASTER TO MASTER_HOST='10.1.4.2', MASTER_USER='repuser', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=328; ``` - * ``` + ``` start slave; ``` - * ``` + ``` show slave status\G; ``` @@ -505,72 +505,72 @@ We now set the Nextcloud database. You should choose your own username and passw We will now install and set [GlusterFS](https://www.gluster.org/), a free and open source software scalable network filesystem. * Install GlusterFS on both the master and worker VMs - * ``` + ``` echo | add-apt-repository ppa:gluster/glusterfs-7 && apt install glusterfs-server -y ``` * Start the GlusterFS service on both VMs - * ``` + ``` systemctl start glusterd.service && systemctl enable glusterd.service ``` * Set the master to worker probe IP on the master VM: - * ``` + ``` gluster peer probe 10.1.4.2 ``` * See the peer status on the worker VM: - * ``` + ``` gluster peer status ``` * Set the master and worker IP address on the master VM: - * ``` + ``` gluster volume create vol1 replica 2 10.1.3.2:/gluster-storage 10.1.4.2:/gluster-storage force ``` * Start GlusterFS on the master VM: - * ``` + ``` gluster volume start vol1 ``` * Check the status on the worker VM: - * ``` + ``` gluster volume status ``` * Mount the server with the master IP on the master VM: - * ``` + ``` mount -t glusterfs 10.1.3.2:/vol1 /var/www ``` * See if the mount is there on the master VM: - * ``` + ``` df -h ``` * Mount the server with the worker IP on the worker VM: - * ``` + ``` mount -t glusterfs 10.1.4.2:/vol1 /var/www ``` * See if the mount is there on the worker VM: - * ``` + ``` df -h ``` We now update the mount with the filse fstab on both VMs. * To prevent the mount from being aborted if the server reboots, write the following on both servers: - * ``` + ``` nano /etc/fstab ``` * Add the following line in the `fstab` file to set the master VM with the master virtual IP (here it is 10.1.3.2): - * ``` + ``` 10.1.3.2:/vol1 /var/www glusterfs defaults,_netdev 0 0 ``` * Add the following line in the `fstab` file to set the worker VM with the worker virtual IP (here it is 10.1.4.2): - * ``` + ``` 10.1.4.2:/vol1 /var/www glusterfs defaults,_netdev 0 0 ``` @@ -579,14 +579,14 @@ We now update the mount with the filse fstab on both VMs. # Install PHP and Nextcloud * Install PHP and the PHP modules for Nextcloud on both the master and the worker: - * ``` + ``` apt install php -y && apt-get install php zip libapache2-mod-php php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-mysql php-bcmath php-gmp zip -y ``` We will now install Nextcloud. This is done only on the master VM. * On both the master and worker VMs, go to the folder `/var/www`: - * ``` + ``` cd /var/www ``` @@ -594,27 +594,27 @@ We will now install Nextcloud. This is done only on the master VM. * See the latest [Nextcloud releases](https://download.nextcloud.com/server/releases/). * We now download Nextcloud on the master VM. - * ``` + ``` wget https://download.nextcloud.com/server/releases/nextcloud-27.0.1.zip ``` You only need to download on the master VM, since you set a peer-to-peer connection, it will also be accessible on the worker VM. * Then, extract the `.zip` file. This will take a couple of minutes. We use 7z to track progress: - * ``` + ``` apt install p7zip-full -y ``` - * ``` + ``` 7z x nextcloud-27.0.1.zip -o/var/www/ ``` * After the download, see if the Nextcloud file is there on the worker VM: - * ``` + ``` ls ``` * Then, we grant permissions to the folder. Do this on both the master VM and the worker VM. - * ``` + ``` chown www-data:www-data /var/www/nextcloud/ -R ``` @@ -660,7 +660,7 @@ Note: When the master VM goes offline, after 5 minutes maximum DuckDNS will chan We now want to tell Apache where to store the Nextcloud data. To do this, we will create a file called `nextcloud.conf`. * On both the master and worker VMs, write the following: - * ``` + ``` nano /etc/apache2/sites-available/nextcloud.conf ``` @@ -694,12 +694,12 @@ The file should look like this, with your own subdomain instead of `subdomain`: ``` * On both the master VM and the worker VM, write the following to set the Nextcloud database with Apache and to enable the new virtual host file: - * ``` + ``` a2ensite nextcloud.conf && a2enmod rewrite headers env dir mime setenvif ssl ``` * Then, reload and restart Apache: - * ``` + ``` systemctl reload apache2 && systemctl restart apache2 ``` @@ -710,20 +710,20 @@ The file should look like this, with your own subdomain instead of `subdomain`: We now access Nextcloud over the public Internet. * Go to a web browser and write the subdomain name created with DuckDNS (adjust with your own subdomain): - * ``` + ``` subdomain.duckdns.org ``` Note: HTTPS isn't yet enabled. If you can't access the website, make sure to enable HTTP websites on your browser. * Choose a name and a password. For this guide, we use the following: - * ``` + ``` ncadmin password1234 ``` * Enter the Nextcloud Database information created with MariaDB and click install: - * ``` + ``` Database user: ncuser Database password: password1234 Database name: nextcloud @@ -749,27 +749,27 @@ To enable HTTPS, first install `letsencrypt` with `certbot`: Install certbot by following the steps here: [https://certbot.eff.org/](https://certbot.eff.org/) * See if you have the latest version of snap: - * ``` + ``` snap install core; snap refresh core ``` * Remove certbot-auto: - * ``` + ``` apt-get remove certbot ``` * Install certbot: - * ``` + ``` snap install --classic certbot ``` * Ensure that certbot can be run: - * ``` + ``` ln -s /snap/bin/certbot /usr/bin/certbot ``` * Then, install certbot-apache: - * ``` + ``` apt install python3-certbot-apache -y ``` @@ -825,7 +825,7 @@ output "ipv4_vm1" { ``` * To add the HTTPS protection, write the following line on the master VM with your own subdomain: - * ``` + ``` certbot --apache -d subdomain.duckdns.org -d www.subdomain.duckdns.org ``` @@ -837,7 +837,7 @@ Note: You then need to redo the same process with the worker VM. This time, make ## Verify HTTPS Automatic Renewal * Make a dry run of the certbot renewal to verify that it is correctly set up. - * ``` + ``` certbot renew --dry-run ``` @@ -859,25 +859,25 @@ We thus add the following rules: * Allow SSH (port 22) - * ``` + ``` ufw allow ssh ``` * Allow HTTP (port 80) - * ``` + ``` ufw allow http ``` * Allow https (port 443) - * ``` + ``` ufw allow https ``` * To enable the firewall, write the following: - * ``` + ``` ufw enable ``` * To see the current security rules, write the following: - * ``` + ``` ufw status verbose ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md index 9c54dea..48e206a 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md @@ -112,19 +112,19 @@ Modify the variable files to take into account your own seed phrase and SSH keys Open the terminal and follow those steps. * Go to the home folder - * ``` + ``` cd ~ ``` * Create the folder `terraform` and the subfolder `deployment-single-nextcloud`: - * ``` + ``` mkdir -p terraform/deployment-single-nextcloud ``` - * ``` + ``` cd terraform/deployment-single-nextcloud ``` * Create the `main.tf` file: - * ``` + ``` nano main.tf ``` @@ -226,12 +226,12 @@ output "ipv4_vm1" { In this file, we name the full VM as `vm1`. * Create the `credentials.auto.tfvars` file: - * ``` + ``` nano credentials.auto.tfvars ``` * Copy the `credentials.auto.tfvars` content and save the file. - * ``` + ``` mnemonics = "..." SSH_KEY = "..." @@ -249,12 +249,12 @@ Make sure to add your own seed phrase and SSH public key. You will also need to We now deploy the full VM with Terraform. Make sure that you are in the correct folder `terraform/deployment-single-nextcloud` with the main and variables files. * Initialize Terraform: - * ``` + ``` terraform init ``` * Apply Terraform to deploy the full VM: - * ``` + ``` terraform apply ``` @@ -263,18 +263,18 @@ After deployments, take note of the 3Node's IPv4 address. You will need this add ## SSH into the 3Node * To [SSH into the 3Node](ssh_guide.md), write the following: - * ``` + ``` ssh root@VM_IPv4_Address ``` ## Prepare the Full VM * Update and upgrade the system - * ``` + ``` apt update && apt upgrade && apt-get install apache2 ``` * After download, reboot the system - * ``` + ``` reboot ``` * Reconnect to the VM @@ -286,11 +286,11 @@ After deployments, take note of the 3Node's IPv4 address. You will need this add ## Download MariaDB and Configure the Database * Download MariaDB's server and client - * ``` + ``` apt install mariadb-server mariadb-client ``` * Configure the MariaDB database - * ``` + ``` nano /etc/mysql/mariadb.conf.d/50-server.cnf ``` * Do the following changes @@ -307,12 +307,12 @@ After deployments, take note of the 3Node's IPv4 address. You will need this add ``` * Restart MariaDB - * ``` + ``` systemctl restart mysql ``` * Launch MariaDB - * ``` + ``` mysql ``` @@ -345,14 +345,14 @@ We now set the Nextcloud database. You should choose your own username and passw # Install PHP and Nextcloud * Install PHP and the PHP modules for Nextcloud on both the master and the worker: - * ``` + ``` apt install php && apt-get install php zip libapache2-mod-php php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-mysql php-bcmath php-gmp zip ``` We will now install Nextcloud. * On the full VM, go to the folder `/var/www`: - * ``` + ``` cd /var/www ``` @@ -360,19 +360,17 @@ We will now install Nextcloud. * See the latest [Nextcloud releases](https://download.nextcloud.com/server/releases/). * We now download Nextcloud on the full VM. - * ``` + ``` wget https://download.nextcloud.com/server/releases/nextcloud-27.0.1.zip ``` * Then, extract the `.zip` file. This will take a couple of minutes. We use 7z to track progress: - * ``` - apt install p7zip-full ``` - * ``` + apt install p7zip-full 7z x nextcloud-27.0.1.zip -o/var/www/ ``` * Then, we grant permissions to the folder. - * ``` + ``` chown www-data:www-data /var/www/nextcloud/ -R ``` @@ -398,7 +396,7 @@ Hint: make sure to save the DuckDNS folder in the home menu. Write `cd ~` before We now want to tell Apache where to store the Nextcloud data. To do this, we will create a file called `nextcloud.conf`. * On full VM, write the following: - * ``` + ``` nano /etc/apache2/sites-available/nextcloud.conf ``` @@ -432,12 +430,12 @@ The file should look like this, with your own subdomain instead of `subdomain`: ``` * On the full VM, write the following to set the Nextcloud database with Apache and to enable the new virtual host file: - * ``` + ``` a2ensite nextcloud.conf && a2enmod rewrite headers env dir mime setenvif ssl ``` * Then, reload and restart Apache: - * ``` + ``` systemctl reload apache2 && systemctl restart apache2 ``` @@ -448,20 +446,20 @@ The file should look like this, with your own subdomain instead of `subdomain`: We now access Nextcloud over the public Internet. * Go to a web browser and write the subdomain name created with DuckDNS (adjust with your own subdomain): - * ``` + ``` subdomain.duckdns.org ``` Note: HTTPS isn't yet enabled. If you can't access the website, make sure to enable HTTP websites on your browser. * Choose a name and a password. For this guide, we use the following: - * ``` + ``` ncadmin password1234 ``` * Enter the Nextcloud Database information created with MariaDB and click install: - * ``` + ``` Database user: ncuser Database password: password1234 Database name: nextcloud @@ -487,27 +485,27 @@ To enable HTTPS, first install `letsencrypt` with `certbot`: Install certbot by following the steps here: [https://certbot.eff.org/](https://certbot.eff.org/) * See if you have the latest version of snap: - * ``` + ``` snap install core; snap refresh core ``` * Remove certbot-auto: - * ``` + ``` apt-get remove certbot ``` * Install certbot: - * ``` + ``` snap install --classic certbot ``` * Ensure that certbot can be run: - * ``` + ``` ln -s /snap/bin/certbot /usr/bin/certbot ``` * Then, install certbot-apache: - * ``` + ``` apt install python3-certbot-apache ``` @@ -516,14 +514,14 @@ Install certbot by following the steps here: [https://certbot.eff.org/](https:// We now set the certbot with the DNS domain. * To add the HTTPS protection, write the following line on the full VM with your own subdomain: - * ``` + ``` certbot --apache -d subdomain.duckdns.org -d www.subdomain.duckdns.org ``` ## Verify HTTPS Automatic Renewal * Make a dry run of the certbot renewal to verify that it is correctly set up. - * ``` + ``` certbot renew --dry-run ``` @@ -545,25 +543,25 @@ We thus add the following rules: * Allow SSH (port 22) - * ``` + ``` ufw allow ssh ``` * Allow HTTP (port 80) - * ``` + ``` ufw allow http ``` * Allow https (port 443) - * ``` + ``` ufw allow https ``` * To enable the firewall, write the following: - * ``` + ``` ufw enable ``` * To see the current security rules, write the following: - * ``` + ``` ufw status verbose ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md index 2eb4ccf..e8968ef 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md @@ -246,17 +246,17 @@ output "fqdn" { We now deploy the 2-node VPN with Terraform. Make sure that you are in the correct folder containing the main and variables files. * Initialize Terraform: - * ``` + ``` terraform init ``` * Apply Terraform to deploy Nextcloud: - * ``` + ``` terraform apply ``` Note that, at any moment, if you want to see the information on your Terraform deployment, write the following: - * ``` + ``` terraform show ``` @@ -274,19 +274,19 @@ Note that, at any moment, if you want to see the information on your Terraform d We need to install a few things on the Nextcloud VM before going further. * Update the Nextcloud VM - * ``` + ``` apt update ``` * Install ping on the Nextcloud VM if you want to test the VPN connection (Optional) - * ``` + ``` apt install iputils-ping -y ``` * Install Rsync on the Nextcloud VM - * ``` + ``` apt install rsync ``` * Install nano on the Nextcloud VM - * ``` + ``` apt install nano ``` * Install Cron on the Nextcloud VM @@ -295,19 +295,19 @@ We need to install a few things on the Nextcloud VM before going further. # Prepare the VMs for the Rsync Daily Backup * Test the VPN (Optional) with [ping](../../computer_it_basics/cli_scripts_basics.md#test-the-network-connectivity-of-a-domain-or-an-ip-address-with-ping) - * ``` + ``` ping ``` * Generate an SSH key pair on the Backup VM - * ``` + ``` ssh-keygen ``` * Take note of the public key in the Backup VM - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Add the public key of the Backup VM in the Nextcloud VM - * ``` + ``` nano ~/.ssh/authorized_keys ``` @@ -318,11 +318,11 @@ We need to install a few things on the Nextcloud VM before going further. We now set a daily cron job that will make a backup between the Nextcloud VM and the Backup VM using Rsync. * Open the crontab on the Backup VM - * ``` + ``` crontab -e ``` * Add the cron job at the end of the file - * ``` + ``` 0 8 * * * rsync -avz --no-perms -O --progress --delete --log-file=/root/rsync_storage.log root@10.1.3.2:/mnt/backup/ /mnt/backup/ ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_nomad.md b/collections/system_administrators/terraform/advanced/terraform_nomad.md index 13fbde5..a0ff206 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nomad.md +++ b/collections/system_administrators/terraform/advanced/terraform_nomad.md @@ -61,14 +61,14 @@ Also note that this deployment uses both the Planetary network and WireGuard. We start by creating the main file for our Nomad cluster. * Create a directory for your Terraform Nomad cluster - * ``` + ``` mkdir nomad ``` - * ``` + ``` cd nomad ``` * Create the `main.tf` file - * ``` + ``` nano main.tf ``` @@ -255,12 +255,12 @@ output "client2_planetary_ip" { We create a credentials file that will contain the environment variables. This file should be in the same directory as the main file. * Create the `credentials.auto.tfvars` file - * ``` + ``` nano credentials.auto.tfvars ``` * Copy the `credentials.auto.tfvars` content and save the file - * ``` + ``` mnemonics = "..." SSH_KEY = "..." @@ -280,12 +280,12 @@ Make sure to replace the three dots by your own information for `mnemonics` and We now deploy the Nomad Cluster with Terraform. Make sure that you are in the directory containing the `main.tf` file. * Initialize Terraform - * ``` + ``` terraform init ``` * Apply Terraform to deploy the Nomad cluster - * ``` + ``` terraform apply ``` @@ -300,7 +300,7 @@ Note that the IP addresses will be shown under `Outputs` after running the comma ### SSH with the Planetary Network * To [SSH with the Planetary network](ssh_openssh.md), write the following with the proper IP address - * ``` + ``` ssh root@planetary_ip ``` @@ -311,7 +311,7 @@ You now have an SSH connection access over the Planetary network to the client a To SSH with WireGuard, we first need to set the proper WireGuard configurations. * Create a file named `wg.conf` in the directory `/etc/wireguard` - * ``` + ``` nano /etc/wireguard/wg.conf ``` @@ -319,18 +319,18 @@ To SSH with WireGuard, we first need to set the proper WireGuard configurations. * Note that you can use `terraform show` to see the Terraform output. The WireGuard configurations (`wg_config`) stands in between the two `EOT` instances. * Start WireGuard on your local computer - * ``` + ``` wg-quick up wg ``` * As a test, you can [ping](../../computer_it_basics/cli_scripts_basics.md#test-the-network-connectivity-of-a-domain-or-an-ip-address-with-ping) the WireGuard IP of a node to make sure the connection is correct - * ``` + ``` ping wg_ip ``` We are now ready to SSH into the client and server nodes with WireGuard. * To SSH with WireGuard, write the following with the proper IP address: - * ``` + ``` ssh root@wg_ip ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_wireguard_ssh.md b/collections/system_administrators/terraform/advanced/terraform_wireguard_ssh.md index b357ad1..6c5e6c1 100644 --- a/collections/system_administrators/terraform/advanced/terraform_wireguard_ssh.md +++ b/collections/system_administrators/terraform/advanced/terraform_wireguard_ssh.md @@ -70,20 +70,19 @@ Modify the variable file to take into account your own seed phras and SSH keys. Now let's create the Terraform files. * Open the terminal and go to the home directory - * ``` + ``` cd ~ ``` * Create the folder `terraform` and the subfolder `deployment-wg-ssh`: - * ``` + ``` mkdir -p terraform/deployment-wg-ssh ``` - * ``` + ``` cd terraform/deployment-wg-ssh ``` - ``` * Create the `main.tf` file: - * ``` + ``` nano main.tf ``` @@ -173,12 +172,12 @@ output "node1_zmachine1_ip" { ``` * Create the `credentials.auto.tfvars` file: - * ``` + ``` nano credentials.auto.tfvars ``` * Copy the `credentials.auto.tfvars` content, set the node ID as well as your mnemonics and SSH public key, then save the file. - * ``` + ``` mnemonics = "..." SSH_KEY = "..." @@ -198,12 +197,12 @@ Make sure to add your own seed phrase and SSH public key. You will also need to We now deploy the micro VM with Terraform. Make sure that you are in the correct folder `terraform/deployment-wg-ssh` containing the main and variables files. * Initialize Terraform: - * ``` + ``` terraform init ``` * Apply Terraform to deploy the micro VM: - * ``` + ``` terraform apply ``` * Terraform will then present you the actions it will perform. Write `yes` to confirm the deployment. @@ -264,10 +263,11 @@ You now have access into the VM over Wireguard SSH connection. If you want to destroy the Terraform deployment, write the following in the terminal: -* ``` + ``` terraform destroy ``` - * Then write `yes` to confirm. + +Then write `yes` to confirm. Make sure that you are in the corresponding Terraform folder when writing this command. In this guide, the folder is `deployment-wg-ssh`. diff --git a/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md b/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md index 7c6d3ef..e9cbdaa 100644 --- a/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md +++ b/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md @@ -74,19 +74,19 @@ Now let's create the Terraform files. * Open the terminal and go to the home directory - * ``` + ``` cd ~ ``` * Create the folder `terraform` and the subfolder `deployment-wg-vpn`: - * ``` + ``` mkdir -p terraform && cd $_ ``` - * ``` + ``` mkdir deployment-wg-vpn && cd $_ ``` * Create the `main.tf` file: - * ``` + ``` nano main.tf ``` @@ -229,12 +229,12 @@ output "ipv4_vm2" { In this guide, the virtual IP for `vm1` is 10.1.3.2 and the virtual IP for `vm2` is 10.1.4.2. This might be different during your own deployment. Change the codes in this guide accordingly. * Create the `credentials.auto.tfvars` file: - * ``` + ``` nano credentials.auto.tfvars ``` * Copy the `credentials.auto.tfvars` content and save the file. - * ``` + ``` mnemonics = "..." SSH_KEY = "..." @@ -256,17 +256,17 @@ Set the parameters for your VMs as you wish. The two servers will have the same We now deploy the VPN with Terraform. Make sure that you are in the correct folder `terraform/deployment-wg-vpn` containing the main and variables files. * Initialize Terraform by writing the following in the terminal: - * ``` + ``` terraform init ``` * Apply the Terraform deployment: - * ``` + ``` terraform apply ``` * Terraform will then present you the actions it will perform. Write `yes` to confirm the deployment. Note that, at any moment, if you want to see the information on your Terraform deployments, write the following: - * ``` + ``` terraform show ``` @@ -279,19 +279,19 @@ To set the Wireguard connection, on your local computer, you will need to take t For more information on WireGuard, notably in relation to Windows, please read [this documentation](ssh_wireguard.md). * Create a file named `wg.conf` in the directory: `/usr/local/etc/wireguard/wg.conf`. - * ``` + ``` nano /usr/local/etc/wireguard/wg.conf ``` * Paste the content between the two `EOT` displayed after you set `terraform apply`. * Start the wireguard: - * ``` + ``` wg-quick up wg ``` If you want to stop the Wireguard service, write the following on your terminal: -* ``` + ``` wg-quick down wg ``` @@ -299,7 +299,7 @@ If you want to stop the Wireguard service, write the following on your terminal: As a test, you can [ping](../../computer_it_basics/cli_scripts_basics.md#test-the-network-connectivity-of-a-domain-or-an-ip-address-with-ping) the virtual IP address of the VMs to make sure the Wireguard connection is correct. Make sure to replace `wg_vm_ip` with the proper IP address for each VM: -* ``` + ``` ping wg_vm_ip ``` @@ -329,10 +329,11 @@ You now have an SSH connection access to the VMs over Wireguard and IPv4. If you want to destroy the Terraform deployment, write the following in the terminal: -* ``` + ``` terraform destroy ``` - * Then write `yes` to confirm. + +Then write `yes` to confirm. Make sure that you are in the corresponding Terraform folder when writing this command. In this guide, the folder is `deployment-wg-vpn`. From d51327929768c736d77674c6b2c9e586e0d81a5d Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 12:57:47 -0400 Subject: [PATCH 100/134] manual, sysadmins, pulumi --- .../pulumi/pulumi_examples.md | 14 +++++++------- .../system_administrators/pulumi/pulumi_install.md | 6 +++--- .../terraform/advanced/terraform_nextcloud_vpn.md | 4 +++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/collections/system_administrators/pulumi/pulumi_examples.md b/collections/system_administrators/pulumi/pulumi_examples.md index ee8ab14..9910d49 100644 --- a/collections/system_administrators/pulumi/pulumi_examples.md +++ b/collections/system_administrators/pulumi/pulumi_examples.md @@ -25,11 +25,11 @@ There are a few things to set up before exploring Pulumi. Since we will be using * [Install Pulumi](pulumi_install.md) on your machine * Clone the **Pulumi-ThreeFold** repository - * ``` + ``` git clone https://github.com/threefoldtech/pulumi-threefold ``` * Change directory - * ``` + ``` cd ./pulumi-threefold ``` @@ -38,15 +38,15 @@ There are a few things to set up before exploring Pulumi. Since we will be using You can export the environment variables before deploying workloads. * Export the network (**dev**, **qa**, **test**, **main**). Note that we are using the **dev** network by default. - * ``` + ``` export NETWORK="Enter the network" ``` * Export your mnemonics. - * ``` + ``` export MNEMONIC="Enter the mnemonics" ``` * Export the SSH_KEY (public key). - * ``` + ``` export SSH_KEY="Enter the public Key" ``` @@ -65,11 +65,11 @@ The different examples that work simply by running **make run** are the followin We give an example with **virtual_machine**. * Go to the directory **virtual_machine** - * ``` + ``` cd examples/virtual_machine ``` * Deploy the Pulumi workload with **make** - * ``` + ``` make run ``` diff --git a/collections/system_administrators/pulumi/pulumi_install.md b/collections/system_administrators/pulumi/pulumi_install.md index 93262a8..531c591 100644 --- a/collections/system_administrators/pulumi/pulumi_install.md +++ b/collections/system_administrators/pulumi/pulumi_install.md @@ -17,15 +17,15 @@ To install Pulumi, simply follow the steps provided in the [Pulumi documentation ## Installation * Install on Linux - * ``` + ``` curl -fsSL https://get.pulumi.com | sh ``` * Install on MAC - * ``` + ``` brew install pulumi/tap/pulumi ``` * Install on Windows - * ``` + ``` choco install pulumi ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md index e8968ef..3d6843a 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_vpn.md @@ -290,7 +290,9 @@ We need to install a few things on the Nextcloud VM before going further. apt install nano ``` * Install Cron on the Nextcloud VM - * apt install cron + ``` + apt install cron + ``` # Prepare the VMs for the Rsync Daily Backup From c54a6ab037a10ff453ec3507ebe9495f00f1fc18 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:00:03 -0400 Subject: [PATCH 101/134] manual, sysadmins, cli --- .../computer_it_basics/cli_scripts_basics.md | 257 +++++++++--------- 1 file changed, 129 insertions(+), 128 deletions(-) diff --git a/collections/system_administrators/computer_it_basics/cli_scripts_basics.md b/collections/system_administrators/computer_it_basics/cli_scripts_basics.md index dec08b2..c6f591b 100644 --- a/collections/system_administrators/computer_it_basics/cli_scripts_basics.md +++ b/collections/system_administrators/computer_it_basics/cli_scripts_basics.md @@ -24,6 +24,7 @@ - [Become the superuser (su) on Linux](#become-the-superuser-su-on-linux) - [Exit a session](#exit-a-session) - [Know the current user](#know-the-current-user) + - [See the path of a package](#see-the-path-of-a-package) - [Set the path of a package](#set-the-path-of-a-package) - [See the current path](#see-the-current-path-1) - [Find the current shell](#find-the-current-shell) @@ -127,11 +128,11 @@ You can also set a number of counts with `-c` on Linux and MAC and `-n` on Windo Here are the steps to install [Go](https://go.dev/). * Install go - * ``` + ``` sudo apt install golang-go ``` * Verify that go is properly installed - * ``` + ``` go version ``` @@ -142,19 +143,19 @@ Here are the steps to install [Go](https://go.dev/). Follow those steps to install [Brew](https://brew.sh/) * Installation command from Brew: - * ``` + ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` * Add the path to the **.profile** directory. Replace by your username. - * ``` + ``` echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home//.profile ``` * Evaluation the following: - * ``` + ``` eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" ``` * Verify the installation - * ``` + ``` brew doctor ``` @@ -163,27 +164,27 @@ Follow those steps to install [Brew](https://brew.sh/) ### Brew basic commands * To update brew in general: - * ``` + ``` brew update ``` * To update a specific package: - * ``` + ``` brew update ``` * To install a package: - * ``` + ``` brew install ``` * To uninstall a package: - * ``` + ``` brew uninstall ``` * To search a package: - * ``` + ``` brew search ``` * [Uninstall Brew](https://github.com/homebrew/install#uninstall-homebrew) - * ``` + ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" ``` @@ -194,11 +195,11 @@ Follow those steps to install [Brew](https://brew.sh/) Installing Terraform with Brew is very simple by following the [Terraform documentation](https://developer.hashicorp.com/terraform/downloads). * Compile HashiCorp software on Homebrew's infrastructure - * ``` + ``` brew tap hashicorp/tap ``` * Install Terraform - * ``` + ``` brew install hashicorp/tap/terraform ``` @@ -207,27 +208,27 @@ Installing Terraform with Brew is very simple by following the [Terraform docume ### Yarn basic commands * Add a package - * ``` + ``` yarn add ``` * Initialize the development of a package - * ``` + ``` yarn init ``` * Install all the dependencies in the **package.json** file - * ``` + ``` yarn install ``` * Publish a package to a package manager - * ``` + ``` yarn publish ``` * Remove unused package from the current package - * ``` + ``` yarn remove ``` * Clean the cache - * ``` + ``` yarn cache clean ``` @@ -260,11 +261,11 @@ ls -ld .?* You can use **tree** to display the files and organization of a directory: * General command - * ``` + ``` tree ``` * View hidden files - * ``` + ``` tree -a ``` @@ -336,10 +337,10 @@ which On MAC and Linux, you can use **coreutils** and **realpath** from Brew: -* ``` + ``` brew install coreutils ``` -* ``` + ``` realpath file_name ``` @@ -350,11 +351,11 @@ On MAC and Linux, you can use **coreutils** and **realpath** from Brew: You can use either command: * Option 1 - * ``` + ``` sudo -i ``` * Option 2 - * ``` + ``` sudo -s ``` @@ -364,10 +365,10 @@ You can use either command: You can use either command depending on your shell: -* ``` + ``` exit ``` -* ``` + ``` logout ``` @@ -377,7 +378,7 @@ You can use either command depending on your shell: You can use the following command: -* ``` + ``` whoami ``` @@ -387,7 +388,7 @@ You can use the following command: To see the path of a package, you can use the following command: -* ``` + ``` whereis ``` @@ -414,11 +415,11 @@ pwd ### Find the current shell * Compact version - * ``` + ``` echo $SHELL ``` * Detailed version - * ``` + ``` ls -l /proc/$$/exe ``` @@ -427,35 +428,35 @@ pwd ### SSH into Remote Server * Create SSH key pair - * ``` + ``` ssh-keygen ``` * Install openssh-client on the local computer* - * ``` + ``` sudo apt install openssh-client ``` * Install openssh-server on the remote computer* - * ``` + ``` sudo apt install openssh-server ``` * Copy public key - * ``` + ``` cat ~/.ssh/id_rsa.pub ``` * Create the ssh directory on the remote computer - * ``` + ``` mkdir ~/.ssh ``` * Add public key in the file **authorized_keys** on the remote computer - * ``` + ``` nano ~/.ssh/authorized_keys ``` * Check openssh-server status - * ``` + ``` sudo service ssh status ``` * SSH into the remote machine - * ``` + ``` ssh @ ``` @@ -468,11 +469,11 @@ To enable remote login on a MAC, [read this section](#enable-remote-login-on-mac ### Replace a string by another string in a text file * Replace one string by another (e.g. **old_string**, **new_string**) - * ``` + ``` sed -i 's/old_string/new_string/g' / ``` * Use environment variables (double quotes) - * ``` + ``` sed -i "s/old_string/$env_variable/g" / ``` @@ -529,11 +530,11 @@ date You can use [Dig](https://man.archlinux.org/man/dig.1) to gather DNS information of a website * Template - * ``` + ``` dig ``` * Example - * ``` + ``` dig threefold.io ``` @@ -546,31 +547,31 @@ You can also use online tools such as [DNS Checker](https://dnschecker.org/). We present one of many ways to partition and mount a disk. * Create partition with [gparted](https://gparted.org/) - * ``` + ``` sudo gparted ``` * Find the disk you want to mount (e.g. **sdb**) - * ``` + ``` sudo fdisk -l ``` * Create a directory to mount the disk to - * ``` + ``` sudo mkdir /mnt/disk ``` * Open fstab - * ``` + ``` sudo nano /etc/fstab ``` * Append the following to the fstab with the proper disk path (e.g. **/dev/sdb**) and mount point (e.g. **/mnt/disk**) - * ``` + ``` /dev/sdb /mnt/disk ext4 defaults 0 0 ``` * Mount the disk - * ``` + ``` sudo mount /mnt/disk ``` * Add permissions (as needed) - * ``` + ``` sudo chmod -R 0777 /mnt/disk ``` @@ -583,36 +584,36 @@ We present one of many ways to partition and mount a disk. You can use [gocryptfs](https://github.com/rfjakob/gocryptfs) to encrypt files. * Install gocryptfs - * ``` + ``` apt install gocryptfs ``` * Create a vault directory (e.g. **vaultdir**) and a mount directory (e.g. **mountdir**) - * ``` + ``` mkdir vaultdir mountdir ``` * Initiate the vault - * ``` + ``` gocryptfs -init vaultdir ``` * Mount the mount directory with the vault - * ``` + ``` gocryptfs vaultdir mountdir ``` * You can now create files in the folder. For example: - * ``` + ``` touch mountdir/test.txt ``` * The new file **test.txt** is now encrypted in the vault - * ``` + ``` ls vaultdir ``` * To unmount the mountedvault folder: * Option 1 - * ``` + ``` fusermount -u mountdir ``` * Option 2 - * ``` + ``` rmdir mountdir ``` @@ -623,27 +624,27 @@ To encrypt files, you can use [Veracrypt](https://www.veracrypt.fr/en/Home.html) * Veracrypt GUI * Download the package - * ``` + ``` wget https://launchpad.net/veracrypt/trunk/1.25.9/+download/veracrypt-1.25.9-Ubuntu-22.04-amd64.deb ``` * Install the package - * ``` + ``` dpkg -i ./veracrypt-1.25.9-Ubuntu-22.04-amd64.deb ``` * Veracrypt console only * Download the package - * ``` + ``` wget https://launchpad.net/veracrypt/trunk/1.25.9/+download/veracrypt-console-1.25.9-Ubuntu-22.04-amd64.deb ``` * Install the package - * ``` + ``` dpkg -i ./veracrypt-console-1.25.9-Ubuntu-22.04-amd64.deb ``` You can visit [Veracrypt download page](https://www.veracrypt.fr/en/Downloads.html) to get the newest releases. * To run Veracrypt - * ``` + ``` veracrypt ``` * Veracrypt documentation is very complete. To begin using the application, visit the [Beginner's Tutorial](https://www.veracrypt.fr/en/Beginner%27s%20Tutorial.html). @@ -661,11 +662,11 @@ ifconfig ### See identity and info of IP address * See abuses related to an IP address: - * ``` + ``` https://www.abuseipdb.com/check/ ``` * See general information of an IP address: - * ``` + ``` https://www.whois.com/whois/ ``` @@ -674,124 +675,124 @@ ifconfig ### ip basic commands * Manage and display the state of all network - * ``` + ``` ip link ``` * Display IP Addresses and property information (abbreviation of address) - * ``` + ``` ip addr ``` * Display and alter the routing table - * ``` + ``` ip route ``` * Manage and display multicast IP addresses - * ``` + ``` ip maddr ``` * Show neighbour object - * ``` + ``` ip neigh ``` * Display a list of commands and arguments for each subcommand - * ``` + ``` ip help ``` * Add an address * Template - * ``` + ``` ip addr add ``` * Example: set IP address to device **enp0** - * ``` + ``` ip addr add 192.168.3.4/24 dev enp0 ``` * Delete an address * Template - * ``` + ``` ip addr del ``` * Example: set IP address to device **enp0** - * ``` + ``` ip addr del 192.168.3.4/24 dev enp0 ``` * Alter the status of an interface * Template - * ``` + ``` ip link set ``` * Example 1: Bring interface online (here device **em2**) - * ``` + ``` ip link set em2 up ``` * Example 2: Bring interface offline (here device **em2**) - * ``` + ``` ip link set em2 down ``` * Add a multicast address * Template - * ``` + ``` ip maddr add ``` * Example : set IP address to device **em2** - * ``` + ``` ip maddr add 33:32:00:00:00:01 dev em2 ``` * Delete a multicast address * Template - * ``` + ``` ip maddr del ``` * Example: set IP address to device **em2** - * ``` + ``` ip maddr del 33:32:00:00:00:01 dev em2 ``` * Add a routing table entry * Template - * ``` + ``` ip route add ``` * Example 1: Add a default route (for all addresses) via a local gateway - * ``` + ``` ip route add default via 192.168.1.1 dev em1 ``` * Example 2: Add a route to 192.168.3.0/24 via the gateway at 192.168.3.2 - * ``` + ``` ip route add 192.168.3.0/24 via 192.168.3.2 ``` * Example 3: Add a route to 192.168.1.0/24 that can be reached on device em1 - * ``` + ``` ip route add 192.168.1.0/24 dev em1 ``` * Delete a routing table entry * Template - * ``` + ``` ip route delete ``` * Example: Delete the route for 192.168.1.0/24 via the gateway at 192.168.1.1 - * ``` + ``` ip route delete 192.168.1.0/24 via 192.168.1.1 ``` * Replace, or add, a route * Template - * ``` + ``` ip route replace ``` * Example: Replace the defined route for 192.168.1.0/24 to use device em1 - * ``` + ``` ip route replace 192.168.1.0/24 dev em1 ``` * Display the route an address will take * Template - * ``` + ``` ip route get ``` * Example: Display the route taken for IP 192.168.18.25 - * ``` + ``` ip route replace 192.168.18.25/24 dev enp0 ``` @@ -804,23 +805,23 @@ References: https://www.commandlinux.com/man-page/man8/ip.8.html ### Display socket statistics * Show all sockets - * ``` + ``` ss -a ``` * Show detailed socket information - * ``` + ``` ss -e ``` * Show timer information - * ``` + ``` ss -o ``` * Do not resolve address - * ``` + ``` ss -n ``` * Show process using the socket - * ``` + ``` ss -p ``` @@ -833,19 +834,19 @@ References: https://www.commandlinux.com/man-page/man8/ss.8.html ### Query or control network driver and hardware settings * Display ring buffer for a device (e.g. **eth0**) - * ``` + ``` ethtool -g eth0 ``` * Display driver information for a device (e.g. **eth0**) - * ``` + ``` ethtool -i eth0 ``` * Identify eth0 by sight, e.g. by causing LEDs to blink on the network port - * ``` + ``` ethtool -p eth0 ``` * Display network and driver statistics for a device (e.g. **eth0**) - * ``` + ``` ethtool -S eth0 ``` @@ -866,21 +867,21 @@ cat /sys/class/net//carrier ### Add IP address to hardware port (ethernet) * Find ethernet port ID on both computers - * ``` + ``` ip a ``` * Add IP address (DHCO or static) * Computer 1 - * ``` + ``` ip addr add /24 dev ``` * Computer 2 - * ``` + ``` ip addr add /24 dev ``` * [Ping](#test-the-network-connectivity-of-a-domain-or-an-ip-address-with-ping) the address to confirm connection - * ``` + ``` ping ``` @@ -918,11 +919,11 @@ You can use the following template when you set an IP address manually: You can use the following template to add arguments when running a script: * Option 1 - * ``` + ``` ./example_script.sh arg1 arg2 ``` * Option 2 - * ``` + ``` sh example_script.sh "arg1" "arg2" ``` @@ -930,16 +931,16 @@ You can use the following template to add arguments when running a script: * Write a script * File: `example_script.sh` - * ```bash + ```bash #!/bin/sh echo $@ ``` * Give permissions - * ```bash + ```bash chmod +x ./example_script.sh ``` * Run the script with arguments - * ```bash + ```bash sh example_script.sh arg1 arg2 ``` @@ -947,7 +948,7 @@ You can use the following template to add arguments when running a script: ### Iterate over arguments * Write the script - * ```bash + ```bash # iterate_script.sh #!/bin/bash for i; do @@ -955,16 +956,16 @@ You can use the following template to add arguments when running a script: done ``` * Give permissions - * ``` + ``` chmod +x ./iterate_script.sh ``` * Run the script with arguments - * ``` + ``` sh iterate_script.sh arg1 arg2 ``` * The following script is equivalent - * ```bash + ```bash # iterate_script.sh #/bin/bash for i in $*; do @@ -977,7 +978,7 @@ You can use the following template to add arguments when running a script: ### Count lines in files given as arguments * Write the script - * ```bash + ```bash # count_lines.sh #!/bin/bash for i in $*; do @@ -986,11 +987,11 @@ You can use the following template to add arguments when running a script: done ``` * Give permissions - * ``` + ``` chmod +x ./count_lines.sh ``` * Run the script with arguments (files). Here we use the script itself as an example. - * ``` + ``` sh count_lines.sh count_lines.sh ``` @@ -999,14 +1000,14 @@ You can use the following template to add arguments when running a script: ### Find path of a file * Write the script - * ```bash + ```bash # find.sh #!/bin/bash find / -iname $1 2> /dev/null ``` * Run the script - * ``` + ``` sh find.sh ``` @@ -1015,13 +1016,13 @@ You can use the following template to add arguments when running a script: ### Print how many arguments are passed in a script * Write the script - * ```bash + ```bash # print_qty_args.sh #!/bin/bash echo This script was passed $# arguments ``` * Run the script - * ``` + ``` sh print_qty_args.sh ``` @@ -1050,7 +1051,7 @@ Note that the Terraform documentation also covers other methods to install Terra * Option 1: * Use the following command line: - * ``` + ``` systemsetup -setremotelogin on ``` * Option 2 @@ -1063,7 +1064,7 @@ Note that the Terraform documentation also covers other methods to install Terra * Open **Finder** \> **Go** \> **Go to Folder** * Paste this path - * ``` + ``` ~/Library/Caches ``` @@ -1087,15 +1088,15 @@ To install Chocolatey on Windows, we follow the [official Chocolatey website](ht * Run PowerShell as Administrator * Check if **Get-ExecutionPolicy** is restricted - * ``` + ``` Get-ExecutionPolicy ``` * If it is restricted, run the following command: - * ``` + ``` Set-ExecutionPolicy AllSigned ``` * Install Chocolatey - * ``` + ``` Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) ``` * Note: You might need to restart PowerShell to use Chocolatey @@ -1107,7 +1108,7 @@ To install Chocolatey on Windows, we follow the [official Chocolatey website](ht Once you've installed Chocolatey on Windows, installing Terraform is as simple as can be: * Install Terraform with Chocolatey - * ``` + ``` choco install terraform ``` From 8f74e1e9bfb5f85ff2fa121286db3f2a32343a45 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:02:02 -0400 Subject: [PATCH 102/134] manual, sysadmins, computer basics --- .../computer_it_basics/docker_basics.md | 60 ++++++------ .../computer_it_basics/file_transfer.md | 34 +++---- .../computer_it_basics/git_github_basics.md | 96 ++++++++++--------- 3 files changed, 98 insertions(+), 92 deletions(-) diff --git a/collections/system_administrators/computer_it_basics/docker_basics.md b/collections/system_administrators/computer_it_basics/docker_basics.md index ede603f..105804a 100644 --- a/collections/system_administrators/computer_it_basics/docker_basics.md +++ b/collections/system_administrators/computer_it_basics/docker_basics.md @@ -70,16 +70,16 @@ sudo sh get-docker.sh To completely remove docker from your machine, you can follow these steps: * List the docker packages - * ``` + ``` dpkg -l | grep -i docker ``` * Purge and autoremove docker - * ``` + ``` apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli docker-compose-plugin apt-get autoremove -y --purge docker-engine docker docker.io docker-ce docker-compose-plugin ``` * Remove the docker files and folders - * ``` + ``` rm -rf /var/lib/docker /etc/docker rm /etc/apparmor.d/docker groupdel docker @@ -93,11 +93,11 @@ You can also use the command **whereis docker** to see if any Docker folders and ### List containers * List only running containers - * ``` + ``` docker ps ``` * List all containers (running + stopped) - * ``` + ``` docker ps -a ``` @@ -108,15 +108,15 @@ You can also use the command **whereis docker** to see if any Docker folders and To pull an image from [Docker Hub](https://hub.docker.com/): * Pull an image - * ``` + ``` docker pull ``` * Pull an image with the tag - * ``` + ``` docker pull :tag ``` * Pull all tags of an image - * ``` + ``` docker pull -a ``` @@ -127,15 +127,15 @@ To pull an image from [Docker Hub](https://hub.docker.com/): To pull an image to [Docker Hub](https://hub.docker.com/): * Push an image - * ``` + ``` docker push ``` * Push an image with the tag - * ``` + ``` docker push :tag ``` * Push all tags of an image - * ``` + ``` docker pull -a ``` @@ -144,11 +144,11 @@ To pull an image to [Docker Hub](https://hub.docker.com/): ### Inspect and pull an image with GHCR * Inspect the docker image - * ``` + ``` docker inspect ghcr.io//: ``` * Pull the docker image - * ``` + ``` docker pull ghcr.io//: ``` @@ -174,20 +174,20 @@ To install Skopeo, read [this documentation](install.md). Use **docker build** to build a container based on a Dockerfile * Build a container based on current directory Dockerfile - * ``` + ``` docker build . ``` * Build a container and store the image with a given name * Template - * ``` + ``` docker build -t ":" ``` * Example - * ``` + ``` docker build -t newimage:latest ``` * Build a docker container without using the cache - * ``` + ``` docker build --no-cache ``` @@ -206,15 +206,15 @@ docker images To run a container based on an image, use the command **docker run**. * Run an image - * ``` + ``` docker run ``` * Run an image in the background (run and detach) - * ``` + ``` docker run -d ``` * Run an image with CLI input - * ``` + ``` docker run -it ``` @@ -229,7 +229,7 @@ You can also specify the shell, e.g. **docker run -it /bin/bash** To run a new command in an existing container, use **docker exec**. * Execute interactive shell on the container - * ``` + ``` docker exec -it sh ``` @@ -238,11 +238,11 @@ To run a new command in an existing container, use **docker exec**. ### Bash shell into container * Bash shell into a container - * ``` + ``` docker exec -i -t /bin/bash ``` * Bash shell into a container with root - * ``` + ``` docker exec -i -t -u root /bin/bash ``` @@ -300,22 +300,22 @@ docker cp : ### Delete all the containers, images and volumes * To delete all containers: - * ``` + ``` docker compose rm -f -s -v ``` * To delete all images: - * ``` + ``` docker rmi -f $(docker images -aq) ``` * To delete all volumes: - * ``` + ``` docker volume rm $(docker volume ls -qf dangling=true) ``` * To delete all containers, images and volumes: - * ``` + ``` docker compose rm -f -s -v && docker rmi -f $(docker images -aq) && docker volume rm $(docker volume ls -qf dangling=true) ``` @@ -324,7 +324,7 @@ docker cp : ### Kill all the Docker processes * To kill all processes: - * ``` + ``` killall Docker && open /Applications/Docker.app ``` @@ -353,11 +353,11 @@ docker ps -s ### Examine disks usage * Basic mode - * ``` + ``` docker system df ``` * Verbose mode - * ``` + ``` docker system df -v ``` diff --git a/collections/system_administrators/computer_it_basics/file_transfer.md b/collections/system_administrators/computer_it_basics/file_transfer.md index 41718dc..a6320d3 100644 --- a/collections/system_administrators/computer_it_basics/file_transfer.md +++ b/collections/system_administrators/computer_it_basics/file_transfer.md @@ -33,14 +33,14 @@ Deploying on the TFGrid with tools such as the Playground and Terraform is easy ### File transfer with IPv4 * From local to remote, write the following on the local terminal: - * ``` + ``` scp / @:/// ``` * From remote to local, you can write the following on the local terminal (more secure): - * ``` + ``` scp @:/// / * From remote to local, you can also write the following on the remote terminal: - * ``` + ``` scp / @:/// ### File transfer with IPv6 @@ -56,11 +56,11 @@ For IPv6, it is similar to IPv4 but you need to add `-6` after scp and add `\[` We show here how to transfer files between two computers. Note that at least one of the two computers must be local. This will transfer the content of the source directory into the destination directory. * From local to remote - * ``` + ``` rsync -avz --progress --delete /path/to/local/directory/ remote_user@:/path/to/remote/directory ``` * From remote to local - * ``` + ``` rsync -avz --progress --delete remote_user@:/path/to/remote/directory/ /path/to/local/directory ``` @@ -77,16 +77,16 @@ Here is short description of the parameters used: [rsync-sidekick](https://github.com/m-manu/rsync-sidekick) propagates changes from source directory to destination directory. You can run rsync-sidekick before running rsync. Make sure that [Go is installed](#install-go). * Install rsync-sidekick - * ``` + ``` sudo go install github.com/m-manu/rsync-sidekick@latest ``` * Reorganize the files and folders with rsync-sidekick - * ``` + ``` rsync-sidekick /path/to/local/directory/ username@IP_Address:/path/to/remote/directory ``` * Transfer and update files and folders with rsync - * ``` + ``` sudo rsync -avz --progress --delete --log-file=/path/to/local/directory/rsync_storage.log /path/to/local/directory/ username@IP_Address:/path/to/remote/directory ``` @@ -95,18 +95,18 @@ Here is short description of the parameters used: We show how to automate file transfers between two computers using rsync. * Create the script file - * ``` + ``` nano rsync_backup.sh ``` * Write the following script with the proper paths. Here the log is saved in the same directory. - * ``` + ``` # filename: rsync_backup.sh #!/bin/bash sudo rsync -avz --progress --delete --log-file=/path/to/local/directory/rsync_storage.log /path/to/local/directory/ username@IP_Address:/path/to/remote/directory ``` * Give permission - * ``` + ``` sudo chmod +x /path/to/script/rsync_backup.sh ``` * Set a cron job to run the script periodically @@ -115,11 +115,11 @@ We show how to automate file transfers between two computers using rsync. sudo cp path/to/script/rsync_backup.sh /root ``` * Open the cron file - * ``` + ``` sudo crontab -e ``` * Add the following to run the script everyday. For this example, we set the time at 18:00PM - * ``` + ``` 0 18 * * * /root/rsync_backup.sh ``` @@ -128,11 +128,11 @@ We show how to automate file transfers between two computers using rsync. Depending on your situation, the parameters **--checksum** or **--ignore-times** can be quite useful. Note that adding either parameter will slow the transfer. * With **--ignore time**, you ignore both the time and size of each file. This means that you transfer all files from source to destination. - * ``` + ``` rsync --ignore-time source_folder/ destination_folder ``` * With **--checksum**, you verify with a checksum that the files from source and destination are the same. This means that you transfer all files that have a different checksum compared source to destination. - * ``` + ``` rsync --checksum source_folder/ destination_folder ``` @@ -141,11 +141,11 @@ Depending on your situation, the parameters **--checksum** or **--ignore-times** rsync does not act the same whether you use or not a slash ("\/") at the end of the source path. * Copy content of **source_folder** into **destination_folder** to obtain the result: **destination_folder/source_folder_content** - * ``` + ``` rsync source_folder/ destination_folder ``` * Copy **source_folder** into **destination_folder** to obtain the result: **destination_folder/source_folder/source_folder_content** - * ``` + ``` rsync source_folder destination_folder ``` diff --git a/collections/system_administrators/computer_it_basics/git_github_basics.md b/collections/system_administrators/computer_it_basics/git_github_basics.md index dca25e4..831d810 100644 --- a/collections/system_administrators/computer_it_basics/git_github_basics.md +++ b/collections/system_administrators/computer_it_basics/git_github_basics.md @@ -16,6 +16,12 @@ - [Go to another branch](#go-to-another-branch) - [Add your changes to a local branch](#add-your-changes-to-a-local-branch) - [Push changes of a local branch to the remote Github branch](#push-changes-of-a-local-branch-to-the-remote-github-branch) + - [Count the differences between two branches](#count-the-differences-between-two-branches) + - [See the default branch](#see-the-default-branch) + - [Force a push](#force-a-push) + - [Merge a branch to a different branch](#merge-a-branch-to-a-different-branch) + - [Clone completely one branch to another branch locally then push the changes to Github](#clone-completely-one-branch-to-another-branch-locally-then-push-the-changes-to-github) + - [The 3 levels of the command reset](#the-3-levels-of-the-command-reset) - [Reverse modifications to a file where changes haven't been staged yet](#reverse-modifications-to-a-file-where-changes-havent-been-staged-yet) - [Download binaries from Github](#download-binaries-from-github) - [Resolve conflicts between branches](#resolve-conflicts-between-branches) @@ -50,11 +56,11 @@ You can install git on MAC, Windows and Linux. You can consult Git's documentati ### Install on Linux * Fedora distribution - * ``` + ``` dnf install git-all ``` * Debian-based distribution - * ``` + ``` apt install git-all ``` * Click [here](https://git-scm.com/download/linux) for other Linux distributions @@ -62,7 +68,7 @@ You can install git on MAC, Windows and Linux. You can consult Git's documentati ### Install on MAC * With Homebrew - * ``` + ``` brew install git ``` @@ -125,11 +131,11 @@ git checkout ### Add your changes to a local branch * Add all changes - * ``` + ``` git add . ``` * Add changes of a specific file - * ``` + ``` git add / ``` @@ -139,13 +145,13 @@ git checkout To push changes to Github, you can use the following commands: -* ``` + ``` git add . ``` -* ``` + ``` git commit -m "write your changes here in comment" ``` -* ``` + ``` git push ``` @@ -178,15 +184,15 @@ git push --force ### Merge a branch to a different branch * Checkout the branch you want to copy content TO - * ``` + ``` git checkout branch_name ``` * Merge the branch you want content FROM - * ``` + ``` git merge origin/dev_mermaid ``` * Push the changes - * ``` + ``` git push -u origin/head ``` @@ -197,19 +203,19 @@ git push --force For this example, we copy **branchB** into **branchA**. * See available branches - * ``` + ``` git branch -r ``` * Go to **branchA** - * ``` + ``` git checkout branchA ``` * Copy **branchB** into **branchA** - * ``` + ``` git git reset --hard branchB ``` * Force the push - * ``` + ``` git push --force ``` @@ -217,17 +223,17 @@ For this example, we copy **branchB** into **branchA**. ### The 3 levels of the command reset -* ``` + ``` git reset --soft ``` * Bring the History to the Stage/Index * Discard last commit -* ``` + ``` git reset --mixed ``` * Bring the History to the Working Directory * Discard last commit and add -* ``` + ``` git reset --hard ``` * Bring the History to the Working Directory @@ -252,7 +258,7 @@ git checkout ### Download binaries from Github * Template: - * ``` + ``` wget -O https://raw.githubusercontent.com//// ``` @@ -263,29 +269,29 @@ git checkout We show how to resolve conflicts in a development branch (e.g. **branch_dev**) and then merging the development branch into the main branch (e.g. **branch_main**). * Clone the repo - * ``` + ``` git clone ``` * Pull changes and potential conflicts - * ``` + ``` git pull origin branch_main ``` * Checkout the development branch - * ``` + ``` git checkout branch_dev ``` * Resolve conflicts in a text editor * Save changes in the files * Add the changes - * ``` + ``` git add . ``` * Commit the changes - * ``` + ``` git commit -m "your message here" ``` * Push the changes - * ``` + ``` git push ``` @@ -294,11 +300,11 @@ We show how to resolve conflicts in a development branch (e.g. **branch_dev**) a ### Download all repositories of an organization * Log in to gh - * ``` + ``` gh auth login ``` * Clone all repositories. Replace with the organization in question. - * ``` + ``` gh repo list --limit 1000 | while read -r repo _; do gh repo clone "$repo" "$repo" done @@ -309,15 +315,15 @@ We show how to resolve conflicts in a development branch (e.g. **branch_dev**) a ### Revert a push commited with git * Find the commit ID - * ``` + ``` git log -p ``` * Revert the commit - * ``` + ``` git revert ``` * Push the changes - * ``` + ``` git push ``` @@ -334,11 +340,11 @@ git clone -b --single-branch //.git ### Revert to a backup branch * Checkout the branch you want to update (**branch**) - * ``` + ``` git checkout ``` * Do a reset of your current branch based on the backup branch - * ``` + ``` git reset --hard ``` @@ -363,19 +369,19 @@ Note that this will not work for untracked and new files. See below for untracke This method can be used to overwrite local files. This will work even if you have untracked and new files. * Save local changes on a stash - * ``` + ``` git stash --include-untracked ``` * Discard local changes - * ``` + ``` git reset --hard ``` * Discard untracked and new files - * ``` + ``` git clean -fd ``` * Pull the remote branch - * ``` + ``` git pull ``` @@ -388,27 +394,27 @@ Then, to delete the stash, you can use **git stash drop**. The stash command is used to record the current state of the working directory. * Stash a branch (equivalent to **git stash push**) - * ``` + ``` git stash ``` * List the changes in the stash - * ``` + ``` git stash list ``` * Inspect the changes in the stash - * ``` + ``` git stash show ``` * Remove a single stashed state from the stash list and apply it on top of the current working tree state - * ``` + ``` git stash pop ``` * Apply the stash on top of the current working tree state without removing the state from the stash list - * ``` + ``` git stash apply ``` * Drop a stash - * ``` + ``` git stash drop ``` @@ -431,15 +437,15 @@ To download VS-Code, visit their website and follow the given instructions. There are many ways to install VS-Codium. Visit the [official website](https://vscodium.com/#install) for more information. * Install on MAC - * ``` + ``` brew install --cask vscodium ``` * Install on Linux - * ``` + ``` snap install codium --classic ``` * Install on Windows - * ``` + ``` choco install vscodium ``` From 3540d7d64d56bc4debfe0c027011c044f9727621 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:04:07 -0400 Subject: [PATCH 103/134] manual, sysadmins, ipfs --- .../advanced/ipfs/ipfs_fullvm.md | 58 +++++++++---------- .../advanced/ipfs/ipfs_microvm.md | 42 +++++++------- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/collections/system_administrators/advanced/ipfs/ipfs_fullvm.md b/collections/system_administrators/advanced/ipfs/ipfs_fullvm.md index e61a173..f2312a4 100644 --- a/collections/system_administrators/advanced/ipfs/ipfs_fullvm.md +++ b/collections/system_administrators/advanced/ipfs/ipfs_fullvm.md @@ -30,7 +30,7 @@ We start by deploying a full VM on the ThreeFold Playground. * Minimum storage: 50GB * After deployment, note the VM IPv4 address * Connect to the VM via SSH - * ``` + ``` ssh root@VM_IPv4_address ``` @@ -39,39 +39,39 @@ We start by deploying a full VM on the ThreeFold Playground. We create a root-access user. Note that this step is optional. * Once connected, create a new user with root access (for this guide we use "newuser") - * ``` + ``` adduser newuser ``` * You should now see the new user directory - * ``` + ``` ls /home ``` * Give sudo capacity to the new user - * ``` + ``` usermod -aG sudo newuser ``` * Switch to the new user - * ``` + ``` su - newuser ``` * Create a directory to store the public key - * ``` + ``` mkdir ~/.ssh ``` * Give read, write and execute permissions for the directory to the new user - * ``` + ``` chmod 700 ~/.ssh ``` * Add the SSH public key in the file **authorized_keys** and save it - * ``` + ``` nano ~/.ssh/authorized_keys ``` * Exit the VM - * ``` + ``` exit ``` * Reconnect with the new user - * ``` + ``` ssh newuser@VM_IPv4_address ``` @@ -81,19 +81,19 @@ We set a firewall to monitor and control incoming and outgoing network traffic. For our security rules, we want to allow SSH, HTTP and HTTPS (443 and 8443). We thus add the following rules: * Allow SSH (port 22) - * ``` + ``` sudo ufw allow ssh ``` * Allow port 4001 - * ``` + ``` sudo ufw allow 4001 ``` * To enable the firewall, write the following: - * ``` + ``` sudo ufw enable ``` * To see the current security rules, write the following: - * ``` + ``` sudo ufw status verbose ``` You now have enabled the firewall with proper security rules for your IPFS deployment. @@ -109,23 +109,23 @@ If you want to run pubsub capabilities, you need to allow **port 8081**. For mor We install the [IPFS Kubo binary](https://docs.ipfs.tech/install/command-line/#install-official-binary-distributions). * Download the binary - * ``` + ``` wget https://dist.ipfs.tech/kubo/v0.24.0/kubo_v0.24.0_linux-amd64.tar.gz ``` * Unzip the file - * ``` + ``` tar -xvzf kubo_v0.24.0_linux-amd64.tar.gz ``` * Change directory - * ``` + ``` cd kubo ``` * Run the install script - * ``` + ``` sudo bash install.sh ``` * Verify that IPFS Kubo is properly installed - * ``` + ``` ipfs --version ``` @@ -134,23 +134,23 @@ We install the [IPFS Kubo binary](https://docs.ipfs.tech/install/command-line/#i We initialize IPFS and run the IPFS daemon. * Initialize IPFS - * ``` + ``` ipfs init --profile server ``` * Increase the storage capacity (optional) - * ``` + ``` ipfs config Datastore.StorageMax 30GB ``` * Run the IPFS daemon - * ``` + ``` ipfs daemon ``` * Set an Ubuntu systemd service to keep the IPFS daemon running after exiting the VM - * ``` + ``` sudo nano /etc/systemd/system/ipfs.service ``` * Enter the systemd info - * ``` + ``` [Unit] Description=IPFS Daemon [Service] @@ -163,27 +163,27 @@ We initialize IPFS and run the IPFS daemon. WantedBy=multi-user.target ``` * Enable the service - * ``` + ``` sudo systemctl daemon-reload sudo systemctl enable ipfs sudo systemctl start ipfs ``` * Verify that the IPFS daemon is properly running - * ``` + ``` sudo systemctl status ipfs ``` ## Final Verification We reboot and reconnect to the VM and verify that IPFS is properly running as a final verification. * Reboot the VM - * ``` + ``` sudo reboot ``` * Reconnect to the VM - * ``` + ``` ssh newuser@VM_IPv4_address ``` * Check that the IPFS daemon is running - * ``` + ``` ipfs swarm peers ``` ## Questions and Feedback diff --git a/collections/system_administrators/advanced/ipfs/ipfs_microvm.md b/collections/system_administrators/advanced/ipfs/ipfs_microvm.md index 2f58f16..3919dde 100644 --- a/collections/system_administrators/advanced/ipfs/ipfs_microvm.md +++ b/collections/system_administrators/advanced/ipfs/ipfs_microvm.md @@ -31,7 +31,7 @@ We start by deploying a micro VM on the ThreeFold Playground. * Minimum storage: 50GB * After deployment, note the VM IPv4 address * Connect to the VM via SSH - * ``` + ``` ssh root@VM_IPv4_address ``` @@ -40,11 +40,11 @@ We start by deploying a micro VM on the ThreeFold Playground. We install the prerequisites before installing and setting IPFS. * Update Ubuntu - * ``` + ``` apt update ``` * Install nano and ufw - * ``` + ``` apt install nano && apt install ufw -y ``` @@ -57,20 +57,20 @@ For our security rules, we want to allow SSH, HTTP and HTTPS (443 and 8443). We thus add the following rules: * Allow SSH (port 22) - * ``` + ``` ufw allow ssh ``` * Allow port 4001 - * ``` + ``` ufw allow 4001 ``` * To enable the firewall, write the following: - * ``` + ``` ufw enable ``` * To see the current security rules, write the following: - * ``` + ``` ufw status verbose ``` @@ -91,23 +91,23 @@ If you want to run pubsub capabilities, you need to allow **port 8081**. For mor We install the [IPFS Kubo binary](https://docs.ipfs.tech/install/command-line/#install-official-binary-distributions). * Download the binary - * ``` + ``` wget https://dist.ipfs.tech/kubo/v0.24.0/kubo_v0.24.0_linux-amd64.tar.gz ``` * Unzip the file - * ``` + ``` tar -xvzf kubo_v0.24.0_linux-amd64.tar.gz ``` * Change directory - * ``` + ``` cd kubo ``` * Run the install script - * ``` + ``` bash install.sh ``` * Verify that IPFS Kubo is properly installed - * ``` + ``` ipfs --version ``` @@ -116,15 +116,15 @@ We install the [IPFS Kubo binary](https://docs.ipfs.tech/install/command-line/#i We initialize IPFS and run the IPFS daemon. * Initialize IPFS - * ``` + ``` ipfs init --profile server ``` * Increase the storage capacity (optional) - * ``` + ``` ipfs config Datastore.StorageMax 30GB ``` * Run the IPFS daemon - * ``` + ``` ipfs daemon ``` @@ -133,19 +133,19 @@ We initialize IPFS and run the IPFS daemon. We set the IPFS daemon with zinit. This will make sure that the IPFS daemon starts at each VM reboot or if it stops functioning momentarily. * Create the yaml file - * ``` + ``` nano /etc/zinit/ipfs.yaml ``` * Set the execution command - * ``` + ``` exec: /usr/local/bin/ipfs daemon ``` * Run the IPFS daemon with the zinit monitor command - * ``` + ``` zinit monitor ipfs ``` * Verify that the IPFS daemon is running - * ``` + ``` ipfs swarm peers ``` @@ -154,11 +154,11 @@ We set the IPFS daemon with zinit. This will make sure that the IPFS daemon star We reboot and reconnect to the VM and verify that IPFS is properly running as a final verification. * Reboot the VM - * ``` + ``` reboot -f ``` * Reconnect to the VM and verify that the IPFS daemon is running - * ``` + ``` ipfs swarm peers ``` From de162fe6b46e3b385cfd42b18799317a25fb0459 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:17:52 -0400 Subject: [PATCH 104/134] manual, faq --- collections/faq/faq.md | 16 +++++++--------- collections/threefold_token/threefold_token.md | 6 +++--- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/collections/faq/faq.md b/collections/faq/faq.md index fb60afb..d9216fd 100644 --- a/collections/faq/faq.md +++ b/collections/faq/faq.md @@ -743,18 +743,18 @@ To learn more about this process, [watch this great video](https://youtu.be/axvK If you've already done an SSH connection on your computer, the issue is most probably that the "host key has just been changed". To fix this, try one of those two solutions: * Linux and MAC: - * ``` + ``` sudo rm ~/.ssh/known_hosts ``` * Windows: - * ``` + ``` rm ~/.ssh/known_hosts ``` To be more specific, you can remove the probematic host: * Windows, Linux and MAC: - * ``` + ``` ssh-keygen -R ``` @@ -2074,7 +2074,7 @@ There can be many different fixes for this error. Here are some troubleshooting * [Flash the RAID controller](https://fohdeesha.com/docs/perc.html) (i.e. crossflashing), OR; * Change the controller to a Dell H310 controller (for Dell servers) * Try the command **badblocks** (replace **sda** with your specific disk). Note that this command will delete all the data on the disk - * ``` + ``` sudo badblocks -svw -b 512 -t 0x00 /dev/sda ``` @@ -2094,7 +2094,7 @@ Anyone experiencing frequently this issue where Z-OS sometimes detects an SSD as * Boot a Ubuntu Linux live USB * Install **gnome-disks** if it isn't already installed: - * ``` + ``` sudo apt install gnome-disks ``` * Open the application launcher and search for **Disks** @@ -2161,15 +2161,13 @@ Many different reasons can cause this issue. When you get that error, sometimes * Fix 1: * Force the wiping of the disk: - * ``` + ``` sudo wipefs -af /dev/sda ``` * Fix 2: * Unmount the disk then wipe it: - * ``` - sudo umount /dev/sda ``` - * ``` + sudo umount /dev/sda sudo wipefs -a /dev/sda ``` diff --git a/collections/threefold_token/threefold_token.md b/collections/threefold_token/threefold_token.md index 800efa6..a1122f3 100644 --- a/collections/threefold_token/threefold_token.md +++ b/collections/threefold_token/threefold_token.md @@ -36,15 +36,15 @@ TFT lives on 4 different chains: TFChain, Stellar chain, Ethereum chain and Bina The TFT contract address on different chains are the following: - [TFT Contract address on Stellar](https://stellarchain.io/assets/TFT-GBOVQKJYHXRR3DX6NOX2RRYFRCUMSADGDESTDNBDS6CDVLGVESRTAC47) - - ``` + ``` TFT-GBOVQKJYHXRR3DX6NOX2RRYFRCUMSADGDESTDNBDS6CDVLGVESRTAC47 ``` - [TFT Contract address on Ethereum](https://etherscan.io/token/0x395E925834996e558bdeC77CD648435d620AfB5b) - - ``` + ``` 0x395E925834996e558bdeC77CD648435d620AfB5b ``` - [TFT Contract address on BSC](https://bscscan.com/address/0x8f0FB159380176D324542b3a7933F0C2Fd0c2bbf) - - ``` + ``` 0x8f0FB159380176D324542b3a7933F0C2Fd0c2bbf ``` From e2f71ca64174a52c3c7bc20f1237eddc1956915c Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:22:04 -0400 Subject: [PATCH 105/134] manual, collaboration --- collections/collaboration/contribute.md | 6 +++--- collections/collaboration/development_cycle.md | 2 +- collections/collaboration/img/dev_cycle.png | Bin 0 -> 24454 bytes 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 collections/collaboration/img/dev_cycle.png diff --git a/collections/collaboration/contribute.md b/collections/collaboration/contribute.md index 796b7f5..8ef689c 100644 --- a/collections/collaboration/contribute.md +++ b/collections/collaboration/contribute.md @@ -68,16 +68,16 @@ To do so, you simply need to clone the forked repository on your local computer The steps are the following: * In the terminal, write the following line to clone the forked `info_grid` repository: - * ``` + ``` git clone https://github.com/YOUR_GIT_ACCOUNT/info_grid ``` * make sure to write your own Github account in the URL * To deploy the mdbook locally, first go to the **info_grid** directory: - * ``` + ``` cd info_grid ``` * Then write the following line. It will open the manual automatically. - * ``` + ``` mdbook serve -o ``` * Note that, by default, the URL is the following, using port `3000`, `http://localhost:3000/` diff --git a/collections/collaboration/development_cycle.md b/collections/collaboration/development_cycle.md index c321367..02ae9b4 100644 --- a/collections/collaboration/development_cycle.md +++ b/collections/collaboration/development_cycle.md @@ -1,6 +1,6 @@ The development cycle is explained below: -![Untitled presentation (1)](https://user-images.githubusercontent.com/8425762/170034170-7247a737-9d99-481d-9289-88d361275043.png) +![dev_cycle](./img/dev_cycle.png) diff --git a/collections/collaboration/img/dev_cycle.png b/collections/collaboration/img/dev_cycle.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf2766fdee33c702581771fd123d746b8b89f20 GIT binary patch literal 24454 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 Date: Tue, 14 May 2024 13:24:02 -0400 Subject: [PATCH 106/134] manual, all parsing OK --- .../collaboration_tools/website_link_checker.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/collections/collaboration/collaboration_tools/website_link_checker.md b/collections/collaboration/collaboration_tools/website_link_checker.md index 788c5e0..162795c 100644 --- a/collections/collaboration/collaboration_tools/website_link_checker.md +++ b/collections/collaboration/collaboration_tools/website_link_checker.md @@ -39,15 +39,15 @@ flag. Otherwise exits with code 0. Note that errors set as --warnings will alway ### With Python * Clone the repository - * ``` + ``` git clone https://github.com/threefoldfoundation/website-link-checker ``` * Change directory - * ``` + ``` cd website-link-checker ``` * Run the program - * ``` + ``` python website-link-checker.py https://example.com -e 404 -w all ``` From 27423c06dd1e3dad6e297c92d9cdbc20da667a31 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:48:33 -0400 Subject: [PATCH 107/134] manual temp fix for include, static number --- books/manual/SUMMARY.md | 1 - collections/about/token_overview/token_overview.md | 5 ++--- collections/cloud/pricing/pricing.md | 14 ++++++++------ ...rx423zfuykkfdn66xp2kmsbzfqse2psndz6edvqtrlsu.md | 2 +- collections/manual/values/0.02 | 1 + collections/manual/values/cu_mtft_hour.md | 2 +- collections/manual/values/dname_mtft_hour.md | 2 +- collections/manual/values/ip_mtft_hour.md | 2 +- collections/manual/values/name_mtft_hour.md | 2 +- collections/manual/values/nu_mtft_hour.md | 2 +- collections/manual/values/su_mtft_hour.md | 2 +- collections/manual/values/tft_marketcap.md | 2 +- collections/manual/values/tft_value.md | 2 +- 13 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 collections/manual/values/0.02 diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index 8b6da45..5c63322 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -304,7 +304,6 @@ - [TFGrid v3.0.0 Alpha-2](about/roadmap/releasenotes/tfgrid_release_3_0_a2.md) - [TFGrid v3.0.0](about/roadmap/releasenotes/tfgrid_release_3_0.md) - [ThreeFold Token](about/token_overview/token_overview.md) - - [Special Wallets](about/token_overview/special_wallets/stats_special_wallets.md) - [Technology](tech/technology_toc.md) - [Introduction](tech/technology.md) - [The Internet Today](tech/internet_today.md) diff --git a/collections/about/token_overview/token_overview.md b/collections/about/token_overview/token_overview.md index 73d509b..e6233c0 100644 --- a/collections/about/token_overview/token_overview.md +++ b/collections/about/token_overview/token_overview.md @@ -69,8 +69,8 @@ The TFT market price and marketcap are as follows: | **Description** | **Value** | | ------------------------- | ------------- | -| TFT Market Price | !!wiki.include page:'manual:tft_value.md' USD | -| TFT Market Cap | !!wiki.include page:'manual:tft_marketcap.md' USD | +| TFT Market Price | 0.028 USD | +| TFT Market Cap | 21,840,000 USD | The market cap is equal to the product of the TFT market price and the circulating supply. @@ -82,7 +82,6 @@ The values here are subject to change. Check the current market conditions. - [ThreeFold History](threefold_history.md) - [Token History](token_history.md) -- [Special Wallets](stats_special_wallets.md) ## Disclaimer diff --git a/collections/cloud/pricing/pricing.md b/collections/cloud/pricing/pricing.md index e09c1aa..b6e48f6 100644 --- a/collections/cloud/pricing/pricing.md +++ b/collections/cloud/pricing/pricing.md @@ -16,20 +16,22 @@ - The current prices are for resources usage on mainnet (testnet get 50% discount) - A month is considered as 30 days (720 hours) +- We are considering a TFT market price of 0.028 | Cloud Units | Description | mUSD | mTFT | | ----------------- | ------------------------------------------------ | ------------------ | ------------------ | -| Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | !!wiki.include page:'manual:su_musd_hour.md' | !!wiki.include page:'manual:cu_mtft_hour.md' | -| Storage Unit (SU) | typically 1 TB of netto usable storage (*) | !!wiki.include page:'manual:cu_musd_hour.md' | !!wiki.include page:'manual:su_mtft_hour.md' | -| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | !!wiki.include page:'manual:nu_musd_hour.md' | !!wiki.include page:'manual:nu_mtft_hour.md' | +| Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 30.56/hour | 1091.43/hour | +| Storage Unit (SU) | typically 1 TB of netto usable storage (*) | 19.44/hour | 694.29/hour | +| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 50.00/hour | 1785.71/hour + |
| Network Addressing | Description | mUSD | mTFT | | ------------------ | ------------------------------------------ | --------------------- | --------------------- | -| IPv4 Address | Public Ip Address as used by a TFGrid user | !!wiki.include page:'manual:ip_musd_hour.md' | !!wiki.include page:'manual:ip_mtft_hour.md' | -| Unique Name | Usable as name on webgateways | !!wiki.include page:'manual:name_musd_hour.md' | !!wiki.include page:'manual:name_mtft_hour.md' | -| Unique Domain Name | Usable as dns name on webgateways | !!wiki.include page:'manual:dname_musd_hour.md' | !!wiki.include page:'manual:dname_mtft_hour.md' | +| IPv4 Address | Public Ip Address as used by a TFGrid user | 6.94/hour | 247.86/hour | +| Unique Name | Usable as name on webgateways | 1.39 | 49.64/hour | +| Unique Domain Name | Usable as dns name on webgateways | 2.78/hour | 99.29/hour | - mUSD = 1/1000 of USD, mTFT = 1/1000 of TFT - TFT pricing pegged to USD (pricing changes in line with TFT/USD rate) diff --git a/collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data/gdijy6k2bbrirx423zfuykkfdn66xp2kmsbzfqse2psndz6edvqtrlsu.md b/collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data/gdijy6k2bbrirx423zfuykkfdn66xp2kmsbzfqse2psndz6edvqtrlsu.md index 76e10f5..5fb9b72 100644 --- a/collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data/gdijy6k2bbrirx423zfuykkfdn66xp2kmsbzfqse2psndz6edvqtrlsu.md +++ b/collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data/gdijy6k2bbrirx423zfuykkfdn66xp2kmsbzfqse2psndz6edvqtrlsu.md @@ -1 +1 @@ -10110962.98 \ No newline at end of file +10595751.89 \ No newline at end of file diff --git a/collections/manual/values/0.02 b/collections/manual/values/0.02 new file mode 100644 index 0000000..d0e6ec6 --- /dev/null +++ b/collections/manual/values/0.02 @@ -0,0 +1 @@ +0.000 \ No newline at end of file diff --git a/collections/manual/values/cu_mtft_hour.md b/collections/manual/values/cu_mtft_hour.md index a424ed6..2872a6f 100644 --- a/collections/manual/values/cu_mtft_hour.md +++ b/collections/manual/values/cu_mtft_hour.md @@ -1 +1 @@ -1608.42 \ No newline at end of file +1528.00 \ No newline at end of file diff --git a/collections/manual/values/dname_mtft_hour.md b/collections/manual/values/dname_mtft_hour.md index 9a79ccf..4f9e53a 100644 --- a/collections/manual/values/dname_mtft_hour.md +++ b/collections/manual/values/dname_mtft_hour.md @@ -1 +1 @@ -146.32 \ No newline at end of file +139.00 \ No newline at end of file diff --git a/collections/manual/values/ip_mtft_hour.md b/collections/manual/values/ip_mtft_hour.md index 6582fc3..325a076 100644 --- a/collections/manual/values/ip_mtft_hour.md +++ b/collections/manual/values/ip_mtft_hour.md @@ -1 +1 @@ -365.26 \ No newline at end of file +347.00 \ No newline at end of file diff --git a/collections/manual/values/name_mtft_hour.md b/collections/manual/values/name_mtft_hour.md index 34a2a43..bf1a7d6 100644 --- a/collections/manual/values/name_mtft_hour.md +++ b/collections/manual/values/name_mtft_hour.md @@ -1 +1 @@ -73.16 \ No newline at end of file +69.50 \ No newline at end of file diff --git a/collections/manual/values/nu_mtft_hour.md b/collections/manual/values/nu_mtft_hour.md index 1bb11cd..a1031b2 100644 --- a/collections/manual/values/nu_mtft_hour.md +++ b/collections/manual/values/nu_mtft_hour.md @@ -1 +1 @@ -2631.58 \ No newline at end of file +2500.00 \ No newline at end of file diff --git a/collections/manual/values/su_mtft_hour.md b/collections/manual/values/su_mtft_hour.md index 7141994..7c41110 100644 --- a/collections/manual/values/su_mtft_hour.md +++ b/collections/manual/values/su_mtft_hour.md @@ -1 +1 @@ -1023.16 \ No newline at end of file +972.00 \ No newline at end of file diff --git a/collections/manual/values/tft_marketcap.md b/collections/manual/values/tft_marketcap.md index 2dc47f5..c227083 100644 --- a/collections/manual/values/tft_marketcap.md +++ b/collections/manual/values/tft_marketcap.md @@ -1 +1 @@ -14,820,000 \ No newline at end of file +0 \ No newline at end of file diff --git a/collections/manual/values/tft_value.md b/collections/manual/values/tft_value.md index 213e592..d0e6ec6 100644 --- a/collections/manual/values/tft_value.md +++ b/collections/manual/values/tft_value.md @@ -1 +1 @@ -0.019 \ No newline at end of file +0.000 \ No newline at end of file From 81591faa063bfa0f24f708fcf0bd7718a086326b Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:52:41 -0400 Subject: [PATCH 108/134] manual cloud update --- collections/cloud/pricing/pricing.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/collections/cloud/pricing/pricing.md b/collections/cloud/pricing/pricing.md index b6e48f6..0e91cf0 100644 --- a/collections/cloud/pricing/pricing.md +++ b/collections/cloud/pricing/pricing.md @@ -18,20 +18,20 @@ - A month is considered as 30 days (720 hours) - We are considering a TFT market price of 0.028 -| Cloud Units | Description | mUSD | mTFT | +| Cloud Units | Description | mUSD (per hour) | mTFT (per hour) | | ----------------- | ------------------------------------------------ | ------------------ | ------------------ | -| Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 30.56/hour | 1091.43/hour | -| Storage Unit (SU) | typically 1 TB of netto usable storage (*) | 19.44/hour | 694.29/hour | -| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 50.00/hour | 1785.71/hour +| Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 30.56 | 1091.43 | +| Storage Unit (SU) | typically 1 TB of netto usable storage (*) | 19.44 | 694.29 | +| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 50.00 | 1785.71 |
-| Network Addressing | Description | mUSD | mTFT | +| Network Addressing | Description | mUSD (per hour) | mTFT (per hour) | | ------------------ | ------------------------------------------ | --------------------- | --------------------- | -| IPv4 Address | Public Ip Address as used by a TFGrid user | 6.94/hour | 247.86/hour | -| Unique Name | Usable as name on webgateways | 1.39 | 49.64/hour | -| Unique Domain Name | Usable as dns name on webgateways | 2.78/hour | 99.29/hour | +| IPv4 Address | Public Ip Address as used by a TFGrid user | 6.94 | 247.86 | +| Unique Name | Usable as name on webgateways | 1.39 | 49.64 | +| Unique Domain Name | Usable as dns name on webgateways | 2.78 | 99.29 | - mUSD = 1/1000 of USD, mTFT = 1/1000 of TFT - TFT pricing pegged to USD (pricing changes in line with TFT/USD rate) @@ -42,12 +42,12 @@ ## Pricing Expressed Per Month -| Cloud Units | description | USD NO DISCOUNT | USD 60% DISCOUNT | +| Cloud Units | Description | USD NO DISCOUNT | USD 60% DISCOUNT | | ----------------- | ------------------------------------------------ | ------------------- | ---------------------------- | -| Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 22.00/month | 8.80/month | -| Storage Unit (SU) | typically 1 TB of netto usable storage | 14.00/month | 5.60/month | +| Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 22.00\/month | 8.80\/month | +| Storage Unit (SU) | typically 1 TB of netto usable storage | 14.00\/month | 5.60\/month | | Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 0.05/GB | 0.03/GB | -| IPv4 Address | Public Ip Address as used by a TFGrid user | 5.00/month | 3.00/month | +| IPv4 Address | Public Ip Address as used by a TFGrid user | 5.00\/month | 3.00\/month | ## Operation Fees From d8ff2ee54424a931828e036f42b732838c190b6e Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:53:24 -0400 Subject: [PATCH 109/134] manual cloud update --- collections/cloud/pricing/pricing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/cloud/pricing/pricing.md b/collections/cloud/pricing/pricing.md index 0e91cf0..6fed110 100644 --- a/collections/cloud/pricing/pricing.md +++ b/collections/cloud/pricing/pricing.md @@ -46,7 +46,7 @@ | ----------------- | ------------------------------------------------ | ------------------- | ---------------------------- | | Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 22.00\/month | 8.80\/month | | Storage Unit (SU) | typically 1 TB of netto usable storage | 14.00\/month | 5.60\/month | -| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 0.05/GB | 0.03/GB | +| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 0.05\/GB | 0.03\/GB | | IPv4 Address | Public Ip Address as used by a TFGrid user | 5.00\/month | 3.00\/month | ## Operation Fees From 0447c68059bd8939c900c4a1c40908c02eb6f351 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:53:57 -0400 Subject: [PATCH 110/134] manual cloud update --- collections/cloud/pricing/pricing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collections/cloud/pricing/pricing.md b/collections/cloud/pricing/pricing.md index 6fed110..831d6ca 100644 --- a/collections/cloud/pricing/pricing.md +++ b/collections/cloud/pricing/pricing.md @@ -22,7 +22,7 @@ | ----------------- | ------------------------------------------------ | ------------------ | ------------------ | | Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 30.56 | 1091.43 | | Storage Unit (SU) | typically 1 TB of netto usable storage (*) | 19.44 | 694.29 | -| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 50.00 | 1785.71 +| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 50.00 | 1785.71 | |
From da783febb28e72ee3c3f71de593bba765e75d5df Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:54:25 -0400 Subject: [PATCH 111/134] manual cloud update --- collections/cloud/pricing/pricing.md | 1 - 1 file changed, 1 deletion(-) diff --git a/collections/cloud/pricing/pricing.md b/collections/cloud/pricing/pricing.md index 831d6ca..ae8f838 100644 --- a/collections/cloud/pricing/pricing.md +++ b/collections/cloud/pricing/pricing.md @@ -23,7 +23,6 @@ | Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 30.56 | 1091.43 | | Storage Unit (SU) | typically 1 TB of netto usable storage (*) | 19.44 | 694.29 | | Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 50.00 | 1785.71 | - |
From 01707211fa11b7e94d0c22e8dd15f07e83cb2e5c Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 13:59:05 -0400 Subject: [PATCH 112/134] manual update links --- books/manual/SUMMARY.md | 2 +- collections/cloud/pricing/pricing.md | 1 - collections/dashboard/solutions/{vm.md => microvm.md} | 0 collections/dashboard/solutions/vm_intro.md | 4 ++-- 4 files changed, 3 insertions(+), 4 deletions(-) rename collections/dashboard/solutions/{vm.md => microvm.md} (100%) diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index 5c63322..7ef28da 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -12,7 +12,7 @@ - [Virtual Machines](dashboard/solutions/vm_intro.md) - [Micro and Full VM Differences ](dashboard/solutions/vm_differences.md) - [Full Virtual Machine](dashboard/solutions/fullVm.md) - - [Micro Virtual Machine](dashboard/solutions/vm.md) + - [Micro Virtual Machine](dashboard/solutions/microvm.md) - [Nixos MicroVM](dashboard/solutions/nixos_micro.md) - [Add a Domain](dashboard/solutions/add_domain.md) - [Orchestrators](dashboard/deploy/orchestrators.md) diff --git a/collections/cloud/pricing/pricing.md b/collections/cloud/pricing/pricing.md index ae8f838..6249209 100644 --- a/collections/cloud/pricing/pricing.md +++ b/collections/cloud/pricing/pricing.md @@ -34,7 +34,6 @@ - mUSD = 1/1000 of USD, mTFT = 1/1000 of TFT - TFT pricing pegged to USD (pricing changes in line with TFT/USD rate) -- The current TFT to USD price is !!wiki.include page:'manual:tft_value.md' USD - pricing is calculated per hour for the TFGrid 3.0 > Please check our [Cloud Pricing for utilization sheet](https://docs.google.com/spreadsheets/d/1E6MpGs15h1_flyT5AtyKp1TixH1ILuGo5tzHdmjeYdQ/edit#gid=2014089775) for more details. diff --git a/collections/dashboard/solutions/vm.md b/collections/dashboard/solutions/microvm.md similarity index 100% rename from collections/dashboard/solutions/vm.md rename to collections/dashboard/solutions/microvm.md diff --git a/collections/dashboard/solutions/vm_intro.md b/collections/dashboard/solutions/vm_intro.md index be0bf5f..b3544d3 100644 --- a/collections/dashboard/solutions/vm_intro.md +++ b/collections/dashboard/solutions/vm_intro.md @@ -5,7 +5,7 @@ On the TFGrid, you can deploy both micro and full virtual machines.

Table of Contents

- [Micro and Full VM Differences ](vm_differences.md) -- [Full Virtual Machine](fullVm.md) -- [Micro Virtual Machine](vm.md) +- [Full Virtual Machine](fullvm.md) +- [Micro Virtual Machine](microvm.md) - [Nixos MicroVM](nixos_micro.md) - [Add a Domain](add_domain.md) \ No newline at end of file From fa0a583ec1bc44d83b2e9e6e22f3c8cbef8ac026 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 14:01:18 -0400 Subject: [PATCH 113/134] manual cloud update table --- collections/cloud/pricing/pricing.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/collections/cloud/pricing/pricing.md b/collections/cloud/pricing/pricing.md index 6249209..60db428 100644 --- a/collections/cloud/pricing/pricing.md +++ b/collections/cloud/pricing/pricing.md @@ -18,15 +18,15 @@ - A month is considered as 30 days (720 hours) - We are considering a TFT market price of 0.028 -| Cloud Units | Description | mUSD (per hour) | mTFT (per hour) | +| Cloud Units | Description | mUSD | mTFT | | ----------------- | ------------------------------------------------ | ------------------ | ------------------ | -| Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 30.56 | 1091.43 | -| Storage Unit (SU) | typically 1 TB of netto usable storage (*) | 19.44 | 694.29 | -| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 50.00 | 1785.71 | +| Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 30.56\/hour | 1091.43\/hour | +| Storage Unit (SU) | typically 1 TB of netto usable storage (*) | 19.44\/hour | 694.29\/hour | +| Network Unit (NU) | 1 GB transfer, bandwidth as used by TFGrid users | 50.00\/hour | 1785.71\/hour |
-| Network Addressing | Description | mUSD (per hour) | mTFT (per hour) | +| Network Addressing | Description | mUSD | mTFT | | ------------------ | ------------------------------------------ | --------------------- | --------------------- | | IPv4 Address | Public Ip Address as used by a TFGrid user | 6.94 | 247.86 | | Unique Name | Usable as name on webgateways | 1.39 | 49.64 | From 119a84e5f83382c9441eb743b926d0426bf5dfea Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 14:02:17 -0400 Subject: [PATCH 114/134] manual cloud update table --- collections/cloud/pricing/pricing.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/collections/cloud/pricing/pricing.md b/collections/cloud/pricing/pricing.md index 60db428..d2eae09 100644 --- a/collections/cloud/pricing/pricing.md +++ b/collections/cloud/pricing/pricing.md @@ -28,9 +28,9 @@ | Network Addressing | Description | mUSD | mTFT | | ------------------ | ------------------------------------------ | --------------------- | --------------------- | -| IPv4 Address | Public Ip Address as used by a TFGrid user | 6.94 | 247.86 | -| Unique Name | Usable as name on webgateways | 1.39 | 49.64 | -| Unique Domain Name | Usable as dns name on webgateways | 2.78 | 99.29 | +| IPv4 Address | Public Ip Address as used by a TFGrid user | 6.94\/hour | 247.86\/hour | +| Unique Name | Usable as name on webgateways | 1.39\/hour | 49.64\/hour | +| Unique Domain Name | Usable as dns name on webgateways | 2.78\/hour | 99.29\/hour | - mUSD = 1/1000 of USD, mTFT = 1/1000 of TFT - TFT pricing pegged to USD (pricing changes in line with TFT/USD rate) @@ -40,7 +40,7 @@ ## Pricing Expressed Per Month -| Cloud Units | Description | USD NO DISCOUNT | USD 60% DISCOUNT | +| Cloud Units | Description | USD - No Discount | USD - 60% Discount | | ----------------- | ------------------------------------------------ | ------------------- | ---------------------------- | | Compute Unit (CU) | typically 2 vcpu, 4 GB mem, 50 GB storage | 22.00\/month | 8.80\/month | | Storage Unit (SU) | typically 1 TB of netto usable storage | 14.00\/month | 5.60\/month | From 10104caadac30cccd16bbb8741c0fbaeac1ba6be Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 15:03:55 -0400 Subject: [PATCH 115/134] start integrate new pr from info_grid, starting from 62826fe798 --- books/manual/SUMMARY.md | 2 + collections/dashboard/deploy/applications.md | 1 + .../solutions/solutions_staticwebsite.png | Bin 0 -> 55705 bytes .../dashboard/solutions/static_website.md | 53 +++++++ .../solutions/staticwebsite_list.png | Bin 0 -> 46659 bytes .../grid_deployment/deploy_dashboard.md | 139 ++++++++++++++++++ .../grid_deployment/grid_deployment.md | 3 +- 7 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 collections/dashboard/solutions/solutions_staticwebsite.png create mode 100644 collections/dashboard/solutions/static_website.md create mode 100644 collections/dashboard/solutions/staticwebsite_list.png create mode 100644 collections/developers/grid_deployment/deploy_dashboard.md diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index 7ef28da..3526b9b 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -32,6 +32,7 @@ - [ownCloud](dashboard/solutions/owncloud.md) - [Peertube](dashboard/solutions/peertube.md) - [Presearch](dashboard/solutions/presearch.md) + - [Static Website](dashboard/solutions/static_website.md) - [Subsquid](dashboard/solutions/subsquid.md) - [Taiga](dashboard/solutions/taiga.md) - [Umbrel](dashboard/solutions/umbrel.md) @@ -149,6 +150,7 @@ - [TFGrid Stacks](developers/grid_deployment/tfgrid_stacks.md) - [Full VM Grid Deployment](developers/grid_deployment/grid_deployment_full_vm.md) - [Grid Snapshots](developers/grid_deployment/snapshots.md) + - [Deploy the Dashboard](developers/grid_deployment/deploy_dashboard.md) - [Farmers](farmers/farmers.md) - [Build a 3Node](farmers/3node_building/3node_building.md) - [1. Create a Farm](farmers/3node_building/1_create_farm.md) diff --git a/collections/dashboard/deploy/applications.md b/collections/dashboard/deploy/applications.md index e3a5a2c..17a7e2c 100644 --- a/collections/dashboard/deploy/applications.md +++ b/collections/dashboard/deploy/applications.md @@ -18,6 +18,7 @@ Easily deploy your favourite applications on the ThreeFold grid with a click of - [ownCloud](owncloud.md) - [Peertube](peertube.md) - [Presearch](presearch.md) +- [Static Website](static_website.md) - [Subsquid](subsquid.md) - [Taiga](taiga.md) - [Umbrel](umbrel.md) diff --git a/collections/dashboard/solutions/solutions_staticwebsite.png b/collections/dashboard/solutions/solutions_staticwebsite.png new file mode 100644 index 0000000000000000000000000000000000000000..33c51d6902300dba6bc40dfffad26cd8cacb05de GIT binary patch literal 55705 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
FW6yxCR#P4*21$ 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 literal 0 HcmV?d00001 diff --git a/collections/dashboard/solutions/static_website.md b/collections/dashboard/solutions/static_website.md new file mode 100644 index 0000000..4f57b07 --- /dev/null +++ b/collections/dashboard/solutions/static_website.md @@ -0,0 +1,53 @@ +

Static Website

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Deployment](#deployment) + +--- + +## Introduction + +Static Website is an application where a user provides a GitHub repository URL for the files to be automatically served online using Caddy. + +## Prerequisites + +- Make sure you have a [wallet](wallet_connector.md) +- From the sidebar click on **Applications** +- Click on **Static Website** + +## Deployment + +![ ](./img/solutions_staticwebsite.png) + +- Enter an instance name + +- Enter a GitHub repository URL that needs to be cloned + +- Enter the title for the cloned repository + +- Select a capacity package: + + - **Small**: {cpu: 1, memory: 2 , diskSize: 50 } + - **Medium**: {cpu: 2, memory: 4, diskSize: 100 } + - **Large**: {cpu: 4, memory: 16, diskSize: 250 } + - Or choose a **Custom** plan + +- `Dedicated` flag to retrieve only dedicated nodes +- `Certified` flag to retrieve only certified nodes +- Choose the location of the node + - `Region` + - `Country` + - `Farm Name` +- Choose the node to deploy on + - Note: You can select a specific node with manual selection +- `Custom Domain` flag allows the user to use a custom domain +- Choose a gateway node to deploy your static website + +Once this is done, you can see a list of all of your deployed instances: + +![ ](./img/staticwebsite_list.png) + +Click on the button **Visit** under **Actions** to go to your static website! diff --git a/collections/dashboard/solutions/staticwebsite_list.png b/collections/dashboard/solutions/staticwebsite_list.png new file mode 100644 index 0000000000000000000000000000000000000000..94fd8abebe6883c9d1f6a0b1ae4a6ad3f930ec75 GIT binary patch literal 46659 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
&;w^s8_^U51Kw%D_W)i(U>}s#HbpJO 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 the Dashboard + +

Table of Contents

+ +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Create an SSH Tunnel](#create-an-ssh-tunnel) +- [Editor SSH Remote Connection](#editor-ssh-remote-connection) +- [Set the VM](#set-the-vm) +- [Build the Dashboard](#build-the-dashboard) +- [Dashboard Public Access](#dashboard-public-access) +- [Set the Network](#set-the-network) +- [Questions and Feedback](#questions-and-feedback) + +*** + +## Introduction + +We show how to deploy the Dashboard (devnet) on a full VM. To do so, we set an SSH tunnel and use the VSCodium Remote Explorer function. We will then be able to use a source-code editor to explore the code and see changes on a local browser. + +We also show how to provide a public access to the Dashboard by setting a gateway domain to your full VM deployment. Note that this method is not production-ready and should only be used to test the Dashboard. + +## Prerequisites + +- TFChain account with TFT +- [Deploy full VM with WireGuard connection](../../system_administrators/getstarted/ssh_guide/ssh_wireguard.md) +- [Make sure you can connect via SSH on the terminal](../../system_administrators/getstarted/ssh_guide/ssh_openssh.md) + +In this guide, we use WireGuard, but you can use other connection methods, such as [Mycelium](../../system_administrators/mycelium/mycelium_toc.md). + +## Create an SSH Tunnel + +- Open a terminal and create an SSH tunnel + ``` + ssh -4 -L 5173:127.0.0.1:5173 root@10.20.4.2 + ``` + +Simply leave this window open and follow the next steps. + +If you use an IPv6 address, e.g. with Mycelium, set `-6` in the line above instead of `-4`. + +## Editor SSH Remote Connection + +You can connect via SSH through the source-code editor to a VM on the grid. In this example, WireGuard is set. + +- Add the SSH Remote extension to [VSCodium](https://vscodium.com/) +- Add a new SSH remote connection +- Set the following (adjust with your own username and host) + ``` + Host 10.20.4.2 + HostName 10.20.4.2 + User root + ``` +- Click on `Connect to host` + +## Set the VM + +We set the VM to be able to build the Dashboard. + +``` + +apt update && apt install build-essential python3 -y + +wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash + +export NVM_DIR="$HOME/.nvm" + +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm + +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion + +nvm install 18 + +npm install -g yarn + +``` + +## Build the Dashboard + +We now build the Dashboard. + +Clone the repository, then install, build and run the Dashboard. Note that here it is called `playground`: + +``` + +git clone https://github.com/threefoldtech/tfgrid-sdk-ts + +cd tfgrid-sdk-ts/ + +yarn install + +make build + +make run project=playground + +``` + +You can then access the dev net Dashboard on your local browser. + +To stop running the Dashboard, simply enter ̀`Ctrl-C` on the terminal window. + + +## Dashboard Public Access + +> Note: This method is not production-ready. Use only for testing purposes. + +Once you've tested the Dashboard with the SSH tunnel, you can explore how to access it from the public Internet. For this, we will create a gateway domain and bind the host to `0.0.0.0`. + +On the Full VM page, [add a domain](../../dashboard/solutions/add_domain.md) to access your deployment from the public Internet. + +- Under `Actions`, click on `Manage Domains` +- Go to `Add New Domain` +- Choose a gateway domain under `Select domain` +- Set the port 5173 +- Click on `Add` + +To run the Dashboard from the added domain, use this instead of the previous `make run` line: + +``` +cd packages/playground +yarn dev --host 0.0.0.0 +``` + +You can then access the Dashboard from the domain you just created. + +## Set the Network + +You can set the network by running the configuration script. Simply set the network as the **MODE** (e.g. **main**, **test**, **dev**): + +``` +cd packages/playground/public +MODE=main ../scripts/build-env.sh +``` + +Once you've set the configuration file, you can build and run the Dashboard. + +## Questions and Feedback + +If you have any questions or feedback, please let us know by either writing a post on the [ThreeFold Forum](https://forum.threefold.io/), or by chatting with us on the [TF Grid Tester Community](https://t.me/threefoldtesting) Telegram channel. \ No newline at end of file diff --git a/collections/developers/grid_deployment/grid_deployment.md b/collections/developers/grid_deployment/grid_deployment.md index 2680eb5..ada1b79 100644 --- a/collections/developers/grid_deployment/grid_deployment.md +++ b/collections/developers/grid_deployment/grid_deployment.md @@ -6,4 +6,5 @@ The TFGrid whole source code is open-source and instances of the grid can be dep - [TFGrid Stacks](tfgrid_stacks.md) - [Full VM Grid Deployment](grid_deployment_full_vm.md) -- [Grid Snapshots](snapshots.md) \ No newline at end of file +- [Grid Snapshots](snapshots.md) +- [Deploy the Dashboard](deploy_dashboard.md) \ No newline at end of file From df45b0e38a8f0104b98eb21e19eb058bc3b3c09e Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 15:07:39 -0400 Subject: [PATCH 116/134] manual update summary --- collections/developers/developers.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 4e1c98a..410d5ec 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -87,4 +87,5 @@ For complementary information on the technology developed by ThreeFold, refer to - [Grid Deployment](grid_deployment.md) - [TFGrid Stacks](tfgrid_stacks.md) - [Full VM Grid Deployment](grid_deployment_full_vm.md) - - [Grid Snapshots](snapshots.md) \ No newline at end of file + - [Grid Snapshots](snapshots.md) + - [Deploy the Dashboard](deploy_dashboard.md) \ No newline at end of file From 6b20cce94feee1b6372023f63c76283f5f105aba Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 15:12:18 -0400 Subject: [PATCH 117/134] manual update mycelium --- collections/dashboard/deploy/deploy.md | 2 +- .../{ => img}/solutions_staticwebsite.png | Bin .../{ => img}/staticwebsite_list.png | Bin .../grid_deployment/deploy_dashboard.md | 8 ++-- .../mycelium/information.md | 36 ++++++++++++------ 5 files changed, 30 insertions(+), 16 deletions(-) rename collections/dashboard/solutions/{ => img}/solutions_staticwebsite.png (100%) rename collections/dashboard/solutions/{ => img}/staticwebsite_list.png (100%) diff --git a/collections/dashboard/deploy/deploy.md b/collections/dashboard/deploy/deploy.md index 2b358a3..2a66a64 100644 --- a/collections/dashboard/deploy/deploy.md +++ b/collections/dashboard/deploy/deploy.md @@ -4,7 +4,7 @@ Here you will find everything related to deployments on the ThreeFold grid. This - Checking the cost of a deployment using [Pricing Calculator](pricing_calculator.md) - Finding a node to deploy on using the [Node Finder](node_finder.md) -- Deploying your desired workload from [Virtual Machines](vm_intro.md), [Orchestrators](orchestrators.md), or [Applictions](applications.md) +- Deploying your desired workload from [Virtual Machines](vm_intro.md), [Orchestrators](orchestrators.md), or [Applications](applications.md) - Renting your own node on the ThreeFold grid from [Dedicated Machines](dedicated_machines.md) - Consulting [Your Contracts](your_contracts.md) on the TFGrid - Finding or publishing Flists from [Images](images.md) diff --git a/collections/dashboard/solutions/solutions_staticwebsite.png b/collections/dashboard/solutions/img/solutions_staticwebsite.png similarity index 100% rename from collections/dashboard/solutions/solutions_staticwebsite.png rename to collections/dashboard/solutions/img/solutions_staticwebsite.png diff --git a/collections/dashboard/solutions/staticwebsite_list.png b/collections/dashboard/solutions/img/staticwebsite_list.png similarity index 100% rename from collections/dashboard/solutions/staticwebsite_list.png rename to collections/dashboard/solutions/img/staticwebsite_list.png diff --git a/collections/developers/grid_deployment/deploy_dashboard.md b/collections/developers/grid_deployment/deploy_dashboard.md index b126b8b..6c85532 100644 --- a/collections/developers/grid_deployment/deploy_dashboard.md +++ b/collections/developers/grid_deployment/deploy_dashboard.md @@ -23,10 +23,10 @@ We also show how to provide a public access to the Dashboard by setting a gatewa ## Prerequisites - TFChain account with TFT -- [Deploy full VM with WireGuard connection](../../system_administrators/getstarted/ssh_guide/ssh_wireguard.md) -- [Make sure you can connect via SSH on the terminal](../../system_administrators/getstarted/ssh_guide/ssh_openssh.md) +- [Deploy full VM with WireGuard connection](system_administrators@@ssh_wireguard) +- [Make sure you can connect via SSH on the terminal](system_administrators@@ssh_openssh) -In this guide, we use WireGuard, but you can use other connection methods, such as [Mycelium](../../system_administrators/mycelium/mycelium_toc.md). +In this guide, we use WireGuard, but you can use other connection methods, such as [Mycelium](system_administrators@@mycelium_toc). ## Create an SSH Tunnel @@ -106,7 +106,7 @@ To stop running the Dashboard, simply enter ̀`Ctrl-C` on the terminal window. Once you've tested the Dashboard with the SSH tunnel, you can explore how to access it from the public Internet. For this, we will create a gateway domain and bind the host to `0.0.0.0`. -On the Full VM page, [add a domain](../../dashboard/solutions/add_domain.md) to access your deployment from the public Internet. +On the Full VM page, [add a domain](dashboard@@add_domain) to access your deployment from the public Internet. - Under `Actions`, click on `Manage Domains` - Go to `Add New Domain` diff --git a/collections/system_administrators/mycelium/information.md b/collections/system_administrators/mycelium/information.md index 890c0db..a9eee41 100644 --- a/collections/system_administrators/mycelium/information.md +++ b/collections/system_administrators/mycelium/information.md @@ -5,7 +5,7 @@ - [Introduction](#introduction) - [Connect to Other Nodes](#connect-to-other-nodes) -- [Possible Peers](#possible-peers) +- [Hosted Public Nodes](#hosted-public-nodes) - [Default Port](#default-port) - [Check Network Information](#check-network-information) - [Test the Network](#test-the-network) @@ -36,18 +36,32 @@ If you are using other tun inferface, e.g. utun3 (default), you can set a differ mycelium --peers tcp://83.231.240.31:9651 quic://185.206.122.71:9651 --tun-name utun9 ``` -## Possible Peers +## Hosted Public Nodes -Here are some possible peers. +A couple of public nodes are provided, which can be freely connected to. This allows +anyone to join the global network. These are hosted in 3 geographic regions, on both +IPv4 and IPv6, and supporting both the Tcp and Quic protocols. The nodes are the +following: -``` -tcp://146.185.93.83:9651 -quic://83.231.240.31:9651 -quic://185.206.122.71:9651 -tcp://[2a04:f340:c0:71:28cc:b2ff:fe63:dd1c]:9651 -tcp://[2001:728:1000:402:78d3:cdff:fe63:e07e]:9651 -quic://[2a10:b600:1:0:ec4:7aff:fe30:8235]:9651 -``` +| Node ID | Region | IPv4 | IPv6 | Tcp port | Quic port | +| --- | --- | --- | --- | --- | --- | +| 01 | DE | 188.40.132.242 | 2a01:4f8:221:1e0b::2 | 9651 | 9651 | +| 02 | DE | 136.243.47.186 | 2a01:4f8:212:fa6::2 | 9651 | 9651 | +| 03 | BE | 185.69.166.7 | 2a02:1802:5e:0:8478:51ff:fee2:3331 | 9651 | 9651 | +| 04 | BE | 185.69.166.8 | 2a02:1802:5e:0:8c9e:7dff:fec9:f0d2 | 9651 | 9651 | +| 05 | FI | 65.21.231.58 | 2a01:4f9:6a:1dc5::2 | 9651 | 9651 | +| 06 | FI | 65.109.18.113 | 2a01:4f9:5a:1042::2 | 9651 | 9651 | + +These nodes are all interconnected, so 2 peers who each connect to a different node +(or set of disjoint nodes) will still be able to reach each other. For optimal performance, +it is recommended to connect to all of the above at once however. An example connection +string could be: + +`--peers tcp://188.40.132.242:9651 "tcp://[2a01:4f8:212:fa6::2]:9651" quic://185.69.166.7:9651 "tcp://[2a02:1802:5e:0:8c9e:7dff:fec9:f0d2]:9651" tcp://65.21.231.58:9651 "quic://[2a01:4f9:5a:1042::2]:9651"` + +It is up to the user to decide which peers he wants to use, over which protocol. +Note that quotation may or may not be required, depending on which shell is being +used. ## Default Port From 71bd49d9052d321239241272c372741abfd0b168 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 16:21:27 -0400 Subject: [PATCH 118/134] manual, update new pr --- books/manual/SUMMARY.md | 2 + .../advanced/advanced.md | 1 + .../advanced/ai_ml_workloads.md | 125 ++++++++++++++++++ .../computer_it_basics/computer_it_basics.md | 3 +- .../computer_it_basics/screenshots.md | 75 +++++++++++ .../mycelium/information.md | 29 ++++ .../system_administrators.md | 4 +- 7 files changed, 237 insertions(+), 2 deletions(-) create mode 100644 collections/system_administrators/advanced/ai_ml_workloads.md create mode 100644 collections/system_administrators/computer_it_basics/screenshots.md diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index 3526b9b..ee96d88 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -242,6 +242,7 @@ - [UFW Basics](system_administrators/computer_it_basics/firewall_basics/ufw_basics.md) - [Firewalld Basics](system_administrators/computer_it_basics/firewall_basics/firewalld_basics.md) - [File Transfer](system_administrators/computer_it_basics/file_transfer.md) + - [Screenshots](system_administrators/computer_it_basics/screenshots.md) - [Advanced](system_administrators/advanced/advanced.md) - [Token Transfer Keygenerator](system_administrators/advanced/token_transfer_keygenerator.md) - [Cancel Contracts](system_administrators/advanced/cancel_contracts.md) @@ -251,6 +252,7 @@ - [IPFS](system_administrators/advanced/ipfs/ipfs_toc.md) - [IPFS on a Full VM](system_administrators/advanced/ipfs/ipfs_fullvm.md) - [IPFS on a Micro VM](system_administrators/advanced/ipfs/ipfs_microvm.md) + - [AI & ML Workloads](system_administrators/advanced/ai_ml_workloads.md) - [ThreeFold Token](threefold_token/threefold_token.md) - [TFT Bridges](threefold_token/tft_bridges/tft_bridges.md) - [TFChain-Stellar Bridge](threefold_token/tft_bridges/tfchain_stellar_bridge.md) diff --git a/collections/system_administrators/advanced/advanced.md b/collections/system_administrators/advanced/advanced.md index fbe0fc7..fbf2a94 100644 --- a/collections/system_administrators/advanced/advanced.md +++ b/collections/system_administrators/advanced/advanced.md @@ -12,3 +12,4 @@ In this section, we delve into sophisticated topics and powerful functionalities - [IPFS](ipfs_toc.md) - [IPFS on a Full VM](ipfs_fullvm.md) - [IPFS on a Micro VM](ipfs_microvm.md) +- [AI & ML Workloads](ai_ml_workloads.md) \ No newline at end of file diff --git a/collections/system_administrators/advanced/ai_ml_workloads.md b/collections/system_administrators/advanced/ai_ml_workloads.md new file mode 100644 index 0000000..bc5760e --- /dev/null +++ b/collections/system_administrators/advanced/ai_ml_workloads.md @@ -0,0 +1,125 @@ +

AI & ML Workloads

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Prepare the System](#prepare-the-system) +- [Install the GPU Driver](#install-the-gpu-driver) +- [Set a Python Virtual Environment](#set-a-python-virtual-environment) +- [Install PyTorch and Test Cuda](#install-pytorch-and-test-cuda) +- [Set and Access Jupyter Notebook](#set-and-access-jupyter-notebook) +- [Run AI/ML Workloads](#run-aiml-workloads) + +*** + +## Introduction + +We present a basic method to deploy artificial intelligence (AI) and machine learning (ML) on the TFGrid. For this, we make use of dedicated nodes and GPU support. + +In the first part, we show the steps to install the Nvidia driver of a GPU card on a full VM Ubuntu 22.04 running on the TFGrid. + +In the second part, we show how to use PyTorch to run AI/ML tasks. + +## Prerequisites + +You need to reserve a [dedicated GPU node](../../dashboard/deploy/node_finder.md#dedicated-nodes) on the ThreeFold Grid. + +## Prepare the System + +- Update the system + ``` + dpkg --add-architecture i386 + apt-get update + apt-get dist-upgrade + reboot + ``` +- Check the GPU info + ``` + lspci | grep VGA + lshw -c video + ``` + +## Install the GPU Driver + +- Download the latest Nvidia driver + - Check which driver is recommended + ``` + apt install ubuntu-drivers-common + ubuntu-drivers devices + ``` + - Install the recommended driver (e.g. with 535) + ``` + apt install nvidia-driver-535 + ``` + - Reboot and reconnect to the VM +- Check the GPU status + ``` + nvidia-smi + ``` + +Now that the GPU node is set, let's work on setting PyTorch to run AI/ML workloads. + +## Set a Python Virtual Environment + +Before installing Python package with pip, you should create a virtual environment. + +- Install the prerequisites + ``` + apt update + apt install python3-pip python3-dev + pip3 install --upgrade pip + pip3 install virtualenv + ``` +- Create a virtual environment + ``` + mkdir ~/python_project + cd ~/python_project + virtualenv python_project_env + source python_project_env/bin/activate + ``` + +## Install PyTorch and Test Cuda + +Once you've created and activated a virtual environment for Pyhton, you can install different Python packages. + +- Install PyTorch and upgrade Numpy + ``` + pip3 install torch + pip3 install numpy --upgrade + ``` + +Before going further, you can check if Cuda is properly installed on your machine. + +- Check that Cuda is available on Python with PyTorch by using the following lines: + ``` + import torch + torch.cuda.is_available() + torch.cuda.device_count() # the output should be 1 + torch.cuda.current_device() # the output should be 0 + torch.cuda.device(0) + torch.cuda.get_device_name(0) + ``` + +## Set and Access Jupyter Notebook + +You can run Jupyter Notebook on the remote VM and access it on your local browser. + +- Install Jupyter Notebook + ``` + pip3 install notebook + ``` +- Run Jupyter Notebook in no-browser mode and take note of the URL and the token + ``` + jupyter notebook --no-browser --port=8080 --ip=0.0.0.0 + ``` +- On your local machine, copy and paste on a browser the given URL but make sure to change `127.0.0.1` with the WireGuard IP (here it is `10.20.4.2`) and to set the correct token. + ``` + http://10.20.4.2:8080/tree?token= + ``` + +## Run AI/ML Workloads + +After following the steps above, you should now be able to run Python codes that will make use of your GPU node to compute AI and ML workloads. + +Feel free to explore different ways to use this feature. For example, the [HuggingFace course](https://huggingface.co/learn/nlp-course/chapter1/1) on natural language processing is a good introduction to machine learning. \ No newline at end of file diff --git a/collections/system_administrators/computer_it_basics/computer_it_basics.md b/collections/system_administrators/computer_it_basics/computer_it_basics.md index a78bebd..d6ae44c 100644 --- a/collections/system_administrators/computer_it_basics/computer_it_basics.md +++ b/collections/system_administrators/computer_it_basics/computer_it_basics.md @@ -12,4 +12,5 @@ In this section, tailored specifically for system administrators, we'll delve in - [Firewall Basics](firewall_basics.md) - [UFW Basics](ufw_basics.md) - [Firewalld Basics](firewalld_basics.md) -- [File Transfer](file_transfer.md) \ No newline at end of file +- [File Transfer](file_transfer.md) +- [Screenshots](screenshots.md) \ No newline at end of file diff --git a/collections/system_administrators/computer_it_basics/screenshots.md b/collections/system_administrators/computer_it_basics/screenshots.md new file mode 100644 index 0000000..5d23b74 --- /dev/null +++ b/collections/system_administrators/computer_it_basics/screenshots.md @@ -0,0 +1,75 @@ +

Screenshots

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Linux](#linux) +- [MAC](#mac) +- [Windows](#windows) + +*** + +## Introduction + +In this section, we show how to easily take screenshots on Linux, MAC and Windows. + +## Linux + +- Copy to the clipboard a full screenshot +``` +PrintScreen +``` +- Copy to the clipboard a screenshot of an active window +``` +Alt + PrintScreen +``` +- Copy to the clipboard a screenshot of an active app +``` +Control + Alt + PrintScreen +``` +- Copy to the clipboard a screenshot of a selected area +``` +Shift + PrintScreen +``` + +## MAC + +- Save to the desktop a full screenshot +``` +Shift + Command (⌘) + 3 +``` +- Save to the desktop a screenshot of an active window +``` +Shift + Command (⌘) + 4 + Spacebar +``` +- Copy to the clipboard a screenshot of an active window +``` +Shift + Control + Command (⌘) + 3 +``` +- Save to the desktop a screenshot of a selected area +``` +Shift + Command (⌘) + 4 +``` +- Copy to the clipboard a screenshot of a selected area +``` +Shift + Control + Command (⌘) + 4 +``` + +## Windows + +- Copy to the clipboard a full screenshot +``` +PrintScreen +``` +- Save to the pictures directory a full screenshot +``` +Windows key + PrintScreen +``` +- Copy to the clipboard a screenshot of an active window +``` +Alt + PrintScreen +``` +- Copy to the clipboard a selected area of the screen +``` +Windows key + Shift + S +``` \ No newline at end of file diff --git a/collections/system_administrators/mycelium/information.md b/collections/system_administrators/mycelium/information.md index a9eee41..4fbd80d 100644 --- a/collections/system_administrators/mycelium/information.md +++ b/collections/system_administrators/mycelium/information.md @@ -14,6 +14,7 @@ - [API](#api) - [Message System](#message-system) - [Inspecting Node Keys](#inspecting-node-keys) +- [Permanently Enable Mycelium](#permanently-enable-mycelium) *** @@ -150,4 +151,32 @@ Where the output could be something like this: ```sh Public key: a47c1d6f2a15b2c670d3a88fbe0aeb301ced12f7bcb4c8e3aa877b20f8559c02 Address: 27f:b2c5:a944:4dad:9cb1:da4:8bf7:7e65 +``` + +## Permanently Enable Mycelium + +It is possible to permenently enable Mycelium on your client. + +For Linux, we use systemd to manage the mycelium daemon in `/storage/`. Here's an example: + +``` +[Unit] +Description=End-2-end encrypted IPv6 overlay network +Wants=network.target +After=network.target +Documentation=https://github.com/threefoldtech/mycelium +[Service] +ProtectHome=true +ProtectSystem=true +SyslogIdentifier=mycelium +CapabilityBoundingSet=CAP_NET_ADMIN +StateDirectory=mycelium +StateDirectoryMode=0700 +ExecStartPre=+-/sbin/modprobe tun +ExecStart=/storage/mycelium --no-tun --disable-peer-discovery -k %S/mycelium/key.bin --peers tcp://[2a01:4f8:221:1e0b::2]:9651 tcp://[2a01:4f8:212:fa6::2]:9651 tcp://[2a02:1802:5e:0:8478:51ff:fee2:3331]:9651 tcp://[2a02:1802:5e:0:8c9e:7dff:fec9:f0d2]:9651 tcp://[2a01:4f9:5a:1042::2]:9651 +Restart=always +RestartSec=5 +TimeoutStopSec=5 +[Install] +WantedBy=multi-user.target ``` \ No newline at end of file diff --git a/collections/system_administrators/system_administrators.md b/collections/system_administrators/system_administrators.md index f76b33a..9779656 100644 --- a/collections/system_administrators/system_administrators.md +++ b/collections/system_administrators/system_administrators.md @@ -72,6 +72,7 @@ For complementary information on ThreeFold grid and its cloud component, refer t - [UFW Basics](ufw_basics.md) - [Firewalld Basics](firewalld_basics.md) - [File Transfer](file_transfer.md) + - [Screenshots](screenshots.md) - [Advanced](advanced.md) - [Token Transfer Keygenerator](token_transfer_keygenerator.md) - [Cancel Contracts](cancel_contracts.md) @@ -80,4 +81,5 @@ For complementary information on ThreeFold grid and its cloud component, refer t - [Redis](grid3_redis.md) - [IPFS](ipfs_toc.md) - [IPFS on a Full VM](ipfs_fullvm.md) - - [IPFS on a Micro VM](ipfs_microvm.md) \ No newline at end of file + - [IPFS on a Micro VM](ipfs_microvm.md) + - [AI & ML Workloads](ai_ml_workloads.md) \ No newline at end of file From aad4e79eef93277104ca707ff85d5a10d18a0407 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 16:24:07 -0400 Subject: [PATCH 119/134] manual, update new pr --- .../system_administrators.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/collections/system_administrators/system_administrators.md b/collections/system_administrators/system_administrators.md index 9779656..ea86d6d 100644 --- a/collections/system_administrators/system_administrators.md +++ b/collections/system_administrators/system_administrators.md @@ -8,14 +8,14 @@ For complementary information on ThreeFold grid and its cloud component, refer t - [Getting Started](tfgrid3_getstarted.md) - [SSH Remote Connection](ssh_guide.md) - - [SSH with OpenSSH](ssh_openssh.md) - - [SSH with PuTTY](ssh_putty.md) - - [SSH with WSL](ssh_wsl.md) - - [WireGuard Access](ssh_wireguard.md) + - [SSH with OpenSSH](ssh_openssh.md) + - [SSH with PuTTY](ssh_putty.md) + - [SSH with WSL](ssh_wsl.md) + - [WireGuard Access](ssh_wireguard.md) - [Remote Desktop and GUI](remote-desktop_gui.md) - - [Cockpit: a Web-based Interface for Servers](cockpit_guide.md) - - [XRDP: an Open-Source Remote Desktop Protocol](xrdp_guide.md) - - [Apache Guacamole: a Clientless Remote Desktop Gateway](guacamole_guide.md) + - [Cockpit: a Web-based Interface for Servers](cockpit_guide.md) + - [XRDP: an Open-Source Remote Desktop Protocol](xrdp_guide.md) + - [Apache Guacamole: a Clientless Remote Desktop Gateway](guacamole_guide.md) - [Planetary Network](planetarynetwork.md) - [TFGrid Services](tf_grid_services_readme.md) - [GPU](gpu_toc.md) @@ -69,8 +69,8 @@ For complementary information on ThreeFold grid and its cloud component, refer t - [Docker Basics](docker_basics.md) - [Git and GitHub Basics](git_github_basics.md) - [Firewall Basics](firewall_basics.md) - - [UFW Basics](ufw_basics.md) - - [Firewalld Basics](firewalld_basics.md) + - [UFW Basics](ufw_basics.md) + - [Firewalld Basics](firewalld_basics.md) - [File Transfer](file_transfer.md) - [Screenshots](screenshots.md) - [Advanced](advanced.md) @@ -80,6 +80,6 @@ For complementary information on ThreeFold grid and its cloud component, refer t - [Listing Free Public IPs](list_public_ips.md) - [Redis](grid3_redis.md) - [IPFS](ipfs_toc.md) - - [IPFS on a Full VM](ipfs_fullvm.md) - - [IPFS on a Micro VM](ipfs_microvm.md) + - [IPFS on a Full VM](ipfs_fullvm.md) + - [IPFS on a Micro VM](ipfs_microvm.md) - [AI & ML Workloads](ai_ml_workloads.md) \ No newline at end of file From 042ead40bd57e2a513c3a7e1b825658d54a78381 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 16:28:40 -0400 Subject: [PATCH 120/134] manual, update new pr --- .../img/polkadot_wallet_example.png | Bin 0 -> 105811 bytes .../img/wallet_solution_provider_main.png | Bin 0 -> 24537 bytes .../img/wallet_solution_provider_test.png | Bin 0 -> 23608 bytes .../img/wallet_staking_pool.png | Bin 0 -> 24481 bytes .../img/wallet_tf_foundation_main.png | Bin 0 -> 24341 bytes .../img/wallet_tf_foundation_test.png | Bin 0 -> 23241 bytes .../special_wallets/stats_special_wallets.md | 49 ++++++++++++++++++ collections/dashboard/dashboard.md | 9 ++++ .../mycelium/information.md | 2 +- 9 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 collections/about/token_overview/special_wallets/img/polkadot_wallet_example.png create mode 100644 collections/about/token_overview/special_wallets/img/wallet_solution_provider_main.png create mode 100644 collections/about/token_overview/special_wallets/img/wallet_solution_provider_test.png create mode 100644 collections/about/token_overview/special_wallets/img/wallet_staking_pool.png create mode 100644 collections/about/token_overview/special_wallets/img/wallet_tf_foundation_main.png create mode 100644 collections/about/token_overview/special_wallets/img/wallet_tf_foundation_test.png diff --git a/collections/about/token_overview/special_wallets/img/polkadot_wallet_example.png b/collections/about/token_overview/special_wallets/img/polkadot_wallet_example.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b65ccc443d01cccd874247139402539c8cb9a8 GIT binary patch literal 105811 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%0AFG5l-LJrq;qK3`8MkXCf*f&G$}qzU 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 literal 0 HcmV?d00001 diff --git a/collections/about/token_overview/special_wallets/img/wallet_solution_provider_main.png b/collections/about/token_overview/special_wallets/img/wallet_solution_provider_main.png new file mode 100644 index 0000000000000000000000000000000000000000..bb301f00d24dd2a6130636c00e3a9a5325dd15bd GIT binary patch literal 24537 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%0AkE-g3gm| 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 literal 0 HcmV?d00001 diff --git a/collections/about/token_overview/special_wallets/img/wallet_solution_provider_test.png b/collections/about/token_overview/special_wallets/img/wallet_solution_provider_test.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef46691e9099d0cf4e43e79f39d49beb0bfc8db GIT binary patch literal 23608 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 INg4tc5wINcm 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 YN+KUM$=2!#r>sX%kX4nbkTMPWFWx;@1poj5 literal 0 HcmV?d00001 diff --git a/collections/about/token_overview/special_wallets/img/wallet_tf_foundation_test.png b/collections/about/token_overview/special_wallets/img/wallet_tf_foundation_test.png new file mode 100644 index 0000000000000000000000000000000000000000..83812ee4af203229e752b399c6920f5f0ae44732 GIT binary patch literal 23241 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 F{{hpvavcBw literal 0 HcmV?d00001 diff --git a/collections/about/token_overview/special_wallets/stats_special_wallets.md b/collections/about/token_overview/special_wallets/stats_special_wallets.md index b561f4d..a0f130c 100644 --- a/collections/about/token_overview/special_wallets/stats_special_wallets.md +++ b/collections/about/token_overview/special_wallets/stats_special_wallets.md @@ -8,6 +8,7 @@ - [Wisdom Council Wallets](#wisdom-council-wallets) - [Important Note](#important-note) - [Remarks](#remarks) +- [Proof-of-Utilization Wallets](#proof-of-utilization-wallets) *** @@ -54,3 +55,51 @@ ThreeFold DMCC (Dubai) is in the process of acquiring a substantial number of to - All foundation wallets are protected by members of the foundation (4 on 6 need to sign) - Signatures can be checked by going to detail of account and then to the stellar link - The foundation will never spend tokens if the markets cannot support it and all proceeds are 100% used for the benefit of the ThreeFold project. + +## Proof-of-Utilization Wallets + +There are some wallets associated with [proof-of-utilization](../../../farming/proof_of_utilization.md). These wallets are on TFChain. + +The addresses are the following: + +- Mainnet ThreeFold Foundation: 5DCaGQfz2PH35EMJTHFMjc6Tk5SkqhjekVvrycY5M5xiYzis +- Mainnet Default Solution Provider: 5Dd6adUJH8wvqb9SPC96JdZ85nK1671MeMSxkPZ6Q7rE4byc +- Testnet ThreeFold Foundation: 5H6XYX17yJyjazoLVZqxxEPwMdGn99wginjmFBKtjvk8iJ3e +- Testnet Default Solution Provider: 5Esq6iLLBGGJFsCEXpoFhxHhqcaGqTvDasdwy8jPFDH1jYaM +- Staking Pool: 5CNposRewardAccount11111111111111111111111111FSU + +To check the balance of any of those wallets, follow those steps: + +- Go to the Polkadot API ([Mainnet](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftfchain.grid.tf#/chainstate), [Testnet](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftfchain.test.grid.tf#/chainstate)) +- Under `selected state query`, select `system` +- On the right drop down menu, select `account(AccountId32): FrameSystemAccountInfo` +- Under `Option`, write the wallet address of one of the three accounts displayed above +- Click on the `plus` button on the far right of the `selected state query` line. + +As a general example, here's what it looks like: + +![Wallet example](./img/polkadot_wallet_example.png) + +Here are the outputs for three wallets shown above: + +- Mainnet ThreeFold Foundation + +![Mainnet TF Foundation Wallet](./img/wallet_tf_foundation_main.png) + +- Mainnet Default Solution Provider + +![Mainnet Solution Provider Wallet](./img/wallet_solution_provider_main.png) + +- Testnet ThreeFold Foundation + +![Testnet TF Foundation Wallet](./img/wallet_tf_foundation_test.png) + +- Testnet Default Solution Provider + +![Testnet Solution Provider Wallet](./img/wallet_solution_provider_test.png) + +- Staking Pool + +![Staking Pool Wallet](./img/wallet_staking_pool.png) + +> Note: To get the proper TFT amount, you need to account fo the fact that TFT uses 7 decimal places. For this reason, to get the proper quantity in TFT, move the decimal place by dividing by 1e7 (i.e. 1x10⁷). \ No newline at end of file diff --git a/collections/dashboard/dashboard.md b/collections/dashboard/dashboard.md index 007707f..fca40ee 100644 --- a/collections/dashboard/dashboard.md +++ b/collections/dashboard/dashboard.md @@ -41,3 +41,12 @@ You can access the ThreeFold Dashboard on different TF Chain networks. - Regarding browser support, we're only supporting Google Chrome browser (and thus Brave browser) at the moment with more browsers to be supported soon. - Deploys one thing at a time. - Might take sometime to deploy a solution like Peertube, so you should wait a little bit until it's fully running. + +## Dashboard Backups + +If the main Dashboard URLs are not working for any reason, the following URLs can be used. Those Dashboard URLs are fully independent of the main Dashboard URLs shown above. + +- [https://dashboard.02.dev.grid.tf](https://dashboard.02.dev.grid.tf) for Dev net +- [https://dashboard.02.qa.grid.tf](https://dashboard.02.qa.grid.tf) for QA net +- [https://dashboard.02.test.grid.tf](https://dashboard.02.test.grid.tf) for Test net +- [https://dashboard.02.grid.tf](https://dashboard.02.grid.tf) for Main net \ No newline at end of file diff --git a/collections/system_administrators/mycelium/information.md b/collections/system_administrators/mycelium/information.md index 4fbd80d..06471f7 100644 --- a/collections/system_administrators/mycelium/information.md +++ b/collections/system_administrators/mycelium/information.md @@ -173,7 +173,7 @@ CapabilityBoundingSet=CAP_NET_ADMIN StateDirectory=mycelium StateDirectoryMode=0700 ExecStartPre=+-/sbin/modprobe tun -ExecStart=/storage/mycelium --no-tun --disable-peer-discovery -k %S/mycelium/key.bin --peers tcp://[2a01:4f8:221:1e0b::2]:9651 tcp://[2a01:4f8:212:fa6::2]:9651 tcp://[2a02:1802:5e:0:8478:51ff:fee2:3331]:9651 tcp://[2a02:1802:5e:0:8c9e:7dff:fec9:f0d2]:9651 tcp://[2a01:4f9:5a:1042::2]:9651 +ExecStart=/storage/mycelium --tun-name mycelium -k %S/mycelium/key.bin --peers tcp://[2a01:4f8:221:1e0b::2]:9651 tcp://[2a01:4f8:212:fa6::2]:9651 tcp://[2a02:1802:5e:0:8478:51ff:fee2:3331]:9651 tcp://[2a02:1802:5e:0:8c9e:7dff:fec9:f0d2]:9651 tcp://[2a01:4f9:6a:1dc5::2]:9651 tcp://[2a01:4f9:5a:1042::2]:9651 Restart=always RestartSec=5 TimeoutStopSec=5 From 6be34813c104f965deafd75a697060a55bf3d153 Mon Sep 17 00:00:00 2001 From: Mik-TF Date: Tue, 14 May 2024 16:33:15 -0400 Subject: [PATCH 121/134] manual, update new pr --- books/manual/SUMMARY.md | 1 + collections/dashboard/tfchain/tf_dao.md | 15 +++ .../advanced/advanced.md | 1 + .../advanced/img/minio_1.png | Bin 0 -> 252924 bytes .../advanced/img/minio_2.png | Bin 0 -> 81018 bytes .../advanced/minio_helm3.md | 112 ++++++++++++++++++ .../system_administrators.md | 3 +- 7 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 collections/system_administrators/advanced/img/minio_1.png create mode 100644 collections/system_administrators/advanced/img/minio_2.png create mode 100644 collections/system_administrators/advanced/minio_helm3.md diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index ee96d88..ff61efb 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -252,6 +252,7 @@ - [IPFS](system_administrators/advanced/ipfs/ipfs_toc.md) - [IPFS on a Full VM](system_administrators/advanced/ipfs/ipfs_fullvm.md) - [IPFS on a Micro VM](system_administrators/advanced/ipfs/ipfs_microvm.md) + - [MinIO Operator with Helm3](system_administrators/advanced/minio_helm3.md) - [AI & ML Workloads](system_administrators/advanced/ai_ml_workloads.md) - [ThreeFold Token](threefold_token/threefold_token.md) - [TFT Bridges](threefold_token/tft_bridges/tft_bridges.md) diff --git a/collections/dashboard/tfchain/tf_dao.md b/collections/dashboard/tfchain/tf_dao.md index 4803f4c..f582491 100644 --- a/collections/dashboard/tfchain/tf_dao.md +++ b/collections/dashboard/tfchain/tf_dao.md @@ -8,6 +8,7 @@ The TFChain DAO (i.e. Decentralized Autonomous Organization) feature integrates - [Prerequisites to Vote](#prerequisites-to-vote) - [How to Vote for a Proposal](#how-to-vote-for-a-proposal) - [The Goal of the Threefold DAO](#the-goal-of-the-threefold-dao) +- [Voting Weight](#voting-weight) *** @@ -39,3 +40,17 @@ To vote, you need to log into your Threefold Dashboard account, go to **TF DAO** The goal of DAO voting system is to gather the thoughts and will of the Threefold community and build projects that are aligned with the ethos of the project. We encourage anyone to share their ideas. Who knows? Your sudden spark of genius might lead to an accepted proposal on the Threefold DAO! + +## Voting Weight + +The DAO votes are weighted as follows: + +- Get all linked farms to the account +- Get all nodes per farm +- Get compute and storage units per node (CU and SU) +- Compute the weight of a farm: + ``` + 2 * (sum of CU of all nodes) + (sum of SU of all nodes) + ``` + +Voting weights are tracked per farm to keep it easy and traceable. Thus, if an account has multiple farms, the vote will be registered per farm. \ No newline at end of file diff --git a/collections/system_administrators/advanced/advanced.md b/collections/system_administrators/advanced/advanced.md index fbf2a94..f554c42 100644 --- a/collections/system_administrators/advanced/advanced.md +++ b/collections/system_administrators/advanced/advanced.md @@ -12,4 +12,5 @@ In this section, we delve into sophisticated topics and powerful functionalities - [IPFS](ipfs_toc.md) - [IPFS on a Full VM](ipfs_fullvm.md) - [IPFS on a Micro VM](ipfs_microvm.md) +- [MinIO Operator with Helm3](minio_helm3.md) - [AI & ML Workloads](ai_ml_workloads.md) \ No newline at end of file diff --git a/collections/system_administrators/advanced/img/minio_1.png b/collections/system_administrators/advanced/img/minio_1.png new file mode 100644 index 0000000000000000000000000000000000000000..58d1627c3e7c3c0e27db567c575312c097e98fcf GIT binary patch literal 252924 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