diff --git a/books/developers/Makefile b/books/developers/Makefile new file mode 100644 index 0000000..f678ceb --- /dev/null +++ b/books/developers/Makefile @@ -0,0 +1,4 @@ +build: + ./scripts/generate_wallets.sh + ./scripts/calculate_marketcap.sh + ./scripts/calculate_cloud_pricing.sh \ No newline at end of file diff --git a/books/developers/SUMMARY.md b/books/developers/SUMMARY.md new file mode 100644 index 0000000..25e6a96 --- /dev/null +++ b/books/developers/SUMMARY.md @@ -0,0 +1,179 @@ +- [Table of Contents](developers/developers_book_toc.md) +- [Javascript Client](developers/javascript/grid3_javascript_readme.md) + - [Installation](developers/javascript/grid3_javascript_installation.md) + - [Loading Client](developers/javascript/grid3_javascript_loadclient.md) + - [Deploy a VM](developers/javascript/grid3_javascript_vm.md) + - [Capacity Planning](developers/javascript/grid3_javascript_capacity_planning.md) + - [Deploy Multiple VMs](developers/javascript/grid3_javascript_vms.md) + - [Deploy CapRover](developers/javascript/grid3_javascript_caprover.md) + - [Gateways](developers/javascript/grid3_javascript_vm_gateways.md) + - [Deploy a Kubernetes Cluster](developers/javascript/grid3_javascript_kubernetes.md) + - [Deploy a ZDB](developers/javascript/grid3_javascript_zdb.md) + - [Deploy ZDBs for QSFS](developers/javascript/grid3_javascript_qsfs_zdbs.md) + - [QSFS](developers/javascript/grid3_javascript_qsfs.md) + - [Key Value Store](developers/javascript/grid3_javascript_kvstore.md) + - [VM with Wireguard and Gateway](developers/javascript/grid3_wireguard_gateway.md) + - [GPU Support](developers/javascript/grid3_javascript_gpu_support.md) +- [Go Client](developers/go/grid3_go_readme.md) + - [Installation](developers/go/grid3_go_installation.md) + - [Loading Client](developers/go/grid3_go_load_client.md) + - [Deploy a VM](developers/go/grid3_go_vm.md) + - [Deploy Multiple VMs](developers/go/grid3_go_vms.md) + - [Deploy Gateways](developers/go/grid3_go_gateways.md) + - [Deploy Kubernetes](developers/go/grid3_go_kubernetes.md) + - [Deploy a QSFS](developers/go/grid3_go_qsfs.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](developers/tfcmd/tfcmd.md) + - [Getting Started](developers/tfcmd/tfcmd_basics.md) + - [Deploy a VM](developers/tfcmd/tfcmd_vm.md) + - [Deploy Kubernetes](developers/tfcmd/tfcmd_kubernetes.md) + - [Deploy ZDB](developers/tfcmd/tfcmd_zdbs.md) + - [Gateway FQDN](developers/tfcmd/tfcmd_gateway_fqdn.md) + - [Gateway Name](developers/tfcmd/tfcmd_gateway_name.md) + - [Contracts](developers/tfcmd/tfcmd_contracts.md) +- [TFROBOT](developers/tfrobot/tfrobot.md) + - [Installation](developers/tfrobot/tfrobot_installation.md) + - [Configuration File](developers/tfrobot/tfrobot_config.md) + - [Deployment](developers/tfrobot/tfrobot_deploy.md) + - [Commands and Flags](developers/tfrobot/tfrobot_commands_flags.md) + - [Supported Configurations](developers/tfrobot/tfrobot_configurations.md) +- [ThreeFold Chain](developers/tfchain/dev_tfchain.md) + - [Introduction](developers/tfchain/introduction.md) + - [Farming Policies](developers/tfchain/farming_policies.md) + - [External Service Contract](developers/tfchain/tfchain_external_service_contract.md) + - [Solution Provider](developers/tfchain/tfchain_solution_provider.md) +- [Grid Proxy](developers/proxy/proxy_readme.md) + - [Introducing Grid Proxy](developers/proxy/proxy.md) + - [Setup](developers/proxy/setup.md) + - [DB Testing](developers/proxy/db_testing.md) + - [Commands](developers/proxy/commands.md) + - [Contributions](developers/proxy/contributions.md) + - [Explorer](developers/proxy/explorer.md) + - [Database](developers/proxy/database.md) + - [Production](developers/proxy/production.md) + - [Release](developers/proxy/release.md) +- [Flist](developers/flist/flist.md) + - [Zero-OS Hub](developers/flist/flist_hub/zos_hub.md) + - [Generate an API Token](developers/flist/flist_hub/api_token.md) + - [Convert Docker Image Into Flist](developers/flist/flist_hub/convert_docker_image.md) + - [Supported Flists](developers/flist/grid3_supported_flists.md) + - [Flist Case Studies](developers/flist/flist_case_studies/flist_case_studies.md) + - [Case Study: Debian 12](developers/flist/flist_case_studies/flist_debian_case_study.md) + - [Case Study: Nextcloud AIO](developers/flist/flist_case_studies/flist_nextcloud_case_study.md) +- [Internals](developers/internals/internals.md) + - [Reliable Message Bus - RMB](developers/internals/rmb/rmb_toc.md) + - [Introduction to RMB](developers/internals/rmb/rmb_intro.md) + - [Coding Guides](developers/internals/rmb/rmb_coding_guides.md) + - [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/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/zos_internals.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/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/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) + - [CPUBenchmark](developers/internals/zos/performance/cpubench.md) + - [IPerf](developers/internals/zos/performance/iperf.md) + - [Health Check](developers/internals/zos/performance/healthcheck.md) + - [API](developers/internals/zos/manual/api.md) +- [Grid Deployment](developers/grid_deployment/grid_deployment.md) + - [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) + - [Application Case Study: Nextcloud](developers/grid_deployment/app_case_study_nextcloud.md) +- [ThreeFold Dashboard](dashboard/dashboard.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) + - [Node Monitoring](dashboard/tfgrid/node_monitoring.md) + - [Deploy](dashboard/deploy/deploy.md) + - [Pricing Calculator](dashboard/deploy/pricing_calculator.md) + - [Node Finder](dashboard/deploy/node_finder.md) + - [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/microvm.md) + - [Nixos MicroVM](dashboard/solutions/nixos_micro.md) + - [Add a Domain](dashboard/solutions/add_domain.md) + - [Orchestrators](dashboard/deploy/orchestrators.md) + - [Kubernetes](dashboard/solutions/k8s.md) + - [Caprover](dashboard/solutions/caprover.md) + - [Caprover Admin](dashboard/solutions/caprover_admin.md) + - [Caprover Worker](dashboard/solutions/caprover_worker.md) + - [Applications](dashboard/deploy/applications.md) + - [Algorand](dashboard/solutions/algorand.md) + - [CasperLabs](dashboard/solutions/casper.md) + - [Discourse](dashboard/solutions/discourse.md) + - [Funkwhale](dashboard/solutions/funkwhale.md) + - [Mattermost](dashboard/solutions/mattermost.md) + - [Nextcloud](dashboard/solutions/nextcloud.md) + - [Node Pilot](dashboard/solutions/nodepilot.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) + - [WordPress](dashboard/solutions/wordpress.md) + - [Your Contracts](dashboard/deploy/your_contracts.md) + - [Images](dashboard/deploy/images.md) + - [SSH Keys](dashboard/deploy/ssh_keys.md) + - [Farms](dashboard/farms/farms.md) + - [Your Farms](dashboard/farms/your_farms.md) + - [Farm Finder](dashboard/farms/farms_finder.md) + - [Node Installer](dashboard/farms/node_installer.md) + - [Simulator](dashboard/farms/simulator.md) + - [TFChain](dashboard/tfchain/tfchain.md) + - [Your Profile](dashboard/tfchain/your_profile.md) + - [TF DAO](dashboard/tfchain/tf_dao.md) + - [Voting Weight Example](dashboard/tfchain/tf_dao_voting_weight.md) + - [TF Token Bridge](dashboard/tfchain/tf_token_bridge.md) + - [TF Token Transfer](dashboard/tfchain/tf_token_transfer.md) + - [TF Minting Reports](dashboard/tfchain/tf_minting_reports.md) +- [ThreeFold Connect](tfconnect/tfconnect_toc.md) + - [TFConnect Overview](tfconnect/tfconnect_overview.md) + - [TFConnect Authenticator](tfconnect/tfconnect_authenticator.md) + - [TFConnect Advanced](tfconnect/tfconnect_advanced.md) + - [TFConnect Troubleshooting](tfconnect/tfconnect_troubleshooting.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) + - [BSC-Stellar Bridge](threefold_token/tft_bridges/bsc_stellar_bridge.md) + - [BSC-Stellar Bridge Verification](threefold_token/tft_bridges/bsc_stellar_bridge_verification.md) + - [Ethereum-Stellar Bridge](threefold_token/tft_bridges/tft_ethereum/tft_ethereum.md) + - [Storing TFT](threefold_token/storing_tft/storing_tft.md) + - [ThreeFold Connect App - Stellar](threefold_token/storing_tft/tf_connect_app.md) + - [Lobstr Wallet - Stellar](threefold_token/storing_tft/lobstr_wallet.md) + - [MetaMask - BSC & ETH](threefold_token/storing_tft/metamask.md) + - [Hardware Wallet](threefold_token/storing_tft/hardware_wallet.md) + - [Buy and Sell TFT](threefold_token/buy_sell_tft/buy_sell_tft.md) + - [Quick Start - Stellar](threefold_token/buy_sell_tft/tft_lobstr/tft_lobstr_short_guide.md) + - [Lobstr Wallet - Stellar](threefold_token/buy_sell_tft/tft_lobstr/tft_lobstr_complete_guide.md) + - [MetaMask - BSC & ETH](threefold_token/buy_sell_tft/tft_metamask/tft_metamask.md) + - [Pancake Swap - BSC](threefold_token/buy_sell_tft/pancakeswap.md) + - [Liquidity Provider - LP](threefold_token/liquidity/liquidity_readme.md) + - [Pancake Swap LP](threefold_token/liquidity/liquidity_pancake.md) + - [1inch.io LP](threefold_token/liquidity/liquidity_1inch.md) + - [Albedo LP](threefold_token/liquidity/liquidity_albedo.md) + - [Transaction Fees](threefold_token/transaction_fees.md) +- [FAQ](faq/faq.md) \ No newline at end of file diff --git a/books/developers/scripts/calculate_cloud_pricing.sh b/books/developers/scripts/calculate_cloud_pricing.sh new file mode 100755 index 0000000..ebce4bb --- /dev/null +++ b/books/developers/scripts/calculate_cloud_pricing.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +cd ../../collections/manual/values + +value=$(cat tft_value.md) + +CU=$(cat cu_musd_hour.md) +CUTFT=$(echo "$CU / $value" | bc -l) +printf "%.2f" $CUTFT > cu_mtft_hour.md + +SU=$(cat su_musd_hour.md) +SUTFT=$(echo "$SU / $value" | bc -l) +printf "%.2f" $SUTFT > su_mtft_hour.md + +NU=$(cat nu_musd_hour.md) +NUTFT=$(echo "$NU / $value" | bc -l) +printf "%.2f" $NUTFT > nu_mtft_hour.md + +IP=$(cat ip_musd_hour.md) +IPTFT=$(echo "$IP / $value" | bc -l) +printf "%.2f" $IPTFT > ip_mtft_hour.md + +NAME=$(cat name_musd_hour.md) +NAME=$(echo "$NAME / $value" | bc -l) +printf "%.2f" $NAME > name_mtft_hour.md + +DNAME=$(cat dname_musd_hour.md) +DNAME=$(echo "$DNAME / $value" | bc -l) +printf "%.2f" $DNAME > dname_mtft_hour.md \ No newline at end of file diff --git a/books/developers/scripts/calculate_marketcap.sh b/books/developers/scripts/calculate_marketcap.sh new file mode 100755 index 0000000..53a0287 --- /dev/null +++ b/books/developers/scripts/calculate_marketcap.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +cd ../../collections/manual/values + +coinId="threefold-token" + +url="https://api.coingecko.com/api/v3/simple/price?ids=${coinId}&vs_currencies=usd"; + +curl -sL ${url} \ +-H 'Accept: application/json' | jq '."threefold-token".usd' | xargs printf "%.3f" > tft_value.md + +supply=$(cat tft_supply.md) + +value=$(cat tft_value.md) + +TFT_MARKETCAP=$(echo "$supply * $value" | bc -l) + +printf "%'.0f" $TFT_MARKETCAP > tft_marketcap.md \ No newline at end of file diff --git a/books/developers/scripts/generate_wallets.sh b/books/developers/scripts/generate_wallets.sh new file mode 100755 index 0000000..08a4483 --- /dev/null +++ b/books/developers/scripts/generate_wallets.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +mkdir -p ../../collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data +cd ../../collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data + +wallets=( +GA7OPN4A3JNHLPHPEWM4PJDOYYDYNZOM7ES6YL3O7NC3PRY3V3UX6ANM +GDSKFYNMZWTB3V5AN26CEAQ27643Q3KB4X6MY4UTO2LIIDFND4SPQZYU +GBQHN7RL4LSRPR2TT74ID2UJPZ2AXCHQY2WKGCTDLJM3NXVJ7GQHUCOD +GBTPAXXP6534UPC4MLNGFGJWCD6DNSRVIPPOZWXAQAWI4FKTLOJY2A2S +GB2C5HCZYWNGVM6JGXDWQBJTMUY4S2HPPTCAH63HFAQVL2ALXDW7SSJ7 +GDLVIB44LVONM5K67LUPSFZMSX7G2RLYVBM5MMHUJ4NAQJU7CH4HBJBO +GDKXTUYNW4BJKDM2L7B5XUYFUISV52KUU4G7VPNLF4ZSIKBURM622YPZ +GDIJY6K2BBRIRX423ZFUYKKFDN66XP2KMSBZFQSE2PSNDZ6EDVQTRLSU +GCWHWDRXYPXQAOYMQKB66SZPLM6UANKGMSL4SP7LSOIA6OTTOYQ6HBIH +GBV734I2SV4YDDPVJMYXU3IZ2AIU5GEAJRAD4E4BQG7CA2N63NXSPMD6 +GAI4C2BGOA3YHVQZZW7OW4FHOGGYWTUBEVNHB6MW4ZAFG7ZAA7D5IPC3 +GCEJ7DMULFTT25UH4FAAGOZ6KER4WXAYQGJUSIITQD527DGTKSXKBQGR +GAQXBLFG4BZGIVY6DBJVWE5EAP3UNHMIA2PYCUVLY2JUSPVWPUF36BW4 +GAUGOSYLCX7JZTQYF2K7RIMHFWKSA3WSI2OQ4IRKXMDMVE6ABJIJMFQR +) + +for wallet in "${wallets[@]}"; do + curl -sL "https://horizon.stellar.org/accounts/${wallet}" -H 'Accept: application/json' | jq --raw-output '.balances[] | select(.asset_code == "TFT") | .balance' | xargs printf "%.2f" > ${wallet,,}.md +done \ No newline at end of file diff --git a/books/developers/sync_production.sh b/books/developers/sync_production.sh new file mode 100755 index 0000000..f2496fe --- /dev/null +++ b/books/developers/sync_production.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ex +export NAME=developers +hero mdbook -u https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/manual/heroscript/$NAME +rsync -rv ~/hero/www/info/$NAME/ root@info.ourworld.tf:/root/hero/www/info/$NAME/ diff --git a/books/duniayetu_dar/SUMMARY.md b/books/duniayetu/SUMMARY.md similarity index 100% rename from books/duniayetu_dar/SUMMARY.md rename to books/duniayetu/SUMMARY.md diff --git a/books/duniayetu_dar/sync_production.sh b/books/duniayetu/sync_production.sh similarity index 100% rename from books/duniayetu_dar/sync_production.sh rename to books/duniayetu/sync_production.sh diff --git a/books/farmers/Makefile b/books/farmers/Makefile new file mode 100644 index 0000000..f678ceb --- /dev/null +++ b/books/farmers/Makefile @@ -0,0 +1,4 @@ +build: + ./scripts/generate_wallets.sh + ./scripts/calculate_marketcap.sh + ./scripts/calculate_cloud_pricing.sh \ No newline at end of file diff --git a/books/farmers/SUMMARY.md b/books/farmers/SUMMARY.md new file mode 100644 index 0000000..dee88de --- /dev/null +++ b/books/farmers/SUMMARY.md @@ -0,0 +1,104 @@ +- [Table of Contents](farmers/farmers_book_toc.md) +- [Build a 3Node](farmers/3node_building/3node_building.md) + - [1. Create a Farm](farmers/3node_building/1_create_farm.md) + - [2. Create a Zero-OS Bootstrap Image](farmers/3node_building/2_bootstrap_image.md) + - [3. Set the Hardware](farmers/3node_building/3_set_hardware.md) + - [4. Wipe All the Disks](farmers/3node_building/4_wipe_all_disks.md) + - [5. Set the BIOS/UEFI](farmers/3node_building/5_set_bios_uefi.md) + - [6. Boot the 3Node](farmers/3node_building/6_boot_3node.md) +- [Farming Optimization](farmers/farming_optimization/farming_optimization.md) + - [GPU Farming](farmers/3node_building/gpu_farming.md) + - [Set Additional Fees](farmers/farming_optimization/set_additional_fees.md) + - [Minting Receipts](farmers/3node_building/minting_receipts.md) + - [Minting Periods](farmers/farming_optimization/minting_periods.md) + - [Room Parameters](farmers/farming_optimization/farm_room_parameters.md) + - [Farming Costs](farmers/farming_optimization/farming_costs.md) + - [Calculate Your ROI](farmers/farming_optimization/calculate_roi.md) + - [Farming Requirements](farmers/farming_optimization/farming_requirements.md) +- [Advanced Networking](farmers/advanced_networking/advanced_networking_toc.md) + - [Networking Overview](farmers/advanced_networking/networking_overview.md) + - [Network Considerations](farmers/advanced_networking/network_considerations.md) + - [Network Setup](farmers/advanced_networking/network_setup.md) +- [Farmerbot](farmers/farmerbot/farmerbot_intro.md) + - [Quick Guide](farmers/farmerbot/farmerbot_quick.md) + - [Additional Information](farmers/farmerbot/farmerbot_information.md) + - [Minting and the Farmerbot](farmers/farmerbot/farmerbot_minting.md) +- [Node Status Bot](farmers/node_status_bot/node_status_bot.md) +- [Farming Troubleshooting](farmers/farming_troubleshooting.md) +- [ThreeFold Dashboard](dashboard/dashboard.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) + - [Node Monitoring](dashboard/tfgrid/node_monitoring.md) + - [Deploy](dashboard/deploy/deploy.md) + - [Pricing Calculator](dashboard/deploy/pricing_calculator.md) + - [Node Finder](dashboard/deploy/node_finder.md) + - [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/microvm.md) + - [Nixos MicroVM](dashboard/solutions/nixos_micro.md) + - [Add a Domain](dashboard/solutions/add_domain.md) + - [Orchestrators](dashboard/deploy/orchestrators.md) + - [Kubernetes](dashboard/solutions/k8s.md) + - [Caprover](dashboard/solutions/caprover.md) + - [Caprover Admin](dashboard/solutions/caprover_admin.md) + - [Caprover Worker](dashboard/solutions/caprover_worker.md) + - [Applications](dashboard/deploy/applications.md) + - [Algorand](dashboard/solutions/algorand.md) + - [CasperLabs](dashboard/solutions/casper.md) + - [Discourse](dashboard/solutions/discourse.md) + - [Funkwhale](dashboard/solutions/funkwhale.md) + - [Mattermost](dashboard/solutions/mattermost.md) + - [Nextcloud](dashboard/solutions/nextcloud.md) + - [Node Pilot](dashboard/solutions/nodepilot.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) + - [WordPress](dashboard/solutions/wordpress.md) + - [Your Contracts](dashboard/deploy/your_contracts.md) + - [Images](dashboard/deploy/images.md) + - [SSH Keys](dashboard/deploy/ssh_keys.md) + - [Farms](dashboard/farms/farms.md) + - [Your Farms](dashboard/farms/your_farms.md) + - [Farm Finder](dashboard/farms/farms_finder.md) + - [Node Installer](dashboard/farms/node_installer.md) + - [Simulator](dashboard/farms/simulator.md) + - [TFChain](dashboard/tfchain/tfchain.md) + - [Your Profile](dashboard/tfchain/your_profile.md) + - [TF DAO](dashboard/tfchain/tf_dao.md) + - [Voting Weight Example](dashboard/tfchain/tf_dao_voting_weight.md) + - [TF Token Bridge](dashboard/tfchain/tf_token_bridge.md) + - [TF Token Transfer](dashboard/tfchain/tf_token_transfer.md) + - [TF Minting Reports](dashboard/tfchain/tf_minting_reports.md) +- [ThreeFold Connect](tfconnect/tfconnect_toc.md) + - [TFConnect Overview](tfconnect/tfconnect_overview.md) + - [TFConnect Authenticator](tfconnect/tfconnect_authenticator.md) + - [TFConnect Advanced](tfconnect/tfconnect_advanced.md) + - [TFConnect Troubleshooting](tfconnect/tfconnect_troubleshooting.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) + - [BSC-Stellar Bridge](threefold_token/tft_bridges/bsc_stellar_bridge.md) + - [BSC-Stellar Bridge Verification](threefold_token/tft_bridges/bsc_stellar_bridge_verification.md) + - [Ethereum-Stellar Bridge](threefold_token/tft_bridges/tft_ethereum/tft_ethereum.md) + - [Storing TFT](threefold_token/storing_tft/storing_tft.md) + - [ThreeFold Connect App - Stellar](threefold_token/storing_tft/tf_connect_app.md) + - [Lobstr Wallet - Stellar](threefold_token/storing_tft/lobstr_wallet.md) + - [MetaMask - BSC & ETH](threefold_token/storing_tft/metamask.md) + - [Hardware Wallet](threefold_token/storing_tft/hardware_wallet.md) + - [Buy and Sell TFT](threefold_token/buy_sell_tft/buy_sell_tft.md) + - [Quick Start - Stellar](threefold_token/buy_sell_tft/tft_lobstr/tft_lobstr_short_guide.md) + - [Lobstr Wallet - Stellar](threefold_token/buy_sell_tft/tft_lobstr/tft_lobstr_complete_guide.md) + - [MetaMask - BSC & ETH](threefold_token/buy_sell_tft/tft_metamask/tft_metamask.md) + - [Pancake Swap - BSC](threefold_token/buy_sell_tft/pancakeswap.md) + - [Liquidity Provider - LP](threefold_token/liquidity/liquidity_readme.md) + - [Pancake Swap LP](threefold_token/liquidity/liquidity_pancake.md) + - [1inch.io LP](threefold_token/liquidity/liquidity_1inch.md) + - [Albedo LP](threefold_token/liquidity/liquidity_albedo.md) + - [Transaction Fees](threefold_token/transaction_fees.md) +- [FAQ](faq/faq.md) \ No newline at end of file diff --git a/books/farmers/scripts/calculate_cloud_pricing.sh b/books/farmers/scripts/calculate_cloud_pricing.sh new file mode 100755 index 0000000..ebce4bb --- /dev/null +++ b/books/farmers/scripts/calculate_cloud_pricing.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +cd ../../collections/manual/values + +value=$(cat tft_value.md) + +CU=$(cat cu_musd_hour.md) +CUTFT=$(echo "$CU / $value" | bc -l) +printf "%.2f" $CUTFT > cu_mtft_hour.md + +SU=$(cat su_musd_hour.md) +SUTFT=$(echo "$SU / $value" | bc -l) +printf "%.2f" $SUTFT > su_mtft_hour.md + +NU=$(cat nu_musd_hour.md) +NUTFT=$(echo "$NU / $value" | bc -l) +printf "%.2f" $NUTFT > nu_mtft_hour.md + +IP=$(cat ip_musd_hour.md) +IPTFT=$(echo "$IP / $value" | bc -l) +printf "%.2f" $IPTFT > ip_mtft_hour.md + +NAME=$(cat name_musd_hour.md) +NAME=$(echo "$NAME / $value" | bc -l) +printf "%.2f" $NAME > name_mtft_hour.md + +DNAME=$(cat dname_musd_hour.md) +DNAME=$(echo "$DNAME / $value" | bc -l) +printf "%.2f" $DNAME > dname_mtft_hour.md \ No newline at end of file diff --git a/books/farmers/scripts/calculate_marketcap.sh b/books/farmers/scripts/calculate_marketcap.sh new file mode 100755 index 0000000..53a0287 --- /dev/null +++ b/books/farmers/scripts/calculate_marketcap.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +cd ../../collections/manual/values + +coinId="threefold-token" + +url="https://api.coingecko.com/api/v3/simple/price?ids=${coinId}&vs_currencies=usd"; + +curl -sL ${url} \ +-H 'Accept: application/json' | jq '."threefold-token".usd' | xargs printf "%.3f" > tft_value.md + +supply=$(cat tft_supply.md) + +value=$(cat tft_value.md) + +TFT_MARKETCAP=$(echo "$supply * $value" | bc -l) + +printf "%'.0f" $TFT_MARKETCAP > tft_marketcap.md \ No newline at end of file diff --git a/books/farmers/scripts/generate_wallets.sh b/books/farmers/scripts/generate_wallets.sh new file mode 100755 index 0000000..08a4483 --- /dev/null +++ b/books/farmers/scripts/generate_wallets.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +mkdir -p ../../collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data +cd ../../collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data + +wallets=( +GA7OPN4A3JNHLPHPEWM4PJDOYYDYNZOM7ES6YL3O7NC3PRY3V3UX6ANM +GDSKFYNMZWTB3V5AN26CEAQ27643Q3KB4X6MY4UTO2LIIDFND4SPQZYU +GBQHN7RL4LSRPR2TT74ID2UJPZ2AXCHQY2WKGCTDLJM3NXVJ7GQHUCOD +GBTPAXXP6534UPC4MLNGFGJWCD6DNSRVIPPOZWXAQAWI4FKTLOJY2A2S +GB2C5HCZYWNGVM6JGXDWQBJTMUY4S2HPPTCAH63HFAQVL2ALXDW7SSJ7 +GDLVIB44LVONM5K67LUPSFZMSX7G2RLYVBM5MMHUJ4NAQJU7CH4HBJBO +GDKXTUYNW4BJKDM2L7B5XUYFUISV52KUU4G7VPNLF4ZSIKBURM622YPZ +GDIJY6K2BBRIRX423ZFUYKKFDN66XP2KMSBZFQSE2PSNDZ6EDVQTRLSU +GCWHWDRXYPXQAOYMQKB66SZPLM6UANKGMSL4SP7LSOIA6OTTOYQ6HBIH +GBV734I2SV4YDDPVJMYXU3IZ2AIU5GEAJRAD4E4BQG7CA2N63NXSPMD6 +GAI4C2BGOA3YHVQZZW7OW4FHOGGYWTUBEVNHB6MW4ZAFG7ZAA7D5IPC3 +GCEJ7DMULFTT25UH4FAAGOZ6KER4WXAYQGJUSIITQD527DGTKSXKBQGR +GAQXBLFG4BZGIVY6DBJVWE5EAP3UNHMIA2PYCUVLY2JUSPVWPUF36BW4 +GAUGOSYLCX7JZTQYF2K7RIMHFWKSA3WSI2OQ4IRKXMDMVE6ABJIJMFQR +) + +for wallet in "${wallets[@]}"; do + curl -sL "https://horizon.stellar.org/accounts/${wallet}" -H 'Accept: application/json' | jq --raw-output '.balances[] | select(.asset_code == "TFT") | .balance' | xargs printf "%.2f" > ${wallet,,}.md +done \ No newline at end of file diff --git a/books/farmers/sync_production.sh b/books/farmers/sync_production.sh new file mode 100755 index 0000000..b95b31c --- /dev/null +++ b/books/farmers/sync_production.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ex +export NAME=farmers +hero mdbook -u https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/manual/heroscript/$NAME +rsync -rv ~/hero/www/info/$NAME/ root@info.ourworld.tf:/root/hero/www/info/$NAME/ diff --git a/books/knowledge_base/Makefile b/books/knowledge_base/Makefile new file mode 100644 index 0000000..f678ceb --- /dev/null +++ b/books/knowledge_base/Makefile @@ -0,0 +1,4 @@ +build: + ./scripts/generate_wallets.sh + ./scripts/calculate_marketcap.sh + ./scripts/calculate_cloud_pricing.sh \ No newline at end of file diff --git a/books/knowledge_base/SUMMARY.md b/books/knowledge_base/SUMMARY.md new file mode 100644 index 0000000..9836d03 --- /dev/null +++ b/books/knowledge_base/SUMMARY.md @@ -0,0 +1,112 @@ +- [Table of Contents](knowledge_base/knowledge_base_toc.md) +- [About](about/about.md) + - [ThreeFold History](about/threefold_history.md) + - [Token History](about/token_history.md) + - [Genesis Pool](about/genesis_pool.md) + - [Genesis Pool Dubai](about/genesis_pool_dubai.md) + - [Genesis Pool Ghent](about/genesis_pool_ghent.md) + - [Genesis Pool Details](about/genesis_block_pool_details.md) + - [ThreeFold Tech](about/threefold_tech.md) + - [Organisation Structure](about/orgstructure.md) + - [Governance](about/governance.md) + - [ThreeFold Companies](about/threefold_companies.md) + - [ThreeFold Dubai](about/threefold_dubai.md) + - [ThreeFold VZW](about/threefold_vzw.md) + - [ThreeFold AG](about/threefold_ag.md) + - [Mazraa](about/mazraa.md) + - [BetterToken](about/bettertoken.md) + - [DAO](about/dao/dao.md) + - [ThreeFold DAO](about/dao/tfdao.md) + - [TFChain](about/tfchain.md) + - [ThreeFold Roadmap](about/roadmap/roadmap_readme.md) + - [Release Notes](about/roadmap/releasenotes/releasenotes_readme.md) + - [TFGrid v3.10.0](about/roadmap/releasenotes/tfgrid_release_3_10_0.md) + - [TFGrid v3.9.0](about/roadmap/releasenotes/tfgrid_release_3_9_0.md) + - [TFGrid v3.8.0](about/roadmap/releasenotes/tfgrid_release_3_8_0.md) + - [TFGrid v3.7.0](about/roadmap/releasenotes/tfgrid_release_3_7_0.md) + - [TFGrid v3.6.1](about/roadmap/releasenotes/tfgrid_release_3_6_1.md) + - [TFGrid v3.6.0](about/roadmap/releasenotes/tfgrid_release_3_6_0.md) + - [TFGrid v3.0.0 Alpha-5](about/roadmap/releasenotes/tfgrid_release_3_0_a5.md) + - [TFGrid v3.0.0 Alpha-4](about/roadmap/releasenotes/tfgrid_release_3_0_a4.md) + - [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) +- [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) + - [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](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) +- [Farming](farming/farming_toc.md) + - [Farming Rewards](farming/farming_reward.md) + - [Proof-of-Capacity](farming/proof_of_capacity.md) + - [Proof-of-Utilization](farming/proof_of_utilization.md) + - [PoC DAO Rules](farming/poc_dao_rules.md) +- [Cloud](cloud/cloud_toc.md) + - [Cloud Units](cloud/cloudunits.md) + - [Pricing](cloud/pricing/pricing_toc.md) + - [Pricing Overview](cloud/pricing/pricing.md) + - [Staking Discounts](cloud/pricing/staking_discount_levels.md) + - [Cloud Pricing Compare](cloud/pricing/cloud_pricing_compare.md) + - [Grid Billing](cloud/grid_billing/grid_billing.md) + - [Resource Units](cloud/resource_units_calc_cloudunits.md) + - [Resource Units Advanced](cloud/resourceunits_advanced.md) +- [Collaboration](collaboration/collaboration_toc.md) + - [How to Contribute](collaboration/contribute.md) + - [Development Process](collaboration/development_process.md) + - [Feature Request](collaboration/feature_request.md) + - [Bug Report](collaboration/bug_report.md) + - [Issue Labels](collaboration/issue_labels.md) + - [Development Cycle](collaboration/development_cycle.md) + - [Release Process](collaboration/release_process.md) + - [Pull Request Template](collaboration/PULL_REQUEST_TEMPLATE.md) + - [Collaboration Tools](collaboration/collaboration_tools/collaboration_tools.md) + - [Circle Tool](collaboration/collaboration_tools/circle_tool.md) + - [Website Deployer](collaboration/collaboration_tools/website_tool.md) + - [Website Link Checker](collaboration/collaboration_tools/website_link_checker.md) + - [How to Test](collaboration/testing/testing_readme.md) + - [TestLodge](collaboration/testing/testlodge.md) + - [Code of Conduct](collaboration/code_conduct.md) +- [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_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) + - [Privacy Policy](legal/privacypolicy.md) \ No newline at end of file diff --git a/books/knowledge_base/scripts/calculate_cloud_pricing.sh b/books/knowledge_base/scripts/calculate_cloud_pricing.sh new file mode 100755 index 0000000..ebce4bb --- /dev/null +++ b/books/knowledge_base/scripts/calculate_cloud_pricing.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +cd ../../collections/manual/values + +value=$(cat tft_value.md) + +CU=$(cat cu_musd_hour.md) +CUTFT=$(echo "$CU / $value" | bc -l) +printf "%.2f" $CUTFT > cu_mtft_hour.md + +SU=$(cat su_musd_hour.md) +SUTFT=$(echo "$SU / $value" | bc -l) +printf "%.2f" $SUTFT > su_mtft_hour.md + +NU=$(cat nu_musd_hour.md) +NUTFT=$(echo "$NU / $value" | bc -l) +printf "%.2f" $NUTFT > nu_mtft_hour.md + +IP=$(cat ip_musd_hour.md) +IPTFT=$(echo "$IP / $value" | bc -l) +printf "%.2f" $IPTFT > ip_mtft_hour.md + +NAME=$(cat name_musd_hour.md) +NAME=$(echo "$NAME / $value" | bc -l) +printf "%.2f" $NAME > name_mtft_hour.md + +DNAME=$(cat dname_musd_hour.md) +DNAME=$(echo "$DNAME / $value" | bc -l) +printf "%.2f" $DNAME > dname_mtft_hour.md \ No newline at end of file diff --git a/books/knowledge_base/scripts/calculate_marketcap.sh b/books/knowledge_base/scripts/calculate_marketcap.sh new file mode 100755 index 0000000..53a0287 --- /dev/null +++ b/books/knowledge_base/scripts/calculate_marketcap.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +cd ../../collections/manual/values + +coinId="threefold-token" + +url="https://api.coingecko.com/api/v3/simple/price?ids=${coinId}&vs_currencies=usd"; + +curl -sL ${url} \ +-H 'Accept: application/json' | jq '."threefold-token".usd' | xargs printf "%.3f" > tft_value.md + +supply=$(cat tft_supply.md) + +value=$(cat tft_value.md) + +TFT_MARKETCAP=$(echo "$supply * $value" | bc -l) + +printf "%'.0f" $TFT_MARKETCAP > tft_marketcap.md \ No newline at end of file diff --git a/books/knowledge_base/scripts/generate_wallets.sh b/books/knowledge_base/scripts/generate_wallets.sh new file mode 100755 index 0000000..08a4483 --- /dev/null +++ b/books/knowledge_base/scripts/generate_wallets.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +mkdir -p ../../collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data +cd ../../collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data + +wallets=( +GA7OPN4A3JNHLPHPEWM4PJDOYYDYNZOM7ES6YL3O7NC3PRY3V3UX6ANM +GDSKFYNMZWTB3V5AN26CEAQ27643Q3KB4X6MY4UTO2LIIDFND4SPQZYU +GBQHN7RL4LSRPR2TT74ID2UJPZ2AXCHQY2WKGCTDLJM3NXVJ7GQHUCOD +GBTPAXXP6534UPC4MLNGFGJWCD6DNSRVIPPOZWXAQAWI4FKTLOJY2A2S +GB2C5HCZYWNGVM6JGXDWQBJTMUY4S2HPPTCAH63HFAQVL2ALXDW7SSJ7 +GDLVIB44LVONM5K67LUPSFZMSX7G2RLYVBM5MMHUJ4NAQJU7CH4HBJBO +GDKXTUYNW4BJKDM2L7B5XUYFUISV52KUU4G7VPNLF4ZSIKBURM622YPZ +GDIJY6K2BBRIRX423ZFUYKKFDN66XP2KMSBZFQSE2PSNDZ6EDVQTRLSU +GCWHWDRXYPXQAOYMQKB66SZPLM6UANKGMSL4SP7LSOIA6OTTOYQ6HBIH +GBV734I2SV4YDDPVJMYXU3IZ2AIU5GEAJRAD4E4BQG7CA2N63NXSPMD6 +GAI4C2BGOA3YHVQZZW7OW4FHOGGYWTUBEVNHB6MW4ZAFG7ZAA7D5IPC3 +GCEJ7DMULFTT25UH4FAAGOZ6KER4WXAYQGJUSIITQD527DGTKSXKBQGR +GAQXBLFG4BZGIVY6DBJVWE5EAP3UNHMIA2PYCUVLY2JUSPVWPUF36BW4 +GAUGOSYLCX7JZTQYF2K7RIMHFWKSA3WSI2OQ4IRKXMDMVE6ABJIJMFQR +) + +for wallet in "${wallets[@]}"; do + curl -sL "https://horizon.stellar.org/accounts/${wallet}" -H 'Accept: application/json' | jq --raw-output '.balances[] | select(.asset_code == "TFT") | .balance' | xargs printf "%.2f" > ${wallet,,}.md +done \ No newline at end of file diff --git a/books/knowledge_base/sync_production.sh b/books/knowledge_base/sync_production.sh new file mode 100755 index 0000000..c96f914 --- /dev/null +++ b/books/knowledge_base/sync_production.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ex +export NAME=knowledge_base +hero mdbook -u https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/manual/heroscript/$NAME +rsync -rv ~/hero/www/info/$NAME/ root@info.ourworld.tf:/root/hero/www/info/$NAME/ diff --git a/books/library/SUMMARY.md b/books/library/SUMMARY.md new file mode 100644 index 0000000..2528692 --- /dev/null +++ b/books/library/SUMMARY.md @@ -0,0 +1 @@ +- [Library](library/library.md) \ No newline at end of file diff --git a/books/library/sync_production.sh b/books/library/sync_production.sh new file mode 100755 index 0000000..c2e93dc --- /dev/null +++ b/books/library/sync_production.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ex +export NAME=library +hero mdbook -u https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/manual/heroscript/$NAME +rsync -rv ~/hero/www/info/$NAME/ root@info.ourworld.tf:/root/hero/www/info/$NAME/ diff --git a/books/manual/SUMMARY.md b/books/manual/SUMMARY.md index 4377d7c..599393e 100644 --- a/books/manual/SUMMARY.md +++ b/books/manual/SUMMARY.md @@ -1,6 +1,6 @@ - [Introduction](manual/intro.md) - [Documentation](manual/documentation.md) - - [Dashboard](dashboard/dashboard.md) + - [ThreeFold Dashboard](dashboard/dashboard.md) - [Wallet Connector](dashboard/wallet_connector.md) - [TFGrid](dashboard/tfgrid/tfgrid.md) - [Grid Status](dashboard/tfgrid/grid_status.md) @@ -28,7 +28,6 @@ - [Mattermost](dashboard/solutions/mattermost.md) - [Nextcloud](dashboard/solutions/nextcloud.md) - [Node Pilot](dashboard/solutions/nodepilot.md) - - [ownCloud](dashboard/solutions/owncloud.md) - [Peertube](dashboard/solutions/peertube.md) - [Presearch](dashboard/solutions/presearch.md) - [Static Website](dashboard/solutions/static_website.md) @@ -47,9 +46,15 @@ - [TFChain](dashboard/tfchain/tfchain.md) - [Your Profile](dashboard/tfchain/your_profile.md) - [TF DAO](dashboard/tfchain/tf_dao.md) + - [Voting Weight Example](dashboard/tfchain/tf_dao_voting_weight.md) - [TF Token Bridge](dashboard/tfchain/tf_token_bridge.md) - [TF Token Transfer](dashboard/tfchain/tf_token_transfer.md) - [TF Minting Reports](dashboard/tfchain/tf_minting_reports.md) + - [ThreeFold Connect](tfconnect/tfconnect_toc.md) + - [TFConnect Overview](tfconnect/tfconnect_overview.md) + - [TFConnect Authenticator](tfconnect/tfconnect_authenticator.md) + - [TFConnect Advanced](tfconnect/tfconnect_advanced.md) + - [TFConnect Troubleshooting](tfconnect/tfconnect_troubleshooting.md) - [Developers](developers/developers.md) - [Javascript Client](developers/javascript/grid3_javascript_readme.md) - [Installation](developers/javascript/grid3_javascript_installation.md) @@ -117,13 +122,14 @@ - [Internals](developers/internals/internals.md) - [Reliable Message Bus - RMB](developers/internals/rmb/rmb_toc.md) - [Introduction to RMB](developers/internals/rmb/rmb_intro.md) + - [Coding Guides](developers/internals/rmb/rmb_coding_guides.md) - [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/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) + - [Internal Modules](developers/internals/zos/internals/zos_internals.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) @@ -150,6 +156,7 @@ - [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) + - [Application Case Study: Nextcloud](developers/grid_deployment/app_case_study_nextcloud.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) @@ -175,6 +182,8 @@ - [Quick Guide](farmers/farmerbot/farmerbot_quick.md) - [Additional Information](farmers/farmerbot/farmerbot_information.md) - [Minting and the Farmerbot](farmers/farmerbot/farmerbot_minting.md) + - [Node Status Bot](farmers/node_status_bot/node_status_bot.md) + - [Farming Troubleshooting](farmers/farming_troubleshooting.md) - [System Administrators](system_administrators/system_administrators.md) - [Getting Started](system_administrators/getstarted/tfgrid3_getstarted.md) - [SSH Remote Connection](system_administrators/getstarted/ssh_guide/ssh_guide.md) @@ -255,8 +264,13 @@ - [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) - [Hummingbot](system_administrators/advanced/hummingbot.md) + - [AI & ML Workloads](system_administrators/advanced/ai_ml_workloads.md) + - [Ecommerce](system_administrators/advanced/ecommerce/ecommerce.md) + - [WooCommerce](system_administrators/advanced/ecommerce/woocommerce.md) + - [nopCommerce](system_administrators/advanced/ecommerce/nopcommerce.md) + - [HTTPS with Caddy](system_administrators/advanced/https_caddy.md) + - [Node Status Bot](system_administrators/advanced/node_status_bot.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/books/system_administrators/Makefile b/books/system_administrators/Makefile new file mode 100644 index 0000000..f678ceb --- /dev/null +++ b/books/system_administrators/Makefile @@ -0,0 +1,4 @@ +build: + ./scripts/generate_wallets.sh + ./scripts/calculate_marketcap.sh + ./scripts/calculate_cloud_pricing.sh \ No newline at end of file diff --git a/books/system_administrators/SUMMARY.md b/books/system_administrators/SUMMARY.md new file mode 100644 index 0000000..a1dfc94 --- /dev/null +++ b/books/system_administrators/SUMMARY.md @@ -0,0 +1,164 @@ +- [Table of Contents](system_administrators/system_administrators_book_toc.md) +- [Getting Started](system_administrators/getstarted/tfgrid3_getstarted.md) + - [SSH Remote Connection](system_administrators/getstarted/ssh_guide/ssh_guide.md) + - [SSH with OpenSSH](system_administrators/getstarted/ssh_guide/ssh_openssh.md) + - [SSH with PuTTY](system_administrators/getstarted/ssh_guide/ssh_putty.md) + - [SSH with WSL](system_administrators/getstarted/ssh_guide/ssh_wsl.md) + - [WireGuard Access](system_administrators/getstarted/ssh_guide/ssh_wireguard.md) + - [Remote Desktop and GUI](system_administrators/getstarted/remote-desktop_gui/remote-desktop_gui.md) + - [Cockpit: a Web-based Interface for Servers](system_administrators/getstarted/remote-desktop_gui/cockpit_guide/cockpit_guide.md) + - [XRDP: an Open-Source Remote Desktop Protocol](system_administrators/getstarted/remote-desktop_gui/xrdp_guide/xrdp_guide.md) + - [Apache Guacamole: a Clientless Remote Desktop Gateway](system_administrators/getstarted/remote-desktop_gui/guacamole_guide/guacamole_guide.md) + - [Planetary Network](system_administrators/getstarted/planetarynetwork.md) + - [TFGrid Services](system_administrators/getstarted/tfgrid_services/tf_grid_services_readme.md) +- [GPU](system_administrators/gpu/gpu_toc.md) + - [GPU Support](system_administrators/gpu/gpu.md) +- [Terraform](system_administrators/terraform/terraform_toc.md) + - [Overview](system_administrators/terraform/terraform_readme.md) + - [Installing Terraform](system_administrators/terraform/terraform_install.md) + - [Terraform Basics](system_administrators/terraform/terraform_basics.md) + - [Full VM Deployment](system_administrators/terraform/terraform_full_vm.md) + - [GPU Support](system_administrators/terraform/terraform_gpu_support.md) + - [Resources](system_administrators/terraform/resources/terraform_resources_readme.md) + - [Using Scheduler](system_administrators/terraform/resources/terraform_scheduler.md) + - [Virtual Machine](system_administrators/terraform/resources/terraform_vm.md) + - [Web Gateway](system_administrators/terraform/resources/terraform_vm_gateway.md) + - [Kubernetes Cluster](system_administrators/terraform/resources/terraform_k8s.md) + - [ZDB](system_administrators/terraform/resources/terraform_zdb.md) + - [Zlogs](system_administrators/terraform/resources/terraform_zlogs.md) + - [Quantum Safe Filesystem](system_administrators/terraform/resources/terraform_qsfs.md) + - [QSFS on Micro VM](system_administrators/terraform/resources/terraform_qsfs_on_microvm.md) + - [QSFS on Full VM](system_administrators/terraform/resources/terraform_qsfs_on_full_vm.md) + - [CapRover](system_administrators/terraform/resources/terraform_caprover.md) + - [Advanced](system_administrators/terraform/advanced/terraform_advanced_readme.md) + - [Terraform Provider](system_administrators/terraform/advanced/terraform_provider.md) + - [Terraform Provisioners](system_administrators/terraform/advanced/terraform_provisioners.md) + - [Mounts](system_administrators/terraform/advanced/terraform_mounts.md) + - [Capacity Planning](system_administrators/terraform/advanced/terraform_capacity_planning.md) + - [Updates](system_administrators/terraform/advanced/terraform_updates.md) + - [SSH Connection with Wireguard](system_administrators/terraform/advanced/terraform_wireguard_ssh.md) + - [Set a Wireguard VPN](system_administrators/terraform/advanced/terraform_wireguard_vpn.md) + - [Synced MariaDB Databases](system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md) + - [Nomad](system_administrators/terraform/advanced/terraform_nomad.md) + - [Nextcloud Deployments](system_administrators/terraform/advanced/terraform_nextcloud_toc.md) + - [Nextcloud All-in-One Deployment](system_administrators/terraform/advanced/terraform_nextcloud_aio.md) + - [Nextcloud Single Deployment](system_administrators/terraform/advanced/terraform_nextcloud_single.md) + - [Nextcloud Redundant Deployment](system_administrators/terraform/advanced/terraform_nextcloud_redundant.md) + - [Nextcloud 2-Node VPN Deployment](system_administrators/terraform/advanced/terraform_nextcloud_vpn.md) +- [Pulumi](system_administrators/pulumi/pulumi_readme.md) + - [Introduction to Pulumi](system_administrators/pulumi/pulumi_intro.md) + - [Installing Pulumi](system_administrators/pulumi/pulumi_install.md) + - [Deployment Examples](system_administrators/pulumi/pulumi_examples.md) + - [Deployment Details](system_administrators/pulumi/pulumi_deployment_details.md) +- [Mycelium](system_administrators/mycelium/mycelium_toc.md) + - [Overview](system_administrators/mycelium/overview.md) + - [Installation](system_administrators/mycelium/installation.md) + - [Additional Information](system_administrators/mycelium/information.md) + - [Message](system_administrators/mycelium/message.md) + - [Packet](system_administrators/mycelium/packet.md) + - [Data Packet](system_administrators/mycelium/data_packet.md) + - [API YAML](system_administrators/mycelium/api_yaml.md) +- [Computer and IT Basics](system_administrators/computer_it_basics/computer_it_basics.md) + - [CLI and Scripts Basics](system_administrators/computer_it_basics/cli_scripts_basics.md) + - [Docker Basics](system_administrators/computer_it_basics/docker_basics.md) + - [Git and GitHub Basics](system_administrators/computer_it_basics/git_github_basics.md) + - [Firewall Basics](system_administrators/computer_it_basics/firewall_basics/firewall_basics.md) + - [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) + - [Contract Bills Reports](system_administrators/advanced/contract_bill_report.md) + - [Listing Free Public IPs](system_administrators/advanced/list_public_ips.md) + - [Cloud Console](system_administrators/advanced/cloud_console.md) + - [Redis](system_administrators/advanced/grid3_redis.md) + - [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) + - [Hummingbot](system_administrators/advanced/hummingbot.md) + - [AI & ML Workloads](system_administrators/advanced/ai_ml_workloads.md) + - [Ecommerce](system_administrators/advanced/ecommerce/ecommerce.md) + - [WooCommerce](system_administrators/advanced/ecommerce/woocommerce.md) + - [nopCommerce](system_administrators/advanced/ecommerce/nopcommerce.md) + - [HTTPS with Caddy](system_administrators/advanced/https_caddy.md) + - [Node Status Bot](system_administrators/advanced/node_status_bot.md) +- [ThreeFold Dashboard](dashboard/dashboard.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) + - [Node Monitoring](dashboard/tfgrid/node_monitoring.md) + - [Deploy](dashboard/deploy/deploy.md) + - [Pricing Calculator](dashboard/deploy/pricing_calculator.md) + - [Node Finder](dashboard/deploy/node_finder.md) + - [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/microvm.md) + - [Nixos MicroVM](dashboard/solutions/nixos_micro.md) + - [Add a Domain](dashboard/solutions/add_domain.md) + - [Orchestrators](dashboard/deploy/orchestrators.md) + - [Kubernetes](dashboard/solutions/k8s.md) + - [Caprover](dashboard/solutions/caprover.md) + - [Caprover Admin](dashboard/solutions/caprover_admin.md) + - [Caprover Worker](dashboard/solutions/caprover_worker.md) + - [Applications](dashboard/deploy/applications.md) + - [Algorand](dashboard/solutions/algorand.md) + - [CasperLabs](dashboard/solutions/casper.md) + - [Discourse](dashboard/solutions/discourse.md) + - [Funkwhale](dashboard/solutions/funkwhale.md) + - [Mattermost](dashboard/solutions/mattermost.md) + - [Nextcloud](dashboard/solutions/nextcloud.md) + - [Node Pilot](dashboard/solutions/nodepilot.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) + - [WordPress](dashboard/solutions/wordpress.md) + - [Your Contracts](dashboard/deploy/your_contracts.md) + - [Images](dashboard/deploy/images.md) + - [SSH Keys](dashboard/deploy/ssh_keys.md) + - [Farms](dashboard/farms/farms.md) + - [Your Farms](dashboard/farms/your_farms.md) + - [Farm Finder](dashboard/farms/farms_finder.md) + - [Node Installer](dashboard/farms/node_installer.md) + - [Simulator](dashboard/farms/simulator.md) + - [TFChain](dashboard/tfchain/tfchain.md) + - [Your Profile](dashboard/tfchain/your_profile.md) + - [TF DAO](dashboard/tfchain/tf_dao.md) + - [Voting Weight Example](dashboard/tfchain/tf_dao_voting_weight.md) + - [TF Token Bridge](dashboard/tfchain/tf_token_bridge.md) + - [TF Token Transfer](dashboard/tfchain/tf_token_transfer.md) + - [TF Minting Reports](dashboard/tfchain/tf_minting_reports.md) +- [ThreeFold Connect](tfconnect/tfconnect_toc.md) + - [TFConnect Overview](tfconnect/tfconnect_overview.md) + - [TFConnect Authenticator](tfconnect/tfconnect_authenticator.md) + - [TFConnect Advanced](tfconnect/tfconnect_advanced.md) + - [TFConnect Troubleshooting](tfconnect/tfconnect_troubleshooting.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) + - [BSC-Stellar Bridge](threefold_token/tft_bridges/bsc_stellar_bridge.md) + - [BSC-Stellar Bridge Verification](threefold_token/tft_bridges/bsc_stellar_bridge_verification.md) + - [Ethereum-Stellar Bridge](threefold_token/tft_bridges/tft_ethereum/tft_ethereum.md) + - [Storing TFT](threefold_token/storing_tft/storing_tft.md) + - [ThreeFold Connect App - Stellar](threefold_token/storing_tft/tf_connect_app.md) + - [Lobstr Wallet - Stellar](threefold_token/storing_tft/lobstr_wallet.md) + - [MetaMask - BSC & ETH](threefold_token/storing_tft/metamask.md) + - [Hardware Wallet](threefold_token/storing_tft/hardware_wallet.md) + - [Buy and Sell TFT](threefold_token/buy_sell_tft/buy_sell_tft.md) + - [Quick Start - Stellar](threefold_token/buy_sell_tft/tft_lobstr/tft_lobstr_short_guide.md) + - [Lobstr Wallet - Stellar](threefold_token/buy_sell_tft/tft_lobstr/tft_lobstr_complete_guide.md) + - [MetaMask - BSC & ETH](threefold_token/buy_sell_tft/tft_metamask/tft_metamask.md) + - [Pancake Swap - BSC](threefold_token/buy_sell_tft/pancakeswap.md) + - [Liquidity Provider - LP](threefold_token/liquidity/liquidity_readme.md) + - [Pancake Swap LP](threefold_token/liquidity/liquidity_pancake.md) + - [1inch.io LP](threefold_token/liquidity/liquidity_1inch.md) + - [Albedo LP](threefold_token/liquidity/liquidity_albedo.md) + - [Transaction Fees](threefold_token/transaction_fees.md) +- [FAQ](faq/faq.md) \ No newline at end of file diff --git a/books/system_administrators/scripts/calculate_cloud_pricing.sh b/books/system_administrators/scripts/calculate_cloud_pricing.sh new file mode 100755 index 0000000..ebce4bb --- /dev/null +++ b/books/system_administrators/scripts/calculate_cloud_pricing.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +cd ../../collections/manual/values + +value=$(cat tft_value.md) + +CU=$(cat cu_musd_hour.md) +CUTFT=$(echo "$CU / $value" | bc -l) +printf "%.2f" $CUTFT > cu_mtft_hour.md + +SU=$(cat su_musd_hour.md) +SUTFT=$(echo "$SU / $value" | bc -l) +printf "%.2f" $SUTFT > su_mtft_hour.md + +NU=$(cat nu_musd_hour.md) +NUTFT=$(echo "$NU / $value" | bc -l) +printf "%.2f" $NUTFT > nu_mtft_hour.md + +IP=$(cat ip_musd_hour.md) +IPTFT=$(echo "$IP / $value" | bc -l) +printf "%.2f" $IPTFT > ip_mtft_hour.md + +NAME=$(cat name_musd_hour.md) +NAME=$(echo "$NAME / $value" | bc -l) +printf "%.2f" $NAME > name_mtft_hour.md + +DNAME=$(cat dname_musd_hour.md) +DNAME=$(echo "$DNAME / $value" | bc -l) +printf "%.2f" $DNAME > dname_mtft_hour.md \ No newline at end of file diff --git a/books/system_administrators/scripts/calculate_marketcap.sh b/books/system_administrators/scripts/calculate_marketcap.sh new file mode 100755 index 0000000..53a0287 --- /dev/null +++ b/books/system_administrators/scripts/calculate_marketcap.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +cd ../../collections/manual/values + +coinId="threefold-token" + +url="https://api.coingecko.com/api/v3/simple/price?ids=${coinId}&vs_currencies=usd"; + +curl -sL ${url} \ +-H 'Accept: application/json' | jq '."threefold-token".usd' | xargs printf "%.3f" > tft_value.md + +supply=$(cat tft_supply.md) + +value=$(cat tft_value.md) + +TFT_MARKETCAP=$(echo "$supply * $value" | bc -l) + +printf "%'.0f" $TFT_MARKETCAP > tft_marketcap.md \ No newline at end of file diff --git a/books/system_administrators/scripts/generate_wallets.sh b/books/system_administrators/scripts/generate_wallets.sh new file mode 100755 index 0000000..08a4483 --- /dev/null +++ b/books/system_administrators/scripts/generate_wallets.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +mkdir -p ../../collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data +cd ../../collections/manual/knowledge_base/about/token_overview/special_wallets/wallet_data + +wallets=( +GA7OPN4A3JNHLPHPEWM4PJDOYYDYNZOM7ES6YL3O7NC3PRY3V3UX6ANM +GDSKFYNMZWTB3V5AN26CEAQ27643Q3KB4X6MY4UTO2LIIDFND4SPQZYU +GBQHN7RL4LSRPR2TT74ID2UJPZ2AXCHQY2WKGCTDLJM3NXVJ7GQHUCOD +GBTPAXXP6534UPC4MLNGFGJWCD6DNSRVIPPOZWXAQAWI4FKTLOJY2A2S +GB2C5HCZYWNGVM6JGXDWQBJTMUY4S2HPPTCAH63HFAQVL2ALXDW7SSJ7 +GDLVIB44LVONM5K67LUPSFZMSX7G2RLYVBM5MMHUJ4NAQJU7CH4HBJBO +GDKXTUYNW4BJKDM2L7B5XUYFUISV52KUU4G7VPNLF4ZSIKBURM622YPZ +GDIJY6K2BBRIRX423ZFUYKKFDN66XP2KMSBZFQSE2PSNDZ6EDVQTRLSU +GCWHWDRXYPXQAOYMQKB66SZPLM6UANKGMSL4SP7LSOIA6OTTOYQ6HBIH +GBV734I2SV4YDDPVJMYXU3IZ2AIU5GEAJRAD4E4BQG7CA2N63NXSPMD6 +GAI4C2BGOA3YHVQZZW7OW4FHOGGYWTUBEVNHB6MW4ZAFG7ZAA7D5IPC3 +GCEJ7DMULFTT25UH4FAAGOZ6KER4WXAYQGJUSIITQD527DGTKSXKBQGR +GAQXBLFG4BZGIVY6DBJVWE5EAP3UNHMIA2PYCUVLY2JUSPVWPUF36BW4 +GAUGOSYLCX7JZTQYF2K7RIMHFWKSA3WSI2OQ4IRKXMDMVE6ABJIJMFQR +) + +for wallet in "${wallets[@]}"; do + curl -sL "https://horizon.stellar.org/accounts/${wallet}" -H 'Accept: application/json' | jq --raw-output '.balances[] | select(.asset_code == "TFT") | .balance' | xargs printf "%.2f" > ${wallet,,}.md +done \ No newline at end of file diff --git a/books/system_administrators/sync_production.sh b/books/system_administrators/sync_production.sh new file mode 100755 index 0000000..c2cee8b --- /dev/null +++ b/books/system_administrators/sync_production.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -ex +export NAME=system_administrators +hero mdbook -u https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/manual/heroscript/$NAME +rsync -rv ~/hero/www/info/$NAME/ root@info.ourworld.tf:/root/hero/www/info/$NAME/ diff --git a/collections/companies/ourworld.md b/collections/companies/ourworld.md new file mode 100644 index 0000000..fca1ea3 --- /dev/null +++ b/collections/companies/ourworld.md @@ -0,0 +1,9 @@ +# OurWorld + +## Overview + +OurWorld is a Venture Creator that aims to enable an Internet Infrastructure that supports access to essential digital services at a fraction of today’s cost. It owns and supports multiple ventures, including TF Tech NV, ThreeFold, Sikana, OurWorld Zanzibar (a digital FreeZone) and Hero (a protocol for the self-sovereign web). + +## Legal Information + +OurWorld Holding GBC, a private company limited by shares incorporated under the laws of Mauritius, and which has its registered office at 5th Floor, The CORE Building, No.62, ICT Avenue, Cybercity, Ebene, Mauritius. \ No newline at end of file diff --git a/collections/companies/threefold_dmcc.md b/collections/companies/threefold_dmcc.md new file mode 100644 index 0000000..d1abdfd --- /dev/null +++ b/collections/companies/threefold_dmcc.md @@ -0,0 +1,53 @@ +# ThreeFold DMCC + +## Overview + +ThreeFold DMCC (aka ThreeFold Dubai) is the company behind the open-source movement "ThreeFold" that allows anyone to become a cloud service provider on the ThreeFold Grid. + +ThreeFold DMCC is the original team of ThreeFold operated from Dubai and Belgium. We started in 2016. + +## Legal Information + +ThreeFold DMCC, a company incorporated and registered with the Dubai Multi Commodities Centre (DMCC), United Arab Emirates, whose registered office is at Unit No. 30-01-BA1120, Jewellery & Gemplex 3, Plot no. DMCC-PH2-J&GPlexS, Jewellery & Gemplex, Dubai, United Arab Emirates, company registration number DMCC 189608. + +## Responsibilities + +- promote ThreeFold Grid and the ThreeFold Token +- work with tf_tech 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 + +## Some memories from 2015+ + +At one point in time we had our office on the 74th floor of a building close to the Dubai International Airport. It was a cool spot with a great view, but we also realized the importance of being located closer to the ground. We only stayed there for just a little more than 1 year. + +![](img/view_dubai.jpg) +![](img/dubai_office1.jpg) + +Our main office was and still is in Al Jadaf which is, interestingly enough, a boat shipyard. This is where a lot of the ideas and work has been done to make ThreeFold possible. + +![](img/al_jadaf.jpg) +![](img/aljadaf2.jpg) + +The tower on the left in the photo above is where our office was. The place behind (to the right) is called Al Jadaf. We decided to do something different compared to most. No office in a fancy office building. Instead we have our office next to the water in a very old shipyard. Very unique, and it much more cost effective as well. (-: + +Still today there are more than 100 servers located there in our testlab, and the ThreeFold Dubai was run from there. + +## Structure: Oct 2021 - Dec 2022 + +- ThreeFold Dubai is our operational HQ from where all Foundation activities are coordinated. +- ThreeFold Dubai was mainly funded from TFTech (during 2019-2022), this will now change in 2023 +- ThreeFold Dubai sometimes uses ThreeFold Labs IT which is a Dubai onshore company for when we need onshore activities like visa's for our people, workpermits, invoicing, ... ThreeFold Labs IT is just a services company to deal with some of these practical elements. + +Adnan Fatayerji is the managing director and shareholder, in the future the shares of ThreeFold Dubai will be 100% owned by The OurWorld Venture Creator + +## Official License + +Please see below the ThreeFold DMCC license: + +![](img/threefold_dmcc_license_certificate.jpg) + + +!!wiki.def alias:threefold_fzc,tf_fzc,threefold_dubai,tf_dubai + diff --git a/collections/companies/threefold_tech.md b/collections/companies/threefold_tech.md index 670e899..4a5c778 100644 --- a/collections/companies/threefold_tech.md +++ b/collections/companies/threefold_tech.md @@ -2,6 +2,16 @@ ![](img/threefold_tech.jpg) +## Overview + +TFTech is a software company that has developed an a decentralized autonomous edge cloud infrastructure designed to support emerging IT workloads and ESG requirements with more autonomy, scalability and efficiency. + +## Legal Information + +TF Tech NV a Belgian limited liability company, having its registered office at Antwerpse Steenweg 19, B-9080 Lochristi, Belgium, registered with the Belgian Crossroads Bank of Enterprises under company number 0712.845.674 (RLP Gent, district Gent). + +## Additional Information + Company developing & promoting software for self-healing, self-driving cloud & blockchain workloads. Has developed most of the software as used in the ThreeFold_Grid. - TFTech is working together with industry partners to sell its software diff --git a/collections/dashboard/deploy/applications.md b/collections/dashboard/deploy/applications.md index 17a7e2c..c11778a 100644 --- a/collections/dashboard/deploy/applications.md +++ b/collections/dashboard/deploy/applications.md @@ -15,7 +15,6 @@ Easily deploy your favourite applications on the ThreeFold grid with a click of - [Mattermost](mattermost.md) - [Nextcloud](nextcloud.md) - [Node Pilot](nodepilot.md) -- [ownCloud](owncloud.md) - [Peertube](peertube.md) - [Presearch](presearch.md) - [Static Website](static_website.md) diff --git a/collections/dashboard/img/tf_dao_voting_weight_example.png b/collections/dashboard/img/tf_dao_voting_weight_example.png new file mode 100644 index 0000000..7c1f048 Binary files /dev/null and b/collections/dashboard/img/tf_dao_voting_weight_example.png differ diff --git a/collections/dashboard/solutions/algorand.md b/collections/dashboard/solutions/algorand.md index e2dd285..e13ffd7 100644 --- a/collections/dashboard/solutions/algorand.md +++ b/collections/dashboard/solutions/algorand.md @@ -4,10 +4,9 @@ - [Introduction](#introduction) - [Prerequisites](#prerequisites) - - [Algorand Structure](#algorand-structure) +- [Algorand Structure](#algorand-structure) - [Run Default Node](#run-default-node) - [Run Relay Node](#run-relay-node) -- [Run Participant Node](#run-participant-node) - [Run Indexer Node](#run-indexer-node) - [Select Capacity](#select-capacity) @@ -23,75 +22,56 @@ - From the sidebar click on **Applications** - Click on **Algorand** -### Algorand Structure +## Algorand Structure -- Algorand has two main [types](https://developer.algorand.org/docs/run-a-node/setup/types/#:~:text=The%20Algorand%20network%20is%20comprised,%2C%20and%20non%2Drelay%20nodes.) of nodes (Relay or Participant) you can run also a 4 networks you can run your node against. Combining the types you can get: - - Defualt: - This is a Non-relay and Non-participant - It can run on (Devnet, Testnet, Betanet, Mainnet) - - Relay: - Relay node Can't be participant. - It can run only on (Testnet, Mainnet) - - Participant: - Can run on any of the four nets. - - Indexer: - It is a default node but with Archival Mode enbled which will make you able to query the data of the blockchain. +An Algorand node can be either a `Default`, `Relay` or `Indexer` node. + +- Default: + - This is a non-relay node. + - It can run on Devnet, Testnet, Betanet and Mainnet. +- Relay: + - It can run only on Testnet and Mainnet. +- Indexer: + - It is a default node but with Archival Mode enabled which will make you able to query the data of the blockchain. ## Run Default Node -The basic type. you select any network you want. and for the node type select Default. +You can select any network you want and for the node type select Default. + +If you have more than one SSH keys set, you can click on `Manage SSH keys` to select which one to use for this deployment. + ![defaultdep](./img/solutions_algorand.png) -after the deployment is done. `ssh` to the node and run `goal node status` +After the deployment is done, SSH into the node and run `goal node status`. + +Here you see your node runs on mainnet. + ![defaulttest](./img/algorand_defaulttest.png) -here you see your node run against mainnet. ## Run Relay Node Relay nodes are where other nodes connect. Therefore, a relay node must be able to support a large number of connections and handle the processing load associated with all the data flowing to and from these connections. Thus, relay nodes require significantly more power than non-relay nodes. Relay nodes are always configured in archival mode. -The relay node must be publicaly accessable. so it must have public ip. +The relay node must be publicaly accessable, so it must have a public ip. + ![relaydep](./img/algorand_relaydep.png) -after the deployment is done. `ssh` to the node and run `goal node status` to see the status of the node. and also you can check if the right port is listening (:4161 for testnet, and :4160 for mainnet) +Once the deployment is done, SSH into the node and run `goal node status` to see the status of the node. You can also check if the right port is listening (:4161 for testnet, and :4160 for mainnet). + ![relaytest](./img/algorand_relaytest.png) The next step accourding to the [docs](https://developer.algorand.org/docs/run-a-node/setup/types/#relay-node) is to register your `ip:port` on Algorand Public SRV. -## Run Participant Node - -Participation means participation in the Algorand consensus protocol. An account that participates in the Algorand consensus protocol is eligible and available to be selected to propose and vote on new slice in the Algorand blockchain. -Participation node is responsible for hosting participation keys for one or more online accounts. - -What you need? -- Account mnemonics on the network you deploy on (offline) you can check the status for you account on the AlgoExplorer. search by your account id. - - The account needs to have some microAlgo to sign the participation transaction. - - [Main net explorer](https://algoexplorer.io/) - - [Test net explorer](https://testnet.algoexplorer.io/) - -- First Round: is the first block you need your participaiton node to validate from. you can choose the last block form the explorer. - ![partexp](./img/algorand_partexp.png) -- Last Round: is the final block your node can validate. let's make it 30M - -![partdep](./img/algorand_partdep.png) - -after the deployment is done. `ssh` to the node and run `goal node status` to see the status of the node. you see it do catchup. and the fast catchup is to make the node sync with the latest block faster by only fetch the last 1k slice. after it done it will start create the participation keys. -![partstatus](./img/algorand_partstatus.png) - -now if you check the explorer you can see the status of the account turned to Online -![partonl](./img/algorand_partonl.png) - ## Run Indexer Node The primary purpose of this Indexer is to provide a REST API interface of API calls to support searching the Algorand Blockchain. The Indexer REST APIs retrieve the blockchain data from a PostgreSQL compatible database that must be populated. This database is populated using the same indexer instance or a separate instance of the indexer which must connect to the algod process of a running Algorand node to read block data. This node must also be an Archival node to make searching the entire blockchain possible. ![indexernode](./img/algorand_indexernode.png) -After it finish you can access the indexer API at port `8980` and here are the [endpoint](https://developer.algorand.org/docs/rest-apis/indexer/) you can access. +Once it's done, you can access the indexer API at port `8980` and here are the [endpoint](https://developer.algorand.org/docs/rest-apis/indexer/) you can access. ## Select Capacity -The default scinario the capacity is computed based on the node (network/type) accourding to this [reference](https://howbigisalgorand.com/). -But you still can change this only to higher values by selecting the option `Set Custom Capacity` +The default scenario capacity is computed based on the node (network/type) accourding to this [reference](https://howbigisalgorand.com/). +But you can still change this to higher values by selecting the option `Set Custom Capacity`. \ No newline at end of file diff --git a/collections/dashboard/solutions/caprover.md b/collections/dashboard/solutions/caprover.md index 99c295b..aad0900 100644 --- a/collections/dashboard/solutions/caprover.md +++ b/collections/dashboard/solutions/caprover.md @@ -49,6 +49,8 @@ It has following benefits : - Enter domain for you Caprover instance, Be very careful about the domain name: it needs to be a wildcard domain name you can configure in your chosen domain name system. - Enter password for you Caprover instance. +If you have more than one SSH keys set, you can click on `Manage SSH keys` to select which one to use for this deployment. + ## Admin and Workers Tabs ![ ](./img/solutions_caprover_leader.png) diff --git a/collections/dashboard/solutions/casper.md b/collections/dashboard/solutions/casper.md index 9d10e8a..5131ee9 100644 --- a/collections/dashboard/solutions/casper.md +++ b/collections/dashboard/solutions/casper.md @@ -42,6 +42,8 @@ __Process__ : - `Custom Domain` flag lets the user to use a custom domain - Choose a gateway node to deploy your Casperlab instance on. +If you have more than one SSH keys set, you can click on `Manage SSH keys` to select which one to use for this deployment. + After that is done you can see a list of all of your deployed instances ![ ](./img/casper4.png) diff --git a/collections/dashboard/solutions/fullvm.md b/collections/dashboard/solutions/fullvm.md index 56261a6..8f4dfe9 100644 --- a/collections/dashboard/solutions/fullvm.md +++ b/collections/dashboard/solutions/fullvm.md @@ -52,16 +52,20 @@ Deploy a new full virtual machine on the Threefold Grid - Choose the node to deploy the Full Virtual Machine on ![](./img/node_selection.png) +- If you have more than one SSH keys set, you can click on `Manage SSH keys` to select which one to use for this deployment. + You can attach one or more disks to the Virtual Machine by clicking on the Disks tab and the plus `+` sign and specify the following parameters ![ ](./img/new_vm3.png) - Disk name - Disk size -in the bottom of the page you can see a list of all of the virtual machines you deployed. you can click on `Show details` for more details +At the bottom of the page, you can see a list of all of the virtual machines you deployed. You can click on `Show details` for more details: ![ ](./img/new_vm5.png) -You can also go to JSON tab for full details + +You can also go to JSON tab for full details: + ![ ](./img/new_vm6.png) ## Difference Between Full VM and Micro VM diff --git a/collections/dashboard/solutions/funkwhale.md b/collections/dashboard/solutions/funkwhale.md index c095388..b91da59 100644 --- a/collections/dashboard/solutions/funkwhale.md +++ b/collections/dashboard/solutions/funkwhale.md @@ -5,6 +5,7 @@ - [Introduction](#introduction) - [Prerequisites](#prerequisites) - [Deployment](#deployment) +- [Troubleshooting](#troubleshooting) *** @@ -56,4 +57,8 @@ After that is done you can see a list of all of your deployed instances Click on ***Visit*** to go to the homepage of your Funkwhale instance! -![ ](./img/funkwhale3.png) \ No newline at end of file +![ ](./img/funkwhale3.png) + +## Troubleshooting + +If you get a `Bad Gateway` while connecting to the website, you might simply need to wait for the deployment to complete. \ No newline at end of file diff --git a/collections/dashboard/solutions/img/discourse5.png b/collections/dashboard/solutions/img/discourse5.png index 01dca67..e21aad5 100644 Binary files a/collections/dashboard/solutions/img/discourse5.png and b/collections/dashboard/solutions/img/discourse5.png differ diff --git a/collections/dashboard/solutions/img/funkwhale2.png b/collections/dashboard/solutions/img/funkwhale2.png index de4fab4..03c8ff8 100644 Binary files a/collections/dashboard/solutions/img/funkwhale2.png and b/collections/dashboard/solutions/img/funkwhale2.png differ diff --git a/collections/dashboard/solutions/img/mattermost4.png b/collections/dashboard/solutions/img/mattermost4.png index fd6ee19..93e4852 100644 Binary files a/collections/dashboard/solutions/img/mattermost4.png and b/collections/dashboard/solutions/img/mattermost4.png differ diff --git a/collections/dashboard/solutions/img/new_vm5.png b/collections/dashboard/solutions/img/new_vm5.png index 723a44e..3c33cd0 100644 Binary files a/collections/dashboard/solutions/img/new_vm5.png and b/collections/dashboard/solutions/img/new_vm5.png differ diff --git a/collections/dashboard/solutions/img/new_vm6.png b/collections/dashboard/solutions/img/new_vm6.png index d2af47d..f91c55c 100644 Binary files a/collections/dashboard/solutions/img/new_vm6.png and b/collections/dashboard/solutions/img/new_vm6.png differ diff --git a/collections/dashboard/solutions/img/nodeP_2.png b/collections/dashboard/solutions/img/nodeP_2.png new file mode 100644 index 0000000..21ca52e Binary files /dev/null and b/collections/dashboard/solutions/img/nodeP_2.png differ diff --git a/collections/dashboard/solutions/img/node_selection.png b/collections/dashboard/solutions/img/node_selection.png index 50a30dc..7906056 100644 Binary files a/collections/dashboard/solutions/img/node_selection.png and b/collections/dashboard/solutions/img/node_selection.png differ diff --git a/collections/dashboard/solutions/img/nodep_2.png b/collections/dashboard/solutions/img/nodep_2.png deleted file mode 100644 index f1f7ac2..0000000 Binary files a/collections/dashboard/solutions/img/nodep_2.png and /dev/null differ diff --git a/collections/dashboard/solutions/img/nxios-micro1.png b/collections/dashboard/solutions/img/nxios-micro1.png new file mode 100644 index 0000000..651ad73 Binary files /dev/null and b/collections/dashboard/solutions/img/nxios-micro1.png differ diff --git a/collections/dashboard/solutions/img/presearch4.png b/collections/dashboard/solutions/img/presearch4.png index 2c3c8e9..5ffe96a 100644 Binary files a/collections/dashboard/solutions/img/presearch4.png and b/collections/dashboard/solutions/img/presearch4.png differ diff --git a/collections/dashboard/solutions/img/solutions_caprover.png b/collections/dashboard/solutions/img/solutions_caprover.png index bf2f072..c9c1716 100644 Binary files a/collections/dashboard/solutions/img/solutions_caprover.png and b/collections/dashboard/solutions/img/solutions_caprover.png differ diff --git a/collections/dashboard/solutions/img/solutions_k8s.png b/collections/dashboard/solutions/img/solutions_k8s.png index 935de58..a4d699d 100644 Binary files a/collections/dashboard/solutions/img/solutions_k8s.png and b/collections/dashboard/solutions/img/solutions_k8s.png differ diff --git a/collections/dashboard/solutions/img/subsquid_list.png b/collections/dashboard/solutions/img/subsquid_list.png index c0a78aa..993f9ac 100644 Binary files a/collections/dashboard/solutions/img/subsquid_list.png and b/collections/dashboard/solutions/img/subsquid_list.png differ diff --git a/collections/dashboard/solutions/img/taiga5.png b/collections/dashboard/solutions/img/taiga5.png index f0bcc2b..67ca09c 100644 Binary files a/collections/dashboard/solutions/img/taiga5.png and b/collections/dashboard/solutions/img/taiga5.png differ diff --git a/collections/dashboard/solutions/img/umbrel2.png b/collections/dashboard/solutions/img/umbrel2.png index 859e141..107e721 100644 Binary files a/collections/dashboard/solutions/img/umbrel2.png and b/collections/dashboard/solutions/img/umbrel2.png differ diff --git a/collections/dashboard/solutions/img/vm_json.png b/collections/dashboard/solutions/img/vm_json.png index 1ab3737..401ebe2 100644 Binary files a/collections/dashboard/solutions/img/vm_json.png and b/collections/dashboard/solutions/img/vm_json.png differ diff --git a/collections/dashboard/solutions/img/vm_list.png b/collections/dashboard/solutions/img/vm_list.png index 2a504b1..eae84d2 100644 Binary files a/collections/dashboard/solutions/img/vm_list.png and b/collections/dashboard/solutions/img/vm_list.png differ diff --git a/collections/dashboard/solutions/img/weblet_peertube_listing.png b/collections/dashboard/solutions/img/weblet_peertube_listing.png index 93de06f..98b7031 100644 Binary files a/collections/dashboard/solutions/img/weblet_peertube_listing.png and b/collections/dashboard/solutions/img/weblet_peertube_listing.png differ diff --git a/collections/dashboard/solutions/img/wp2.png b/collections/dashboard/solutions/img/wp2.png index 8e3aed3..f23bccd 100644 Binary files a/collections/dashboard/solutions/img/wp2.png and b/collections/dashboard/solutions/img/wp2.png differ diff --git a/collections/dashboard/solutions/img/wp3.png b/collections/dashboard/solutions/img/wp3.png index e485277..99738ad 100644 Binary files a/collections/dashboard/solutions/img/wp3.png and b/collections/dashboard/solutions/img/wp3.png differ diff --git a/collections/dashboard/solutions/img/wp4.png b/collections/dashboard/solutions/img/wp4.png index 8d534f1..b7467c6 100644 Binary files a/collections/dashboard/solutions/img/wp4.png and b/collections/dashboard/solutions/img/wp4.png differ diff --git a/collections/dashboard/solutions/microvm.md b/collections/dashboard/solutions/microvm.md index 0eec151..f7d0925 100644 --- a/collections/dashboard/solutions/microvm.md +++ b/collections/dashboard/solutions/microvm.md @@ -58,5 +58,7 @@ __Process__ : in the bottom of the page you can see a list of all of the virual machines you deployed. you can click on `Show details` for more details ![](./img/vm_list.png) + You can also go to JSON tab for full details + ![ ](./img/vm_json.png) \ No newline at end of file diff --git a/collections/dashboard/solutions/solutions.md b/collections/dashboard/solutions/solutions.md index bc592b4..da11243 100644 --- a/collections/dashboard/solutions/solutions.md +++ b/collections/dashboard/solutions/solutions.md @@ -16,7 +16,6 @@ This section provides a non-code easy way to deploy a whole solution on the TFGr - [Funkwhale](funkwhale.md) - [Peertube](peertube.md) - [Taiga](taiga.md) - - [Owncloud](owncloud.md) - [Nextcloud](nextcloud.md) - [Discourse](discourse.md) - [Mattermost](mattermost.md) diff --git a/collections/dashboard/solutions/taiga.md b/collections/dashboard/solutions/taiga.md index 17d7e3c..949a469 100644 --- a/collections/dashboard/solutions/taiga.md +++ b/collections/dashboard/solutions/taiga.md @@ -5,6 +5,7 @@ - [Introduction](#introduction) - [Prerequisites](#prerequisites) - [Deployment](#deployment) +- [Troubleshooting](#troubleshooting) *** @@ -55,3 +56,7 @@ After that is done you can see a list of all of your deployed instances Click on ***Visit*** to go to the homepage of your Taiga instance! ![ ](./img/taiga6.png) + +## Troubleshooting + +If you get a `Bad Gateway` while connecting to the website, you might simply need to wait for the deployment to complete. \ No newline at end of file diff --git a/collections/dashboard/solutions/umbrel.md b/collections/dashboard/solutions/umbrel.md index dd9bd5d..39edaed 100644 --- a/collections/dashboard/solutions/umbrel.md +++ b/collections/dashboard/solutions/umbrel.md @@ -47,9 +47,11 @@ You can see a list of all of your deployed instances ![ ](./img/umbrel2.png) -- you can click on `Show details` for more details about the Umbrel deployment. +- You can click on `Show details` for more details about the Umbrel deployment + ![ ](./img/umbrel3.png) - and for more detailed information switch to `JSON` tap. + +- For more detailed information, you can switch to `JSON` tab ![ ](./img/umbrel4.png) - Click on ***Admin Panel*** to go to the dashboard of your Umbrel instance! - Enter the ***Password*** that you provided in `config` section to login into Umbrel dashboard. diff --git a/collections/dashboard/solutions/wordpress.md b/collections/dashboard/solutions/wordpress.md index c8c72d4..b5d7a9e 100644 --- a/collections/dashboard/solutions/wordpress.md +++ b/collections/dashboard/solutions/wordpress.md @@ -14,7 +14,7 @@ - [WordPress Instance Website](#wordpress-instance-website) - [WordPress Instance Admin Page](#wordpress-instance-admin-page) - [WordPress Instance Credentials](#wordpress-instance-credentials) -- [Questions and Feedback](#questions-and-feedback) +- [Troubleshooting](#troubleshooting) *** @@ -142,6 +142,6 @@ At any time, you can find the credentials of your WordPress instance by clicking ![ ](img/wp8.png) -# Questions and Feedback +# Troubleshooting -If you have any questions, you can ask the ThreeFold community for help on the [ThreeFold Forum](http://forum.threefold.io/) or on the [ThreeFold Grid Tester Community](https://t.me/threefoldtesting) on Telegram. +If you get a `Bad Gateway` while connecting to the website, you might simply need to wait for the deployment to complete. \ No newline at end of file diff --git a/collections/dashboard/tfchain/tf_dao.md b/collections/dashboard/tfchain/tf_dao.md index f582491..c10d276 100644 --- a/collections/dashboard/tfchain/tf_dao.md +++ b/collections/dashboard/tfchain/tf_dao.md @@ -53,4 +53,6 @@ The DAO votes are weighted as follows: 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 +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. + +For more information on voting weight, [check this example](./tf_dao_voting_weight.md). \ No newline at end of file diff --git a/collections/dashboard/tfchain/tf_dao_voting_weight.md b/collections/dashboard/tfchain/tf_dao_voting_weight.md new file mode 100644 index 0000000..4f7a8b8 --- /dev/null +++ b/collections/dashboard/tfchain/tf_dao_voting_weight.md @@ -0,0 +1,90 @@ +

Voting Weight Example

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Example](#example) + +--- + +## Introduction + +As we've seen in the previous section, voting weights for the TF DAO are tracked per farm to keep it easy and traceable. + +Let's see an example of how the weight of a farm is calculated. + +## Example + +For this example, we will take a node from QANet: + +``` +node_id = 3 +farm_id = 1 +``` + +The node information is the following: + +![Alt text](../img/tf_dao_voting_weight_example.png) + +The Rust code that calculates node weight extracted from TFChain can be found [here](https://github.com/threefoldtech/tfchain/blob/eb36aa90df2d60cb1a534997903821fc68a096f1/substrate-node/support/src/resources.rs#L57-L91). + +When we apply this code to the current node, we get the following: + +``` +const GIGABYTE: u128 = 1024 * 1024 * 1024; +const ONE_THOUSAND: u128 = 1000; +const CRU: u64 = 24; +const MRU: u64 = 202803462144; +const SRU: u64 = 512110190592; +const HRU: u64 = 9001778946048; +fn calc_cu() -> u64 { + let cru_min = CRU as u128 * 2 * GIGABYTE * ONE_THOUSAND; + let mru_min = + ((MRU as u128).checked_sub(1).unwrap_or(0) * GIGABYTE) * ONE_THOUSAND / 4; + let sru_min = SRU as u128 * ONE_THOUSAND / 50; + if cru_min < mru_min && cru_min < sru_min { + cru_min as u64 + } else if mru_min < cru_min && mru_min < sru_min { + mru_min as u64 + } else if sru_min < cru_min && sru_min < mru_min { + sru_min as u64 + } else { + 0 + } +} + +fn get_cu() -> u64 { + let cu = calc_cu(); + let calculated_cu = 2 * (cu as u128 / GIGABYTE / ONE_THOUSAND); + calculated_cu as u64 +} + +fn get_su() -> u64 { + let su = HRU as u128 * ONE_THOUSAND / 1200 + SRU as u128 * ONE_THOUSAND / 250; + let calculated_su = su / GIGABYTE; + let result = calculated_su as u128 / ONE_THOUSAND; + result as u64 +} +fn main() { + println!("CU: {}", get_cu()); + println!("SU: {}", get_su()); +} +``` + +We can then simply paste this code in the [Rust playground](https://play.rust-lang.org/) to obtain the `CU` and `SU` values of this node: + +``` +CU: 18 +SU: 8 +``` + +We can then simply put these numbers in the [equation shown in the last section](./tf_dao.md#voting-weight) to obtain the farm weight. Note that in this case, the farm has 2 different nodes with the same `CU` and `SU` values. + +``` +Weight = 2 * (sum of CU of all nodes) + (sum of SU of all nodes) +Weight = 2 * (18+18) + (8+8) +Weight = 2 * 36 + 16 +Weight = 88 +``` + +We can see that the farm has the weight `88`. \ No newline at end of file diff --git a/collections/developers/developers.md b/collections/developers/developers.md index 410d5ec..fbf3cce 100644 --- a/collections/developers/developers.md +++ b/collections/developers/developers.md @@ -76,7 +76,7 @@ For complementary information on the technology developed by ThreeFold, refer to - [ZOS](index.md) - [Manual](manual.md) - [Workload Types](workload_types.md) - - [Internal Modules](internals.md) + - [Internal Modules](zos_internals.md) - [Capacity](capacity.md) - [Performance Monitor Package](performance.md) - [Public IPs Validation Task](publicips.md) @@ -88,4 +88,5 @@ For complementary information on the technology developed by ThreeFold, refer to - [TFGrid Stacks](tfgrid_stacks.md) - [Full VM Grid Deployment](grid_deployment_full_vm.md) - [Grid Snapshots](snapshots.md) - - [Deploy the Dashboard](deploy_dashboard.md) \ No newline at end of file + - [Deploy the Dashboard](deploy_dashboard.md) + - [Application Case Study: Nextcloud](app_case_study_nextcloud.md) \ No newline at end of file diff --git a/collections/developers/developers_book_toc.md b/collections/developers/developers_book_toc.md new file mode 100644 index 0000000..282f573 --- /dev/null +++ b/collections/developers/developers_book_toc.md @@ -0,0 +1,90 @@ +# ThreeFold Developers Manual + +This manual covers all practical tutorials on how to develop and build on the ThreeFold Grid. + +

Table of Contents

+ +- [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](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.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) + - [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](zos_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) + - [Deploy the Dashboard](deploy_dashboard.md) + - [Application Case Study: Nextcloud](app_case_study_nextcloud.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 52fb9be..418004c 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 @@ -819,8 +819,8 @@ output "wg_config" { output "vm1_ip" { value = grid_deployment.d1.vms[0].ip } -output "vm1_ygg_ip" { - value = grid_deployment.d1.vms[0].ygg_ip +output "vm1_planetary_ip" { + value = grid_deployment.d1.vms[0].planetary_ip } output "fqdn" { diff --git a/collections/developers/grid_deployment/app_case_study_nextcloud.md b/collections/developers/grid_deployment/app_case_study_nextcloud.md new file mode 100644 index 0000000..b7c991c --- /dev/null +++ b/collections/developers/grid_deployment/app_case_study_nextcloud.md @@ -0,0 +1,281 @@ +

Application Case Study: Nextcloud

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Process Overview and Preparation Steps](#process-overview-and-preparation-steps) +- [Building an Application](#building-an-application) + - [Add an Icon](#add-an-icon) + - [Add a Description](#add-a-description) + - [Update deployment\_list.ts](#update-deployment_listts) + - [Update /types/index.ts](#update-typesindexts) + - [Update /router/index.ts](#update-routerindexts) + - [Update vm\_deployment\_table.vue](#update-vm_deployment_tablevue) + - [Update delete\_deployment.ts](#update-delete_deploymentts) + - [Update tf\_deployment\_list.vue](#update-tf_deployment_listvue) + - [Create nextcloud\_view.vue](#create-nextcloud_viewvue) + - [Create tf\_nextcloud.vue](#create-tf_nextcloudvue) + - [Template Section](#template-section) + - [First Script Section (Setup)](#first-script-section-setup) + - [Second Script Section](#second-script-section) +- [Testing a application](#testing-a-application) +- [Contributing to the Dashboard](#contributing-to-the-dashboard) +- [Conclusion](#conclusion) + +*** + +# Introduction + +In this ThreeFold guide, we explore how to create an application on the Dashboard. To do so, we will use the Nextcloud application as a case study. This application is ideal to study since it uses many of the ThreeFold Grid functionalities, such as gateways and gateway domains. + +By reading this guide, you should have a proper understanding of the general process of building a new application on the ThreeFold Grid. This might give you inspiration to build your own application and contribute to the ThreeFold Dashboard. + +# Process Overview and Preparation Steps + +The bulk of the files needed for the Nextcloud application can be found in the [ThreeFold tfgrid-sdk-ts repository](https://github.com/threefoldtech/tfgrid-sdk-ts) on GitHub. More specifically, we are interested in the subdirectory called [playground](https://github.com/threefoldtech/tfgrid-sdk-ts/tree/development/packages/playground). + +While there are many ways to proceed in the development of a ThreeFold application for the Dashboard, we present here a general method that works efficiently and is well organized. + +The information provided here are specific to the Nextcloud workload, but it can be applied to other types of workload. + +Before building the Nextcloud application, we first deployed a [Nextcloud instance](system_administrators@@terraform_nextcloud_aio) on the ThreeFold Grid with a full virtual machine. Once this deployment was working well, we built an [Nextcloud flist](flist_nextcloud_case_study.md). You can consult the Nextcloud flist code in the ThreeFold Tech [tf-images repository](https://github.com/threefoldtech/tf-images/tree/development/tfgrid3/nextcloud). We note that the flist uses a micro VM. There are some differences between a full VM and a micro VM. We propose users to first start deploying with a full VM and then adjust their work when they want to publish an flist with a micro VM, since full VM are easier to work with. You can of course start directly with a micro VM if you want. + +In sum, once we were confortable launching Nextcloud on a full VM and also using an flist, we were ready to tackle the building of a application. These steps should be taken into account when building your own application. We proceed this way to ensure that the workload is properly configured. Once we know the flist is working properly, we can focus on the application aspect of the deployment, knowing the deployment itself is working properly. + +# Building an Application + +In the subsections that follow, we cover all the different files that either need to be updated or created when building a application on the Dashboard. + +For the most part, the work consist of updating existing files to add the Nextcloud information. As you will see, the bulk of the work is happening with the file named **tf_nextcloud.vue**, where we set the main application page seen on the Dashboard. + +## Add an Icon + +We added a Nextcloud icon to be featured on the Dashboard by adding a **png** file at the following directory **packages/playground/public/images/icons/nextcloud.png**. + +## Add a Description + +We added a description to the Nextcloud application by adding a markdown file at the following directory **packages/playground/public/info/nextcloud.md**. This file contains a short description of Nextcloud for users to quickly understand what the application does. + +## Update deployment_list.ts + +In the file **deployment_list.ts**, we set parameters to be shared to the Nextcloud application during deployment. The file is available at the following directory **packages/playground/src/constants/deployment_list.ts**. + +In our case, the Nextcloud content is the following: + +``` + nextcloud: { + SSH_KEY: _ssh, + NEXTCLOUD_AIO_LINK: "Nextcloud Setup", + NEXTCLOUD_DOMAIN: "Nextcloud Domain", + }, +``` + +We can see here that the application will receive the SSH public key, the Nextcloud setup and domain links. The SSH public key will allow users to connect to the VM via SSH. The Nextcloud setup link is linked to the The Nextcloud domain is used to set the domain name to the Nextcloud instance. The Nextcloud setup and domain links will be linked to the **Actions** buttons once the workload is deployed. + +## Update \/types\/index.ts + +In the file **index.ts**, located at the directory **packages/playground/src/types/**, we set the **ProjectName**, **SolutionCode** and **solutionType** for the Nextcloud application. + +We added the line **Nextcloud = "Nextcloud",** in the array **export enum ProjectName**. This will provide a name for the Nextcloud application, which will be used in the Deployment table shown on the Dashboard. + +We added the line **nextcloud = "nc"** in the array **export enum SolutionCode**. This will be used notably as a prefix for the randomly generated deployment name. For example, when the user deploys a Nextcloud application, the name of the VM could be **ncxwbt2**. + +We also added the line **nextcloud: "Nextcloud",** in the array **export const solutionType: { [key: string]: string } =**. This will be used when setting a contract with the TFGrid. + +## Update \/router\/index.ts + +In the file **index.ts**, located at the directory **packages/playground/src/router/**, we add the following lines in the function **createApplicationsRoutes()**: + +``` + { + path: DashboardRoutes.Applications.Nextcloud, + component: () => import("../views/nextcloud_view.vue"), + meta: { + title: "Nextcloud", + info: { page: "info/nextcloud.md" }, + navbarConfig: { + back: true, + path: [ + { title: "Deploy" }, + { + title: "Applications", + disabled: false, + to: DashboardRoutes.Deploy.Applications, + }, + { + title: "Nextcloud", + }, + ], + }, + }, + }, +``` + +We can see that this section makes use of the Nextcloud description seen in the section [Add a Description](#add-a-description). It also sets the path to the **nextcloud_view.vue** file. + +## Update vm_deployment_table.vue + +In the file **vm_deployment_table.vue**, located at the directory **packages/playground/src/components/**, we added the line **ProjectName.Nextcloud** in the constant section named **IPV4Solutions**. + +The Nextcloud IPv4 address will thus be shown in the deployment table after the user has deployed the Nextcloud application. + +If, for example, we wanted to display the WireGuard address in the deployment table, we would add **ProjectName.Nextcloud** in the array named **WireguardSolutions**. + +## Update delete_deployment.ts + +In the file **delete_deployment.ts**, located at the directory **packages/playground/src/utils**, we added the line **ProjectName.Nextcloud,** in the function **solutionHasGateway(projectName: ProjectName)**. + +## Update tf_deployment_list.vue + +In the file **tf_deployment_list.vue**, located at the directory **packages/playground/src/weblets**, we added the following code to set Actions buttons that are clickable once the workload is deployed: + +``` + +``` + +We note that this section makes use of the **NEXTCLOUD_DOMAIN** and **NEXTCLOUD_AIO_LINK** environment variables shown in the section [Update deployment_list.ts](#update-deployment_listts). + +At the end of the file, at the section **const tabs: Tab[]**, we also added the line **{ title: "Nextcloud", value: "Nextcloud", imgPath: "images/icons/nextcloud.png" },**. We note that this line makes use of the Nextcloud icon we set in the **icons** directory. + +## Create nextcloud_view.vue + +We created a file named **nextcloud_view.vue**. Instead of starting from scratch, we took a file template from an already existing file, in our case it was **owncloud_view.vue**. We only needed to change a few lines to make it work with the Nextcloud application. + +``` + + +``` + +The line containing **TfDeploymentList title** sets the strings used to present the different Nextcloud instances in the deployment table, populated once we deploy a Nextcloud workload on the Dashboard. + +We also note that this file imports the variables **TfDeploymentList** and **TfNextcloud** from the files **tf_deployment_list.vue** and **tf_nextcloud.vue** respectively. These variables are then exported in the section **export default**. We recall that in **tf_deployment_list.vue**, we set the Actions button, as well as set the application name and icon. The file **tf_nextcloud.vue** is covered in the next section. + +## Create tf_nextcloud.vue + +Still in the directory **packages/playground/src/weblets**, we created a file named **tf_nextcloud.vue**. Instead of starting from scratch, it can be recommended to start from a template of a application that is close to the current application you are building. In our case, we started with the file **owncloud.vue**. That being said, since the Nextcloud application uses the gateway as well as gateway domains, some major updates were necessary. This file constitutes the bulk of the work when building a application for the Dashboard. For this reason, we dedicate more attention to this file and explore it section by section. + +This file is mainly composed of three sections. The first section, **template** will be used to configure and set the proper deployment configurations. The second section, the first **script** section will import the necessary modules and variables, set the constants and set the asynchronous function that will query the TFGrid to deploy the application instance. The third section, the second **script** section, imports modules and variables and export them. + +### Template Section + +We first start to explore the **template** main section. + +The section **weblet-layout** defines the basic layout of the application. This section sets the variable names for the different deployment configurations, such as the CPU, the memory and the disk. These variables will then be set to specific quantities when the users set the application on the Dashboard. + +The section **template #title** sets the main title displayed on the Dashboard application page. + +The section **form-validator** contains many subsections that will serve to configure the application deployment. + +The first subsection of **form-validator** is **input-validator**. This subsection is used to give a name to the application instance. This subsection provides strict requirements for the **Name** of the application instance. While the name is automatically generated randomly by the Dashboard, users can also set their own name, to the extent that they follow the name requirements. + +The following subsection is called **SelectSolutionFlavor**. In this subsection, we provide templates for the users to choose the deployment parameters. The parameters are CPU, memory and disk. As stated before, the names of those parameters have been set in the section **application-layout**. + +The subsection **Networks** is where we set the TFGrid parameter options. In our case, the user can decide to enable **ipv4** and **mycelium**. + +The subsections called **input-tooltip** are used to generated information for the users. The developer can decide to either simply display a message as string, and also to set a clickable hyperlink. + +The first **input-tooltip** of the Nextcloud instance provides a hyperlink leading to the TF Manual dedicated nodes documentation. This tooltip also contains a **v-switch**. This gives a toggle button that can be enabled or disabled. In this case, the user can either enable the option **Dedicated** or not. The name given to this option is **dedicated**. We can see further in the document, at line 122, that this option is set as a constant and is false by default (**ref(false)**). + +The second **input-tooltip** is about certified node. As with the previous tool-tip, it is accompanied by a **v-switch** named **certified**. Also further in the document, we can see at line 123 that this option is set as a constant and set to false by default (**set(false)**). + +The subsection **template #footer-actions** configures the **Deploy** button. As we can see here, we set **validateBeforeDeploy** to ensure that the user selects a proper node and deloyment configurations before being able to query the TFGrid to deploy the application instance. + +By the end of this subsection, we arrive at the end of the **weblet-layout** subsection and of the **template** section. + +### First Script Section (Setup) + +The first part of this section consists of importing modules from the **src** directory as well as **GridClient** from **@threefold/grid_client** and **computed**, **type Ref** and **ref** from **vue**. Then we set constants based on the **template** section. + +One constant to notice is **flist**. This constant is given the URL to the Nextcloud flist that we created for the application deployment. For more information on how to create this flist, read the [Nextcloud flist case study](../flist/flist_case_studies/flist_nextcloud_case_study.md) available on the ThreeFold Manual. + +In the function **finalize**, we set the output displayed when the deployment has been successful. It's important to add relevant information for the user here. In the case of Nextcloud, we add the following text to provide guidance to the user: + +> Successfully deployed a Nextcloud instance. Under Actions, click on the button Nextcloud Setup to set up Nextcloud. After installation, you can access the Nextcloud instance by clicking on the Open Nextcloud button or navigating to your Nextcloud domain. + +A big part of the first script section is the asynchronous function **deploy**. As the constant **projectName**, we set the following: + +> ProjectName.Nextcloud.toLowerCase() + "/" + name.value +For our Nextcloud instance, the user can decide to use a gateway or not as well as a custom or gateway domain. The constant **domain** sets this. 148 consists of setting the proper **domain** whether the user chose a custom or a gateway domain: + +> const domain = selectionDetails.value!.domain!.enabledCustomDomain + ? selectionDetails.value!.domain!.customDomain + : subdomain + "." + selectionDetails.value!.domain!.selectedDomain?.publicConfig.domain; + +The constant **has_gateway** is set to true only if both **customDomain** and **ipv4.value** are set to false: + +> const has_gateway = !(selectionDetails.value!.domain!.enabledCustomDomain && ipv4.value); +The constant **aio_link** is composed of the **domain** variable set earlier followed by `/aio`. This will ensure that the Action button to open the Nextcloud AIO page is properly set. + +> const aio_link = domain + "/aio"; +Once the susmentioned constants are set, the asynchronous function **deploy** will deploy the application instance on the TFGrid. This can be seen in the section **try**. + +This section references to all the necessary parameters to deploy the application instance as defined by the user on the TFGrid. For example, the subsection **envs** contains all the necessary environment variables for the deployment, such as the SSH public key (**SSH_KEY**), as well as the domain and Nextcloudt setup URLs (**NEXTCLOUD_DOMAIN**, **NEXTCLOUD_AIO_LINK**). We also pass a boolean telling the deployer if there is a gateway within the deeployment (**GATEWAY**) as well as the IPv4 address (**IPV4**). + +If this **try** function fails, we catch the error and display **Failed to deploy a Nextcloud instance.** as shown in the section **catch (e)**. + +The next section is an **if** statement that will be triggered if the deployment consist of a custom domain and an IPv4 connection. In this case, we call the function **finalize** to deploy the application instance by passing the **vm** as a parameter. + +If this is not the case, we trigger the second **try** function where we set the gateway. Once this is done, we finally trigger the function **finalize** to deploy the application instance with the gateway set. + +### Second Script Section + +The second script section imports different modules necessary to run the application and then exports many of them as a package for the application, in our case **TFNextcloud**. + +The import section of this script section should be common for all applications using a gateway. + +The export section (**export default**) is set with **TFNextcloud** as its **name**. + +# Testing a application + +You can test this application or the application you are creating by deploying the Dashboard locally. For more information on this, feel free to read the documentation [Deploy the Dashboard](./deploy_dashboard.md) of the ThreeFold Manual. + +This is very useful, if not necessary, when testing and building your own application. + +# Contributing to the Dashboard + +If you've created a new application and you wish to share it to the ThreeFold community, feel free to fork the ThreeFold [tfgrid-sdk-ts repository](https://github.com/threefoldtech/tfgrid-sdk-ts) to your own GitHub account, add the new application to the Dashboard and then create a pull request. The ThreeFold development team will be happy to review your code and propose changes if needed. + +# Conclusion + +We now went through the Nextcloud application code and explored how to create a new application for the ThreeFold Dashboard. This case study should have given you the necessary tools and knowledge to understand the general steps when it comes to creating a new application. Of course, each application will be different and you will most certainly need to adjust the files presented here when you build your own application. + +Should you have any questions or feedback, you can ask the ThreeFold community for help on the [ThreeFold Forum](http://forum.threefold.io/) or on the [ThreeFold Grid Tester Community](https://t.me/threefoldtesting) chat on Telegram. \ 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 ada1b79..791dfdd 100644 --- a/collections/developers/grid_deployment/grid_deployment.md +++ b/collections/developers/grid_deployment/grid_deployment.md @@ -7,4 +7,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) -- [Deploy the Dashboard](deploy_dashboard.md) \ No newline at end of file +- [Deploy the Dashboard](deploy_dashboard.md) +- [Application Case Study: Nextcloud](app_case_study_nextcloud.md) \ No newline at end of file diff --git a/collections/developers/internals/internals.md b/collections/developers/internals/internals.md index dd1d888..00c27ad 100644 --- a/collections/developers/internals/internals.md +++ b/collections/developers/internals/internals.md @@ -6,6 +6,7 @@ We present in this section of the developers book a partial list of system compo - [Reliable Message Bus - RMB](rmb_toc.md) - [Introduction to RMB](rmb_intro.md) + - [Coding Guides](rmb_coding_guides.md) - [RMB Specs](rmb_specs.md) - [RMB Peer](peer.md) - [RMB Relay](relay.md) @@ -13,7 +14,7 @@ We present in this section of the developers book a partial list of system compo - [ZOS](zos_readme.md) - [Manual](manual.md) - [Workload Types](workload_types.md) - - [Internal Modules](internals.md) + - [Internal Modules](zos_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/rmb/img/rmb_overview.png b/collections/developers/internals/rmb/img/rmb_overview.png new file mode 100644 index 0000000..16ac583 Binary files /dev/null and b/collections/developers/internals/rmb/img/rmb_overview.png differ diff --git a/collections/developers/internals/rmb/img/rmb_peer.png b/collections/developers/internals/rmb/img/rmb_peer.png new file mode 100644 index 0000000..9d533dc Binary files /dev/null and b/collections/developers/internals/rmb/img/rmb_peer.png differ diff --git a/collections/developers/internals/rmb/rmb_coding_guides.md b/collections/developers/internals/rmb/rmb_coding_guides.md new file mode 100644 index 0000000..015a088 --- /dev/null +++ b/collections/developers/internals/rmb/rmb_coding_guides.md @@ -0,0 +1,174 @@ +

Coding Guides

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Module Structure](#module-structure) + - [Example](#example) +- [Naming Conventions](#naming-conventions) +- [`error` Handling](#error-handling) +- [`logs`](#logs) +- [Function Signatures](#function-signatures) + - [Examples](#examples) + +--- + +## Introduction + +We present coding guides for the reliable message bus (RMB). + +> This document will always be `work in progress`. [Read the official docs for updates](https://github.com/threefoldtech/rmb-rs/blob/main/docs/code-guide.md). +## Module Structure + +In Rust there are multiple ways to create a (sub)module in your crate + +- `.rs` A single file module. can be imported in `main.rs` or `lib.rs` with the keyword `mod` +- `/mod.rs` A directory module. Uses mod.rs as the module `entrypoint` always. Other sub-modules can be created next to mod.rs and can be made available by using the `mod` keyword again in the `mod.rs` file. + +We will agree to use the 2nd way (directory) but with the following restrictions: + +- `mod.rs` will have all `traits` and `concrete types` used by the traits. +- `.rs` file next to `mod.rs` that can include implementation for the module trait. +z + +### Example + +Following is an example of `animal` module. + +``` +animal/ + mod.rs + dog.rs + cat.rs +``` + +> File names are always in `snake_case` but avoid the `_` as much as possible because they basically look ugly in file tree. For example we prefer the name `dog.rs` over `dog_animal.rs` because we already can tell from the module name that it's a `dog` __animal__. Hence in the identity module for example the name `ed25519.rs` is preferred over `ed25519_identity.rs` because that's already inferred from the module name. +The `mod.rs` file then can contain + +```rust +pub mod dog; +pub mod cat; +pub use dog::Dog; + +pub trait Food { + fn calories(&self) -> u32; +} + +pub trait Animal +where + F: Food, +{ + fn feed(&mut self, food: F); +} + +``` + +The `dog.rs` file then can contain + +```rust +use super::{Animal, Food}; + +pub struct DogFood {} +impl Food for DogFood { + fn calories(&self) -> u32 { + 1000 + } +} +pub struct Dog {} + +impl Animal for Dog { + fn feed(&mut self, food: DogFood) { + println!("yum yum yum {} calories", food.calories()); + } +} + +``` + +A user of the module now can do + +``` +use animal::dog::{Dog, DogFood}; +``` + +For common implementation that are usually used in your modules, a `pub use` can be added in `mod.rs` to make it easier to import your type. For example + +```rust +// dog is brought directly from animal crate +use animal::Dog; +// cat i need to get from the sub-module +use animal::cat::Cat; +``` + +## Naming Conventions + +Following the rust guide lines for name + +- `file names` are short snake case. avoid `_` if otherwise name will not be descriptive. Check note about file names above. +- `trait`, `struct`, `enum` names are all `CamelCase` +- `fn`, `variables` names are snake case + +Note, names of functions and variables need to be `descriptive` but __short__ at the same time. Also avoid the `_` until absolutely necessary. A variable with a single `word` name is better if it doesn't cause confusion with other variables in the same context. + +The name of the variable should never include the `type`. + +## `error` Handling + +We agreed to use `anyhow` crate in this project. Please read the docs for [`anyhow`](https://docs.rs/anyhow/1.0.57/anyhow/) + +To unify the practice by default we import both `Result` and `Context` from `anyhow` +> Others can be imported as well if needed. +```rust +use anyhow::{Result, Context}; + +fn might_fail() -> Result<()> { + // context adds a `context` to the error. so if another_call fails. I can tell exactly failed when i was doing what + another_call().context("failed to do something")?; // <- we use ? to propagate the error unless you need to handle the error differently + + Ok(()) // we use Ok from std no need to import anyhow::Ok although it's probably the same. +} + +fn might_fail2() -> Result<()> { + if fail { + // use the bail macro fom anyhow to exit with an error. + bail!("failed because fail with set to true"); + } +} + +> NOTE: all error messages starts with lowercase. for example it's `failed to ...` not `Failed to ...` +``` + +## `logs` + +logging is important to trace the errors that cannot be propagated and also for debug messages that can help spotting a problem. We always gonna use `log` crate. as + +```rust +log::debug!(); // for debug messages +log::info!(); // info messages +``` + +Note only `errors` that can __NOT__ be propagated are logged. + +> NOTE: All log messages start with lowercase. +## Function Signatures + +For function inputs (arguments) `generic` types are preferred if available over concrete types. This most obvious with `string` types. depending on the function behavior + +### Examples + +This is bad: + +```rust +fn call1(key: String); +fn call2(key: &str); +``` + +It is preferred to use: + +```rust +// in case function will need to take ownership of the string. +fn call1>(k: K); +// inc ase function will just need to use a reference to the string. +fn call2>(k: K); + +// this will allow both functions to be callable with `&str`, `String`. +``` \ 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 6062195..9b10624 100644 --- a/collections/developers/internals/rmb/rmb_intro.md +++ b/collections/developers/internals/rmb/rmb_intro.md @@ -2,106 +2,294 @@

Table of Contents

-- [What is RMB](#what-is-rmb) -- [Why](#why) -- [Specifications](#specifications) -- [How to Use RMB](#how-to-use-rmb) -- [Libraries](#libraries) - - [Known Libraries](#known-libraries) - - [No Known Libraries](#no-known-libraries) -- [What is rmb-peer](#what-is-rmb-peer) -- [Download](#download) -- [Building](#building) -- [Running tests](#running-tests) +- [Introduction](#introduction) +- [Overview of the Operation of RMB Relay](#overview-of-the-operation-of-rmb-relay) + - [Connections](#connections) + - [Federations](#federations) + - [Peer](#peer) + - [Peer Implementation](#peer-implementation) + - [`rmb-peer` message types](#rmb-peer-message-types) + - [Output Requests](#output-requests) + - [Incoming Response](#incoming-response) + - [Incoming Request](#incoming-request) + - [Outgoing Response](#outgoing-response) +- [End2End Encryption](#end2end-encryption) + - [Rate Limiting](#rate-limiting) + - [Substrate Connections](#substrate-connections) + - [Redundancy and Failover](#redundancy-and-failover) ---- +*** -## What is RMB +## Introduction -Reliable message bus is a secure communication panel that allows `bots` to communicate together in a `chat` like way. It makes it very easy to host a service or a set of functions to be used by anyone, even if your service is running behind NAT. +RMB is (reliable message bus) is a set of protocols and a `relay` server that aims to abstract inter-process communication between multiple processes running over multiple nodes. -Out of the box RMB provides the following: +The point behind using RMB is to allow the clients to not know much about the other process, or where it lives (client doesn't know network addresses, or identity). Unlike HTTP(S) where the caller must know exact address (or dns-name) and endpoints of the calls. Instead RMB requires you to only know about -- Guarantee authenticity of the messages. You are always sure that the received message is from whoever is pretending to be -- End to End encryption -- 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` +- Twin ID (numeric ID) of where the service can be found +- Command (string) is simply the function to call +- The request "body" which is binary blob that is passed to the command as is + - implementation of the command need then to interpret this data as intended (out of scope of rmb) -![layout](img/layout.png) +Twins are stored on tfchain. hence identity of twins is granted not to be spoofed, or phished. When a twin is created he needs to define 2 things: -## Why +- RMB RELAYS +- His Elliptic Curve public key (we use secp256k1 (K-256) elliptic curve) -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: +Once all twins has their data set correctly on the chain. Any 2 twins can communicate with full end-to-end encryption as follows: -- Communication needed to be reliable - - Minimize and completely eliminate message loss - - Reduce downtime -- Node need to authenticate and authorize calls - - Guarantee identity of the other peer so only owners of data can see it -- Fast request response time +- A twin establish a WS connection to his relays +- A twin create an `envelope` as defined by the protobuf schema +- Twin fill end all envelope information (more about this later) +- Twin pushes the envelope to one of his relays +When received by the relay, it will determine whether to deliver the message to one of its directly connected clients or to a remote relay. the message processed as follows: + - If the destination twin is also using the same relay, local route will have priority over others and message is directly forwarded to this twin. + - If federation is needed (twin using different relay), message is forwarded to one of the twin's relays. -Starting from this we came up with a more detailed requirements: +Any new messages that is designated to this twin, is pushed over the websocket to this twin. The twin can NOT maintain multiple connections to same relay hence a small tool (rmb-peer) is provided that runs as a dispatcher for a single twin identity. -- User (or rather bots) need their identity maintained by `tfchain` (a blockchain) hence each bot needs an account on tfchain to be able to use `rmb` -- 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 +This rmb-peer tool makes it possible to run multiple services behind this twin and push replies back to their initiators -## Specifications +## Overview of the Operation of RMB Relay -For details about protocol itself please check the [specs](rmb_specs.md). +![](./img/rmb_overview.png) -## How to Use RMB +### Connections -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. +The relay can maintain **MULTIPLE** connections per peer given that each connection has a unique **SID** (session id). But for each (twin-id, session-id) combo there can be only one connection. if a new connection with the same (twin-id, session-id) is created, the older connection is dropped. -Or you can keep the connection forever to answer other bots requests if you are providing a service. +The `rmb-peer` process reserved the `None` sid. It connection with No session id, hence you can only run one `rmb-peer` per `twin` (identity). But the same twin (identity) can make other connection with other rmb clients (for example rmb-sdk-go direct client) to establish more connections with unique session ids. -## Libraries +### Federations -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. +Starting from version 1.1.0, the federation field has been deprecated, and the logic of federation has moved to happen in the relays. Relay is now responsible for determining whether to deliver the message to one of its directly connected clients or to a remote relay. -### Known Libraries +Relay now has an in-memory ranking system to rank its known relays according to their known mean failure rate over a recent configured period of time (time window). -- Golang [rmb-sdk-go](https://github.com/threefoldtech/rmb-sdk-go) -- Typescript [rmb-sdk-ts](https://github.com/threefoldtech/rmb-sdk-ts) +The ranking system used to give a hint to the router (when a twin has multiple configured relays on-chain) to try the relays that have a higher chance of working first, minimizing routing messages to services that failed recently (minimizing the latency). -### No Known Libraries +The rank of a relay will heal over time because the system will only consider failures in the recent time frame, allowing the router to revisit the relay and distribute the load between all working services. For relays with the same failure rate, the order will be randomized. -If there are no library in your preferred language, here's what you can do: +The ranker time window can be configured when starting the relay by specifying the period in seconds after the `--ranker_period` option. If the option is omitted, the default value of one hour will be used. -- 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` +Example: -## 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 - -- reconnecting if connection was lost -- verifying received messages -- decrypting received messages -- sending requests on your behalf, taking care of all crypto heavy lifting. - -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) - - -## 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 -git clone git@github.com:threefoldtech/rmb-rs.git -cd rmb-rs -cargo build --release --target=x86_64-unknown-linux-musl +``` +rmb-relay --substrate wss://tfchain.dev.grid.tf:443 --domain r1.3x0.me --ranker-period 1800 ``` -## Running tests +### Peer -While inside the repository +Any language or code that can open `WebSocket` connection to the relay can work as a peer. A peer need to do the following: + +- Authenticate with the relay. This is by providing a `JWT` that is signed by the twin key (more on that later) +- Handle received binary mesasge +- Send binary messages + +Each message is an object of type `Envelope` serialized as with protobuf. Type definition can be found under `proto/types.proto` + +### Peer Implementation + +This project already have a peer implementation that works as local peer gateway. By running this peer instance it allows you to +run multiple services (and clients) behind that gateway and they appear to the world as a single twin. + +- The peer gateway (rmb-peer) starts and connects to his relays +- If requests are received, they are verified, decrypted and pushed to a redis queue that as command specific (from the envelope) +- A service can then be waiting on this redis queue for new messages + - The service can process the command, and push a response back to a specific redis queue for responses. +- The gateway can then pull ready responses from the responses queue, create a valid envelope, encrypt, and sign and send to destination + +![](./img/rmb_peer.png) + +#### `rmb-peer` message types + +To make it easy for apps to work behind an `rmb-peer`, we use JSON message for communication between the local process and the rmb-peer. the rmb-peer still +maintains a fully binary communication with the relay. + +A request message is defined as follows + +##### Output Requests + +This is created by a client who wants to request make a request to a remote service + +> this message is pushed to `msgbus.system.local` to be picked up by the peer + +```rust +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct JsonOutgoingRequest { + #[serde(rename = "ver")] + pub version: usize, + #[serde(rename = "ref")] + pub reference: Option, + #[serde(rename = "cmd")] + pub command: String, + #[serde(rename = "exp")] + pub expiration: u64, + #[serde(rename = "dat")] + pub data: String, + #[serde(rename = "tag")] + pub tags: Option, + #[serde(rename = "dst")] + pub destinations: Vec, + #[serde(rename = "ret")] + pub reply_to: String, + #[serde(rename = "shm")] + pub schema: String, + #[serde(rename = "now")] + pub timestamp: u64, +} +``` + +##### Incoming Response + +A response message is defined as follows this is what is received as a response by a client in response to his outgoing request. + +> this response is what is pushed to `$ret` queue defined by the outgoing request, hence the client need to wait on this queue until the response is received or it times out + +```rust +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct JsonError { + pub code: u32, + pub message: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct JsonIncomingResponse { + #[serde(rename = "ver")] + pub version: usize, + #[serde(rename = "ref")] + pub reference: Option, + #[serde(rename = "dat")] + pub data: String, + #[serde(rename = "src")] + pub source: String, + #[serde(rename = "shm")] + pub schema: Option, + #[serde(rename = "now")] + pub timestamp: u64, + #[serde(rename = "err")] + pub error: Option, +} +``` + +##### Incoming Request + +An incoming request is a modified version of the request that is received by a service running behind RMB peer +> this request is received on `msgbus.${request.cmd}` (always prefixed with `msgbus`) + +```rust +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct JsonIncomingRequest { + #[serde(rename = "ver")] + pub version: usize, + #[serde(rename = "ref")] + pub reference: Option, + #[serde(rename = "src")] + pub source: String, + #[serde(rename = "cmd")] + pub command: String, + #[serde(rename = "exp")] + pub expiration: u64, + #[serde(rename = "dat")] + pub data: String, + #[serde(rename = "tag")] + pub tags: Option, + #[serde(rename = "ret")] + pub reply_to: String, + #[serde(rename = "shm")] + pub schema: String, + #[serde(rename = "now")] + pub timestamp: u64, +} +``` + +Services that receive this needs to make sure their responses `destination` to have the same value as the incoming request `source` + +##### Outgoing Response + +A response message is defined as follows this is what is sent as a response by a service in response to an incoming request. + +Your bot (server) need to make sure to set `destination` to the same value as the incoming request `source` + +> This response is what is pushed to `msgbus.system.reply` + +```rust +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct JsonOutgoingResponse { + #[serde(rename = "ver")] + pub version: usize, + #[serde(rename = "ref")] + pub reference: Option, + #[serde(rename = "dat")] + pub data: String, + #[serde(rename = "dst")] + pub destination: String, + #[serde(rename = "shm")] + pub schema: Option, + #[serde(rename = "now")] + pub timestamp: u64, + #[serde(rename = "err")] + 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 +not fully trust the relay or whoever is hosting it. Hence e2e was needed + +As you already understand e2e is completely up to the peers to implement, and even other implementations of the peers can agree on a completely different encryption algorithm and key sharing algorithm (again, relay does not care). But in our implementation of the e2e (rmb-peer) things goes like this + +- Each twin has a `pk` field on tfchain. when rmb-peer start, it generates an `secp256k1` key from the same seed as the user tfchain mnemonics. Note that this will not make the encryption key and the signing key any related, they just are driven from the same seed. +- On start, if the key is not already set on the twin object, the key is updated. +- If a peer A is trying to send a message to peer B. but peer B does not has his `pk` set, peer A will send the message in plain-text format (please check the protobuf envelope type for details) +- If peer B has public key set, peer A will prefer e2e encryption and will does the following: +- Drive a shared secret point with `ecdh` algorithm, the key is the `sha256` of that point +- `shared = ecdh(A.sk, B.pk)` +- create a 12 bytes random nonce +- encrypt data as `encrypted = aes-gcm.encrypt(shared-key, nonce, plain-data)` +- create cipher as `cipher nonce + encrypted` +- fill `envelope.cipher = cipher` +- on receiving a message peer B does the same in the opposite direction +- split data and nonce (nonce is always first 12 bytes) +- 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.\ +It was decided that the rate limiter should only watch websocket connections of users, since all other requests/connections with users consume little resources, and since the relay handles the max number of users inherently.\ +The limiter's configurations are passed as a command line argument `--limit , `. `` represents the number of messages a twin is allowed to send in each time window, `` represents the total size of messages in bytes a twin is allowed to send in each time window.\ +Currently there are two implementations of the rate limiter: + +- `NoLimit` which imposes no limits on users. +- `FixedWindowLimiter` which breaks the timeline into fixed time windows, and allows a twin to send a fixed number of messages, with a fixed total size, in each time window. If a twin exceeded their limits in some time window, their message is dropped, an error message is sent back to the user, the relay dumps a log about this twin, and the user gets to keep their connection with the relay. + +### Substrate Connections + +To make the relay and peer more reliable, the substrate client accepts multiple substrate urls. +> To provide multiple urls use the `--substrate ` command line argument multiple times. + +Example: ```bash -cargo test + rmb-peer --substrate wss://tfchain.grid.tf:443 --substrate wss://02.tfchain.grid.tf:443 --substrate wss://03.tfchain.grid.tf:443 ``` + +It's important to note the only one substrate client is held at a time, and the other urls are only used in the case of a network failure.\ +This way, if a substrate connection failed, other urls are used to try to connect to substrate.\ +The client uses iterates between urls in a Round Robin fashion, and tries to reconnect. If a specified number of trials is done (currently 2x the number of urls) and none of them was successful, the client fails and returns and error. + +### Redundancy and Failover + +Starting from version 1.1.0, RMB has integrated redundancy and failover into the system to achieve high availability. +This is done by allowing RMB-peer to set more than one relay domain for a twin on-chain and establish connections with several redundant relays at the same time. + +Enabling failover ensures that communication between twins can continue even if one of the relays fails, as the client will eventually route the message to its destination through another operational relay. + +Example: + +```bash + rmb-peer -m "{MNEMONIC}" --substrate wss://tfchain.dev.grid.tf:443 --relay wss://r1.dev.grid.tf --relay wss://r2.dev.grid.tf +``` \ No newline at end of file diff --git a/collections/developers/internals/rmb/rmb_toc.md b/collections/developers/internals/rmb/rmb_toc.md index 6e7b871..e94371c 100644 --- a/collections/developers/internals/rmb/rmb_toc.md +++ b/collections/developers/internals/rmb/rmb_toc.md @@ -13,6 +13,7 @@ Out of the box RMB provides the following:

Table of Contents

- [Introduction to RMB](rmb_intro.md) +- [Coding Guides](rmb_coding_guides.md) - [RMB Specs](rmb_specs.md) - [RMB Peer](peer.md) - [RMB Relay](relay.md) \ No newline at end of file diff --git a/collections/developers/internals/rmb/uml/relay.md b/collections/developers/internals/rmb/uml/relay.md index 0618d7b..97abcbf 100644 --- a/collections/developers/internals/rmb/uml/relay.md +++ b/collections/developers/internals/rmb/uml/relay.md @@ -1,4 +1,4 @@ -

RMB Peer

+

RMB Relay

Table of Contents

diff --git a/collections/developers/internals/zos/internals/internals.md b/collections/developers/internals/zos/internals/zos_internals.md similarity index 100% rename from collections/developers/internals/zos/internals/internals.md rename to collections/developers/internals/zos/internals/zos_internals.md diff --git a/collections/economy/incareserve.md b/collections/economy/incareserve.md index 4b2d40a..fb7dd32 100644 --- a/collections/economy/incareserve.md +++ b/collections/economy/incareserve.md @@ -54,4 +54,4 @@ The projects can be seen in [projects](incaprojects.md) ### More Info -> we are learning from [https://medium.com/h-o-l-o/holo-fuel-economics(https://medium.com/h-o-l-o/holo-fuel-economics-101-c9631d63014a) and many of their concepts will be implemented in our reserve. \ No newline at end of file +> we are learning from [https://medium.com/h-o-l-o/holo-fuel-economics](https://medium.com/h-o-l-o/holo-fuel-economics-101-c9631d63014a) and many of their concepts will be implemented in our reserve. \ No newline at end of file diff --git a/collections/faq/faq.md b/collections/faq/faq.md index 7c76185..7de6887 100644 --- a/collections/faq/faq.md +++ b/collections/faq/faq.md @@ -33,9 +33,6 @@ - [TF Connect App, TF Dashboard, GraphQL, Grix Proxy and Polkadot Substrate](#tf-connect-app-tf-dashboard-graphql-grix-proxy-and-polkadot-substrate) - [Is there a way to create or import another wallet in TF Connect App?](#is-there-a-way-to-create-or-import-another-wallet-in-tf-connect-app) - [I created a farm on the TF Chain. On the TF Connect App Farmer Migration section, my farm is under Other v3 farms, is this normal?](#i-created-a-farm-on-the-tf-chain-on-the-tf-connect-app-farmer-migration-section-my-farm-is-under-other-v3-farms-is-this-normal) - - [I am trying to access my wallet in the ThreeFold Connect App. It worked fine before, but now I just get a white screen. What does it mean and what can I do?](#i-am-trying-to-access-my-wallet-in-the-threefold-connect-app-it-worked-fine-before-but-now-i-just-get-a-white-screen-what-does-it-mean-and-what-can-i-do) - - [When I open the ThreeFold Connect App, I get the error: Error in initialization in Flagsmith. How can I fix this issue?](#when-i-open-the-threefold-connect-app-i-get-the-error-error-in-initialization-in-flagsmith-how-can-i-fix-this-issue) - - [Apart form the ThreeFold Connect App Wallet, how can I check my TFT balance?](#apart-form-the-threefold-connect-app-wallet-how-can-i-check-my-tft-balance) - [Is it possible to export the transaction history of a wallet to a CSV file?](#is-it-possible-to-export-the-transaction-history-of-a-wallet-to-a-csv-file) - [How can I use GraphQl to find information on the ThreeFold Grid?](#how-can-i-use-graphql-to-find-information-on-the-threefold-grid) - [What are the different links to ThreeFold's Graph QL depending on the network?](#what-are-the-different-links-to-threefolds-graph-ql-depending-on-the-network) @@ -44,7 +41,6 @@ - [How can I use Grid Proxy to find information on the ThreeFold Grid and 3Nodes?](#how-can-i-use-grid-proxy-to-find-information-on-the-threefold-grid-and-3nodes) - [Who is hosting GraphQL and Grid Proxy on the ThreeFold Grid?](#who-is-hosting-graphql-and-grid-proxy-on-the-threefold-grid) - [What is the difference between uptime, status and power state?](#what-is-the-difference-between-uptime-status-and-power-state) - - [I do not remember the name - ThreeFold 3bot ID - associated with my seed phrase on the ThreeFold Connect app. Can I recover my TF Connect app account with only the seed phrase and not the name, 3bot ID, associated with it?](#i-do-not-remember-the-name---threefold-3bot-id---associated-with-my-seed-phrase-on-the-threefold-connect-app-can-i-recover-my-tf-connect-app-account-with-only-the-seed-phrase-and-not-the-name-3bot-id-associated-with-it) - [USERS FAQ](#users-faq) - [TF Grid Functionalities](#tf-grid-functionalities) - [What are the type of storage available on TF Grid?](#what-are-the-type-of-storage-available-on-tf-grid) @@ -81,9 +77,6 @@ - [Users Troubleshooting and Error Messages](#users-troubleshooting-and-error-messages) - [When deploying a virtual machine (VM) on the ThreeFold Grid, I get the following message after trying a full system update and upgrade: GRUB failed to install to the following devices... Is there a fix to this issue?](#when-deploying-a-virtual-machine-vm-on-the-threefold-grid-i-get-the-following-message-after-trying-a-full-system-update-and-upgrade-grub-failed-to-install-to-the-following-devices-is-there-a-fix-to-this-issue) - [While deploying on the TF Dashboard, I get the following error :"global workload with the same name exists: conflict". What can I do to fix this issue?](#while-deploying-on-the-tf-dashboard-i-get-the-following-error-global-workload-with-the-same-name-exists-conflict-what-can-i-do-to-fix-this-issue) - - [ThreeFold Connect App](#threefold-connect-app) - - [TF Connect App is now asking for a 4-digit password (PIN). I don't remember it as I usually use touch or face ID to unlock the app. What can I do?](#tf-connect-app-is-now-asking-for-a-4-digit-password-pin-i-dont-remember-it-as-i-usually-use-touch-or-face-id-to-unlock-the-app-what-can-i-do) - - [Is there a way to have more than one wallet in TF Connect App?](#is-there-a-way-to-have-more-than-one-wallet-in-tf-connect-app) - [What is the difference between 10.x.y.z and 192.168.x.y addresses?](#what-is-the-difference-between-10xyz-and-192168xy-addresses) - [DEVELOPERS FAQ](#developers-faq) - [General Information for Developer](#general-information-for-developer) @@ -117,7 +110,6 @@ - [When it comes to the Zero-OS bootstrap image, can I simply duplicate the first image I burnt when I build another 3Node?](#when-it-comes-to-the-zero-os-bootstrap-image-can-i-simply-duplicate-the-first-image-i-burnt-when-i-build-another-3node) - [If a node is unused for certain time, e.g. many months offline, will it be erased by the Grid?](#if-a-node-is-unused-for-certain-time-eg-many-months-offline-will-it-be-erased-by-the-grid) - [Can a farm be erased from TF Grid?](#can-a-farm-be-erased-from-tf-grid) - - [On the ThreeFold Connect App, it says I need to migrate my Titan farm from V2 to V3. What do I have to do? How long does this take?](#on-the-threefold-connect-app-it-says-i-need-to-migrate-my-titan-farm-from-v2-to-v3-what-do-i-have-to-do-how-long-does-this-take) - [How can I migrate my DIY farm from V2 to V3?](#how-can-i-migrate-my-diy-farm-from-v2-to-v3) - [What does the pricing policy ID of a farm represent?](#what-does-the-pricing-policy-id-of-a-farm-represent) - [What is the difference between TiB and TB? Why doesn't the TF Explorer shows the same storage space as my disk?](#what-is-the-difference-between-tib-and-tb-why-doesnt-the-tf-explorer-shows-the-same-storage-space-as-my-disk) @@ -204,55 +196,12 @@ - [My 3Node lost power momentarily and I had to power it back on manually. Is there a better way to proceed?](#my-3node-lost-power-momentarily-and-i-had-to-power-it-back-on-manually-is-there-a-better-way-to-proceed) - [Do I need to change the battery BIOS?](#do-i-need-to-change-the-battery-bios) - [Do I need to enable UEFI Network Stack?](#do-i-need-to-enable-uefi-network-stack) - - [I want redundancy of power for my 3 nodes. I have two PSU on my Dell server. What can I do?](#i-want-redundancy-of-power-for-my-3-nodes-i-have-two-psu-on-my-dell-server-what-can-i-do) - [Why isn't there support for RAID? Does Zero-OS work with RAID?](#why-isnt-there-support-for-raid-does-zero-os-work-with-raid) - - [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 ?](#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-) - [I have a 3Node rack server. Is it possible to use a M.2 to SATA adapter in order to put the M.2 SATA disk in the HDD bay onboard storage?](#i-have-a-3node-rack-server-is-it-possible-to-use-a-m2-to-sata-adapter-in-order-to-put-the-m2-sata-disk-in-the-hdd-bay-onboard-storage) - - [My 3Node uses only PCIe adapters and SSD NVME disks. Do I need the RAID controller on?](#my-3node-uses-only-pcie-adapters-and-ssd-nvme-disks-do-i-need-the-raid-controller-on) - [Can I change the name of my farm on polkadot.js?](#can-i-change-the-name-of-my-farm-on-polkadotjs) - [How can I delete a farm on polkadot.js?](#how-can-i-delete-a-farm-on-polkadotjs) - [I try to delete a node on the TF Dashboard, but it doesn’t work. Is there any other way to proceed that could work?](#i-try-to-delete-a-node-on-the-tf-dashboard-but-it-doesnt-work-is-there-any-other-way-to-proceed-that-could-work) - - [My 3Node has 2 ethernet ports in the back, with one written AMT above, what does it mean? Can I use this port to connect my 3Node to the ThreeFold Grid?](#my-3node-has-2-ethernet-ports-in-the-back-with-one-written-amt-above-what-does-it-mean-can-i-use-this-port-to-connect-my-3node-to-the-threefold-grid) - - [My 3Node is based on a the hardware Z600, Z620 or Z820, can I run it headless or without a GPU?](#my-3node-is-based-on-a-the-hardware-z600-z620-or-z820-can-i-run-it-headless-or-without-a-gpu) - - [Is it possible to add high-level GPU on rack servers to farm more TFT?](#is-it-possible-to-add-high-level-gpu-on-rack-servers-to-farm-more-tft) - [If I change farm, will my node IDs change on my 3Node servers?](#if-i-change-farm-will-my-node-ids-change-on-my-3node-servers) - - [Troubleshooting and Error Messages](#troubleshooting-and-error-messages) - - [Is it possible to access the Error Screen or Log Screen?](#is-it-possible-to-access-the-error-screen-or-log-screen) - - [What does it mean when I see, during the 3Node boot, the message: error = context deadline exceeded?](#what-does-it-mean-when-i-see-during-the-3node-boot-the-message-error--context-deadline-exceeded) - - [How can I fix the error messages: "context deadline exceeded" accompanied with "node is behind acceptable delay with timestamp"?](#how-can-i-fix-the-error-messages-context-deadline-exceeded-accompanied-with-node-is-behind-acceptable-delay-with-timestamp) - - [I try to boot a 3Node, but I get the error: "No Route to Host on Linux". What does it mean?](#i-try-to-boot-a-3node-but-i-get-the-error-no-route-to-host-on-linux-what-does-it-mean) - - [How can I fix the error: "Network configuration succeed but Zero-OS kernel could not be downloaded" when booting a 3Node?](#how-can-i-fix-the-error-network-configuration-succeed-but-zero-os-kernel-could-not-be-downloaded-when-booting-a-3node) - - [Using SAS disks, I get the error; "No ssd found, failed to register". What can I do to fix this?](#using-sas-disks-i-get-the-error-no-ssd-found-failed-to-register-what-can-i-do-to-fix-this) - - [When booting a 3Node, how to fix the error: "no disks: registration failed"?](#when-booting-a-3node-how-to-fix-the-error-no-disks-registration-failed) - - [My SSD is sometimes detected as HDD by Zero-OS when there is a reboot. Is there a fix or a way to test the SSD disk?](#my-ssd-is-sometimes-detected-as-hdd-by-zero-os-when-there-is-a-reboot-is-there-a-fix-or-a-way-to-test-the-ssd-disk) - - [When booting a 3Node, I get the message: failed to register node: failed to create node: failed to submit extrinsic: Invalid Transaction: registration failed. What could fix this?](#when-booting-a-3node-i-get-the-message-failed-to-register-node-failed-to-create-node-failed-to-submit-extrinsic-invalid-transaction-registration-failed-what-could-fix-this) - - [I try to boot a 3Node, but I get the message no route with default gateway found. What does it mean?](#i-try-to-boot-a-3node-but-i-get-the-message-no-route-with-default-gateway-found-what-does-it-mean) - - [I have trouble connecting the 3Node to the Grid with a 10GB NIC card. What can I do?](#i-have-trouble-connecting-the-3node-to-the-grid-with-a-10gb-nic-card-what-can-i-do) - - [I switch the ethernet cable to a different port when my 3Node was running. Internet connection is lost. What can I do?](#i-switch-the-ethernet-cable-to-a-different-port-when-my-3node-was-running-internet-connection-is-lost-what-can-i-do) - - [I get the error Certificate is not yet valid when booting my 3Node server, what can I do?](#i--get-the-error-certificate-is-not-yet-valid-when-booting-my-3node-server-what-can-i-do) - - [When running wipefs to wipe my disks on Linux, I get either of the following errors: "syntax error near unexpected token" or "Probing Initialized Failed". Is there a fix?](#when-running-wipefs-to-wipe-my-disks-on-linux-i-get-either-of-the-following-errors-syntax-error-near-unexpected-token-or-probing-initialized-failed-is-there-a-fix) - - [I did a format on my SSD disk, but Zero-OS still does not recognize them. What's wrong?](#i-did-a-format-on-my-ssd-disk-but-zero-os-still-does-not-recognize-them-whats-wrong) - - [I have a Dell Rx10 server - R610, 710, 910. When I boot Zero-OS I get the message Probing EDD and the 3Node doesn't boot from there. What can I do?](#i-have-a-dell-rx10-server---r610-710-910-when-i-boot-zero-os-i-get-the-message-probing-edd-and-the-3node-doesnt-boot-from-there-what-can-i-do) - - [My 3Node doesn't boot properly without a monitor plugged in. What can I do?](#my-3node-doesnt-boot-properly-without-a-monitor-plugged-in-what-can-i-do) - - [My 3Node is running on the Grid, but when I plugged in the monitor, it states: Disabling IR #16. Is there a problem?](#my-3node-is-running-on-the-grid-but-when-i-plugged-in-the-monitor-it-states-disabling-ir-16-is-there-a-problem) - - [My 3Node won't boot without disabling the Secure Boot option, is it safe?](#my-3node-wont-boot-without-disabling-the-secure-boot-option-is-it-safe) - - [When I tried to boot my 3Node, at some point the screen went black, with or without a blinking hyphen or dash. What could cause this and what could I do to resolve the issue?](#when-i-tried-to-boot-my-3node-at-some-point-the-screen-went-black-with-or-without-a-blinking-hyphen-or-dash-what-could-cause-this-and-what-could-i-do-to-resolve-the-issue) - - [My 3Nodes go offline after a modem reboot. Is there a way to prevent this?](#my-3nodes-go-offline-after-a-modem-reboot-is-there-a-way-to-prevent-this) - - [When I boot my 3Node, it reaches the Welcome to Zero-OS window, but it doesn't boot properly and there's an error message: failed to load object : type substrate..., what can I do?](#when-i-boot-my-3node-it-reaches-the-welcome-to-zero-os-window-but-it-doesnt-boot-properly-and-theres-an-error-message-failed-to-load-object--type-substrate-what-can-i-do) - - [When I try to access iDRAC on a web browswer, even with protected mode off, I get the error The webpage cannot be found, what can I do?](#when-i-try-to-access-idrac-on-a-web-browswer-even-with-protected-mode-off-i-get-the-error-the-webpage-cannot-be-found-what-can-i-do) - - [When booting the 3Node, I get the error Network interface detected but autoconfiguration failed. What can I do?](#when-booting-the-3node-i-get-the-error-network-interface-detected-but-autoconfiguration-failed-what-can-i-do) - - [When I boot my Dell server, I get the message: All of the disks from your previous configuration are gone... Press any key to continue or 'C' to load the configuration utility. What can I do?](#when-i-boot-my-dell-server-i-get-the-message-all-of-the-disks-from-your-previous-configuration-are-gone-press-any-key-to-continue-or-c-to-load-the-configuration-utility-what-can-i-do) - - [I have a Dell R620. In Zero-OS, I get the failure message No network card found and then the 3Node reebots after few seconds. The same happens for every LAN input. What can I do?](#i-have-a-dell-r620-in-zero-os-i-get-the-failure-message-no-network-card-found-and-then-the-3node-reebots-after-few-seconds-the-same-happens-for-every-lan-input-what-can-i-do) - - [I am using freeDos to crossflash my raid controller on a Dell server, but I can't see the RAID controller with the Command Info. What can I do?](#i-am-using-freedos-to-crossflash-my-raid-controller-on-a-dell-server-but-i-cant-see-the-raid-controller-with-the-command-info-what-can-i-do) - - [Can I use a VGA to HDMI adaptor to connect a TV screen or monitor to the 3Node? I tried to boot a 3Node with a VGA to HDMI adaptor but the boot fails, what can I do?](#can-i-use-a-vga-to-hdmi-adaptor-to-connect-a-tv-screen-or-monitor-to-the-3node-i-tried-to-boot-a-3node-with-a-vga-to-hdmi-adaptor-but-the-boot-fails-what-can-i-do) - - [When I try to boot my 3Node, the fans start spinning fast with a loud noise and the screen is black. What can I do to resolve this?](#when-i-try-to-boot-my-3node-the-fans-start-spinning-fast-with-a-loud-noise-and-the-screen-is-black-what-can-i-do-to-resolve-this) - - [When booting Zero-OS with IPV6 configurations, I get the errors (1) dial tcp: address IPV6-address too many columns in address and (2) no pools matches key: not routable. What can I do to fix this issue?](#when-booting-zero-os-with-ipv6-configurations-i-get-the-errors-1-dial-tcp-address-ipv6-address-too-many-columns-in-address-and-2-no-pools-matches-key-not-routable-what-can-i-do-to-fix-this-issue) - - [When booting a 3Node, Zero-OS downloads fine, but then I get the message: error no route with default gateway found, and the message: info check if interface has a cable plugged in. What could fix this?](#when-booting-a-3node-zero-os-downloads-fine-but-then-i-get-the-message-error-no-route-with-default-gateway-found-and-the-message-info-check-if-interface-has-a-cable-plugged-in-what-could-fix-this) - - [How can I update Dell and HP servers to Intel E5-2600v2, E5-2400v2 and E5-4600v2, when applicable?](#how-can-i-update-dell-and-hp-servers-to-intel-e5-2600v2-e5-2400v2-and-e5-4600v2-when-applicable) - - [How can I update the firmware and driver of a Dell PowerEdge server?](#how-can-i-update-the-firmware-and-driver-of-a-dell-poweredge-server) - - [When I boot a 3Node in UEFI mode, it gets stuck at: Initializing Network Device, is there a way to fix this?](#when-i-boot-a-3node-in-uefi-mode-it-gets-stuck-at-initializing-network-device-is-there-a-way-to-fix-this) - - [When I boot my 3Node, it gets stuck during the Zero-OS download. It never reaches 100%. What can I do to fix this issue?](#when-i-boot-my-3node-it-gets-stuck-during-the-zero-os-download-it-never-reaches-100-what-can-i-do-to-fix-this-issue) - - [When booting a 3Node, I get the error=“context deadline exceeded” module=network error=failed to initialize rmb api failed to initialized admin mw: failed to get farm: farm not found: object not found. What can I do to fix this issue?](#when-booting-a-3node-i-get-the-errorcontext-deadline-exceeded-modulenetwork-errorfailed-to-initialize-rmb-api-failed-to-initialized-admin-mw-failed-to-get-farm-farm-not-found-object-not-found-what-can-i-do-to-fix-this-issue) - [ThreeFold Grid and Data](#threefold-grid-and-data) - [How is the farming minting reward calculated? Is the Grid always monitoring my 3Node?](#how-is-the-farming-minting-reward-calculated-is-the-grid-always-monitoring-my-3node) - [How does communication happen on the ThreeFold Grid at the 3Node's level?](#how-does-communication-happen-on-the-threefold-grid-at-the-3nodes-level) @@ -261,15 +210,6 @@ - [How does the Telegram Status Bot get information from my 3Node? My 3Node is online on the ThreeFold Node Finder, but offline on the Telegram Status Bot, is this normal?](#how-does-the-telegram-status-bot-get-information-from-my-3node-my-3node-is-online-on-the-threefold-node-finder-but-offline-on-the-telegram-status-bot-is-this-normal) - [I noticed that when I reboot my 3Node, the uptime counter on the ThreeFold Node Finder goes back to zero. Does it mean I lose uptime and the uptime start over again when I reboot the 3Node?](#i-noticed-that-when-i-reboot-my-3node-the-uptime-counter-on-the-threefold-node-finder-goes-back-to-zero-does-it-mean-i-lose-uptime-and-the-uptime-start-over-again-when-i-reboot-the-3node) - [One of my nodes is showing the wrong location. Any problem with that?](#one-of-my-nodes-is-showing-the-wrong-location-any-problem-with-that) - - [Memory](#memory) - - [Can I use different type of RAM for the same 3Node?](#can-i-use-different-type-of-ram-for-the-same-3node) - - [How can I know if the memory I am buying is correct for my specific hardware?](#how-can-i-know-if-the-memory-i-am-buying-is-correct-for-my-specific-hardware) - - [What do the terms RDIMM, LDIMM, UDIMM, LRDIMM, FBDIMM mean when it comes to RAM memory sticks?](#what-do-the-terms-rdimm-ldimm-udimm-lrdimm-fbdimm-mean-when-it-comes-to-ram-memory-sticks) - - [What is the difference between ECC and non-ECC memory?](#what-is-the-difference-between-ecc-and-non-ecc-memory) - - [How can I change the RAM memory sticks on my 3Nodes? How can I achieve dual channel configuration with sticks of RAM?](#how-can-i-change-the-ram-memory-sticks-on-my-3nodes-how-can-i-achieve-dual-channel-configuration-with-sticks-of-ram) - - [What does RAM mean?](#what-does-ram-mean) - - [What does DIMM mean when it comes to RAM sticks?](#what-does-dimm-mean-when-it-comes-to-ram-sticks) - - [I have 24 DIMMS ram slots on my server. Can I use them all?](#i-have-24-dimms-ram-slots-on-my-server-can-i-use-them-all) - [Ask a Question to the ThreeFold Community](#ask-a-question-to-the-threefold-community) *** @@ -468,28 +408,6 @@ The TF Connect App supports Stellar and TF Chain wallets. The app by default can Yes this is normal. Farms created on TF Chain instead of the TF Connect App will appear in *Other v3 farms*. - -### I am trying to access my wallet in the ThreeFold Connect App. It worked fine before, but now I just get a white screen. What does it mean and what can I do? - -On the TF Connect App, when you get a white screen, it means that there is a connection issue. It can help to try other networks; maybe try switching between ethernet cable or wifi. Or you can also try it later when the connection might be more stable. - - - -### When I open the ThreeFold Connect App, I get the error: Error in initialization in Flagsmith. How can I fix this issue? - -To fix this Flagsmith error message on the ThreeFold Connect app, you can try the following methods: - -* Check your internet connection -* Update your phone current operating system (OS) version -* Update the date and time on your phone - - -### Apart form the ThreeFold Connect App Wallet, how can I check my TFT balance? - -You can go on [Stellar.Expert](https://stellar.expert). With your wallet address, you will be able to see your transactions and wallet details. - - - ### Is it possible to export the transaction history of a wallet to a CSV file? Yes, every blockchain has an explorer function and these explorer functions allow you to see transactions and export them. TFT is on 2 chains at the moment: Stellar and Polkadot. @@ -620,15 +538,6 @@ There are three distinctly named endpoints or fields that exist in the back end * Power state * this is a field that only exists on GraphQL, and it's the self reported power state of the node. This only goes to "down" if the node shut itself down at request of the Farmerbot. - - -### I do not remember the name - ThreeFold 3bot ID - associated with my seed phrase on the ThreeFold Connect app. Can I recover my TF Connect app account with only the seed phrase and not the name, 3bot ID, associated with it? - -If you forgot the name associated with your seed phrase on the TF Connect app, you can always create a new identity (ThreeFold 3bot ID) and import your wallet using the old seed phrase. - -Since the Connect App is also used for identity and authentication, you need both the name (3bot ID) and seed phrase to fully recover your account. The wallet is only linked to the seed phrase and not the name (3bot ID). - - # USERS FAQ ## TF Grid Functionalities @@ -1072,24 +981,6 @@ This should fix the issue. This error happens if you deployed a workload on the TF Dashboard with the same deployment name of a previous deployment. In general, you can simply refresh the TF Dashboard browser page and/or change the deployment name for a new one. This should fix the issue. - -## ThreeFold Connect App - -### TF Connect App is now asking for a 4-digit password (PIN). I don't remember it as I usually use touch or face ID to unlock the app. What can I do? - -When you set up your the app, you are asked a 4-digit password (PIN). After some time, the app will be asking for this PIN when users may have been exclusively using touch/face ID. You can reset it by recovering the account with your seedphrase. - - -### Is there a way to have more than one wallet in TF Connect App? - -Yes, this is perfectly possible. You can have multiple wallets in the TF Connect app. You can have multiple wallets for the Stellar network and multiple wallets for Polkadot Substrate. - -For example, you can create a wallet on the Stellar Blockchain and import it on TF Connect App with the function *Import Wallet*. Just copy the seedphrase and it will be imported in TF Connect App. - -Note: There will not be an automatic function in the app to create a new wallet. You must do it manually. - - - ### What is the difference between 10.x.y.z and 192.168.x.y addresses? The addresses 10.x.y.z and 192.168.x.y are on the private network. @@ -1309,14 +1200,6 @@ No, nodes only get deleted if the farm owner chooses to do so. Old "nodes" are r No, this is not possible. In the future, we will implement some features in order to allow the cleaning of unused farms. As of now, this is not possible. Also, an old farm does not take resources on the TF Grid, or very little. - -### On the ThreeFold Connect App, it says I need to migrate my Titan farm from V2 to V3. What do I have to do? How long does this take? - -To migrate, read [this documentation](https://forum.threefold.io/t/what-to-do-if-your-farm-is-still-on-grid-v2-closed/3761). - - - - ### How can I migrate my DIY farm from V2 to V3? Create a new [bootstrap image](https://bootstrap.grid.tf/) using your new V3 Farm ID. To create a new V3 Farm ID, you can use the ThreeFold Connect App or the ThreeFold Dashboard. @@ -1943,12 +1826,6 @@ It can be a good thing to change it when you buy an old desktop or server to mak You don't need to if you use a removable media (e.g. USB key) as a booting image. It is needed only if you boot from a PXE server on your network. You should keep this feature disabled. Enable it only if you know 100% what you are doing. Otherwise it might bring vulnerabilities in terms of network security. -### I want redundancy of power for my 3 nodes. I have two PSU on my Dell server. What can I do? - -Make sure you enable the Hot Spare feature. This feature is accessible in iDRAC Settings - Power Configuration. Other servers might have this function, with a different name and configuration. Check the server's manual for more details. - - - ### Why isn't there support for RAID? Does Zero-OS work with RAID? RAID is a technology that has brought resilience and security to the IT industry. But it has some limitations that we at ThreeFold did not want to get stuck in. We developed a different (and more efficient way to store data reliably. Please have a look [here](https://library.threefold.me/info/threefold#/cloud/threefold__cloud_products?id=storage-quantum-safe-filesystem). @@ -1956,24 +1833,11 @@ RAID is a technology that has brought resilience and security to the IT industry This Quantum Safe Storage overcomes some of the shortfalls of RAID and is able to work over multiple nodes geographically spread on the TF Grid. -### 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 ? - -Yes it is possible. "You can use the on board storage on a server without RAID. You can [re-flash](https://fohdeesha.com/docs/perc.html) the RAID card, turn on HBA/non-RAID mode, or install a different card. No need for RAID." @FLnelson It's usually easy to set servers such as a HP Proliant with the HBA mode. For Dell servers, you can either cross-flash the RAID controller with an “IT-mode-Firmware” (see this [video](https://www.youtube.com/watch?v=h5nb09VksYw)) or get a DELL H310-controller (which has the non-RAID option). Otherwise, you can install a NVME SSD with a PCIe adaptor, and turn off the RAID controller. - - - ### I have a 3Node rack server. Is it possible to use a M.2 to SATA adapter in order to put the M.2 SATA disk in the HDD bay onboard storage? Yes, it is possible. You will most probably need to bypass the RAID controller for Zero-OS to access properly the onboard storage. See previous question. - -### My 3Node uses only PCIe adapters and SSD NVME disks. Do I need the RAID controller on? - -The onboard RAID controller is not linked to your PCIe SSDs. In this case, you can switch the RAID controller off. - - - ### Can I change the name of my farm on polkadot.js? It’s possible to rename farms through the Polkadot UI. For mainnet, use [this link](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftfchain.grid.tf#/extrinsics). @@ -2003,359 +1867,11 @@ It’s possible to delete nodes through the Polkadot UI. For mainnet, use [this 5. Finally, click on the bottom *Submit Transaction* at the bottom right of the screen - -### My 3Node has 2 ethernet ports in the back, with one written AMT above, what does it mean? Can I use this port to connect my 3Node to the ThreeFold Grid? - -First, let's define the term AMT. It means: Active Management Technology. Without going into too much details, it is to remotely access servers via the network at the BIOS level. Thus, you should plug the ethernet cable in the port next to AMT, and not into the AMT port. You can explore AMT properties if you want remote access to your server. - - - -### My 3Node is based on a the hardware Z600, Z620 or Z820, can I run it headless or without a GPU? - -For the Z600, there is a great [video on youtube](https://www.youtube.com/watch?app=desktop&v=JgBYbaT-N-w). - -For the Z620 and the Z820, you need to do some variation on the video above. In the BIOS, go in File, then Replicated Setup, and select Save to Removable Storage Device. This will save a text file on your USB key. Then, in the text file, go to Headless Mode and remove the * in front of Disable and put it in front of Enable. Save the file and then go back into BIOS. Now go in File, then Replicated Setup, and select Restore from Removable Storage Device. - -Running your 3Node without the GPU can save some power consumption as well as giving you one more extra slot for other hardware. - - -### Is it possible to add high-level GPU on rack servers to farm more TFT? - -Some farmers had success installing GPUs such as the RTX3080 in servers as small as 2U (such as R730). Connections such as 250W 8-pin plug are needed on each riser. Generally, tower servers have more space to add high-level GPU. - -Note: GPU farming will be implemented in the future. - - - ### If I change farm, will my node IDs change on my 3Node servers? You can move 3Nodes between farms without losing the node IDs. You simply need to change the boot media with the new farm ID and then reboot the 3Node. The 3Node will have the same node ID but it will now be associated with the new farm ID. -## Troubleshooting and Error Messages - -### Is it possible to access the Error Screen or Log Screen? - -Yes! On the Zero-OS console, hit alt-F2 to open up the Error/Log Screen, and hit alt-F3 to go back to the main screen. - - -### What does it mean when I see, during the 3Node boot, the message: error = context deadline exceeded? - -In general, this message means that the ThreeFold Grid asked something to your 3Node, and your 3Node could not respond fast enough. It is usually necessary to read the following error message to understand the situation more specifically. - -### How can I fix the error messages: "context deadline exceeded" accompanied with "node is behind acceptable delay with timestamp"? - -This often indicates that the real-time clock of the system is not synced with current time. There have been different fixes reported to this issue. - -You can boot the node using a Ubuntu live image to sync the hardware time. After that, you can reboot the node and it should boot normally. - -You can fix this manually in the BIOS. Go to the BIOS settings and adjust the **Time** and **Date** settings. - -You can also try to adjust the clock by NTP over the network, if it applies to your case. - -### I try to boot a 3Node, but I get the error: "No Route to Host on Linux". What does it mean? - -There are many potential answers to this. Perhaps the Host is offline, the service isn't running. This is usually the reason with TF Grid. It means the Grid is not responsive. In this case, try to boot the 3Node later. If it persists ask TF Support. - -There can also be other reasons. You might have connected to the wrong port. Perhaps you have configured iptables to block connections on that port. Your DNS might be improperly configured. You might have an Incorrect Network or Host Configuration. Many troubleshoots are possible. Here's a [good place to start](https://www.maketecheasier.com/fix-no-route-to-host-error-linux/). - - - -### How can I fix the error: "Network configuration succeed but Zero-OS kernel could not be downloaded" when booting a 3Node? - -To fix the error "Network configuration succeed but Zero-OS kernel could not be downloaded", you can try to restart the router and reboot the 3Node. This usually fixes the issue. If this doesn't work, check if the router is still functional. The cause of this issue might be that your router is broken. - - - -### Using SAS disks, I get the error; "No ssd found, failed to register". What can I do to fix this? - -First make sure to wipe the disks and then boot your 3Node. If you've wiped the disks and it doesn't work, it's been reported that using the command "diskpart clean command" on Windows can fix this issue. - - - -### When booting a 3Node, how to fix the error: "no disks: registration failed"? - -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@@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; - * 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 - ``` - - -### My SSD is sometimes detected as HDD by Zero-OS when there is a reboot. Is there a fix or a way to test the SSD disk? - -If your SSD disk shows as HDD, usually you can reboot the 3Node and Z-OS adjusts correctly. - -Anyone experiencing frequently this issue where Z-OS sometimes detects an SSD as HDD can try the following: - -* Boot up a live Ubuntu Desktop image -* Run the benchmark utility within the Disks app -* Check if the seektime of the disk is sufficient for Z-OS - * If the seektime is above 0.5ms, Z-OS will consider your SSD as HDD - -**Detailed Steps:** - -* 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** -* Select your disk -* Click on the tree dots menu -* Select **Benchmark Disk...** - * Use the default parameters - * **Transfer rate**: This is not relevant for our current test - * You can set to it to minimum (e.g. 2) - * **Sample size**: 10 MB is sufficient -* Check the average access time on the [ThreeFold repository](https://www.github.com/threefoldtech/seektime) - * Check seek time for HDD and SSD - * A SSD needs to be <=0.5ms -* If the result is above 0.5ms, this is why Z-OS doesn't recognize the disk properly - * You can then run diagnostics (e.g. smartmontools) - * If this is not fixable, you should change disk (e.g. take a more performing disk) - -Note: The green dots on the output represent seektime and that's what Z-OS is looking at. Specifically, it checks that the average seektime is below 0.5ms. If the seektime is above this, Z-OS will consider your SSD as HDD. - - - -### When booting a 3Node, I get the message: failed to register node: failed to create node: failed to submit extrinsic: Invalid Transaction: registration failed. What could fix this? - -The most probable fix to this error is simply to properly wipe your disk(s): - -* [Wipe your disks on Linux](#what-can-you-do-to-zero-out-your-disks-how-can-i-wipe-the-disks-of-my-3node-server-with-linux) - -* [Wipe your disks on Windows](#how-can-i-wipe-a-disk-with-windows) - - -### I try to boot a 3Node, but I get the message no route with default gateway found. What does it mean? - -First, let's see the main terms. Default gateway act as an access point to other networks, in this case the TF Grid, when there is a back and forth exchange of data packets. - -While the last question implied a communication problem from the Grid, this error message usually means that the 3Node has communication problem. In short, it has difficulty reaching the TF Grid. There are many ways to troubleshoot this error. First, let's give the most direct solution. Make sure you have a direct connection with your Internet Service Provider (ISP): your 3Node should be connected to a router or a switch via an ethernet cable. Wifi doesn't work. Make sure your DHCP is set correctly. - -If the problem persists, check the default gateway of your 3Node and then make sure your router can reach it. - -*See next Q+A for more a possible solution. - - - -### I have trouble connecting the 3Node to the Grid with a 10GB NIC card. What can I do? - -As of now, Zero-OS sometimes has trouble with 10GB NIC card. The easiest solution to this is to connect your 3Node with the 1GB NIC card. This should solve the issue. More fine tuning might be needed to get your 3Node to work with a 10GB NIC card. Future Zero-OS version might solve this issue. - - - -### I switch the ethernet cable to a different port when my 3Node was running. Internet connection is lost. What can I do? - -When your 3Node boots, Zero-OS marks the NIC port. This means you cannot change NIC port when your 3Node is running. You can either put back the ethernet cable in the initial NIC port, or reboot the 3Node. At boot, Zero-OS will marks the new NIC port as the main entry. - - - -### I get the error Certificate is not yet valid when booting my 3Node server, what can I do? - -Make sure your firmware is up to date. If necessary, reinstall it. You might have to install then re-install the firmware if your system is very old. - - - -### When running wipefs to wipe my disks on Linux, I get either of the following errors: "syntax error near unexpected token" or "Probing Initialized Failed". Is there a fix? - -Many different reasons can cause this issue. When you get that error, sometimes it is because your are trying to wipe your boot USB by accident. If this is not the case, and you really are trying to wipe the correct disk, here are some fixes to try out, with the disk `sda` as an example: - -* 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 wipefs -a /dev/sda - ``` - - - -### I did a format on my SSD disk, but Zero-OS still does not recognize them. What's wrong? - -Formatting is one thing, but to boot properly, Zero-OS needs to work on a completely wipe disk. Thus, make sure you [wipe your disks](#what-can-you-do-to-zero-out-your-disks-how-can-i-wipe-the-disks-with-linux). Formatting is not enough. - - - -### I have a Dell Rx10 server - R610, 710, 910. When I boot Zero-OS I get the message Probing EDD and the 3Node doesn't boot from there. What can I do? - -For the R610 and 710, you can simply re-flash the card. See [this link](https://fohdeesha.com/docs/perc.html) for more information. For the 910, you can’t re-flash the card. In this case, get a LSI Dell card and it should work. (They are cheap when you buy them used online.) - - -### My 3Node doesn't boot properly without a monitor plugged in. What can I do? - -First, try to disable the "Halt On" mode in BIOS. If you do not have this option, try simply enabling the Legacy Support (Dell BIOS for example). If this doesn't work, try to plug in a Dummy Plug/Headless Ghost/Display Emulator in your 3Node. This will simulate a plugged monitor. This should fix the problem. - - -### My 3Node is running on the Grid, but when I plugged in the monitor, it states: Disabling IR #16. Is there a problem? - -In general, you can simply ignore this error statement. This error is linked to the Nvidia binary driver. It simply means that your 3Node lost connection with the graphic card (by unplugging and replugging the monitor for example). - - -### My 3Node won't boot without disabling the Secure Boot option, is it safe? - -In the case where you want to boot Zero-OS, disabling Secure Boot option is safe. With Secure Boot disabled, it can be easier or even necessary when it comes to booting Zero-OS. Secure Boot is used when you want to lock the BIOS/UEFI settings. - - - -### When I tried to boot my 3Node, at some point the screen went black, with or without a blinking hyphen or dash. What could cause this and what could I do to resolve the issue? - -There is a possibility that this happens because you are booting your 3Node on a HDD. A 3Node needs a minimum of 500GB of SSD to work properly. - -Also, make sure that you are using the correct boot option (Legacy BIOS or UEFI) in the Settings and that it corresponds to the correct booting image on the ThreeFold Bootstrap page. - -This problem often arises when you plugged your disks in the wrong controller. For example, try unpluging the disks from the SAS controller, and plug them in the SATA controller. Also, disable the SAS controller if needed. - -In a Legacy BIOS boot, make sure Legacy is enabled and disable *Data Execution Prevention* if possible. - -Also, it might have to do with your RAID controller configuration. Make sure this is properly set. For example, configuring all the HDD disks into one logical disk can fix this problem, or re-flashing the RAID card can also help. - - - -### My 3Nodes go offline after a modem reboot. Is there a way to prevent this? - -Yes, there are many ways to prevent this. An easy solution is to set the DHCP server to reserve local IPs for the 3Nodes MAC addresses. - -This problem is also preventable if your router stays online during the modem reboot. - -Indeed, rebooting the 3Nodes is necessary when there are local IP changes, as 3Nodes are addressed a local IP addresses when they are booted. - -The DHCP will addresses any local IP address that is available when you are booting a 3Node. Reserving local IP addresses is a good TF farming practice. - - - -### When I boot my 3Node, it reaches the Welcome to Zero-OS window, but it doesn't boot properly and there's an error message: failed to load object : type substrate..., what can I do? - -Usually simply rebooting the 3Node fixes this problem. - - - -### When I try to access iDRAC on a web browswer, even with protected mode off, I get the error The webpage cannot be found, what can I do? - -Open iDRAC in the Internet Explorer emulator extension (IE Tab) in Chrome, then update iDRAC. It should work elsewhere then. Sometimes, it will be needed to add "ST1=code" at the end of the IE Tab url. - - - -### When booting the 3Node, I get the error Network interface detected but autoconfiguration failed. What can I do? - -First make sure your network cable is plugged in and that your DHCP is working and responding. If you change the NIC port of the ethernet cable, make sure to reboot the 3Node so Zero-OS can change the NIC port attribution. - -Some farmers reported that this got fixed by simply powering off the 3Node(s), the router and modem for 2 minutes then powering it all back on. Resetting the modem and router (switch on the hardware) in the process can also help. - -If this doesn't work, try to upgrade the firmware of the NIC and the motherboard. If this still doesn't work, the NIC card might be broken. Try with another NIC card. - - - -### When I boot my Dell server, I get the message: All of the disks from your previous configuration are gone... Press any key to continue or 'C' to load the configuration utility. What can I do? - -Many changes to your server can lead to this message. - -Usually, the easiest solution is to reset the disk configuration in iDRAC's configuration utility. - -What can causes this message: - -1. During a new installation, the cables connecting to your external storage are not wired to the correct ports. -2. Your RAID adapter has failed. -3. Your SAS cables are not plugged properly or are malfunctioning. - -Note: Resetting the configuration will destroy all data on all virtual disks. Make sure you know what you are doing! In doubt, ask the TF community. - - - -### I have a Dell R620. In Zero-OS, I get the failure message No network card found and then the 3Node reebots after few seconds. The same happens for every LAN input. What can I do? - -The first thing to try here is to boot the server in BIOS mode instead of UEFI mode. If this doesn't fix the problem, try the following. - -Sometimes, this happens when the firmwares of BIOS, iDRAC, Lifecycle Controller and NIC are incompatible to each other. The solution is then to update them all correctly. Some problems can arise in the process. - -First, you should try to do the updates using iDRAC as you can update both iDRAC and BIOS there. If this does not work, try to update separate, with a live-linux distro, the BIOS, iDRAC and Lifecycle Controller. Once this is done, the server should be able to do a liveupdate, https to dell support website, via lifecycle-controller. This would update the other components. For more details on this method, watch [this video](https://www.youtube.com/watch?v=ISA7j2BKgjI). - -Note: Some farmers have reported that the Broadcom NIC card does not work well for Zero-OS and that a standard Intel PCI NIC card replacement resolved the issue. This could be a more straightforward method if updating the firmwares doesn't resolve the issue. - - - -### I am using freeDos to crossflash my raid controller on a Dell server, but I can't see the RAID controller with the Command Info. What can I do? - -Turn on the raid controller in the BIOS, otherwise freeDos does not show you the raid controller with the command Info. - - - -### Can I use a VGA to HDMI adaptor to connect a TV screen or monitor to the 3Node? I tried to boot a 3Node with a VGA to HDMI adaptor but the boot fails, what can I do? - -This might work, but it has been reported by farmers that Zero-OS might have difficulties booting when this is done with a VGA/HDMI adaptor on a TV screen. This is most likely due to the TV screen not supporting the output once the system loaded into Zero-OS. The easy fix to this issue is to use a standard computer monitor with a VGA plug. - - - -### When I try to boot my 3Node, the fans start spinning fast with a loud noise and the screen is black. What can I do to resolve this? - -There may be several causes to this issue. You can try to remove all the RAM sticks, to clean the dust and then to reseat the RAM sticks. If it still doesn't resolve the issue, you can check the RAM sticks one by one to see if one is malfunctioning. This often resolves the issue. Also, some cables might not be properly connected. - - - -### When booting Zero-OS with IPV6 configurations, I get the errors (1) dial tcp: address IPV6-address too many columns in address and (2) no pools matches key: not routable. What can I do to fix this issue? - -This usually means that the IPV6 attributed is not valid. It is also often caused when the DNS configuration does not resolve IPV6 correctly. - -To fix this issue, it is often necessary to adjust the IPV6 settings related to the router and the modem. Confirming with your Internet service provider (ISP) that the IPV6 settings are properly configured could also be necessary to fix the issue. - - - - -### When booting a 3Node, Zero-OS downloads fine, but then I get the message: error no route with default gateway found, and the message: info check if interface has a cable plugged in. What could fix this? - -Make sure you have network stack enabled in BIOS. If so, check you ethernet port and make sure that it's clean. Also make sure the ethernet rj45 connectors are clean on both ends. If that does not work, verify the state of your SATA cables. If all this doesn't work, download and re-install Zero-OS. - - - -### How can I update Dell and HP servers to Intel E5-2600v2, E5-2400v2 and E5-4600v2, when applicable? - -There are many ressources online with steps on how to do this. You can check this [youtube video](https://www.youtube.com/watch?v=duzrULLtonM) on Dell and HP servers, as welll as this [documentation](https://ixnfo.com/en/hp-proliant-gen8-update-to-support-cpu-e5-2600v2-e5-2400v2-e5-4600v2.html) for HP Proliant Gen8. - - - -### How can I update the firmware and driver of a Dell PowerEdge server? - -Dell has excellen documentation for this. Read [this](https://www.dell.com/support/kbdoc/en-us/000128194/updating-firmware-and-drivers-on-dell-emc-poweredge-servers) for the detailed steps. - - - -### When I boot a 3Node in UEFI mode, it gets stuck at: Initializing Network Device, is there a way to fix this? - -In short, booting the 3Node in BIOS mode instead of UEFI mode usually fixes this issue. - -You can make bootable USB with the USB option of the [Zero-OS bootstrap image page](https://bootstrap.grid.tf/). Make sure to boot your server using BIOS and not UEFI. In the boot sequence, make the USB as your first choice to boot. - - - -### When I boot my 3Node, it gets stuck during the Zero-OS download. It never reaches 100%. What can I do to fix this issue? - -Here are some ways to troubleshoot your 3Node when it cannot download Zero-OS completely (to 100%): - -* Sometimes, just rebooting the 3Node and/or trying a little bit later can work. -* It can help to reboot the modem and the router. -* Make sure your BIOS/UEFI is up to date. Updating the BIOS/UEFI can help. -* It can also help to set the correct date and time. - - - -### When booting a 3Node, I get the error=“context deadline exceeded” module=network error=failed to initialize rmb api failed to initialized admin mw: failed to get farm: farm not found: object not found. What can I do to fix this issue? - -Usually, the simple fix to this issue is to make sure that your bootstrap image is on the same network as your farm. For example, if you created your farm on the Main net, you should use a Main net Zero-OS bootstrap image. - - - ## ThreeFold Grid and Data @@ -2409,71 +1925,6 @@ No. The only uptime you lose is the time your 3Node was offline from the ThreeFo ### One of my nodes is showing the wrong location. Any problem with that? The ThreeFold Node Finder is showing your ISP location. This is perfectly normal. - -## Memory - -### Can I use different type of RAM for the same 3Node? - -No. Always use the same type of RAM per 3Node. If you use RDIMM, go all RDIMM, etc. Check your hardware specifications to make sure you have the right type of memory. - - - -### How can I know if the memory I am buying is correct for my specific hardware? - -To be sure, look into the owner's manual of your specific computer. - -In general, you can go to [Memory.net](https://memory.net/) and look for your specific computer model. As general steps, select your computer's system in *By system*, then select the series and then select the specific model of the series. You will then see available memories to buy from memory.net. You can also simply read the documentation at the bottom. The memory type supported by your computer will be explained. Then you can buy the memory needed from any other computer store. - -For servers, you can check with Cloudninja's documentation [here](https://cloudninjas.com/pages/server-memory). Search for your specific hardware and look for the compatible memory. This reference is good for rack and tower servers. - - - -### What do the terms RDIMM, LDIMM, UDIMM, LRDIMM, FBDIMM mean when it comes to RAM memory sticks? - -Well first, the DIMM means dual inline memory module. - -* U stands for or unregistered (or unbuffered). - -* R stands for registered memory. - -* LR stands for load-reduced. - -* FB stands for fully-buffered. - - - -### What is the difference between ECC and non-ECC memory? - -ECC means error correction code memory. This type of memory can detect and correct data corruption. Non-ECC mostly cannot detect nor correct, but some can detect, but never correct data corruption. Check your hardware specifications to make sure you have the right type of memory (ECC or non-ECC). - - -### How can I change the RAM memory sticks on my 3Nodes? How can I achieve dual channel configuration with sticks of RAM? - -First, always use RAM sticks of the same size and type. It should be noted on your motherboard which slots to populate first. As a general guide, there is usually 2 slots A and B, with each 2 memory stick entries. You must then install the ram sticks on A1 and B1 in order to achieve dual channel, then A2 and B2 if you have more (visual order: A1 A2 B1 B2). - -> Example: You want to start with your largest sticks, evenly distributed between both processors and work your way down to your smallest. Let's take an example with 2 processors as well as 4x 16GB sticks and 4x 8GB sticks. The arrangement would be A1-16GB, B1-16GB, A2-16GB, B2-16GB, A3-8GB, B3-8GB, A4-8GB, B4-8GB. Avoid odd numbers as well. You optimally want pairs. So if you only have 5x 8GB sticks, only install 4 until you have an even 6. - - - -### What does RAM mean? - -RAM means random access memory. Those type of memory can be read and changed in any order. - - - - -### What does DIMM mean when it comes to RAM sticks? - -It means *dual in-line memory module*. This type of computer memory is natively 64 bits, enabling fast data transfer. - - - -### I have 24 DIMMS ram slots on my server. Can I use them all? - -Be careful when installing memory on a server. Always check your server's documentation to make sure your RAM sticks combination are correct. - -For example, on the Dell R720, you can have 24x16gb RAM ECC sticks, but it can only handle 16 Quad ranked DIMMs. In this case, you can fill up all slots with registered DIMMs if you have a maximum of 4 quad DIMMS ranked on each CPU. - # Ask a Question to the ThreeFold Community If you have any question, you can ask the ThreeFold community via the ThreeFold forum or the ThreeFold Telegram channels: diff --git a/collections/farmers/3node_building/4_wipe_all_disks.md b/collections/farmers/3node_building/4_wipe_all_disks.md index bcc5005..51c3296 100644 --- a/collections/farmers/3node_building/4_wipe_all_disks.md +++ b/collections/farmers/3node_building/4_wipe_all_disks.md @@ -7,7 +7,8 @@ - [1. Create a Linux Bootstrap Image](#1-create-a-linux-bootstrap-image) - [2. Boot Linux in *Try Mode*](#2-boot-linux-in-try-mode) - [3. Use wipefs to Wipe All the Disks](#3-use-wipefs-to-wipe-all-the-disks) -- [Troubleshooting](#troubleshooting) + - [SATA Disks](#sata-disks) + - [NVMe Disks](#nvme-disks) *** @@ -27,12 +28,11 @@ It only takes a few steps to wipe all the disks of a 3Node. ThreeFold runs its own OS, which is Zero-OS. You thus need to start with completely wiped disks. Note that ALL disks must be wiped. Otherwise, Zero-OS won't boot. -An easy method is to simply download a Linux distribution and wipe the disk with the proper command line in the Terminal. +An easy method is to simply download a Linux distribution and wipe the disks by running simple commands on the command-line interface. We will show how to do this with Ubuntu 20.04. LTS. This distribution is easy to use and it is thus a good introduction for Linux, in case you haven't yet explored this great operating system. - ## 1. Create a Linux Bootstrap Image Download the Ubuntu 20.04 ISO file [here](https://releases.ubuntu.com/20.04/) and burn the ISO image on a USB key. Make sure you have enough space on your USB key. You can also use other Linux Distro such as [GRML](https://grml.org/download/), if you want a lighter ISO image. @@ -40,7 +40,6 @@ Download the Ubuntu 20.04 ISO file [here](https://releases.ubuntu.com/20.04/) an The process here is the same as in section [Burning the Bootstrap Image](./2_bootstrap_image.md#burn-the-zero-os-bootstrap-image), but with the Linux ISO instead of the Zero-OS ISO. [BalenaEtcher](https://www.balena.io/etcher/) is recommended as it formats your USB in the process, and it is available for MAC, Windows and Linux. - ## 2. Boot Linux in *Try Mode* When you boot the Linux ISO image, make sure to choose *Try Mode*. Otherwise, it will install Linux on your computer. You do not want this. @@ -49,58 +48,52 @@ When you boot the Linux ISO image, make sure to choose *Try Mode*. Otherwise, it ## 3. Use wipefs to Wipe All the Disks -When you use wipefs, you are removing all the data on your disk. Make sure you have no important data on your disks, or make sure you have copies of your disks before doing this operation, if needed. +We will now use `wipefs` to remove all the data on the disks. -Once Linux is booted, go into the terminal and write the following command lines. +> Important: Make sure that you have no important data on your disks, or make sure that you have copies of your disks before proceeding. -First, you can check the available disks by writing in a terminal or in a shell: +Once Linux is booted, open the terminal. + +First, you can check the available disks by writing the command: ``` lsblk ``` -To see what disks are connected, write this command: +The types of disk you can see are: + +- `sdX` + - SATA type + - e.g. `sda` + - Note: It can be an SSD disk or a USB key +- `nvmeX` + - NVMe type + - e.g. `nvme0n1` + +### SATA Disks + +To wipe one specific SATA disk at a time, use the following command by replacing `sdX` with the specific disk (e.g. `sdb`): ``` -fdisk -l +sudo wipefs -af /dev/sdX ``` -If you want to wipe one specific disk, here we use *sda* as an example, write this command: +To wipe all SATA disks (except the Linux distro USB disk you are currently using to run Ubuntu in *Try Mode*), take note of the Linux distro USB disk (e.g. `sdb`) and replace `sdX` with it in the following line: ``` -sudo wipefs -a /dev/sda +sudo for i in /dev/sd*; do if [ "$i"!= "/dev/sdX"* ]; then wipefs -af $i; fi; done ``` -And replace the "a" in sda by the letter of your disk, as shown when you did *lsblk*. The term *sudo* gives you the correct permission to do this. +### NVMe Disks -To wipe all the disks in your 3Node, write the command: +To wipe one specific NVMe disk at a time, use the following command by replacing `nvmeX` with the specific disk (e.g. `nvme0n1`) : ``` -sudo for i in /dev/sd*; do wipefs -a $i; done +sudo wipefs -af /dev/nvmeX ``` -If you have any `fdisk` entries that look like `/dev/nvme`, you'll need to adjust the command line. - -For a nvme disk, here we use *nvme0* as an example, write: +To wipe all NVMe disks, use the following line: ``` -sudo wipefs -a /dev/nvme0 -``` - -And replace the "0" in nvme0 by the number corresponding to your disk, as shown when you did *lsblk*. - -To wipe all the nvme disks, write this command line: - -``` -sudo for i in /dev/nvme*; do wipefs -a $i; done -``` - -## Troubleshooting - -If you're having issues wiping the disks, you might need to use **--force** or **-f** with wipefs (e.g. **sudo wipefs -af /dev/sda**). - -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. [Read the FAQ](faq@@faq) for more information. - - +sudo for i in /dev/nvme*; do wipefs -af $i; done +``` \ No newline at end of file diff --git a/collections/farmers/farmerbot/farmerbot_information.md b/collections/farmers/farmerbot/farmerbot_information.md index 30ffc0d..ac4b80b 100644 --- a/collections/farmers/farmerbot/farmerbot_information.md +++ b/collections/farmers/farmerbot/farmerbot_information.md @@ -92,7 +92,7 @@ Note that any argument containing spaces needs to be wrapped in quotes (e.g. mne - `start`: to start (power on) a node ```bash -farmerbot start --node -m "" -n dev -d +farmerbot start --node -m "" -n -d ``` Where: @@ -112,7 +112,7 @@ Global Flags: - `start all`: to start (power on) all nodes in a farm ```bash -farmerbot start all --farm -m "" -n dev -d +farmerbot start all --farm -m "" -n -d ``` Where: diff --git a/collections/farmers/farmers.md b/collections/farmers/farmers.md index 3be4ada..5f7202b 100644 --- a/collections/farmers/farmers.md +++ b/collections/farmers/farmers.md @@ -32,6 +32,8 @@ To buy a certified node from an official ThreeFold vendor, check the [ThreeFold - [Quick Guide](farmerbot_quick.md) - [Additional Information](farmerbot_information.md) - [Minting and the Farmerbot](farmerbot_minting.md) +- [Node Status Bot](node_status_bot.md) +- [Farming Troubleshooting](farming_troubleshooting.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/farmers_book_toc.md b/collections/farmers/farmers_book_toc.md new file mode 100644 index 0000000..334d66c --- /dev/null +++ b/collections/farmers/farmers_book_toc.md @@ -0,0 +1,34 @@ +# ThreeFold Farmers Manual + +This manual covers all practical information on how to become a cloud service provider (farmer) on the ThreeFold Grid. + +

Table of Contents

+ +- [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) + - [Farming Requirements](farming_requirements.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) +- [Node Status Bot](node_status_bot.md) +- [Farming Troubleshooting](farming_troubleshooting.md) + +> 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. \ No newline at end of file diff --git a/collections/farmers/farming_troubleshooting.md b/collections/farmers/farming_troubleshooting.md new file mode 100644 index 0000000..9b5fe2d --- /dev/null +++ b/collections/farmers/farming_troubleshooting.md @@ -0,0 +1,507 @@ +

Farming Troubleshooting

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [General Troubleshooting Process](#general-troubleshooting-process) +- [Build Troubleshooting](#build-troubleshooting) + - [Set the BIOS](#set-the-bios) + - [BIOS Troubleshooting](#bios-troubleshooting) + - [When running wipefs to wipe my disks on Linux, I get either of the following errors: "syntax error near unexpected token" or "Probing Initialized Failed". Is there a fix?](#when-running-wipefs-to-wipe-my-disks-on-linux-i-get-either-of-the-following-errors-syntax-error-near-unexpected-token-or-probing-initialized-failed-is-there-a-fix) + - [Disk Not Recognized by Zero-OS](#disk-not-recognized-by-zero-os) + - [Onboard Storage](#onboard-storage) + - [When I tried to boot my 3Node, at some point the screen went black, with or without a blinking hyphen or dash. What could cause this and what could I do to resolve the issue?](#when-i-tried-to-boot-my-3node-at-some-point-the-screen-went-black-with-or-without-a-blinking-hyphen-or-dash-what-could-cause-this-and-what-could-i-do-to-resolve-the-issue) + - [I get the error Certificate is not yet valid when booting my 3Node server, what can I do?](#i--get-the-error-certificate-is-not-yet-valid-when-booting-my-3node-server-what-can-i-do) + - [My SSD is sometimes detected as HDD by Zero-OS when there is a reboot. Is there a fix or a way to test the SSD disk?](#my-ssd-is-sometimes-detected-as-hdd-by-zero-os-when-there-is-a-reboot-is-there-a-fix-or-a-way-to-test-the-ssd-disk) + - [My 3Node uses only PCIe adapters and SSD NVME disks. Do I need the RAID controller on?](#my-3node-uses-only-pcie-adapters-and-ssd-nvme-disks-do-i-need-the-raid-controller-on) + - [My 3Node has 2 ethernet ports in the back, with one written AMT above, what does it mean? Can I use this port to connect my 3Node to the ThreeFold Grid?](#my-3node-has-2-ethernet-ports-in-the-back-with-one-written-amt-above-what-does-it-mean-can-i-use-this-port-to-connect-my-3node-to-the-threefold-grid) + - [When I boot my Dell server, I get the message: All of the disks from your previous configuration are gone... Press any key to continue or 'C' to load the configuration utility. What can I do?](#when-i-boot-my-dell-server-i-get-the-message-all-of-the-disks-from-your-previous-configuration-are-gone-press-any-key-to-continue-or-c-to-load-the-configuration-utility-what-can-i-do) + - [When booting a 3Node, how to fix the error: "no disks: registration failed"?](#when-booting-a-3node-how-to-fix-the-error-no-disks-registration-failed) + - [I have trouble connecting the 3Node to the Grid with a 10GB NIC card. What can I do?](#i-have-trouble-connecting-the-3node-to-the-grid-with-a-10gb-nic-card-what-can-i-do) + - [What does it mean when I see, during the 3Node boot, the message: error = context deadline exceeded?](#what-does-it-mean-when-i-see-during-the-3node-boot-the-message-error--context-deadline-exceeded) + - [How can I fix the error messages: "context deadline exceeded" accompanied with "node is behind acceptable delay with timestamp"?](#how-can-i-fix-the-error-messages-context-deadline-exceeded-accompanied-with-node-is-behind-acceptable-delay-with-timestamp) + - [I try to boot a 3Node, but I get the error: "No Route to Host on Linux". What does it mean?](#i-try-to-boot-a-3node-but-i-get-the-error-no-route-to-host-on-linux-what-does-it-mean) + - [How can I fix the error: "Network configuration succeed but Zero-OS kernel could not be downloaded" when booting a 3Node?](#how-can-i-fix-the-error-network-configuration-succeed-but-zero-os-kernel-could-not-be-downloaded-when-booting-a-3node) + - [Using SAS disks, I get the error; "No ssd found, failed to register". What can I do to fix this?](#using-sas-disks-i-get-the-error-no-ssd-found-failed-to-register-what-can-i-do-to-fix-this) + - [When booting a 3Node, I get the message: failed to register node: failed to create node: failed to submit extrinsic: Invalid Transaction: registration failed. What could fix this?](#when-booting-a-3node-i-get-the-message-failed-to-register-node-failed-to-create-node-failed-to-submit-extrinsic-invalid-transaction-registration-failed-what-could-fix-this) + - [I did a format on my SSD disk, but Zero-OS still does not recognize them. What's wrong?](#i-did-a-format-on-my-ssd-disk-but-zero-os-still-does-not-recognize-them-whats-wrong) + - [My 3Node doesn't boot properly without a monitor plugged in. What can I do?](#my-3node-doesnt-boot-properly-without-a-monitor-plugged-in-what-can-i-do) + - [My 3Node won't boot without disabling the Secure Boot option, is it safe?](#my-3node-wont-boot-without-disabling-the-secure-boot-option-is-it-safe) + - [When booting the 3Node, I get the error Network interface detected but autoconfiguration failed. What can I do?](#when-booting-the-3node-i-get-the-error-network-interface-detected-but-autoconfiguration-failed-what-can-i-do) + - [When I try to boot my 3Node, the fans start spinning fast with a loud noise and the screen is black. What can I do to resolve this?](#when-i-try-to-boot-my-3node-the-fans-start-spinning-fast-with-a-loud-noise-and-the-screen-is-black-what-can-i-do-to-resolve-this) + - [When booting Zero-OS with IPV6 configurations, I get the errors (1) dial tcp: address IPV6-address too many columns in address and (2) no pools matches key: not routable. What can I do to fix this issue?](#when-booting-zero-os-with-ipv6-configurations-i-get-the-errors-1-dial-tcp-address-ipv6-address-too-many-columns-in-address-and-2-no-pools-matches-key-not-routable-what-can-i-do-to-fix-this-issue) + - [I try to boot a 3Node, but I get the message no route with default gateway found. What does it mean?](#i-try-to-boot-a-3node-but-i-get-the-message-no-route-with-default-gateway-found-what-does-it-mean) + - [When booting a 3Node, Zero-OS downloads fine, but then I get the message: error no route with default gateway found, and the message: info check if interface has a cable plugged in. What could fix this?](#when-booting-a-3node-zero-os-downloads-fine-but-then-i-get-the-message-error-no-route-with-default-gateway-found-and-the-message-info-check-if-interface-has-a-cable-plugged-in-what-could-fix-this) + - [How can I update Dell and HP servers to Intel E5-2600v2, E5-2400v2 and E5-4600v2, when applicable?](#how-can-i-update-dell-and-hp-servers-to-intel-e5-2600v2-e5-2400v2-and-e5-4600v2-when-applicable) + - [How can I update the firmware and driver of a Dell PowerEdge server?](#how-can-i-update-the-firmware-and-driver-of-a-dell-poweredge-server) + - [When I boot a 3Node in UEFI mode, it gets stuck at: Initializing Network Device, is there a way to fix this?](#when-i-boot-a-3node-in-uefi-mode-it-gets-stuck-at-initializing-network-device-is-there-a-way-to-fix-this) + - [When I boot my 3Node, it gets stuck during the Zero-OS download. It never reaches 100%. What can I do to fix this issue?](#when-i-boot-my-3node-it-gets-stuck-during-the-zero-os-download-it-never-reaches-100-what-can-i-do-to-fix-this-issue) + - [When booting a 3Node, I get the error=“context deadline exceeded” module=network error=failed to initialize rmb api failed to initialized admin mw: failed to get farm: farm not found: object not found. What can I do to fix this issue?](#when-booting-a-3node-i-get-the-errorcontext-deadline-exceeded-modulenetwork-errorfailed-to-initialize-rmb-api-failed-to-initialized-admin-mw-failed-to-get-farm-farm-not-found-object-not-found-what-can-i-do-to-fix-this-issue) +- [Memory Troubleshooting](#memory-troubleshooting) + - [Can I use different type of RAM for the same 3Node?](#can-i-use-different-type-of-ram-for-the-same-3node) + - [How can I know if the memory I am buying is correct for my specific hardware?](#how-can-i-know-if-the-memory-i-am-buying-is-correct-for-my-specific-hardware) + - [What do the terms RDIMM, LDIMM, UDIMM, LRDIMM, FBDIMM mean when it comes to RAM memory sticks?](#what-do-the-terms-rdimm-ldimm-udimm-lrdimm-fbdimm-mean-when-it-comes-to-ram-memory-sticks) + - [What is the difference between ECC and non-ECC memory?](#what-is-the-difference-between-ecc-and-non-ecc-memory) + - [How can I change the RAM memory sticks on my 3Nodes? How can I achieve dual channel configuration with sticks of RAM?](#how-can-i-change-the-ram-memory-sticks-on-my-3nodes-how-can-i-achieve-dual-channel-configuration-with-sticks-of-ram) + - [What does RAM mean?](#what-does-ram-mean) + - [What does DIMM mean when it comes to RAM sticks?](#what-does-dimm-mean-when-it-comes-to-ram-sticks) + - [I have 24 DIMMS ram slots on my server. Can I use them all?](#i-have-24-dimms-ram-slots-on-my-server-can-i-use-them-all) +- [Basic Post Build Troubleshooting](#basic-post-build-troubleshooting) + - [Reboot a 3Node](#reboot-a-3node) + - [Reboot a Router](#reboot-a-router) + - [Reboot a Modem with the Reset Button](#reboot-a-modem-with-the-reset-button) + - [My 3Nodes go offline after a modem reboot. Is there a way to prevent this?](#my-3nodes-go-offline-after-a-modem-reboot-is-there-a-way-to-prevent-this) + - [When I try to access iDRAC on a web browswer, even with protected mode off, I get the error The webpage cannot be found, what can I do?](#when-i-try-to-access-idrac-on-a-web-browswer-even-with-protected-mode-off-i-get-the-error-the-webpage-cannot-be-found-what-can-i-do) + - [When I boot my 3Node, it reaches the Welcome to Zero-OS window, but it doesn't boot properly and there's an error message: failed to load object : type substrate..., what can I do?](#when-i-boot-my-3node-it-reaches-the-welcome-to-zero-os-window-but-it-doesnt-boot-properly-and-theres-an-error-message-failed-to-load-object--type-substrate-what-can-i-do) + - [I want redundancy of power for my 3 nodes. I have two PSU on my Dell server. What can I do?](#i-want-redundancy-of-power-for-my-3-nodes-i-have-two-psu-on-my-dell-server-what-can-i-do) + - [I switch the ethernet cable to a different port when my 3Node was running. Internet connection is lost. What can I do?](#i-switch-the-ethernet-cable-to-a-different-port-when-my-3node-was-running-internet-connection-is-lost-what-can-i-do) +- [Advanced Post Build Troubleshooting](#advanced-post-build-troubleshooting) + - [Access the Error/Log Screen](#access-the-errorlog-screen) + - [Can I use a VGA to HDMI adaptor to connect a TV screen or monitor to the 3Node? I tried to boot a 3Node with a VGA to HDMI adaptor but the boot fails, what can I do?](#can-i-use-a-vga-to-hdmi-adaptor-to-connect-a-tv-screen-or-monitor-to-the-3node-i-tried-to-boot-a-3node-with-a-vga-to-hdmi-adaptor-but-the-boot-fails-what-can-i-do) + - [My 3Node is running on the Grid, but when I plugged in the monitor, it states: Disabling IR #16. Is there a problem?](#my-3node-is-running-on-the-grid-but-when-i-plugged-in-the-monitor-it-states-disabling-ir-16-is-there-a-problem) + - [Address Certain Errors](#address-certain-errors) +- [Get Further Assistance](#get-further-assistance) +--- + +## Introduction + +We cover different ways and levels to troubleshoot farming issues. + +## General Troubleshooting Process + +When building a 3Node, we advise to follow carefully the 6 steps laid out in the [3Node building](3node_building.md) section of the manual. Make sure that the disks are properly wiped, that you have the correct bootstrap image and that the BIOS/UEFI is set correctly. + +If you are still having issues, you may find solutions to your issues by reading the sections [Build Troubleshooting](#build-troubleshooting) and [Basic Post Build Troubleshooting](#basic-post-build-troubleshooting). + +If your issues are related to memory, the section [Memory Troubleshooting](#memory-troubleshooting) should help. + +If you still can't fix your issue, try to get more info by reading the Error/Log screen. Read the section [Advanced Post Build Troubleshooting](#advanced-post-build-troubleshooting) for more information. Once you have more information via the Error/Log screen, you should first try to find fixes to the errors by reading the troubleshooting section. + +If you still can't find solutions to your issues, read the section [Get Further Assistance](#get-further-assistance) to ask for help. + +## Build Troubleshooting + +In this section, we cover notions such as how to wipe disks, how to set the BIOS configurations and more. + +### Set the BIOS + +You need to set the BIOS properly for your 3Node to boot with Zero-OS. + +The basic information is available [here](5_set_bios_uefi.md#the-essential-features-of-biosuefi-for-a-3node). + +### BIOS Troubleshooting + +You might have to try UEFI first and if it doesn't work, try BIOS. Usually when this is the case (UEFI doesn't work with your current computer), the following message will be shown: + +> Initializing Network Devices... + +And then... nothing. This means that you are still in the BIOS of the hardware and boot is not even started yet. When this happens, try the BIOS mode of your computer. + +### When running wipefs to wipe my disks on Linux, I get either of the following errors: "syntax error near unexpected token" or "Probing Initialized Failed". Is there a fix? + +Many different reasons can cause this issue. When you get that error, sometimes it is because your are trying to wipe your boot USB by accident. If this is not the case, and you really are trying to wipe the correct disk, here are some fixes to try out, with the disk `sda` as an example: + +* 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 wipefs -a /dev/sda +``` + +### Disk Not Recognized by Zero-OS + +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. + +### Onboard Storage + +If you are using a server with onboard storage and are having issues, there are many ways to troubleshooting this. + +You can use the on board storage on a server without RAID. You can [re-flash](https://fohdeesha.com/docs/perc.html) the RAID card, turn on HBA/non-RAID mode, or install a different card. There is no need for RAID with ThreeFold farming. + +It's usually easy to set servers such as a HP Proliant with the HBA mode. For Dell servers, you can either cross-flash the RAID controller with an “IT-mode-Firmware” (see this [video](https://www.youtube.com/watch?v=h5nb09VksYw)) or get a DELL H310-controller (which has the non-RAID option). Otherwise, you can install a NVME SSD with a PCIe adaptor, and turn off the RAID controller. + + + + +### When I tried to boot my 3Node, at some point the screen went black, with or without a blinking hyphen or dash. What could cause this and what could I do to resolve the issue? + +There is a possibility that this happens because you are booting your 3Node on a HDD. A 3Node needs a minimum of 500GB of SSD to work properly. + +Also, make sure that you are using the correct boot option (Legacy BIOS or UEFI) in Settings and that it corresponds to the correct booting image on the ThreeFold Bootstrap page. + +This problem often arises when you plug your disks in the wrong controller. For example, try unplugging the disks from the SAS controller, and plug them in the SATA controller. Also, disable the SAS controller if needed. + +In a Legacy BIOS boot, make sure Legacy is enabled and disable *Data Execution Prevention* if possible. + +Also, it might have to do with your RAID controller configuration. Make sure this is properly set. For example, configuring all the HDD disks into one logical disk can fix this problem, or re-flashing the RAID card can also help. + + + +### I get the error Certificate is not yet valid when booting my 3Node server, what can I do? + +Make sure your firmware is up to date. If necessary, reinstall it. You might have to install and then re-install the firmware if your system is very old. + + + +### My SSD is sometimes detected as HDD by Zero-OS when there is a reboot. Is there a fix or a way to test the SSD disk? + +If your SSD disk shows as HDD, usually you can reboot the 3Node and Z-OS adjusts correctly. + +Anyone experiencing frequently this issue where Z-OS sometimes detects an SSD as HDD can try the following: + +* Boot up a live Ubuntu Desktop image +* Run the benchmark utility within the Disks app +* Check if the seektime of the disk is sufficient for Z-OS + * If the seektime is above 0.5ms, Z-OS will consider your SSD as HDD + +**Detailed Steps:** + +* 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** +* Select your disk +* Click on the tree dots menu +* Select **Benchmark Disk...** + * Use the default parameters + * **Transfer rate**: This is not relevant for our current test + * You can set to it to minimum (e.g. 2) + * **Sample size**: 10 MB is sufficient +* Check the average access time on the [ThreeFold repository](https://www.github.com/threefoldtech/seektime) + * Check seek time for HDD and SSD + * A SSD needs to be <=0.5ms +* If the result is above 0.5ms, this is why Z-OS doesn't recognize the disk properly + * You can then run diagnostics (e.g. smartmontools) + * If this is not fixable, you should change disk (e.g. take a more performing disk) + +Note: The green dots on the output represent seektime and that's what Z-OS is looking at. Specifically, it checks that the average seektime is below 0.5ms. If the seektime is above this, Z-OS will consider your SSD as HDD. + +### My 3Node uses only PCIe adapters and SSD NVME disks. Do I need the RAID controller on? + +The onboard RAID controller is not linked to your PCIe SSDs. In this case, you can switch the RAID controller off. + + +### My 3Node has 2 ethernet ports in the back, with one written AMT above, what does it mean? Can I use this port to connect my 3Node to the ThreeFold Grid? + +First, let's define the term AMT. It means: Active Management Technology. Without going into too much details, it is to remotely access servers via the network at the BIOS level. Thus, you should plug the ethernet cable in the port next to AMT, and not into the AMT port. You can explore AMT properties if you want remote access to your server. + + +### When I boot my Dell server, I get the message: All of the disks from your previous configuration are gone... Press any key to continue or 'C' to load the configuration utility. What can I do? + +Many changes to your server can lead to this message. + +Usually, the easiest solution is to reset the disk configuration in iDRAC's configuration utility. + +What can causes this message: + +1. During a new installation, the cables connecting to your external storage are not wired to the correct ports. +2. Your RAID adapter has failed. +3. Your SAS cables are not plugged properly or are malfunctioning. + +Note: Resetting the configuration will destroy all data on all virtual disks. Make sure you know what you are doing! In doubt, ask the TF community. + +### When booting a 3Node, how to fix the error: "no disks: registration failed"? + +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](4_wipe_all_disks.md) 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; + * 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 +``` + +### I have trouble connecting the 3Node to the Grid with a 10GB NIC card. What can I do? + +As of now, Zero-OS sometimes has trouble with 10GB NIC card. The easiest solution to this is to connect your 3Node with the 1GB NIC card. This should solve the issue. More fine tuning might be needed to get your 3Node to work with a 10GB NIC card. Future Zero-OS version might solve this issue. + +### What does it mean when I see, during the 3Node boot, the message: error = context deadline exceeded? + +In general, this message means that the ThreeFold Grid asked something to your 3Node, and your 3Node could not respond fast enough. It is usually necessary to read the following error message to understand the situation more specifically. + +### How can I fix the error messages: "context deadline exceeded" accompanied with "node is behind acceptable delay with timestamp"? + +This often indicates that the real-time clock of the system is not synced with current time. There have been different fixes reported to this issue. + +You can boot the node using a Ubuntu live image to sync the hardware time. After that, you can reboot the node and it should boot normally. + +You can fix this manually in the BIOS. Go to the BIOS settings and adjust the **Time** and **Date** settings. + +You can also try to adjust the clock by NTP over the network, if it applies to your case. + +### I try to boot a 3Node, but I get the error: "No Route to Host on Linux". What does it mean? + +There are many potential answers to this. Perhaps the Host is offline, the service isn't running. This is usually the reason with TF Grid. It means the Grid is not responsive. In this case, try to boot the 3Node later. If it persists ask TF Support. + +There can also be other reasons. You might have connected to the wrong port. Perhaps you have configured iptables to block connections on that port. Your DNS might be improperly configured. You might have an Incorrect Network or Host Configuration. Many troubleshoots are possible. Here's a [good place to start](https://www.maketecheasier.com/fix-no-route-to-host-error-linux/). + + + +### How can I fix the error: "Network configuration succeed but Zero-OS kernel could not be downloaded" when booting a 3Node? + +To fix the error "Network configuration succeed but Zero-OS kernel could not be downloaded", you can try to restart the router and reboot the 3Node. This usually fixes the issue. If this doesn't work, check if the router is still functional. The cause of this issue might be that your router is broken. + + + +### Using SAS disks, I get the error; "No ssd found, failed to register". What can I do to fix this? + +First make sure to wipe the disks and then boot your 3Node. If you've wiped the disks and it doesn't work, it's been reported that using the command "diskpart clean command" on Windows can fix this issue. + + +### When booting a 3Node, I get the message: failed to register node: failed to create node: failed to submit extrinsic: Invalid Transaction: registration failed. What could fix this? + +The most probable fix to this error is simply to properly [wipe your disks](4_wipe_all_disks.md). + + +### I did a format on my SSD disk, but Zero-OS still does not recognize them. What's wrong? + +Formatting is one thing, but to boot properly, Zero-OS needs to work on a completely wiped disk. Thus, make sure you [wipe your disks](4_wipe_all_disks.md). Formatting is not enough. + +### My 3Node doesn't boot properly without a monitor plugged in. What can I do? + +First, try to disable the "Halt On" mode in BIOS. If you do not have this option, try simply enabling Legacy Support (Dell BIOS for example). If this doesn't work, try to plug in a Dummy Plug/Headless Ghost/Display Emulator in your 3Node. This will simulate a plugged monitor. This should fix the problem. + + + + +### My 3Node won't boot without disabling the Secure Boot option, is it safe? + +In the case where you want to boot Zero-OS, disabling Secure Boot option is safe. With Secure Boot disabled, it can be easier or even necessary when it comes to booting Zero-OS. Secure Boot is used when you want to lock the BIOS/UEFI settings. + + + + +### When booting the 3Node, I get the error Network interface detected but autoconfiguration failed. What can I do? + +First make sure your network cable is plugged in and that your DHCP is working and responding. If you change the NIC port of the ethernet cable, make sure to reboot the 3Node so Zero-OS can change the NIC port attribution. + +Some farmers reported that this got fixed by simply powering off the 3Node(s), the router and modem for 2 minutes then powering it all back on. Resetting the modem and router (switch on the hardware) in the process can also help. + +If this doesn't work, try to upgrade the firmware of the NIC and the motherboard. If this still doesn't work, the NIC card might be broken. Try with another NIC card. + + +### When I try to boot my 3Node, the fans start spinning fast with a loud noise and the screen is black. What can I do to resolve this? + +There may be several causes to this issue. You can try to remove all the RAM sticks, to clean the dust and then to reseat the RAM sticks. If it still doesn't resolve the issue, you can check the RAM sticks one by one to see if one is malfunctioning. This often resolves the issue. Also, some cables might not be properly connected. + + + +### When booting Zero-OS with IPV6 configurations, I get the errors (1) dial tcp: address IPV6-address too many columns in address and (2) no pools matches key: not routable. What can I do to fix this issue? + +This usually means that the IPV6 attributed is not valid. It is also often caused when the DNS configuration does not resolve IPV6 correctly. + +To fix this issue, it is often necessary to adjust the IPV6 settings related to the router and the modem. Confirming with your Internet service provider (ISP) that the IPV6 settings are properly configured could also be necessary to fix the issue. + + + +### I try to boot a 3Node, but I get the message no route with default gateway found. What does it mean? + +First, let's see the main terms. Default gateway acts as an access point to other networks, in this case the TF Grid, when there is a back and forth exchange of data packets. + +While the last question implied a communication problem from the Grid, this error message usually means that the 3Node has communication problem. In short, it has difficulty reaching the TF Grid. There are many ways to troubleshoot this error. First, let's give the most direct solution. Make sure you have a direct connection with your Internet Service Provider (ISP): your 3Node should be connected to a router or a switch via an ethernet cable. Wifi doesn't work. Make sure your DHCP is set correctly. + +If the problem persists, check the default gateway of your 3Node and then make sure your router can reach it. + + +### When booting a 3Node, Zero-OS downloads fine, but then I get the message: error no route with default gateway found, and the message: info check if interface has a cable plugged in. What could fix this? + +Make sure you have network stack enabled in BIOS. If so, check you ethernet port and make sure that it's clean. Also make sure the ethernet rj45 connectors are clean on both ends. If that does not work, verify the state of your SATA cables. If all this doesn't work, download and re-install Zero-OS. + + + + +### How can I update Dell and HP servers to Intel E5-2600v2, E5-2400v2 and E5-4600v2, when applicable? + +There are many ressources online with steps on how to do this. You can check this [youtube video](https://www.youtube.com/watch?v=duzrULLtonM) on Dell and HP servers, as welll as this [documentation](https://ixnfo.com/en/hp-proliant-gen8-update-to-support-cpu-e5-2600v2-e5-2400v2-e5-4600v2.html) for HP Proliant Gen8. + + + +### How can I update the firmware and driver of a Dell PowerEdge server? + +Dell has excellen documentation for this. Read [this](https://www.dell.com/support/kbdoc/en-us/000128194/updating-firmware-and-drivers-on-dell-emc-poweredge-servers) for the detailed steps. + + + +### When I boot a 3Node in UEFI mode, it gets stuck at: Initializing Network Device, is there a way to fix this? + +In short, booting the 3Node in BIOS mode instead of UEFI mode usually fixes this issue. + +You can make bootable USB with the USB option of the [Zero-OS bootstrap image page](https://bootstrap.grid.tf/). Make sure to boot your server using BIOS and not UEFI. In the boot sequence, make the USB as your first choice to boot. + + + +### When I boot my 3Node, it gets stuck during the Zero-OS download. It never reaches 100%. What can I do to fix this issue? + +Here are some ways to troubleshoot your 3Node when it cannot download Zero-OS completely (to 100%): + +* Sometimes, just rebooting the 3Node and/or trying a little bit later can work. +* It can help to reboot the modem and the router. +* Make sure your BIOS/UEFI is up to date. Updating the BIOS/UEFI can help. +* It can also help to set the correct date and time. + + + +### When booting a 3Node, I get the error=“context deadline exceeded” module=network error=failed to initialize rmb api failed to initialized admin mw: failed to get farm: farm not found: object not found. What can I do to fix this issue? + +Usually, the simple fix to this issue is to make sure that your bootstrap image is on the same network as your farm. For example, if you created your farm on the Main net, you should use a Main net Zero-OS bootstrap image. + + +## Memory Troubleshooting + +### Can I use different type of RAM for the same 3Node? + +No. Always use the same type of RAM per 3Node. If you use RDIMM, go all RDIMM, etc. Check your hardware specifications to make sure you have the right type of memory. + + + +### How can I know if the memory I am buying is correct for my specific hardware? + +To be sure, look into the owner's manual of your specific computer. + +In general, you can go to [Memory.net](https://memory.net/) and look for your specific computer model. As general steps, select your computer's system in *By system*, then select the series and then select the specific model of the series. You will then see available memories to buy from memory.net. You can also simply read the documentation at the bottom. The memory type supported by your computer will be explained. Then you can buy the memory needed from any other computer store. + +For servers, you can check with Cloudninja's documentation [here](https://cloudninjas.com/pages/server-memory). Search for your specific hardware and look for the compatible memory. This reference is good for rack and tower servers. + + + +### What do the terms RDIMM, LDIMM, UDIMM, LRDIMM, FBDIMM mean when it comes to RAM memory sticks? + +Well first, the DIMM means dual inline memory module. + +* U stands for or unregistered (or unbuffered). + +* R stands for registered memory. + +* LR stands for load-reduced. + +* FB stands for fully-buffered. + + + +### What is the difference between ECC and non-ECC memory? + +ECC means error correction code memory. This type of memory can detect and correct data corruption. Non-ECC mostly cannot detect nor correct, but some can detect, but never correct data corruption. Check your hardware specifications to make sure you have the right type of memory (ECC or non-ECC). + + +### How can I change the RAM memory sticks on my 3Nodes? How can I achieve dual channel configuration with sticks of RAM? + +First, always use RAM sticks of the same size and type. It should be noted on your motherboard which slots to populate first. As a general guide, there is usually 2 slots A and B, with each 2 memory stick entries. You must then install the ram sticks on A1 and B1 in order to achieve dual channel, then A2 and B2 if you have more (visual order: A1 A2 B1 B2). + +> Example: You want to start with your largest sticks, evenly distributed between both processors and work your way down to your smallest. Let's take an example with 2 processors as well as 4x 16GB sticks and 4x 8GB sticks. The arrangement would be A1-16GB, B1-16GB, A2-16GB, B2-16GB, A3-8GB, B3-8GB, A4-8GB, B4-8GB. Avoid odd numbers as well. You optimally want pairs. So if you only have 5x 8GB sticks, only install 4 until you have an even 6. + + + +### What does RAM mean? + +RAM means random access memory. Those type of memory can be read and changed in any order. + + + + +### What does DIMM mean when it comes to RAM sticks? + +It means *dual in-line memory module*. This type of computer memory is natively 64 bits, enabling fast data transfer. + + + +### I have 24 DIMMS ram slots on my server. Can I use them all? + +Be careful when installing memory on a server. Always check your server's documentation to make sure your RAM sticks combination are correct. + +For example, on the Dell R720, you can have 24x16gb RAM ECC sticks, but it can only handle 16 Quad ranked DIMMs. In this case, you can fill up all slots with registered DIMMs if you have a maximum of 4 quad DIMMS ranked on each CPU. + +## Basic Post Build Troubleshooting + +In this section, we cover notions such as how to reboot node or a router, how to check the network signal path and more. + +### Reboot a 3Node + +To reboot your 3Node, simply turn if off manually then turn it back on. + +### Reboot a Router + +- Locate the power cord of your router and unplug it from the power outlet. +- Wait for at least 30 seconds to allow the router to completely shut down. +- Plug the power cord back into the power outlet. +- Wait for the router to boot up again. This may take around 2-5 minutes. +- Once the router is back up, check your internet connection to see if it’s working properly. + +### Reboot a Modem with the Reset Button + +- Find the reset button on the back or bottom of the modem. +- Press and hold the reset button for 30 seconds. +- Release the button when the power light turns another color (usually amber/orange). +- Wait for the modem to fully reboot and the lights to stabilize. + +### My 3Nodes go offline after a modem reboot. Is there a way to prevent this? + +Yes, there are many ways to prevent this. An easy solution is to set the DHCP server to reserve local IPs for the 3Nodes MAC addresses. + +This problem is also preventable if your router stays online during the modem reboot. + +Indeed, rebooting the 3Nodes is necessary when there are local IP changes, as 3Nodes are addressed a local IP addresses when they are booted. + +The DHCP will addresses any local IP address that is available when you are booting a 3Node. Reserving local IP addresses is a good TF farming practice. + + + +### When I try to access iDRAC on a web browswer, even with protected mode off, I get the error The webpage cannot be found, what can I do? + +Open iDRAC in the Internet Explorer emulator extension (IE Tab) in Chrome, then update iDRAC. It should work elsewhere then. Sometimes, it will be needed to add "ST1=code" at the end of the IE Tab url. + + + +### When I boot my 3Node, it reaches the Welcome to Zero-OS window, but it doesn't boot properly and there's an error message: failed to load object : type substrate..., what can I do? + +Usually simply rebooting the 3Node fixes this problem. + +### I want redundancy of power for my 3 nodes. I have two PSU on my Dell server. What can I do? + +Make sure you enable the Hot Spare feature. This feature is accessible in iDRAC Settings - Power Configuration. Other servers might have this function, with a different name and configuration. Check the server's manual for more details. + +### I switch the ethernet cable to a different port when my 3Node was running. Internet connection is lost. What can I do? + +When your 3Node boots, Zero-OS marks the NIC port. This means you cannot change NIC port when your 3Node is running. You can either put back the ethernet cable in the initial NIC port, or reboot the 3Node. At boot, Zero-OS will marks the new NIC port as the main entry. + + +## Advanced Post Build Troubleshooting + +In this section, we cover notions such as how to connect a screen and look for errors, how to address certain errors, etc. + +### Access the Error/Log Screen + +To access the error/log screen, connect a monitor to your 3Node and on the Zero-OS console, hit alt-F2 to open up the Error/Log Screen, and hit alt-F3 to go back to the main screen. + +### Can I use a VGA to HDMI adaptor to connect a TV screen or monitor to the 3Node? I tried to boot a 3Node with a VGA to HDMI adaptor but the boot fails, what can I do? + +This might work, but it has been reported by farmers that Zero-OS might have difficulties booting when this is done with a VGA/HDMI adaptor on a TV screen. This is most likely due to the TV screen not supporting the output once the system loaded into Zero-OS. The easy fix to this issue is to use a standard computer monitor with a VGA plug. + + +### My 3Node is running on the Grid, but when I plugged in the monitor, it states: Disabling IR #16. Is there a problem? + +In general, you can simply ignore this error statement. This error is linked to the Nvidia binary driver. It simply means that your 3Node lost connection with the graphic card (by unplugging and replugging the monitor for example). + +### Address Certain Errors + +Once you had access to the error/log screen and took notes of the errors, you can look for fixes in the manual. This troubleshooting section is a good place to look for solutions. + +If you could not find any fixes to your issues, go to the next section to ask for further assistance. + +## Get Further Assistance + +If you've read this whole section and tried different troubleshooting methods to no avail, do not lose hope! You can get further assistance and we will most surely resolve your issues. + +You can contact the [ThreeFold support team](https://threefoldfaq.crisp.help/en/) and raise a ticket to get further assistance. + +Also, you can ask questions on the [ThreeFold Forum](https://forum.threefold.io/) or on the [ThreeFold Farmer Telegram Channel](https://t.me/threefoldfarmers). diff --git a/collections/farmers/node_status_bot/node_status_bot.md b/collections/farmers/node_status_bot/node_status_bot.md new file mode 100644 index 0000000..29bcc01 --- /dev/null +++ b/collections/farmers/node_status_bot/node_status_bot.md @@ -0,0 +1,123 @@ +

Node Status Bot

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Disclaimer](#disclaimer) +- [Getting Started with the Bot](#getting-started-with-the-bot) +- [Commands](#commands) +- [Bugs and Features](#bugs-and-features) +- [Node Status Bot News](#node-status-bot-news) + +--- + +## Introduction + +We present the [Node Status Bot](https://t.me/tfnodestatusbot) and how to use it. + +The Node Status Bot is a very helpful tool for farmers of the ThreeFold Grid. It can give you relevant information on your node status, notify you if the node status changes and also provide information on minting violations. + +You can find the bot source code on GitHub [here](https://github.com/threefoldfoundation/node-status-bot). + +## Disclaimer + +Note that the bot is developed and operated on a best effort basis. You are responsible for your nodes' uptime and your farming rewards. + +## Getting Started with the Bot + +To get started with the bot, simply go to the [bot link on Telegram](https://t.me/tfnodestatusbot) and hit the start button to begin interacting with the bot. + +You can get the real time status of a node with the status command. For example, this gives the status of node 42 + +``` +/status 42 +``` + +The bot can also send you a message when the status of a node changes. Use the subscribe command (or sub for short) to begin alerts for one or more nodes. Here we are subscribing to nodes 1, 2, and 3: + +``` +/sub 1 2 3 +``` + +Once you have subscribed you can issue the status command with no input to get the current status of the nodes you are subscribed to: + +``` +/status +``` + +By default, the bot is on main network. To change the network to the dev or test networks, use the network (net) command. Changing the network does not affect any existing subscriptions, and the bot does not specify which network the nodes belong to in its messages. Here's an example to change the network to devnet: + +``` +/net dev +``` + +You can also check if there are any violations in the current minting period. Like status, this command takes a node id as input or works on the currently subscribed nodes if no input is given: + +``` +/violations +``` + +The next section covers in-depth the different commands available. + +## Commands + +Here is a reference for all supported commands and their different forms: + +- `/help` + - Print the start message with all the available commands +- `/status` + - Check the current status of one or all nodes. + - This uses a similar method as the Dashboard for determining node status, and update may be delayed by an hour + - With no input, a status report will be generated for all subscribed nodes, if any + - Examples + - Check status of node ID 1 + - `/status 1` + - Check status of all currently subscribed nodes + - `/status` +- `/violations` + - Scan for farmerbot related violations during the current and previous minting periods + - Like status, this works on all subscribed nodes when no input is given + - Examples + - Check violations of node ID 1 + - `/violations 1` + - Check status of all currently subscribed nodes + - `/violations` +- `/subscribe` + - Subscribe to updates about one or more nodes + - You can use the shortcut `/sub` + - If you don't provide an input, the nodes you are currently subscribed to will be shown + - Examples + - Subscribe to node ID 1 + - `/sub 1` + - Subscribe to node ID 1, 2, 3 + - `/sub 1 2 3` + - Check all subscribed nodes + - `/sub` +- `/unsubscribe` + - Unsubscribe to updates about one or more nodes + - You can use the shortcut `/unsub` + - Examples + - Unsubscribe to node ID 1 + - `/unsubscribe 1` + - Unsubscribe to node ID 1, 2, 3 + - `/unsubscribe 1 2 3` + - Unsubscribe to all currently subscribed nodes + - `/unsub all` +- `/network` + - Change the network to `dev`, `test`, or `main` + - Default is `main` + - You can use the shortcut `/net` + - If you don't provide an input, the currently selected network is shown + - Examples + - Check current network + - `/network` + - Change to another network, e.g. to `dev` + - `/net dev` + +## Bugs and Features + +To report bugs and request features, please open an issue on the [GitHub repo](https://github.com/threefoldfoundation/node-status-bot) or contact [Scott Yeager on Telegram](https://t.me/scottyeager). + +## Node Status Bot News + +If you use the bot, please also subscribe to the [Node Status Bot News channel](https://t.me/node_bot_updates) on Telegram to receive occasional updates and news concerning the bot. diff --git a/collections/knowledge_base/.collection b/collections/knowledge_base/.collection new file mode 100644 index 0000000..e69de29 diff --git a/collections/knowledge_base/documentation.md b/collections/knowledge_base/documentation.md new file mode 100644 index 0000000..be0881f --- /dev/null +++ b/collections/knowledge_base/documentation.md @@ -0,0 +1,15 @@ +

ThreeFold Documentation

+ +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](manual@@knowledge_base). + +

Table of Contents

+ +- [ThreeFold Dashboard](dashboard@@dashboard) +- [ThreeFold Connect](tfconnect@@tfconnect_toc) +- [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/knowledge_base/intro.md b/collections/knowledge_base/intro.md new file mode 100644 index 0000000..647fdc3 --- /dev/null +++ b/collections/knowledge_base/intro.md @@ -0,0 +1,50 @@ +# ThreeFold Manual + +*Welcome to the ThreeFold Manual!* + +This manual is organized in two main sections: + +- [ThreeFold Knowledge Base](manual@@knowledge_base) +- [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 [ThreeFold Dashboard](dashboard@@dashboard), the versatile [ThreeFold Connect app](tfconnect@@tfconnect_toc), [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! +> +> [Access with Grid.tf](https://status.grid.tf) | [Access with ThreeFold.io](https://status.threefold.io) + +## Get Started + +It's easy to get started on the TFGrid. + +If you want to farm TFT, check out [how to build a 3Node](documentation@@3node_building). + +If you want to deploy or develop on the grid, you will first need to get TFT on TFChain: + +- [Create a TFChain account](dashboard@@wallet_connector) +- Get TFT in your TFChain account + - [Buy TFT](threefold_token@@buy_sell_tft) + - [Send TFT to TFChain](threefold_token@@tft_bridges) + +To develop on the Grid, read the [developers documentation](developers@@developers). + +To deploy applications, read the [deploy section](dashboard@@deploy) then [access the deployment via SSH](system_administrators@@ssh_guide). + +## Join the ThreeFold Community + +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) +* [TFGrid Tester Telegram Channel](https://t.me/threefoldtesting) + +## Questions and Feedback + +To explore this manual, you can use the search function by hitting **'s'** on your keyboard, or by clicking on the magnifier button at the top left of each page. Answers to your questions might also be on the [ThreeFold Forum](https://forum.threefold.io/). + +If you can't find the answer to your question, our dedicated [ThreeFold Support](https://threefoldfaq.crisp.help/en/) team is here to help. + +*Welcome to the ThreeFold Grid, where together we can shape a more sustainable, self-sovereign and autonomous digital future!* \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base.md b/collections/knowledge_base/knowledge_base.md new file mode 100644 index 0000000..8af6c20 --- /dev/null +++ b/collections/knowledge_base/knowledge_base.md @@ -0,0 +1,14 @@ +

ThreeFold Knowledge Base

+ +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](manual@@documentation). + +

Table of Contents

+ +- [About](about@@about) +- [Technology](tech@@technology_toc) +- [Farming](farming@@farming_toc) +- [Cloud](cloud@@cloud_toc) +- [Collaboration](collaboration@@collaboration_toc) +- [Legal](legal@@legal_home) \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/ga7opn4a3jnhlphpewm4pjdoyydynzom7es6yl3o7nc3pry3v3ux6anm.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/ga7opn4a3jnhlphpewm4pjdoyydynzom7es6yl3o7nc3pry3v3ux6anm.md new file mode 100644 index 0000000..a34c7a2 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/ga7opn4a3jnhlphpewm4pjdoyydynzom7es6yl3o7nc3pry3v3ux6anm.md @@ -0,0 +1 @@ +3340735.94 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gai4c2bgoa3yhvqzzw7ow4fhoggywtubevnhb6mw4zafg7zaa7d5ipc3.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gai4c2bgoa3yhvqzzw7ow4fhoggywtubevnhb6mw4zafg7zaa7d5ipc3.md new file mode 100644 index 0000000..cd1f5fd --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gai4c2bgoa3yhvqzzw7ow4fhoggywtubevnhb6mw4zafg7zaa7d5ipc3.md @@ -0,0 +1 @@ +258.80 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gaqxblfg4bzgivy6dbjvwe5eap3unhmia2pycuvly2juspvwpuf36bw4.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gaqxblfg4bzgivy6dbjvwe5eap3unhmia2pycuvly2juspvwpuf36bw4.md new file mode 100644 index 0000000..bab954e --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gaqxblfg4bzgivy6dbjvwe5eap3unhmia2pycuvly2juspvwpuf36bw4.md @@ -0,0 +1 @@ +5000000.00 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gaugosylcx7jztqyf2k7rimhfwksa3wsi2oq4irkxmdmve6abjijmfqr.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gaugosylcx7jztqyf2k7rimhfwksa3wsi2oq4irkxmdmve6abjijmfqr.md new file mode 100644 index 0000000..5fd95eb --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gaugosylcx7jztqyf2k7rimhfwksa3wsi2oq4irkxmdmve6abjijmfqr.md @@ -0,0 +1 @@ +10468506.00 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gb2c5hczywngvm6jgxdwqbjtmuy4s2hpptcah63hfaqvl2alxdw7ssj7.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gb2c5hczywngvm6jgxdwqbjtmuy4s2hpptcah63hfaqvl2alxdw7ssj7.md new file mode 100644 index 0000000..6641a70 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gb2c5hczywngvm6jgxdwqbjtmuy4s2hpptcah63hfaqvl2alxdw7ssj7.md @@ -0,0 +1 @@ +12447988.00 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbqhn7rl4lsrpr2tt74id2ujpz2axchqy2wkgctdljm3nxvj7gqhucod.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbqhn7rl4lsrpr2tt74id2ujpz2axchqy2wkgctdljm3nxvj7gqhucod.md new file mode 100644 index 0000000..8cd46f1 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbqhn7rl4lsrpr2tt74id2ujpz2axchqy2wkgctdljm3nxvj7gqhucod.md @@ -0,0 +1 @@ +2908686.63 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbtpaxxp6534upc4mlngfgjwcd6dnsrvippozwxaqawi4fktlojy2a2s.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbtpaxxp6534upc4mlngfgjwcd6dnsrvippozwxaqawi4fktlojy2a2s.md new file mode 100644 index 0000000..d49104a --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbtpaxxp6534upc4mlngfgjwcd6dnsrvippozwxaqawi4fktlojy2a2s.md @@ -0,0 +1 @@ +1832242.73 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbv734i2sv4yddpvjmyxu3iz2aiu5geajrad4e4bqg7ca2n63nxspmd6.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbv734i2sv4yddpvjmyxu3iz2aiu5geajrad4e4bqg7ca2n63nxspmd6.md new file mode 100644 index 0000000..df521e3 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gbv734i2sv4yddpvjmyxu3iz2aiu5geajrad4e4bqg7ca2n63nxspmd6.md @@ -0,0 +1 @@ +16999920.00 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gcej7dmulftt25uh4faagoz6ker4wxayqgjusiitqd527dgtksxkbqgr.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gcej7dmulftt25uh4faagoz6ker4wxayqgjusiitqd527dgtksxkbqgr.md new file mode 100644 index 0000000..1b01949 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gcej7dmulftt25uh4faagoz6ker4wxayqgjusiitqd527dgtksxkbqgr.md @@ -0,0 +1 @@ +10000000.00 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gcwhwdrxypxqaoymqkb66szplm6uankgmsl4sp7lsoia6ottoyq6hbih.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gcwhwdrxypxqaoymqkb66szplm6uankgmsl4sp7lsoia6ottoyq6hbih.md new file mode 100644 index 0000000..182e928 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gcwhwdrxypxqaoymqkb66szplm6uankgmsl4sp7lsoia6ottoyq6hbih.md @@ -0,0 +1 @@ +328241.81 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdijy6k2bbrirx423zfuykkfdn66xp2kmsbzfqse2psndz6edvqtrlsu.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdijy6k2bbrirx423zfuykkfdn66xp2kmsbzfqse2psndz6edvqtrlsu.md new file mode 100644 index 0000000..5fb9b72 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdijy6k2bbrirx423zfuykkfdn66xp2kmsbzfqse2psndz6edvqtrlsu.md @@ -0,0 +1 @@ +10595751.89 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdkxtuynw4bjkdm2l7b5xuyfuisv52kuu4g7vpnlf4zsikburm622ypz.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdkxtuynw4bjkdm2l7b5xuyfuisv52kuu4g7vpnlf4zsikburm622ypz.md new file mode 100644 index 0000000..c280877 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdkxtuynw4bjkdm2l7b5xuyfuisv52kuu4g7vpnlf4zsikburm622ypz.md @@ -0,0 +1 @@ +12996500.00 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdlvib44lvonm5k67lupsfzmsx7g2rlyvbm5mmhuj4naqju7ch4hbjbo.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdlvib44lvonm5k67lupsfzmsx7g2rlyvbm5mmhuj4naqju7ch4hbjbo.md new file mode 100644 index 0000000..7e6fce5 --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdlvib44lvonm5k67lupsfzmsx7g2rlyvbm5mmhuj4naqju7ch4hbjbo.md @@ -0,0 +1 @@ +14181682.63 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdskfynmzwtb3v5an26ceaq27643q3kb4x6my4uto2liidfnd4spqzyu.md b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdskfynmzwtb3v5an26ceaq27643q3kb4x6my4uto2liidfnd4spqzyu.md new file mode 100644 index 0000000..1d65b3e --- /dev/null +++ b/collections/knowledge_base/knowledge_base/about/token_overview/special_wallets/wallet_data/gdskfynmzwtb3v5an26ceaq27643q3kb4x6my4uto2liidfnd4spqzyu.md @@ -0,0 +1 @@ +0.00 \ No newline at end of file diff --git a/collections/knowledge_base/knowledge_base_toc.md b/collections/knowledge_base/knowledge_base_toc.md new file mode 100644 index 0000000..e28e489 --- /dev/null +++ b/collections/knowledge_base/knowledge_base_toc.md @@ -0,0 +1,12 @@ +

ThreeFold Knowledge Base

+ +The book contains information about the ThreeFold ecosystem, its technology and its history. + +

Table of Contents

+ +- [About](about@@about) +- [Technology](tech@@technology_toc) +- [Farming](farming@@farming_toc) +- [Cloud](cloud@@cloud_toc) +- [Collaboration](collaboration@@collaboration_toc) +- [Legal](legal@@legal_home) \ No newline at end of file diff --git a/collections/knowledge_base/values/0.02 b/collections/knowledge_base/values/0.02 new file mode 100644 index 0000000..d0e6ec6 --- /dev/null +++ b/collections/knowledge_base/values/0.02 @@ -0,0 +1 @@ +0.000 \ No newline at end of file diff --git a/collections/knowledge_base/values/cu_mtft_hour.md b/collections/knowledge_base/values/cu_mtft_hour.md new file mode 100644 index 0000000..2872a6f --- /dev/null +++ b/collections/knowledge_base/values/cu_mtft_hour.md @@ -0,0 +1 @@ +1528.00 \ No newline at end of file diff --git a/collections/knowledge_base/values/cu_musd_hour.md b/collections/knowledge_base/values/cu_musd_hour.md new file mode 100644 index 0000000..44eb204 --- /dev/null +++ b/collections/knowledge_base/values/cu_musd_hour.md @@ -0,0 +1 @@ +30.56 \ No newline at end of file diff --git a/collections/knowledge_base/values/cu_tft_hour.md b/collections/knowledge_base/values/cu_tft_hour.md new file mode 100644 index 0000000..50c9a07 --- /dev/null +++ b/collections/knowledge_base/values/cu_tft_hour.md @@ -0,0 +1 @@ +15.28 \ No newline at end of file diff --git a/collections/knowledge_base/values/dname_mtft_hour.md b/collections/knowledge_base/values/dname_mtft_hour.md new file mode 100644 index 0000000..4f9e53a --- /dev/null +++ b/collections/knowledge_base/values/dname_mtft_hour.md @@ -0,0 +1 @@ +139.00 \ No newline at end of file diff --git a/collections/knowledge_base/values/dname_musd_hour.md b/collections/knowledge_base/values/dname_musd_hour.md new file mode 100644 index 0000000..bee3bd1 --- /dev/null +++ b/collections/knowledge_base/values/dname_musd_hour.md @@ -0,0 +1 @@ +2.78 \ No newline at end of file diff --git a/collections/knowledge_base/values/ip_mtft_hour.md b/collections/knowledge_base/values/ip_mtft_hour.md new file mode 100644 index 0000000..325a076 --- /dev/null +++ b/collections/knowledge_base/values/ip_mtft_hour.md @@ -0,0 +1 @@ +347.00 \ No newline at end of file diff --git a/collections/knowledge_base/values/ip_musd_hour.md b/collections/knowledge_base/values/ip_musd_hour.md new file mode 100644 index 0000000..cc891cf --- /dev/null +++ b/collections/knowledge_base/values/ip_musd_hour.md @@ -0,0 +1 @@ +6.94 \ No newline at end of file diff --git a/collections/knowledge_base/values/name_mtft_hour.md b/collections/knowledge_base/values/name_mtft_hour.md new file mode 100644 index 0000000..bf1a7d6 --- /dev/null +++ b/collections/knowledge_base/values/name_mtft_hour.md @@ -0,0 +1 @@ +69.50 \ No newline at end of file diff --git a/collections/knowledge_base/values/name_musd_hour.md b/collections/knowledge_base/values/name_musd_hour.md new file mode 100644 index 0000000..c520ed0 --- /dev/null +++ b/collections/knowledge_base/values/name_musd_hour.md @@ -0,0 +1 @@ +1.39 \ No newline at end of file diff --git a/collections/knowledge_base/values/nu_mtft_hour.md b/collections/knowledge_base/values/nu_mtft_hour.md new file mode 100644 index 0000000..a1031b2 --- /dev/null +++ b/collections/knowledge_base/values/nu_mtft_hour.md @@ -0,0 +1 @@ +2500.00 \ No newline at end of file diff --git a/collections/knowledge_base/values/nu_musd_hour.md b/collections/knowledge_base/values/nu_musd_hour.md new file mode 100644 index 0000000..2af48f0 --- /dev/null +++ b/collections/knowledge_base/values/nu_musd_hour.md @@ -0,0 +1 @@ +50.00 \ No newline at end of file diff --git a/collections/knowledge_base/values/su_mtft_hour.md b/collections/knowledge_base/values/su_mtft_hour.md new file mode 100644 index 0000000..7c41110 --- /dev/null +++ b/collections/knowledge_base/values/su_mtft_hour.md @@ -0,0 +1 @@ +972.00 \ No newline at end of file diff --git a/collections/knowledge_base/values/su_musd_hour.md b/collections/knowledge_base/values/su_musd_hour.md new file mode 100644 index 0000000..849efca --- /dev/null +++ b/collections/knowledge_base/values/su_musd_hour.md @@ -0,0 +1 @@ +19.44 \ No newline at end of file diff --git a/collections/knowledge_base/values/tft_marketcap.md b/collections/knowledge_base/values/tft_marketcap.md new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/collections/knowledge_base/values/tft_marketcap.md @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/collections/knowledge_base/values/tft_supply.md b/collections/knowledge_base/values/tft_supply.md new file mode 100644 index 0000000..6f8db6d --- /dev/null +++ b/collections/knowledge_base/values/tft_supply.md @@ -0,0 +1 @@ +780000000 \ No newline at end of file diff --git a/collections/knowledge_base/values/tft_value.md b/collections/knowledge_base/values/tft_value.md new file mode 100644 index 0000000..d0e6ec6 --- /dev/null +++ b/collections/knowledge_base/values/tft_value.md @@ -0,0 +1 @@ +0.000 \ No newline at end of file diff --git a/collections/legal/companies/companies.md b/collections/legal/companies/companies.md index bbe14b7..eafcf45 100644 --- a/collections/legal/companies/companies.md +++ b/collections/legal/companies/companies.md @@ -4,10 +4,9 @@ FOLLOWING COMPANIES ARE RELATED PARTIES TO THREEFOLD, OUR TERMS AND CONDITIONS A | THREEFOLD RELATED COMPANIES | Description | | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | -| [ThreeFold Dubai or ThreeFold Cloud](companies:threefold_dubai.md) | Promotion of TFGrid + Delivery of ThreeFold Cloud | -| [Threefold_Tech](companies:threefold_tech.md) | Belgium-based tech company owns IP (Intellectual Property.md) of tech, is open source | -| [ThreeFold_VZW](companies:threefold_vzw.md) | Non for profit organization in BE, intented to be used for grants work. | -| [ThreeFold_AG](companies:threefold_ag.md) | ThreeFold in Zug, Switzerland | +| [ThreeFold DMCC (TF Dubai)](companies:threefold_dmcc.md) | Promotion of TFGrid + Delivery of ThreeFold Cloud | +| [Threefold Tech](companies:threefold_tech.md) | Belgium-based tech company owns IP (Intellectual Property.md) of tech, is open source | +| [OurWorld](companies:ourworld.md) | A private company limited by shares incorporated under the laws of Mauritius | | TF Hub Limited | ThreeFold in BVI | | Codescalers | Egypt-based software development team, creates a lot of code for ThreeFold | diff --git a/collections/library/.collection b/collections/library/.collection new file mode 100644 index 0000000..e69de29 diff --git a/collections/library/library.md b/collections/library/library.md new file mode 100644 index 0000000..75a050f --- /dev/null +++ b/collections/library/library.md @@ -0,0 +1,19 @@ +

ThreeFold Library

+ +The ThreeFold library contains links to major ThreeFold books. Have fun reading on the new Internet! + +

Table of Contents

+ +- [Manual](https://threefold.info/manual) +- [Farmers Book](https://threefold.info/farmers) +- [Developers Book](https://threefold.info/developers) +- [System Administrators Book](https://threefold.info/system_administrators) +- [Knowledge Base](https://threefold.info/knowledge_base) +- [Dunia Yetu](https://threefold.info/dunia_yetu) +- [Earth Hub](https://threefold.info/earthhub) +- [Legal](https://threefold.info/legal) +- [Mbweni](https://threefold.info/mbweni) +- [Project Internet Capacity](https://threefold.info/projectinca) +- [Technology](https://threefold.info/tech) +- [TFGrid 3.0](https://threefold.info/tfgrid3) +- [TFGrid 4.0](https://threefold.info/tfgrid4) \ No newline at end of file diff --git a/collections/manual/documentation.md b/collections/manual/documentation.md index afa8394..be0881f 100644 --- a/collections/manual/documentation.md +++ b/collections/manual/documentation.md @@ -6,7 +6,8 @@ For complementary information on ThreeFold, refer to the [ThreeFold Knowledge Ba

Table of Contents

-- [Dashboard](dashboard@@dashboard) +- [ThreeFold Dashboard](dashboard@@dashboard) +- [ThreeFold Connect](tfconnect@@tfconnect_toc) - [Developers](developers@@developers) - [Farmers](farmers@@farmers) - [System Administrators](system_administrators@@system_administrators) diff --git a/collections/manual/intro.md b/collections/manual/intro.md index 0124972..647fdc3 100644 --- a/collections/manual/intro.md +++ b/collections/manual/intro.md @@ -9,12 +9,29 @@ This manual is organized in two main sections: 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), [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). +The *ThreeFold Documentation* section contains all the practical information of the ThreeFold Grid, from general information covering the multi-functional [ThreeFold Dashboard](dashboard@@dashboard), the versatile [ThreeFold Connect app](tfconnect@@tfconnect_toc), [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! > > [Access with Grid.tf](https://status.grid.tf) | [Access with ThreeFold.io](https://status.threefold.io) +## Get Started + +It's easy to get started on the TFGrid. + +If you want to farm TFT, check out [how to build a 3Node](documentation@@3node_building). + +If you want to deploy or develop on the grid, you will first need to get TFT on TFChain: + +- [Create a TFChain account](dashboard@@wallet_connector) +- Get TFT in your TFChain account + - [Buy TFT](threefold_token@@buy_sell_tft) + - [Send TFT to TFChain](threefold_token@@tft_bridges) + +To develop on the Grid, read the [developers documentation](developers@@developers). + +To deploy applications, read the [deploy section](dashboard@@deploy) then [access the deployment via SSH](system_administrators@@ssh_guide). + ## Join the ThreeFold Community The ThreeFold community is very active and its members will be more than happy to discuss and help you get started. diff --git a/collections/system_administrators/advanced/ecommerce/ecommerce.md b/collections/system_administrators/advanced/ecommerce/ecommerce.md new file mode 100644 index 0000000..63a65ee --- /dev/null +++ b/collections/system_administrators/advanced/ecommerce/ecommerce.md @@ -0,0 +1,8 @@ +

Ecommerce

+ +You can easily deploy a free and open-source ecommerce on the TFGrid. We present here two of the most popular options. + +

Table of Contents

+ +- [WooCommerce](./woocommerce.md) +- [nopCommerce](./nopcommerce.md) \ No newline at end of file diff --git a/collections/system_administrators/advanced/ecommerce/img/nopcommerce_1.png b/collections/system_administrators/advanced/ecommerce/img/nopcommerce_1.png new file mode 100644 index 0000000..cc68f2a Binary files /dev/null and b/collections/system_administrators/advanced/ecommerce/img/nopcommerce_1.png differ diff --git a/collections/system_administrators/advanced/ecommerce/img/nopcommerce_2.png b/collections/system_administrators/advanced/ecommerce/img/nopcommerce_2.png new file mode 100644 index 0000000..e2da8b2 Binary files /dev/null and b/collections/system_administrators/advanced/ecommerce/img/nopcommerce_2.png differ diff --git a/collections/system_administrators/advanced/ecommerce/img/nopcommerce_3.png b/collections/system_administrators/advanced/ecommerce/img/nopcommerce_3.png new file mode 100644 index 0000000..15967b0 Binary files /dev/null and b/collections/system_administrators/advanced/ecommerce/img/nopcommerce_3.png differ diff --git a/collections/system_administrators/advanced/ecommerce/img/nopcommerce_4.png b/collections/system_administrators/advanced/ecommerce/img/nopcommerce_4.png new file mode 100644 index 0000000..c686452 Binary files /dev/null and b/collections/system_administrators/advanced/ecommerce/img/nopcommerce_4.png differ diff --git a/collections/system_administrators/advanced/ecommerce/img/woocommerce_1.png b/collections/system_administrators/advanced/ecommerce/img/woocommerce_1.png new file mode 100644 index 0000000..6b295de Binary files /dev/null and b/collections/system_administrators/advanced/ecommerce/img/woocommerce_1.png differ diff --git a/collections/system_administrators/advanced/ecommerce/img/woocommerce_2.png b/collections/system_administrators/advanced/ecommerce/img/woocommerce_2.png new file mode 100644 index 0000000..93512ec Binary files /dev/null and b/collections/system_administrators/advanced/ecommerce/img/woocommerce_2.png differ diff --git a/collections/system_administrators/advanced/ecommerce/img/woocommerce_3.png b/collections/system_administrators/advanced/ecommerce/img/woocommerce_3.png new file mode 100644 index 0000000..c975a87 Binary files /dev/null and b/collections/system_administrators/advanced/ecommerce/img/woocommerce_3.png differ diff --git a/collections/system_administrators/advanced/ecommerce/nopcommerce.md b/collections/system_administrators/advanced/ecommerce/nopcommerce.md new file mode 100644 index 0000000..69c0e1d --- /dev/null +++ b/collections/system_administrators/advanced/ecommerce/nopcommerce.md @@ -0,0 +1,265 @@ +

Ecommerce on the TFGrid

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Deploy a Full VM](#deploy-a-full-vm) +- [Create an SSH Tunnel](#create-an-ssh-tunnel) +- [Preparing the VM](#preparing-the-vm) +- [Set a Firewall](#set-a-firewall) +- [Download nopCommerce](#download-nopcommerce) +- [Access nopCommerce](#access-nopcommerce) +- [Install nopCommerce](#install-nopcommerce) +- [Access the Ecommerce from the Public Internet](#access-the-ecommerce-from-the-public-internet) + - [Set a DNS Record](#set-a-dns-record) + - [Access the Ecommerce](#access-the-ecommerce) + - [HTTPS with Caddy](#https-with-caddy) + - [Manage with Systemd](#manage-with-systemd) +- [Access Admin Panel](#access-admin-panel) +- [Manage nopCommerce with Systemd](#manage-nopcommerce-with-systemd) +- [References](#references) +--- + +## Introduction + +We show how to deploy a free and open-source ecommerce on the ThreeFold Grid. We will be deploying on a full VM with an IPv4 address. + +[nopCommerce](https://www.nopcommerce.com/en) is an open-source ecommerce platform based on Microsoft's ASP.NET Core framework and MS SQL Server 2012 (or higher) backend Database. + +## Prerequisites + +- [A TFChain account](dashboard@@wallet_connector) +- TFT in your TFChain account + - [Buy TFT](threefold_token@@buy_sell_tft) + - [Send TFT to TFChain](threefold_token@@tfchain_stellar_bridge) + +## Deploy a Full VM + +We start by deploying a full VM on the ThreeFold Dashboard. + +* On the [Threefold Dashboard](https://dashboard.grid.tf/#/), go to the [full virtual machine deployment page](https://dashboard.grid.tf/#/deploy/virtual-machines/full-virtual-machine/) +* Deploy a full VM (Ubuntu 22.04) with an IPv4 address and at least the minimum specs shown below + * IPv4 Address + * Minimum vcores: 2 vcores + * Minimum GB of RAM: 4 GB + * Minimum storage: 50 GB +* After deployment, note the VM IPv4 address + +## Create an SSH Tunnel + +We create an SSH tunnel with port 5432:80, as it is this combination that we will set for nopCommerce on the docker-compose file. + +- Open a terminal and create an SSH tunnel +``` +ssh -4 -L 5432:127.0.0.1:80 root@VM_IPv4_address> +``` + +Simply leave this window open and follow the next steps. + +## Preparing the VM + +We prepare the full to run nopCommerce. + +* Connect to the VM via SSH +``` +ssh root@VM_IPv4_address +``` +* Update the VM +``` +apt update +``` +* [Install Docker](docker_basics.html#install-docker-desktop-and-docker-engine) +* Install docker-compose +``` +apt install docker-compose -y +``` + +## Set a Firewall + +You can set a firewall to your VM for further security. This should be used in production mode. + +* Add the permissions +``` +ufw allow 80 +ufw allow 443 +ufw allow 22 +``` +* Enable the firewall +``` +ufw enable +``` +* Verify the fire wall status +``` +ufw status verbose +``` + +## Download nopCommerce + +* Clone the repository +``` +git clone https://github.com/nopSolutions/nopCommerce.git +cd nopCommerce +``` +* Build the image +``` +cd nopCommerce +docker-compose -f ./postgresql-docker-compose.yml build +``` +* Run the image + ``` + docker-compose -f ./postgresql-docker-compose.yml up + ``` + +## Access nopCommerce + +You can access the nopCommerce interface on a browser with port 5432 via the SSH tunnel: + +``` +localhost:5432 +``` + +![](./img/nopcommerce_1.png) + +For more information on how to use nopCommerce, refer to the [nopCommerce docs](https://docs.nopcommerce.com/en/index.html). + +## Install nopCommerce + +You will need to set your ecommerce store and database information. + +- Enter an email for your website (e.g. `admin@example.com`) +- For the database, choose PostgreSQL and check both options `Create a database` and `Enter raw connection`. Enter the following information (as per the docker-compose information) + ``` + Server=nopcommerce_database;Port=5432;Database=nop;User Id=postgres;Password=nopCommerce_db_password; + ``` +- Note: For production, you will need to set your own username and password. + +## Access the Ecommerce from the Public Internet + +### Set a DNS Record + +* Go to your domain name registrar + * In the section **Advanced DNS**, add a **DNS A Record** to your domain and link it to the IP address of the VM you deployed on: + * Type: A Record + * Host: @ + * Value: + * 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/example.com +``` + +### Access the Ecommerce + +You can now go on a web browser and access your website via your domain, e.g. `example.com`. + +![](./img/nopcommerce_2.png) + +### HTTPS with Caddy + +We set HTTPS with Caddy. + +- Install Caddy +``` +apt install -y debian-keyring debian-archive-keyring apt-transport-https curl +curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg +curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' > /etc/apt/sources.list.d/caddy-stable.list +apt update +apt install caddy +``` +- Set a reverse proxy on port 80 with your own domain +``` +caddy reverse-proxy -r --from example.com --to :80 +``` + +You should see in the logs that it successfully obtains an SSL certificate, and after that you can try navigating to your site's domain again to verify it's working. Using a private window or adding `https://` specifically might be necessary until your browser drops its cache. + +![](./img/nopcommerce_3.png) + +When you're satisfied that everything looks good, hit `ctl-c` to exit Caddy and we'll proceed to making this persistent. + +#### Manage with Systemd + +We create a systemd service to always run the reverse proxy for port 80. + +- Create a caddy service +```bash +nano /etc/systemd/system/caddy.service +``` +- Set the service with your own domain +``` +[Unit] +Description=Caddy Service +StartLimitIntervalSec=0 + +[Service] +Restart=always +RestartSec=5 +ExecStart=caddy reverse-proxy -r --from example.com --to :80 + +[Install] +WantedBy=multi-user.target +``` +- Enable the service +``` +systemctl daemon-reload +systemctl enable caddy +systemctl start caddy +``` +- Verify that the Caddy service is properly running +``` +systemctl status caddy +``` + +Systemd will start up Caddy immediately, restart it if it ever crashes, and start it up automatically after any reboots. + +## Access Admin Panel + +You can access the admin panel by clicking on `Log in` and providing the admin username and password set during the nopCommerce installation. + +![](./img/nopcommerce_4.png) + +In `Add your store info`, you can set the HTTPS address of your domain and enable SSL. + +You will need to properly configure your ecommerce instance for your own needs and products. Read the nopCommerce docs for more information. + +## Manage nopCommerce with Systemd + +We create a systemd service to always run the nopCommerce docker-compose file. + +- Create a nopcommerce service +```bash +nano /etc/systemd/system/nopcommerce.service +``` +- Set the service with your own domain +``` +[Unit] +Description=nopCommerce Service +StartLimitIntervalSec=0 + +[Service] +Restart=always +RestartSec=5 +StandardOutput=append:/root/nopcommerce.log +StandardError=append:/root/nopcommerce.log +ExecStart=docker-compose -f /root/nopCommerce/postgresql-docker-compose.yml up +[Install] +WantedBy=multi-user.target +``` +- Enable the service +``` +systemctl daemon-reload +systemctl enable nopcommerce +systemctl start nopcommerce +``` +- Verify that the Caddy service is properly running +``` +systemctl status nopcommerce +``` + +Systemd will start up the nopCommerce docker-compose file, restart it if it ever crashes, and start it up automatically after any reboots. + +## References + +For further information on how to set nopCommerce, read the [nopCommerce documentation](https://docs.nopcommerce.com/en/index.html?showChildren=false). \ No newline at end of file diff --git a/collections/system_administrators/advanced/ecommerce/woocommerce.md b/collections/system_administrators/advanced/ecommerce/woocommerce.md new file mode 100644 index 0000000..c1002c2 --- /dev/null +++ b/collections/system_administrators/advanced/ecommerce/woocommerce.md @@ -0,0 +1,152 @@ +

WooCommerce on the TFGrid

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Deploy Wordpress](#deploy-wordpress) +- [Set a DNS Record](#set-a-dns-record) +- [HTTPS with Caddy](#https-with-caddy) + - [Adjust the Firewall](#adjust-the-firewall) + - [Manage with zinit](#manage-with-zinit) +- [Access Admin Panel](#access-admin-panel) +- [Install WooCommerce](#install-woocommerce) +- [Troubleshooting](#troubleshooting) +- [References](#references) +--- + +## Introduction + +We show how to deploy a free and open-source ecommerce on the ThreeFold Grid. We will be deploying on a micro VM with an IPv4 address. + +[WooCommerce](https://woocommerce.com/) is the open-source ecommerce platform for [WordPress](https://wordpress.com/). The platform is free, flexible, and amplified by a global community. The freedom of open-source means you retain full ownership of your store’s content and data forever. + +## Prerequisites + +- [A TFChain account](dashboard@@wallet_connector) +- TFT in your TFChain account + - [Buy TFT](threefold_token@@buy_sell_tft) + - [Send TFT to TFChain](threefold_token@@tfchain_stellar_bridge) + +## Deploy Wordpress + +We start by deploying Wordpress on the ThreeFold Dashboard. + +* On the [Threefold Dashboard](https://dashboard.grid.tf/#/), go to the [Wordpress deloyment page](https://dashboard.test.grid.tf/#/deploy/applications/wordpress/) +* Deploy a Wordpress with an IPv4 address and sufficient resources to run Wordpress + * IPv4 Address + * Minimum vcores: 2vcore + * Minimum MB of RAM: 4GB + * Minimum storage: 50GB +* After deployment, note the VM IPv4 address + +## Set a DNS Record + +* Go to your domain name registrar + * In the section **Advanced DNS**, add a **DNS A Record** to your domain and link it to the IP address of the VM you deployed on: + * Type: A Record + * Host: @ + * Value: + * 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/example.com +``` + +## HTTPS with Caddy + +We set HTTPS with Caddy. + +- Install Caddy +``` +apt install -y debian-keyring debian-archive-keyring apt-transport-https curl +curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg +curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' > /etc/apt/sources.list.d/caddy-stable.list +apt update +apt install caddy +``` +- Set a reverse proxy on port 80 with your own domain +``` +caddy reverse-proxy -r --from example.com --to :80 +``` + +You should see in the logs that it successfully obtains an SSL certificate, and after that you can try navigating to your site's domain again to verify it's working. Using a private window or adding `https://` specifically might be necessary until your browser drops its cache. + +When you're satisfied that everything looks good, hit `ctl-c` to exit Caddy and we'll proceed to making this persistent. + +### Adjust the Firewall + +By default, ufw is set on Wordpress application from the Dashboard. To use Caddy and set HTTPS, we want to allow port 443. + +* Add the permissions +``` +ufw allow 443 +``` + +### Manage with zinit + +We manage Caddy with zinit. + +- Open the file for editing +```bash +nano /etc/zinit/caddy.yaml +``` +- Insert the following line with your own domain and save the file +``` +exec: caddy reverse-proxy -r --from example.com --to :80 +``` +- Add the new Caddy file to zinit +```bash +zinit monitor caddy +``` + +Zinit will start up Caddy immediately, restart it if it ever crashes, and start it up automatically after any reboots. Assuming you tested the Caddy invocation above and used the same form here, that should be all there is to it. + +Here are some other Zinit commands that could be helpful to troubleshoot issues: + +- See status of all services (same as "zinit list") +``` +zinit +``` +- Get logs for a service +``` +zinit log caddy +``` +- Restart a service (to test configuration changes, for example) +``` +zinit stop caddy +zinit start caddy +``` + +## Access Admin Panel + +You can access the admin panel by clicking on `Admin panel` under `Actions` on the Dashboard. You can also use the following template on a browser with your own domain: + +``` +example.com/wp-admin +``` + +If you've forgotten your credentials, just open the Wordpress info window on the Dashboard. + +## Install WooCommerce + +On the Wordpress admin panel, go to `Plugins` and search for WooCommerce. + +![](./img/woocommerce_1.png) + +Once this is done, you can open WooCommerce on the left-side menu. + +![](./img/woocommerce_2.png) + +You can then set your store and start your online business! + +![](./img/woocommerce_3.png) + +## Troubleshooting + +You might need to deactivate some plugins that aren't compatible with WooCommerce, such as `MailPoet`. + +## References + +Make sure to read the [Wordpress and Woocommerce documentation](https://woocommerce.com/document/woocommerce-self-service-guide) to set your ecommerce. \ No newline at end of file diff --git a/collections/system_administrators/advanced/https_caddy.md b/collections/system_administrators/advanced/https_caddy.md new file mode 100644 index 0000000..5f6ea4d --- /dev/null +++ b/collections/system_administrators/advanced/https_caddy.md @@ -0,0 +1,91 @@ +

HTTPS with Caddy

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Set HTTPS](#set-https) + - [Adjust the Firewall](#adjust-the-firewall) + - [Manage with zinit](#manage-with-zinit) +--- + +## Introduction + +We show how to set HTTPS with Caddy for any deployment on the grid. + +## Prerequisites + +- A deployment on the TFGrid and SSH access + +## Set HTTPS + +We set HTTPS with Caddy. + +- Install Caddy + +``` +apt install -y debian-keyring debian-archive-keyring apt-transport-https curl +curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg +curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' > /etc/apt/sources.list.d/caddy-stable.list +apt update +apt install caddy +``` +- Set a reverse proxy on port 80 with your own domain + +``` +caddy reverse-proxy -r --from example.com --to :80 +``` + +You should see in the logs that it successfully obtains an SSL certificate, and after that you can try navigating to your site's domain again to verify it's working. Using a private window or adding `https://` specifically might be necessary until your browser drops its cache. + +When you're satisfied that everything looks good, hit `ctl-c` to exit Caddy and we'll proceed to making this persistent. + +### Adjust the Firewall + +To use Caddy and set HTTPS, we want to allow port 443. If you are using `ufw`, add the permission for HTTPS: + +- Add the permissions + +``` +ufw allow 443 +``` + +### Manage with zinit + +We manage Caddy with zinit. + +- Open the file for editing + +```bash +nano /etc/zinit/caddy.yaml +``` + +- Insert the following line with your own domain and save the file + +``` +exec: caddy reverse-proxy -r --from example.com --to :80 +``` + +- Add the new Caddy file to zinit + +```bash +zinit monitor caddy +``` + +Zinit will start up Caddy immediately, restart it if it ever crashes, and start it up automatically after any reboots. Assuming you tested the Caddy invocation above and used the same form here, that should be all there is to it. + +Here are some other Zinit commands that could be helpful to troubleshoot issues: + +- See status of all services (same as "zinit list") +``` +zinit +``` +- Get logs for a service +``` +zinit log caddy +``` +- Restart a service (to test configuration changes, for example) +``` +zinit stop caddy +zinit start caddy +``` \ No newline at end of file diff --git a/collections/system_administrators/advanced/hummingbot.md b/collections/system_administrators/advanced/hummingbot.md index 7acb2cd..8361776 100644 --- a/collections/system_administrators/advanced/hummingbot.md +++ b/collections/system_administrators/advanced/hummingbot.md @@ -20,10 +20,10 @@ In this guide, we go through the basic steps to deploy a [Hummingbot](https://hu ## Prerequisites -- [A TFChain account](wallet_connector.md) +- [A TFChain account](dashboard:wallet_connector.md) - TFT in your TFChain account - - [Buy TFT](buy_sell_tft.md) - - [Send TFT to TFChain](tfchain_stellar_bridge.md) + - [Buy TFT](threefold_token:buy_sell_tft.md) + - [Send TFT to TFChain](threefold_token:tft_bridges.md) ## Deploy a Full VM diff --git a/collections/system_administrators/advanced/minio_helm3.md b/collections/system_administrators/advanced/minio_helm3.md index 27f5109..44b3d60 100644 --- a/collections/system_administrators/advanced/minio_helm3.md +++ b/collections/system_administrators/advanced/minio_helm3.md @@ -22,7 +22,7 @@ large scale AI/ML, data lake and database workloads. Helm is a package manager f ## Prerequisites - TFChain account with TFT -- [Deploy Kubernetes cluster with one master and one worker (IPv4)](dashboard/@@k8s) +- [Deploy Kubernetes cluster with one master and one worker (IPv4)](dashboard@@k8s) - [Make sure you can connect via SSH on the terminal](system_administrators@@ssh_openssh) ## Create an SSH Tunnel diff --git a/collections/system_administrators/advanced/node_status_bot.md b/collections/system_administrators/advanced/node_status_bot.md new file mode 100644 index 0000000..12da4fb --- /dev/null +++ b/collections/system_administrators/advanced/node_status_bot.md @@ -0,0 +1,127 @@ +

Node Status Bot

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Deploy a Micro VM](#deploy-a-micro-vm) + - [Network Choice](#network-choice) +- [Create a Telegram Bot](#create-a-telegram-bot) +- [Prepare the VM](#prepare-the-vm) +- [Set the Bot](#set-the-bot) +- [Start the Bot](#start-the-bot) +- [Set Zinit](#set-zinit) + +--- + +## Introduction + +We show how to deploy the [Telegram Node Status bot](https://github.com/threefoldfoundation/node-status-bot) on a micro VM running on the ThreeFold Grid. + +The Node Status bot provides realtime status updates and alerts on status changes for nodes on the ThreeFold Grid. You can find an [instance live on Telegram](https://t.me/tfnodestatusbot). + +## Prerequisites + +To run the bot, you need to have a TFChain account activated with a twin. For this, you can simply create an account on the ThreeFold Dashboard. + +- [A TFChain account](dashboard@@wallet_connector) +- TFT in your TFChain account + - [Buy TFT](threefold_token@@buy_sell_tft) + - [Send TFT to TFChain](threefold_token@@tft_bridges) + +## Deploy a Micro VM + +We start by deploying a micro VM on the ThreeFold Dashboard. + +* On the [Threefold Dashboard](https://dashboard.grid.tf/#/), go to the [micro virtual machine deployment page](https://dashboard.test.grid.tf/#/deploy/virtual-machines/micro-virtual-machine/) +* Deploy a micro VM (Ubuntu 22.04) with the network connection of your choice + * Minimum vcores: 1vcore + * Minimum MB of RAM: 2048GB + * Minimum storage: 25GB +* After deployment, note the VM IP address +* Connect to the VM via SSH +``` +ssh root@VM_IP_Address +``` + +### Network Choice + +Since the bot works via an outbound connection to the Telegram servers, you do not need any public IP for it. It's thus cheaper to use either WireGuard, Planetary Network or Mycelium. + +## Create a Telegram Bot + +We create a Telegram bot using the [BotFather](https://t.me/BotFather). + +Simply go to this link and follow the steps (`/newbot` ...). Make sure to take note of the bot token for the next steps. + +## Prepare the VM + +We prepare the micro VM to run the Node Status bot. + +* Update the VM and install redis-server, git, nano, pip and python3-venv +``` +apt update && apt install redis-server && apt install git && apt install nano && apt install pip && apt install python3.10-venv +``` + +## Set the Bot + +Now that the VM is prepared, you can quickly set the bot. + +``` +git clone https://github.com/threefoldfoundation/node-status-bot.git +cd node-status-bot +python3 -m venv venv +source venv/bin/activate +pip install -r requirements.txt +wget https://github.com/threefoldtech/rmb-rs/releases/download/v1.0.7/rmb-peer +chmod u+x rmb-peer +``` + +## Start the Bot + +Once the bot is set, you can start it with the following line. + +``` +python3 node-status-bot.py -s "" +``` + +You can now go on Telegram and test the bot! + +## Set Zinit + +We can make sure the bot will start at any VM reboot by setting a zinit process. We set this using a simple script. + +- Create a .yaml file in the zinit folder +``` +nano /etc/zinit/node-status-bot.yaml +``` +- The content should be the following +``` +exec: /root/node-status-bot/start.sh +``` +- Create a script to run the bot +``` +nano start.sh +``` +- The script should contain the following +``` +#!/bin/bash + +cd /root/node-status-bot +source venv/bin/activate +python3 node-status-bot.py -s "" &>> /root/node-status-bot-logs +``` +- Set permissions to the script +``` +chmod +x start.sh +``` +- Start the bot with the zinit command +``` +zinit monitor node-status-bot +``` +- Check if the bot is running +``` +zinit status node-status-bot +``` + +You can then use the bot on Telegram and the Python program will restart every time the VM starts. \ 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 81b11a0..9052a0a 100644 --- a/collections/system_administrators/pulumi/pulumi_deployment_details.md +++ b/collections/system_administrators/pulumi/pulumi_deployment_details.md @@ -91,11 +91,11 @@ This means that, to execute, you just need to type `make run` and to destroy, yo ## Creating a Network -We address here how to create a [network](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/network). +We address here how to create a [network](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/yaml/network). ### Pulumi File -You can find the original file [here](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/network/Pulumi.yaml). +You can find the original file [here](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/yaml/network/Pulumi.yaml). ```yml name: pulumi-provider-grid @@ -206,7 +206,7 @@ outputs: ## Creating a Virtual Machine -Now, we will check an [example](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/virtual_machine) on how to create a virtual machine. +Now, we will check an [example](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/yaml/virtual_machine) on how to create a virtual machine. Just like we've seen above, we will have two files `Makefile` and `Pulumi.yaml` where we describe the infrastructure. @@ -277,7 +277,7 @@ resources: outputs: node_deployment_id: ${deployment.node_deployment_id} - ygg_ip: ${deployment.vms_computed[0].ygg_ip} + planetary_ip: ${deployment.vms_computed[0].planetary_ip} ``` We have a scheduler, and a network just like before. But now, we also have a deployment `grid:internal:Deployment` object that can have one or more disks and virtual machines. @@ -320,7 +320,7 @@ That's it! You can now execute `make run` to bring the infrastructure up. ## Kubernetes -We now see how to deploy a [Kubernetes cluster using Pulumi](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/kubernetes/Pulumi.yaml). +We now see how to deploy a [Kubernetes cluster using Pulumi](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/yaml/kubernetes/Pulumi.yaml). ```yaml content was removed for brevity @@ -357,14 +357,14 @@ We now see how to deploy a [Kubernetes cluster using Pulumi](https://github.com/ outputs: node_deployment_id: ${kubernetes.node_deployment_id} - ygg_ip: ${kubernetes.master_computed.ygg_ip} + planetary_ip: ${kubernetes.master_computed.planetary_ip} ``` Now, we define the Kubernetes resource `grid:internal:Kubernetes` that has master and workers slice. You define almost everything like a normal VM except for the FLiist. Also note that the token is the `cluster token`. This will ensure that the workers and the master communicate properly. ## Creating a Domain -The ThreeFold Pulumi repository also covers examples on [how to work with TFGrid gateways](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/gateway_name/Pulumi.yaml). +The ThreeFold Pulumi repository also covers examples on [how to work with TFGrid gateways](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/yaml/gateway_name/Pulumi.yaml). The basic idea is that you have a virtual machine workload on a specific IP, e.g. public IPv4, IPv6, or Planetary Network, and you want to access it using domains. @@ -420,7 +420,7 @@ Some things to note: ### Example of a Fully Controlled Domain -Here's an [example](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/gateway_fqdn/Pulumi.yaml) of a more complicated, but fully controlled domain. +Here's an [example](https://github.com/threefoldtech/pulumi-provider-grid/blob/development/examples/yaml/gateway_fqdn/Pulumi.yaml) of a more complicated, but fully controlled domain. ```yml code removed for brevity @@ -435,7 +435,7 @@ Here's an [example](https://github.com/threefoldtech/pulumi-provider-grid/blob/d node_id: 14 fqdn: mydomain.com backends: - - http://[${deployment.vms_computed[0].ygg_ip}]:9000 + - http://[${deployment.vms_computed[0].planetary_ip}]:9000 ``` Here, we informed the gateway that any request coming for the domain `mydomain.com` needs to be balanced through the backends. diff --git a/collections/system_administrators/system_administrators.md b/collections/system_administrators/system_administrators.md index 5925d74..63fbb46 100644 --- a/collections/system_administrators/system_administrators.md +++ b/collections/system_administrators/system_administrators.md @@ -85,5 +85,11 @@ For complementary information on ThreeFold grid and its cloud component, refer t - [IPFS on a Full VM](ipfs_fullvm.md) - [IPFS on a Micro VM](ipfs_microvm.md) - [MinIO Operator with Helm3](minio_helm3.md) + - [Hummingbot](hummingbot.md) - [AI & ML Workloads](ai_ml_workloads.md) - - [Hummingbot](hummingbot.md) \ No newline at end of file + - [Ecommerce](ecommerce.md) + - [WooCommerce](woocommerce.md) + - [nopCommerce](nopcommerce.md) + - [Hummingbot](hummingbot.md) + - [HTTPS with Caddy](https_caddy.md) + - [Node Status Bot](node_status_bot.md) diff --git a/collections/system_administrators/system_administrators_book_toc.md b/collections/system_administrators/system_administrators_book_toc.md new file mode 100644 index 0000000..333106c --- /dev/null +++ b/collections/system_administrators/system_administrators_book_toc.md @@ -0,0 +1,93 @@ +# ThreeFold System Administrators Manual + +This manual covers all practical tutorials for system administrators working on the ThreeFold Grid. + +

Table of Contents

+ +- [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) + - [Zlogs](terraform_zlogs.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) + - [Screenshots](screenshots.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) + - [Cloud Console](cloud_console.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) + - [MinIO Operator with Helm3](minio_helm3.md) + - [Hummingbot](hummingbot.md) + - [AI & ML Workloads](ai_ml_workloads.md) + - [Ecommerce](ecommerce.md) + - [WooCommerce](woocommerce.md) + - [nopCommerce](nopcommerce.md) + - [Hummingbot](hummingbot.md) + - [HTTPS with Caddy](https_caddy.md) + - [Node Status Bot](node_status_bot.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 61b1d65..42eee98 100644 --- a/collections/system_administrators/terraform/advanced/terraform_capacity_planning.md +++ b/collections/system_administrators/terraform/advanced/terraform_capacity_planning.md @@ -77,15 +77,15 @@ resource "grid_deployment" "d1" { output "vm1_ip" { value = grid_deployment.d1.vms[0].ip } -output "vm1_ygg_ip" { - value = grid_deployment.d1.vms[0].ygg_ip +output "vm1_planetary_ip" { + value = grid_deployment.d1.vms[0].planetary_ip } output "vm2_ip" { value = grid_deployment.d1.vms[1].ip } -output "vm2_ygg_ip" { - value = grid_deployment.d1.vms[1].ygg_ip +output "vm2_planetary_ip" { + value = grid_deployment.d1.vms[1].planetary_ip } ``` 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 3a184ec..1173fce 100644 --- a/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md +++ b/collections/system_administrators/terraform/advanced/terraform_mariadb_synced_databases.md @@ -237,11 +237,11 @@ output "node1_zmachine2_ip" { value = grid_deployment.d2.vms[0].ip } -output "ygg_ip1" { - value = grid_deployment.d1.vms[0].ygg_ip +output "planetary_ip1" { + value = grid_deployment.d1.vms[0].planetary_ip } -output "ygg_ip2" { - value = grid_deployment.d2.vms[0].ygg_ip +output "planetary_ip2" { + value = grid_deployment.d2.vms[0].planetary_ip } output "ipv4_vm1" { diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md index cfec0b4..d59f80c 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_redundant.md @@ -261,11 +261,11 @@ output "node1_zmachine2_ip" { value = grid_deployment.d2.vms[0].ip } -output "ygg_ip1" { - value = grid_deployment.d1.vms[0].ygg_ip +output "planetary_ip1" { + value = grid_deployment.d1.vms[0].planetary_ip } -output "ygg_ip2" { - value = grid_deployment.d2.vms[0].ygg_ip +output "planetary_ip2" { + value = grid_deployment.d2.vms[0].planetary_ip } output "ipv4_vm1" { @@ -808,11 +808,11 @@ output "node1_zmachine1_ip" { # value = grid_deployment.d2.vms[0].ip #} -output "ygg_ip1" { - value = grid_deployment.d1.vms[0].ygg_ip +output "planetary_ip1" { + value = grid_deployment.d1.vms[0].planetary_ip } -#output "ygg_ip2" { -# value = grid_deployment.d2.vms[0].ygg_ip +#output "planetary_ip2" { +# value = grid_deployment.d2.vms[0].planetary_ip #} output "ipv4_vm1" { diff --git a/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md b/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md index 48e206a..af1a428 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md +++ b/collections/system_administrators/terraform/advanced/terraform_nextcloud_single.md @@ -213,8 +213,8 @@ output "node1_zmachine1_ip" { value = grid_deployment.d1.vms[0].ip } -output "ygg_ip1" { - value = grid_deployment.d1.vms[0].ygg_ip +output "planetary_ip1" { + value = grid_deployment.d1.vms[0].planetary_ip } output "ipv4_vm1" { diff --git a/collections/system_administrators/terraform/advanced/terraform_nomad.md b/collections/system_administrators/terraform/advanced/terraform_nomad.md index a0ff206..3c2d5ba 100644 --- a/collections/system_administrators/terraform/advanced/terraform_nomad.md +++ b/collections/system_administrators/terraform/advanced/terraform_nomad.md @@ -234,19 +234,19 @@ output "client2_wg_ip" { } output "server1_planetary_ip" { - value = grid_deployment.d1.vms[0].ygg_ip + value = grid_deployment.d1.vms[0].planetary_ip } output "server2_planetary_ip" { - value = grid_deployment.d1.vms[1].ygg_ip + value = grid_deployment.d1.vms[1].planetary_ip } output "server3_planetary_ip" { - value = grid_deployment.d1.vms[2].ygg_ip + value = grid_deployment.d1.vms[2].planetary_ip } output "client1_planetary_ip" { - value = grid_deployment.d1.vms[3].ygg_ip + value = grid_deployment.d1.vms[3].planetary_ip } output "client2_planetary_ip" { - value = grid_deployment.d1.vms[4].ygg_ip + value = grid_deployment.d1.vms[4].planetary_ip } ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_provisioners.md b/collections/system_administrators/terraform/advanced/terraform_provisioners.md index 3bae3ea..3a622ee 100644 --- a/collections/system_administrators/terraform/advanced/terraform_provisioners.md +++ b/collections/system_administrators/terraform/advanced/terraform_provisioners.md @@ -61,7 +61,7 @@ resource "grid_deployment" "d1" { type = "ssh" user = "root" agent = true - host = grid_deployment.d1.vms[0].ygg_ip + host = grid_deployment.d1.vms[0].planetary_ip } provisioner "remote-exec" { @@ -88,7 +88,7 @@ resource "grid_deployment" "d1" { type = "ssh" user = "root" agent = true - host = grid_deployment.d1.vms[0].ygg_ip + host = grid_deployment.d1.vms[0].planetary_ip } ``` diff --git a/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md b/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md index e9cbdaa..48fb203 100644 --- a/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md +++ b/collections/system_administrators/terraform/advanced/terraform_wireguard_vpn.md @@ -209,11 +209,11 @@ output "node1_zmachine2_ip" { value = grid_deployment.d2.vms[0].ip } -output "ygg_ip1" { - value = grid_deployment.d1.vms[0].ygg_ip +output "planetary_ip1" { + value = grid_deployment.d1.vms[0].planetary_ip } -output "ygg_ip2" { - value = grid_deployment.d2.vms[0].ygg_ip +output "planetary_ip2" { + value = grid_deployment.d2.vms[0].planetary_ip } output "ipv4_vm1" { diff --git a/collections/system_administrators/terraform/resources/terraform_caprover.md b/collections/system_administrators/terraform/resources/terraform_caprover.md index a0302a6..7a77f96 100644 --- a/collections/system_administrators/terraform/resources/terraform_caprover.md +++ b/collections/system_administrators/terraform/resources/terraform_caprover.md @@ -136,8 +136,8 @@ resource "grid_deployment" "d0" { output "wg_config" { value = grid_network.net0.access_wg_config } -output "ygg_ip" { - value = grid_deployment.d0.vms[0].ygg_ip +output "planetary_ip" { + value = grid_deployment.d0.vms[0].planetary_ip } output "vm_ip" { value = grid_deployment.d0.vms[0].ip @@ -427,8 +427,8 @@ resource "grid_deployment" "d2" { output "wg_config" { value = grid_network.net2.access_wg_config } -output "ygg_ip" { - value = grid_deployment.d2.vms[0].ygg_ip +output "planetary_ip" { + value = grid_deployment.d2.vms[0].planetary_ip } output "vm_ip" { value = grid_deployment.d2.vms[0].ip 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 d68973b..4c523d0 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 @@ -181,8 +181,8 @@ resource "grid_deployment" "qsfs" { output "metrics" { value = grid_deployment.qsfs.qsfs[0].metrics_endpoint } -output "ygg_ip" { - value = grid_deployment.qsfs.vms[0].ygg_ip +output "planetary_ip" { + value = grid_deployment.qsfs.vms[0].planetary_ip } ``` 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 b655166..ed6a139 100644 --- a/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md +++ b/collections/system_administrators/terraform/resources/terraform_qsfs_on_microvm.md @@ -266,8 +266,8 @@ resource "grid_deployment" "qsfs" { output "metrics" { value = grid_deployment.qsfs.qsfs[0].metrics_endpoint } -output "ygg_ip" { - value = grid_deployment.qsfs.vms[0].ygg_ip +output "planetary_ip" { + value = grid_deployment.qsfs.vms[0].planetary_ip } ``` @@ -337,7 +337,7 @@ To SSH with Planetary Network, write the following: ssh root@planetary_IP ``` -Note that the IP address should be the value of the parameter **ygg_ip** from the Terraform Outputs. +Note that the IP address should be the value of the parameter **planetary_ip** from the Terraform Outputs. You now have an SSH connection access to the VM over Planetary Network. diff --git a/collections/system_administrators/terraform/resources/terraform_scheduler.md b/collections/system_administrators/terraform/resources/terraform_scheduler.md index dc51676..9e635fd 100644 --- a/collections/system_administrators/terraform/resources/terraform_scheduler.md +++ b/collections/system_administrators/terraform/resources/terraform_scheduler.md @@ -94,15 +94,15 @@ resource "grid_deployment" "d1" { output "vm1_ip" { value = grid_deployment.d1.vms[0].ip } -output "vm1_ygg_ip" { - value = grid_deployment.d1.vms[0].ygg_ip +output "vm1_planetary_ip" { + value = grid_deployment.d1.vms[0].planetary_ip } output "vm2_ip" { value = grid_deployment.d1.vms[1].ip } -output "vm2_ygg_ip" { - value = grid_deployment.d1.vms[1].ygg_ip +output "vm2_planetary_ip" { + value = grid_deployment.d1.vms[1].planetary_ip } ``` diff --git a/collections/system_administrators/terraform/resources/terraform_vm.md b/collections/system_administrators/terraform/resources/terraform_vm.md index 03ab0db..15fd456 100644 --- a/collections/system_administrators/terraform/resources/terraform_vm.md +++ b/collections/system_administrators/terraform/resources/terraform_vm.md @@ -87,15 +87,15 @@ resource "grid_deployment" "d1" { output "vm1_ip" { value = grid_deployment.d1.vms[0].ip } -output "vm1_ygg_ip" { - value = grid_deployment.d1.vms[0].ygg_ip +output "vm1_planetary_ip" { + value = grid_deployment.d1.vms[0].planetary_ip } output "vm2_ip" { value = grid_deployment.d1.vms[1].ip } -output "vm2_ygg_ip" { - value = grid_deployment.d1.vms[1].ygg_ip +output "vm2_planetary_ip" { + value = grid_deployment.d1.vms[1].planetary_ip } ``` @@ -276,7 +276,7 @@ output "public_ip" { value = grid_deployment.d1.vms[0].computedip } -output "ygg_ip" { - value = grid_deployment.d1.vms[0].ygg_ip +output "planetary_ip" { + value = grid_deployment.d1.vms[0].planetary_ip } ``` diff --git a/collections/system_administrators/terraform/resources/terraform_vm_gateway.md b/collections/system_administrators/terraform/resources/terraform_vm_gateway.md index d7dc709..1ae4891 100644 --- a/collections/system_administrators/terraform/resources/terraform_vm_gateway.md +++ b/collections/system_administrators/terraform/resources/terraform_vm_gateway.md @@ -77,8 +77,8 @@ output "public_ip" { value = split("/",grid_deployment.d1.vms[0].computedip)[0] } -output "ygg_ip" { - value = grid_deployment.d1.vms[0].ygg_ip +output "planetary_ip" { + value = grid_deployment.d1.vms[0].planetary_ip } ``` diff --git a/collections/system_administrators/terraform/terraform_full_vm.md b/collections/system_administrators/terraform/terraform_full_vm.md index 161858f..74d4cba 100644 --- a/collections/system_administrators/terraform/terraform_full_vm.md +++ b/collections/system_administrators/terraform/terraform_full_vm.md @@ -196,8 +196,8 @@ output "node1_zmachine1_ip" { value = grid_deployment.d1.vms[0].ip } -output "ygg_ip1" { - value = grid_deployment.d1.vms[0].ygg_ip +output "planetary_ip1" { + value = grid_deployment.d1.vms[0].planetary_ip } output "ipv4_vm1" { diff --git a/collections/tfconnect/.collection b/collections/tfconnect/.collection new file mode 100644 index 0000000..e69de29 diff --git a/collections/tfconnect/img/farming_tf_wallet_1.png b/collections/tfconnect/img/farming_tf_wallet_1.png new file mode 100644 index 0000000..6e1f766 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_1.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_10.png b/collections/tfconnect/img/farming_tf_wallet_10.png new file mode 100644 index 0000000..d990568 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_10.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_11.png b/collections/tfconnect/img/farming_tf_wallet_11.png new file mode 100644 index 0000000..1a0d5b9 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_11.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_12.png b/collections/tfconnect/img/farming_tf_wallet_12.png new file mode 100644 index 0000000..9ffb19d Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_12.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_13.png b/collections/tfconnect/img/farming_tf_wallet_13.png new file mode 100644 index 0000000..1b96f81 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_13.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_14.png b/collections/tfconnect/img/farming_tf_wallet_14.png new file mode 100644 index 0000000..c0b301f Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_14.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_15.png b/collections/tfconnect/img/farming_tf_wallet_15.png new file mode 100644 index 0000000..120be6a Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_15.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_16.png b/collections/tfconnect/img/farming_tf_wallet_16.png new file mode 100644 index 0000000..781bf30 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_16.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_17.png b/collections/tfconnect/img/farming_tf_wallet_17.png new file mode 100644 index 0000000..51130a3 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_17.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_18.png b/collections/tfconnect/img/farming_tf_wallet_18.png new file mode 100644 index 0000000..8fe5d2f Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_18.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_19.png b/collections/tfconnect/img/farming_tf_wallet_19.png new file mode 100644 index 0000000..6c6796c Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_19.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_2.png b/collections/tfconnect/img/farming_tf_wallet_2.png new file mode 100644 index 0000000..564b312 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_2.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_20.png b/collections/tfconnect/img/farming_tf_wallet_20.png new file mode 100644 index 0000000..da5c0ca Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_20.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_21.png b/collections/tfconnect/img/farming_tf_wallet_21.png new file mode 100644 index 0000000..27abf0c Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_21.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_22.png b/collections/tfconnect/img/farming_tf_wallet_22.png new file mode 100644 index 0000000..adde6b0 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_22.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_23.png b/collections/tfconnect/img/farming_tf_wallet_23.png new file mode 100644 index 0000000..aabf0a0 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_23.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_29.png b/collections/tfconnect/img/farming_tf_wallet_29.png new file mode 100644 index 0000000..52a66cd Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_29.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_3.png b/collections/tfconnect/img/farming_tf_wallet_3.png new file mode 100644 index 0000000..0a45687 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_3.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_32.png b/collections/tfconnect/img/farming_tf_wallet_32.png new file mode 100644 index 0000000..ab617bf Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_32.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_33.png b/collections/tfconnect/img/farming_tf_wallet_33.png new file mode 100644 index 0000000..3c6d591 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_33.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_34.png b/collections/tfconnect/img/farming_tf_wallet_34.png new file mode 100644 index 0000000..944688f Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_34.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_35.png b/collections/tfconnect/img/farming_tf_wallet_35.png new file mode 100644 index 0000000..845bd35 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_35.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_36.png b/collections/tfconnect/img/farming_tf_wallet_36.png new file mode 100644 index 0000000..b294bcb Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_36.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_37.png b/collections/tfconnect/img/farming_tf_wallet_37.png new file mode 100644 index 0000000..c61e06e Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_37.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_38.png b/collections/tfconnect/img/farming_tf_wallet_38.png new file mode 100644 index 0000000..732f98a Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_38.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_39.png b/collections/tfconnect/img/farming_tf_wallet_39.png new file mode 100644 index 0000000..0c78bc0 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_39.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_4.png b/collections/tfconnect/img/farming_tf_wallet_4.png new file mode 100644 index 0000000..11ef6d7 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_4.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_40.png b/collections/tfconnect/img/farming_tf_wallet_40.png new file mode 100644 index 0000000..6651627 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_40.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_41.png b/collections/tfconnect/img/farming_tf_wallet_41.png new file mode 100644 index 0000000..839e929 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_41.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_42.png b/collections/tfconnect/img/farming_tf_wallet_42.png new file mode 100644 index 0000000..5f84480 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_42.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_43.png b/collections/tfconnect/img/farming_tf_wallet_43.png new file mode 100644 index 0000000..eb3a017 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_43.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_44.png b/collections/tfconnect/img/farming_tf_wallet_44.png new file mode 100644 index 0000000..4a10071 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_44.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_45.png b/collections/tfconnect/img/farming_tf_wallet_45.png new file mode 100644 index 0000000..0d6e86d Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_45.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_46.png b/collections/tfconnect/img/farming_tf_wallet_46.png new file mode 100644 index 0000000..2039941 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_46.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_47.png b/collections/tfconnect/img/farming_tf_wallet_47.png new file mode 100644 index 0000000..71ea72e Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_47.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_5.png b/collections/tfconnect/img/farming_tf_wallet_5.png new file mode 100644 index 0000000..2dd845d Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_5.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_57.png b/collections/tfconnect/img/farming_tf_wallet_57.png new file mode 100644 index 0000000..b9289a4 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_57.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_58.png b/collections/tfconnect/img/farming_tf_wallet_58.png new file mode 100644 index 0000000..a78d6d8 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_58.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_59.png b/collections/tfconnect/img/farming_tf_wallet_59.png new file mode 100644 index 0000000..4f6e7f2 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_59.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_6.png b/collections/tfconnect/img/farming_tf_wallet_6.png new file mode 100644 index 0000000..5766b18 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_6.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_7.png b/collections/tfconnect/img/farming_tf_wallet_7.png new file mode 100644 index 0000000..c9256be Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_7.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_8.png b/collections/tfconnect/img/farming_tf_wallet_8.png new file mode 100644 index 0000000..0901cf6 Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_8.png differ diff --git a/collections/tfconnect/img/farming_tf_wallet_9.png b/collections/tfconnect/img/farming_tf_wallet_9.png new file mode 100644 index 0000000..a913e4b Binary files /dev/null and b/collections/tfconnect/img/farming_tf_wallet_9.png differ diff --git a/collections/tfconnect/img/farming_wallet_5.png b/collections/tfconnect/img/farming_wallet_5.png new file mode 100644 index 0000000..9a83dd3 Binary files /dev/null and b/collections/tfconnect/img/farming_wallet_5.png differ diff --git a/collections/tfconnect/img/tfconnect_authenticator_1.png b/collections/tfconnect/img/tfconnect_authenticator_1.png new file mode 100644 index 0000000..9949b79 Binary files /dev/null and b/collections/tfconnect/img/tfconnect_authenticator_1.png differ diff --git a/collections/tfconnect/img/tfconnect_authenticator_2.png b/collections/tfconnect/img/tfconnect_authenticator_2.png new file mode 100644 index 0000000..93b0401 Binary files /dev/null and b/collections/tfconnect/img/tfconnect_authenticator_2.png differ diff --git a/collections/tfconnect/img/tfconnect_authenticator_3.png b/collections/tfconnect/img/tfconnect_authenticator_3.png new file mode 100644 index 0000000..e8173c7 Binary files /dev/null and b/collections/tfconnect/img/tfconnect_authenticator_3.png differ diff --git a/collections/tfconnect/img/tfconnect_enter_password.png b/collections/tfconnect/img/tfconnect_enter_password.png new file mode 100644 index 0000000..60166d0 Binary files /dev/null and b/collections/tfconnect/img/tfconnect_enter_password.png differ diff --git a/collections/tfconnect/img/tfconnect_logging_in.png b/collections/tfconnect/img/tfconnect_logging_in.png new file mode 100644 index 0000000..86e9a37 Binary files /dev/null and b/collections/tfconnect/img/tfconnect_logging_in.png differ diff --git a/collections/tfconnect/tfconnect_advanced.md b/collections/tfconnect/tfconnect_advanced.md new file mode 100644 index 0000000..3d57425 --- /dev/null +++ b/collections/tfconnect/tfconnect_advanced.md @@ -0,0 +1,267 @@ +

ThreeFold Connect Advanced

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [ThreeFold Connect Installation](#threefold-connect-installation) + - [Verify your identity by Email](#verify-your-identity-by-email) + - [Change email associated with TF account](#change-email-associated-with-tf-account) +- [Create a Wallet](#create-a-wallet) +- [See ThreeFold Connect App and Wallet Transactions](#see-threefold-connect-app-and-wallet-transactions) +- [Show Seed Phrase - Remove Account from TF Connect App](#show-seed-phrase---remove-account-from-tf-connect-app) +- [Recover Account on the ThreeFold Connect App](#recover-account-on-the-threefold-connect-app) +- [Import Farm from the TF Connect App to the TF Dashboard](#import-farm-from-the-tf-connect-app-to-the-tf-dashboard) +- [Import TF Dashboard Wallet to the TF Connect App Wallet](#import-tf-dashboard-wallet-to-the-tf-connect-app-wallet) +- [Send and Receive TFT between TF Connect Wallets](#send-and-receive-tft-between-tf-connect-wallets) + - [Send TFT](#send-tft) + - [Receive TFT](#receive-tft) + - [Send TFT to Hardware Wallet on Stellar Blockchain](#send-tft-to-hardware-wallet-on-stellar-blockchain) +- [Disclaimer](#disclaimer) + +*** + +## Introduction + +In this section, we cover the basics and advanced features of the ThreeFold Connect app. + +This app is available for [Android](https://play.google.com/store/apps/details?id=org.jimber.threebotlogin&hl=en&gl=US) and [iOS](https://apps.apple.com/us/app/threefold-connect/id1459845885). + +- Note that for Android phones, you need at minimum Android Nougat, the 8.0 software version. +- Note that for iOS phones, you need at minimum iOS 14.5. It will be soon available to iOS 13. + +![farming_wallet_5](./img/farming_wallet_5.png) + +## ThreeFold Connect Installation + +Either use the links above, or search for the ThreeFold Connect app on the Apple Store or the Google Play store. Then install and open the app. If you want to leave a 5 star review of the app, no one here will stop you! + +![farming_tf_wallet_1](./img/farming_tf_wallet_1.png) +![farming_tf_wallet_2](./img/farming_tf_wallet_2.png) + +When you try to open the app, if you get an error message such as : "Error in initialization in Flagsmith...", you might need to upgrade your phone to a newer software version (8.0 for Android and 13 for iOS). + +Once you are in the application, you will see some introduction pages to help you familiarize yourself with the TF Connect app. You will also be asked to read and accept ThreeFold's Terms and conditions. + +![farming_tf_wallet_3](./img/farming_tf_wallet_3.png) +![farming_tf_wallet_4](./img/farming_tf_wallet_4.png) + +You will then be asked to either *SIGN UP* or *RECOVER ACCOUNT*. For now, we will show how to sign up. Later in the guide, we will show you how to recover an account. + +![farming_tf_wallet_5](./img/farming_tf_wallet_5.png) + +You will then be asked to choose a *Threefold Connect Id*. This ID will be used, as well as the seed phrase, when you want to recover an account. Choose wisely. And do not forget it! Here we will use TFExample, as an example. + +![farming_tf_wallet_6](./img/farming_tf_wallet_6.png) + +Next, you need to add a valid email address. This will be used as a broad KYC. You will need to access your email and confirm the validation email from ThreeFold to use properly the TF Connect app wallet. + +![farming_tf_wallet_7](./img/farming_tf_wallet_7.png) + +Then, the next step is crucial! Make sure no one is around looking at your screen. You will be shown your seed phrase. Keep this in a secure and offline place. You will need the 3bot ID and the seed phrase to recover your account. This seed phrase is of utmost importance. Do not lose it nor give it to anyone. + +![farming_tf_wallet_8](./img/farming_tf_wallet_8.png) + +Once you've hit Next, you will be asked to write down 3 random words of your seed phrase. This is a necessary step to ensure you have taken the time to write down your seed phrase. + +![farming_tf_wallet_9](./img/farming_tf_wallet_9.png) + +Then, you'll be asked to confirm your TF 3bot name and the associated email. + +![farming_tf_wallet_10](./img/farming_tf_wallet_10.png) + +Finally, you will be asked to choose a 4-digit PIN. This will be needed to use the ThreeFold Connect app. If you ever forget this 4-digit PIN, you will need to recover your account from your 3bot name and your seed phrase. You will need to confirm the new pin in the next step. + +![farming_tf_wallet_11](./img/farming_tf_wallet_11.png) + +That's it! You've created your ThreeFold Connect account. You can press the hamburger menu on the top left to explore the ThreeFold Connect app. + +![farming_tf_wallet_12](./img/farming_tf_wallet_12.png) + +In the next step, we will create a ThreeFold Connect Wallet. You'll see, it's very simple! + +### Verify your identity by Email + +Once you've created your account, an email will be sent to the email address you've chosen in the account creation process. + +To verify your email, go to your email account and open the email sent by *info@openkyc.live* with the subject *Verify your email address*. + +In this email, click on the link *Verify my email address*. This will lead you to a *login.threefold.me* link. The process should be automatic. Once this is done, you will receive a confirmation on screen, as well as on your phone. + +![farming_tf_wallet_39](./img/farming_tf_wallet_39.png) + +![farming_tf_wallet_40](./img/farming_tf_wallet_40.png) + +![farming_tf_wallet_41](./img/farming_tf_wallet_41.png) + +If for some reason, you did not receive the verification email, simply click on *Verify* and another email will be sent. + +![farming_tf_wallet_42](./img/farming_tf_wallet_42.png) + +![farming_tf_wallet_43](./img/farming_tf_wallet_43.png) + +### Change email associated with TF account + +If you want to change your email, simply click on the *pencil* next to your email and write another email. You will need to redo the KYC verification process. + +![farming_tf_wallet_44](./img/farming_tf_wallet_44.png) + + +## Create a Wallet + +To create a wallet, click on the ThreeFold Connect app menu. This is what you see. Choose *Wallet*. + +![farming_tf_wallet_13](./img/farming_tf_wallet_13.png) + +Once you are in the section *Wallet*, click on *Create Initial Wallet*. If it doesn't work the first time, retry some more. If you have trouble creating a wallet, make sure your connection is reliable. You can try a couple of minutes later if it still doesn't work. With a reliable connection, there shouldn't be any problem. Contact TF Support if problems persist. + +![farming_tf_wallet_14](./img/farming_tf_wallet_14.png) + +This is what you see when the TF Grid is initializing your wallet. + +![farming_tf_wallet_15](./img/farming_tf_wallet_15.png) + +Once your wallet is initialized, you will see *No blanace found for this wallet*. You can click on this button to enter the wallet. + +![farming_tf_wallet_16](./img/farming_tf_wallet_16.png) + +Once inside your wallet, this is what you see. + +![farming_tf_wallet_17](./img/farming_tf_wallet_17.png) + +We will now see where the Stellar and the TF Chain Addresses and Secrets are to be found. We will also change the wallet name. To do so, click on the *circled i* at the bottom right of the screen. + +![farming_tf_wallet_18](./img/farming_tf_wallet_18.png) + +![farming_tf_wallet_19](./img/farming_tf_wallet_19.png) + +You can choose the name you want for your wallet. Here we use TFWalletExample. Note that you can also use alphanumeric characters. + +![farming_tf_wallet_20](./img/farming_tf_wallet_20.png) + +At the top of the section *Wallet*, we can see that the name has changed. + +![farming_tf_wallet_21](./img/farming_tf_wallet_21.png) + +Now, if you want to copy your Stellar Address, simply click on the button presented with the green circle. To access the TF Chain address, click on the button presented with the red circle. When your phone has copied the address, the TF Connect app will give show a confirmation message as shown below. + +![farming_tf_wallet_22](./img/farming_tf_wallet_22.png) + +In some situations, you will want to access the Stellar and TF Chain secrets. To do so, simply click on the "eye" button of the desired chain, and then copy the secret. + +![farming_tf_wallet_23](./img/farming_tf_wallet_23.png) + +## See ThreeFold Connect App and Wallet Transactions + +To see your transactions, simply click on the two arrows at the bottom of the screen, as shown below. + +![farming_tf_wallet_29](./img/farming_tf_wallet_29.png) + +## Show Seed Phrase - Remove Account from TF Connect App + +To see your seed phrase or remove your account from the TF Connect app, choose *Settings* in the ThreeFold Connect app menu. + +![farming_tf_wallet_32](./img/farming_tf_wallet_32.png) + +First, to see your seed phrase, click on this button as shown below: + +![farming_tf_wallet_31](./img/farming_tf_wallet_38.png) + +You will then be able to see your seed phrase. You can make sure you have your seed phrase somewhere safe, offline, before removing your account. + +Now, we will remove the account from the ThreeFold Connect app. In Settings, click on the arrow circled in green and click on the red button with a white dashed in it. Beware: once done, you can only recover your account with your **3bot ID** and your **seed phrase**. + +![farming_tf_wallet_33](./img/farming_tf_wallet_33.png) + +You will be asked to confirm your action as a security check. + +![farming_tf_wallet_34](./img/farming_tf_wallet_34.png) + +## Recover Account on the ThreeFold Connect App + +Once you're removed your account, if you want to recover your account, choose the option *RECOVER ACCOUNT* on the opening screen on the app. + +![farming_tf_wallet_35](./img/farming_tf_wallet_35.png) + +You will be asked to enter your *3bot ID* as well as your *seed phrase*. + +![farming_tf_wallet_36](./img/farming_tf_wallet_36.png) + +You will then be asked to choose and confirm a new 4-digit pin code. Once this is done, you will receive the following confirmation: + +![farming_tf_wallet_37](./img/farming_tf_wallet_37.png) + +That's it! You've recovered your account. + + +## Import Farm from the TF Connect App to the TF Dashboard + +If you want to import your farm from the ThreeFold Connect app to the ThreeFold Dashboard, follow these steps. + +Note that as of now, you cannot import your farm from the TF Dashboard to the ThreeFold Connect app, but it is possible to import your wallet. + +First, you want to find the TF Chain Secret, this is, in short, a hex version of the private key. To find the secret, head over to the *Farmer migration* (via the TF Menu). + +In the *Farming migration* section, click on the arrow (in green here) of the farm you want to export on the ThreeFold Dashboard. + +![farming_tf_wallet_45](./img/farming_tf_wallet_45.png) + +Then, click on the arrow (in green) to see your TF Chain Secret. + +![farming_tf_wallet_46](./img/farming_tf_wallet_46.png) + +Click on the button to copy the Secret. The app will show a confirmation message. + +![farming_tf_wallet_47](./img/farming_tf_wallet_47.png) + +Now head over to the ThreeFold Dashboard and enter the TF Chain Secret as the mnemonics. + +In the Farm section, you can now see your farm. You can see here that the farming reward address is the same as before. + +That's it! You have successfully imported the farm from the ThreeFold Connect app to the ThreeFold Dashboard. + + + +## Import TF Dashboard Wallet to the TF Connect App Wallet + +Now that we've seen how to go from the TF Connect app to the ThreeFold Dashboard, we will now show how to go the other way around. This method is very simple. You will need your TF Dashboard seed phrase handy. + +Go in the Wallet section of the ThreeFold Connect app and click on import at the bottom right (in green). + +![farming_tf_wallet_57](./img/farming_tf_wallet_57.png) + +Then simply name your wallet and enter the TF Dashboard seed phrase. + +![farming_tf_wallet_58](./img/farming_tf_wallet_58.png) + +Then in the Wallet section, you will now see the wallet. + +![farming_tf_wallet_59](./img/farming_tf_wallet_59.png) + + + +## Send and Receive TFT between TF Connect Wallets + +To send and receive TFT between TF Connect Wallet, go into Wallet and select the wallet you want to use.Remember that you must always send and receive TFT on the same chain, so choose either Stellar or TFChain. + +### Send TFT + +To send tokens, select *Send Coins* in the wallet section. To send TFT, you can scan the QR code of the address you wish to send tokens to. This will enter automatically the necessary information. Make sure to double check that the information is correct to avoid any complications. Otherwise, you can simply enter the correct address in the section *To*. Choose the amount you want to send. Then click on *SEND TOKENS*. + +Note that, for such transactions, there is a maximum fee of 0.10 TFT on the Stellar blockchain, and a maximum fee of 0.01 TFT on the TFChain. This amount is taken from the amount you are sending. It is not taken directly in your wallet. + +### Receive TFT + +To receive tokens, select *Receive Coins* in the wallet section. To receive TFT, you can generate a QR code to share to the person waiting to send you tokens. Otherwise, the sender can simply use your Stellar or TFChain address and send you TFT. + +To generate the QR Code, select the chain you want to use, Stellar or TFChain, enter the amount and the message if needed and click on *GENERATE QR CODE*. Note that there is no message option for TFChain, only for Stellar. This will generate a QR Code that can be scanned by other devices. + + +### Send TFT to Hardware Wallet on Stellar Blockchain + +Before sending TFT to a hardware wallet, make sure the hardware wallet has a TFT trustline on the Stellar Blockchain. For more information, read [this section](threefold_token@@hardware_wallet). + +## 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](legal@@disclaimer) and seek advice from a qualified financial professional if needed. diff --git a/collections/tfconnect/tfconnect_authenticator.md b/collections/tfconnect/tfconnect_authenticator.md new file mode 100644 index 0000000..5e8bf57 --- /dev/null +++ b/collections/tfconnect/tfconnect_authenticator.md @@ -0,0 +1,43 @@ +

ThreeFold Connect Authenticator

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Connect with the Authenticator](#connect-with-the-authenticator) +--- + +## Introduction + +We present how to use the ThreeFold Authenticator. + +The ThreeFold Connect two-factor authenticator enables you access to ThreeFold Grid tools and solutions. Not a single person in the world will be able to log in to your account, not even us. + +## Connect with the Authenticator + +To connect with the authenticator: + +- Make sure your ThreeFold Connect app is open before sending the login request. + +- Write your ThreeFold ID + +![](./img/tfconnect_authenticator_1.png) + +- Click `SIGN IN` + +![](./img/tfconnect_authenticator_2.png) + +- Take note of the icon shown on your screen + +![](./img/tfconnect_authenticator_3.png) + +- On your phone, open TFConnect and enter your password + +![](./img/tfconnect_enter_password.png) + +- Click on the icon you saw on the browser screen + +- You will see a confirmation screen + +![](./img/tfconnect_logging_in.png) + +You should now be logged in. \ No newline at end of file diff --git a/collections/tfconnect/tfconnect_overview.md b/collections/tfconnect/tfconnect_overview.md new file mode 100644 index 0000000..7c54457 --- /dev/null +++ b/collections/tfconnect/tfconnect_overview.md @@ -0,0 +1,35 @@ +

ThreeFold Connect Overview

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Benefits](#benefits) +- [Installation](#installation) + +--- + +## Introduction + +We present some of the ThreeFold Connect app benefits and provide links to install the app on your phone. + +## Benefits + +Some key features and benefits of the ThreeFold Connect app are: + +- 2FA Authenticator: + - ThreeFold Connect is a passwordless 2FA authenticator that ensures a user is who they claim to be. +- Decentralized: + - The app is decentralized, allowing users to access the ThreeFold Network platforms and their fully private digital wallet. +- Private Digital Wallet: + - Users can manage their ThreeFold Tokens (TFT) and view their transaction history on the TF chain. +- Support Chat: + - The app provides a support chat where users can get answers to their questions about ThreeFold-related topics. +- News Section: + - The app features a news section where users can find the latest ThreeFold news and updates. + +## Installation + +The ThreeFold Connect app is available for both iOS and Android devices. + +- [Google Store Link](https://play.google.com/store/apps/details?id=org.jimber.threebotlogin) +- [Apple Store](https://itunes.apple.com/be/app/3bot-login/id1459845885?l=nl&mt=8) \ No newline at end of file diff --git a/collections/tfconnect/tfconnect_toc.md b/collections/tfconnect/tfconnect_toc.md new file mode 100644 index 0000000..c51e62e --- /dev/null +++ b/collections/tfconnect/tfconnect_toc.md @@ -0,0 +1,10 @@ +# ThreeFold Connect App + +ThreeFold Connect is a mobile app that serves as a gateway to the ThreeFold ecosystem and its various ThreeFold products and services. + +

Table of Contents

+ +- [TFConnect Overview](./tfconnect_overview.md) +- [TFConnect Authenticator](./tfconnect_authenticator.md) +- [TFConnect Advanced](./tfconnect_advanced.md) +- [TFConnect Troubleshooting](./tfconnect_troubleshooting.md) \ No newline at end of file diff --git a/collections/tfconnect/tfconnect_troubleshooting.md b/collections/tfconnect/tfconnect_troubleshooting.md new file mode 100644 index 0000000..04009a5 --- /dev/null +++ b/collections/tfconnect/tfconnect_troubleshooting.md @@ -0,0 +1,60 @@ +

ThreeFold Connect Troubleshooting

+ +

Table of Contents

+ +- [Introduction](#introduction) +- [Basic Troubleshooting](#basic-troubleshooting) + - [I am trying to access my wallet in the ThreeFold Connect App. It worked fine before, but now I just get a white screen. What does it mean and what can I do?](#i-am-trying-to-access-my-wallet-in-the-threefold-connect-app-it-worked-fine-before-but-now-i-just-get-a-white-screen-what-does-it-mean-and-what-can-i-do) + - [When I open the ThreeFold Connect App, I get the error: Error in initialization in Flagsmith. How can I fix this issue?](#when-i-open-the-threefold-connect-app-i-get-the-error-error-in-initialization-in-flagsmith-how-can-i-fix-this-issue) + - [I do not remember the name (ThreeFold 3bot ID) associated with my seed phrase on the ThreeFold Connect app. Can I recover my TF Connect app account with only the seed phrase and not the name (3bot ID) associated with it?](#i-do-not-remember-the-name-threefold-3bot-id-associated-with-my-seed-phrase-on-the-threefold-connect-app-can-i-recover-my-tf-connect-app-account-with-only-the-seed-phrase-and-not-the-name-3bot-id-associated-with-it) + - [TF Connect App is now asking for a 4-digit password (PIN). I don't remember it as I usually use touch or face ID to unlock the app. What can I do?](#tf-connect-app-is-now-asking-for-a-4-digit-password-pin-i-dont-remember-it-as-i-usually-use-touch-or-face-id-to-unlock-the-app-what-can-i-do) + - [Is there a way to have more than one wallet in TF Connect App?](#is-there-a-way-to-have-more-than-one-wallet-in-tf-connect-app) + - [On the ThreeFold Connect App, it says I need to migrate my Titan farm from V2 to V3. What do I have to do? How long does this take?](#on-the-threefold-connect-app-it-says-i-need-to-migrate-my-titan-farm-from-v2-to-v3-what-do-i-have-to-do-how-long-does-this-take) + +--- + +## Introduction + +We provide solutions to different issues users can encounter while using the ThreeFold Connect app. + +## Basic Troubleshooting + +### I am trying to access my wallet in the ThreeFold Connect App. It worked fine before, but now I just get a white screen. What does it mean and what can I do? + +On the TF Connect App, when you get a white screen, it means that there is a connection issue. It can help to try other networks; maybe try switching between ethernet cable or wifi. Or you can also try it later when the connection might be more stable. + + + +### When I open the ThreeFold Connect App, I get the error: Error in initialization in Flagsmith. How can I fix this issue? + +To fix this Flagsmith error message on the ThreeFold Connect app, you can try the following methods: + +* Check your internet connection +* Update your phone current operating system (OS) version +* Update the date and time on your phone + + +### I do not remember the name (ThreeFold 3bot ID) associated with my seed phrase on the ThreeFold Connect app. Can I recover my TF Connect app account with only the seed phrase and not the name (3bot ID) associated with it? + +If you forgot the name associated with your seed phrase on the TF Connect app, you can always create a new identity (ThreeFold 3bot ID) and import your wallet using the old seed phrase. + +Since the Connect App is also used for identity and authentication, you need both the name (3bot ID) and seed phrase to fully recover your account. The wallet is only linked to the seed phrase and not the name (3bot ID). + +### TF Connect App is now asking for a 4-digit password (PIN). I don't remember it as I usually use touch or face ID to unlock the app. What can I do? + +When you set up your the app, you are asked a 4-digit password (PIN). After some time, the app will be asking for this PIN when users may have been exclusively using touch/face ID. You can reset it by recovering the account with your seedphrase. + + +### Is there a way to have more than one wallet in TF Connect App? + +Yes, this is perfectly possible. You can have multiple wallets in the TF Connect app. You can have multiple wallets for the Stellar network and multiple wallets for Polkadot Substrate. + +For example, you can create a wallet on the Stellar Blockchain and import it on TF Connect App with the function *Import Wallet*. Just copy the seedphrase and it will be imported in TF Connect App. + +Note: There will not be an automatic function in the app to create a new wallet. You must do it manually. + + +### On the ThreeFold Connect App, it says I need to migrate my Titan farm from V2 to V3. What do I have to do? How long does this take? + +To migrate, read [this documentation](https://forum.threefold.io/t/what-to-do-if-your-farm-is-still-on-grid-v2-closed/3761). + diff --git a/heroscript/developers/book_collections.md b/heroscript/developers/book_collections.md new file mode 100644 index 0000000..c49abbb --- /dev/null +++ b/heroscript/developers/book_collections.md @@ -0,0 +1,46 @@ +```js + +!!book.generate name:'developers' title:'ThreeFold Developers Manual' printbook:false foldlevel:0 + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/developers' + +!!doctree.add + 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/main/collections/dashboard' +!!doctree.add + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/tfconnect' +!!doctree.add + 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/main/collections/farmers' +!!doctree.add + 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/main/collections/threefold_token' +!!doctree.add + 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/main/collections/about' +!!doctree.add + 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/main/collections/legal' +!!doctree.add + 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/main/collections/cloud' +!!doctree.add + 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/main/collections/partners_utilization' + +!!doctree.add + 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/main/collections/mkondo' + +``` + diff --git a/heroscript/developers/context.md b/heroscript/developers/context.md new file mode 100644 index 0000000..a8f5892 --- /dev/null +++ b/heroscript/developers/context.md @@ -0,0 +1,11 @@ + +```js + +!!books.configure + buildroot:'~/hero/var/mdbuild' + publishroot:'~/hero/www/info' + install:true + reset:false + +``` + diff --git a/heroscript/developers/sshkey.md b/heroscript/developers/sshkey.md new file mode 100644 index 0000000..85acfe6 --- /dev/null +++ b/heroscript/developers/sshkey.md @@ -0,0 +1,14 @@ + +```js +!!sshagent.key_add + name:'books' + privkey:' + -----BEGIN OPENSSH PRIVATE KEY----- + b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW + QyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQAAAIhb3ybRW98m + 0QAAAAtzc2gtZWQyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQ + AAAEC+fcDBPqdJHlJOQJ2zXhU2FztKAIl3TmWkaGCPnyts49d/1n/YAfz/xrWmlqAKmVB2 + FbJDzBkCJ5TDec1zGwOJAAAABWJvb2tz + -----END OPENSSH PRIVATE KEY----- + ' +``` \ No newline at end of file diff --git a/heroscript/duniayetu/book_collections.md b/heroscript/duniayetu/book_collections.md index 2381a8a..0d4439c 100644 --- a/heroscript/duniayetu/book_collections.md +++ b/heroscript/duniayetu/book_collections.md @@ -3,7 +3,7 @@ ```js !!book.generate name:'duniayetu' title:'Dunia Yetu' - url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/duniayetu_dar' + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/duniayetu' !!doctree.add diff --git a/heroscript/farmers/book_collections.md b/heroscript/farmers/book_collections.md new file mode 100644 index 0000000..8d918f8 --- /dev/null +++ b/heroscript/farmers/book_collections.md @@ -0,0 +1,46 @@ +```js + +!!book.generate name:'farmers' title:'ThreeFold Farmers Manual' printbook:false foldlevel:0 + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/farmers' + +!!doctree.add + 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/main/collections/dashboard' +!!doctree.add + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/tfconnect' +!!doctree.add + 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/main/collections/farmers' +!!doctree.add + 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/main/collections/threefold_token' +!!doctree.add + 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/main/collections/about' +!!doctree.add + 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/main/collections/legal' +!!doctree.add + 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/main/collections/cloud' +!!doctree.add + 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/main/collections/partners_utilization' + +!!doctree.add + 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/main/collections/mkondo' + +``` + diff --git a/heroscript/farmers/context.md b/heroscript/farmers/context.md new file mode 100644 index 0000000..a8f5892 --- /dev/null +++ b/heroscript/farmers/context.md @@ -0,0 +1,11 @@ + +```js + +!!books.configure + buildroot:'~/hero/var/mdbuild' + publishroot:'~/hero/www/info' + install:true + reset:false + +``` + diff --git a/heroscript/farmers/sshkey.md b/heroscript/farmers/sshkey.md new file mode 100644 index 0000000..85acfe6 --- /dev/null +++ b/heroscript/farmers/sshkey.md @@ -0,0 +1,14 @@ + +```js +!!sshagent.key_add + name:'books' + privkey:' + -----BEGIN OPENSSH PRIVATE KEY----- + b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW + QyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQAAAIhb3ybRW98m + 0QAAAAtzc2gtZWQyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQ + AAAEC+fcDBPqdJHlJOQJ2zXhU2FztKAIl3TmWkaGCPnyts49d/1n/YAfz/xrWmlqAKmVB2 + FbJDzBkCJ5TDec1zGwOJAAAABWJvb2tz + -----END OPENSSH PRIVATE KEY----- + ' +``` \ No newline at end of file diff --git a/heroscript/knowledge_base/book_collections.md b/heroscript/knowledge_base/book_collections.md new file mode 100644 index 0000000..e336e31 --- /dev/null +++ b/heroscript/knowledge_base/book_collections.md @@ -0,0 +1,46 @@ +```js + +!!book.generate name:'knowledge_base' title:'ThreeFold Knowledge Base' printbook:false foldlevel:0 + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/knowledge_base' + +!!doctree.add + 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/main/collections/dashboard' +!!doctree.add + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/tfconnect' +!!doctree.add + 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/main/collections/farmers' +!!doctree.add + 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/main/collections/threefold_token' +!!doctree.add + 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/main/collections/about' +!!doctree.add + 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/main/collections/legal' +!!doctree.add + 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/main/collections/cloud' +!!doctree.add + 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/main/collections/partners_utilization' + +!!doctree.add + 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/main/collections/mkondo' + +``` + diff --git a/heroscript/knowledge_base/context.md b/heroscript/knowledge_base/context.md new file mode 100644 index 0000000..a8f5892 --- /dev/null +++ b/heroscript/knowledge_base/context.md @@ -0,0 +1,11 @@ + +```js + +!!books.configure + buildroot:'~/hero/var/mdbuild' + publishroot:'~/hero/www/info' + install:true + reset:false + +``` + diff --git a/heroscript/knowledge_base/sshkey.md b/heroscript/knowledge_base/sshkey.md new file mode 100644 index 0000000..85acfe6 --- /dev/null +++ b/heroscript/knowledge_base/sshkey.md @@ -0,0 +1,14 @@ + +```js +!!sshagent.key_add + name:'books' + privkey:' + -----BEGIN OPENSSH PRIVATE KEY----- + b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW + QyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQAAAIhb3ybRW98m + 0QAAAAtzc2gtZWQyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQ + AAAEC+fcDBPqdJHlJOQJ2zXhU2FztKAIl3TmWkaGCPnyts49d/1n/YAfz/xrWmlqAKmVB2 + FbJDzBkCJ5TDec1zGwOJAAAABWJvb2tz + -----END OPENSSH PRIVATE KEY----- + ' +``` \ No newline at end of file diff --git a/heroscript/library/book_collections.md b/heroscript/library/book_collections.md new file mode 100644 index 0000000..a620fd2 --- /dev/null +++ b/heroscript/library/book_collections.md @@ -0,0 +1,10 @@ +```js + +!!book.generate name:'library' title:'ThreeFold Library' printbook:false foldlevel:0 + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/library' + +!!doctree.add + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/library' + +``` + diff --git a/heroscript/library/context.md b/heroscript/library/context.md new file mode 100644 index 0000000..a8f5892 --- /dev/null +++ b/heroscript/library/context.md @@ -0,0 +1,11 @@ + +```js + +!!books.configure + buildroot:'~/hero/var/mdbuild' + publishroot:'~/hero/www/info' + install:true + reset:false + +``` + diff --git a/heroscript/library/sshkey.md b/heroscript/library/sshkey.md new file mode 100644 index 0000000..85acfe6 --- /dev/null +++ b/heroscript/library/sshkey.md @@ -0,0 +1,14 @@ + +```js +!!sshagent.key_add + name:'books' + privkey:' + -----BEGIN OPENSSH PRIVATE KEY----- + b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW + QyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQAAAIhb3ybRW98m + 0QAAAAtzc2gtZWQyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQ + AAAEC+fcDBPqdJHlJOQJ2zXhU2FztKAIl3TmWkaGCPnyts49d/1n/YAfz/xrWmlqAKmVB2 + FbJDzBkCJ5TDec1zGwOJAAAABWJvb2tz + -----END OPENSSH PRIVATE KEY----- + ' +``` \ No newline at end of file diff --git a/heroscript/manual/book_collections.md b/heroscript/manual/book_collections.md index 0e6cb9a..a59f096 100644 --- a/heroscript/manual/book_collections.md +++ b/heroscript/manual/book_collections.md @@ -8,6 +8,8 @@ !!doctree.add 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/main/collections/tfconnect' !!doctree.add url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/developers' !!doctree.add diff --git a/heroscript/system_administrators/book_collections.md b/heroscript/system_administrators/book_collections.md new file mode 100644 index 0000000..dc32726 --- /dev/null +++ b/heroscript/system_administrators/book_collections.md @@ -0,0 +1,46 @@ +```js + +!!book.generate name:'system_administrators' title:'ThreeFold System Administrators Manual' printbook:false foldlevel:0 + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/books/system_administrators' + +!!doctree.add + 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/main/collections/dashboard' +!!doctree.add + url:'https://git.ourworld.tf/tfgrid/info_tfgrid/src/branch/main/collections/tfconnect' +!!doctree.add + 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/main/collections/farmers' +!!doctree.add + 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/main/collections/threefold_token' +!!doctree.add + 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/main/collections/about' +!!doctree.add + 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/main/collections/legal' +!!doctree.add + 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/main/collections/cloud' +!!doctree.add + 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/main/collections/partners_utilization' + +!!doctree.add + 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/main/collections/mkondo' + +``` + diff --git a/heroscript/system_administrators/context.md b/heroscript/system_administrators/context.md new file mode 100644 index 0000000..a8f5892 --- /dev/null +++ b/heroscript/system_administrators/context.md @@ -0,0 +1,11 @@ + +```js + +!!books.configure + buildroot:'~/hero/var/mdbuild' + publishroot:'~/hero/www/info' + install:true + reset:false + +``` + diff --git a/heroscript/system_administrators/sshkey.md b/heroscript/system_administrators/sshkey.md new file mode 100644 index 0000000..85acfe6 --- /dev/null +++ b/heroscript/system_administrators/sshkey.md @@ -0,0 +1,14 @@ + +```js +!!sshagent.key_add + name:'books' + privkey:' + -----BEGIN OPENSSH PRIVATE KEY----- + b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW + QyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQAAAIhb3ybRW98m + 0QAAAAtzc2gtZWQyNTUxOQAAACDXf9Z/2AH8/8a1ppagCplQdhWyQ8wZAieUw3nNcxsDiQ + AAAEC+fcDBPqdJHlJOQJ2zXhU2FztKAIl3TmWkaGCPnyts49d/1n/YAfz/xrWmlqAKmVB2 + FbJDzBkCJ5TDec1zGwOJAAAABWJvb2tz + -----END OPENSSH PRIVATE KEY----- + ' +``` \ No newline at end of file