├── .ci ├── backup-schema.json ├── change-details-schema.json ├── check-vps-schema.json ├── install-schema.json ├── migrate-schema.json ├── status-schema.json ├── tool-schema.json ├── update-schema.json └── validate.py ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── translation.md └── workflows │ └── translations.yml ├── .gitignore ├── LICENSE ├── README.md ├── scripts ├── check-vps.sh ├── cleanup.sh ├── display-logo.sh ├── explore-nym.sh └── mixnode │ ├── backup.sh │ ├── change-details.sh │ ├── install.sh │ ├── migrate.sh │ ├── status.sh │ ├── tool.sh │ └── update.sh └── text ├── backup.json ├── change-details.json ├── check-vps.json ├── install.json ├── migrate.json ├── status.json ├── tool.json └── update.json /.ci/backup-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "additionalProperties": { 4 | "type": "object", 5 | "properties": { 6 | "welcome_message": { "type": "string" }, 7 | "instructions": { "type": "string" } 8 | }, 9 | "required": [ 10 | "welcome_message", 11 | "instructions" 12 | ], 13 | "additionalProperties": false 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.ci/change-details-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "additionalProperties": { 4 | "type": "object", 5 | "properties": { 6 | "welcome_message": { "type": "string" }, 7 | "success": { "type": "string" }, 8 | "fail": { "type": "string" } 9 | }, 10 | "required": [ 11 | "welcome_message", 12 | "success", 13 | "fail" 14 | ], 15 | "additionalProperties": false 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.ci/check-vps-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "additionalProperties": { 4 | "type": "object", 5 | "properties": { 6 | "welcome_message": { "type": "string" }, 7 | "enabled": { "type": "string" }, 8 | "not_found": { "type": "string" }, 9 | "force_exit": { "type": "string" }, 10 | "version_warning": { "type": "string" }, 11 | "run_anyway": { "type": "string" }, 12 | "nat_ok": { "type": "string" }, 13 | "nat_fail": { "type": "string" }, 14 | "has_sudo": { "type": "string" }, 15 | "no_sudo": { "type": "string" }, 16 | "root": { "type": "string" }, 17 | "root_warning": { "type": "string" }, 18 | "make_user": { "type": "string" }, 19 | "enter_user": { "type": "string" }, 20 | "user_fail": { "type": "string" }, 21 | "diff_name": { "type": "string" }, 22 | "reconnecting": { "type": "string" }, 23 | "stopping": { "type": "string" }, 24 | "stopped": { "type": "string" }, 25 | "updating": { "type": "string" }, 26 | "updated": { "type": "string" } 27 | }, 28 | "required": [ 29 | "welcome_message", 30 | "enabled", 31 | "not_found", 32 | "force_exit", 33 | "version_warning", 34 | "run_anyway", 35 | "nat_ok", 36 | "nat_fail", 37 | "has_sudo", 38 | "no_sudo", 39 | "root", 40 | "root_warning", 41 | "make_user", 42 | "enter_user", 43 | "user_fail", 44 | "diff_name", 45 | "reconnecting", 46 | "stopping", 47 | "stopped", 48 | "updating", 49 | "updated" 50 | ], 51 | "additionalProperties": false 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /.ci/install-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "additionalProperties": { 4 | "type": "object", 5 | "properties": { 6 | "welcome_message": { "type": "string" }, 7 | "success": { "type": "string" }, 8 | "instructions": { "type": "string" }, 9 | "restart": { "type": "string" }, 10 | "fail": { "type": "string" } 11 | }, 12 | "required": [ 13 | "welcome_message", 14 | "success", 15 | "instructions", 16 | "restart", 17 | "fail" 18 | ], 19 | "additionalProperties": false 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.ci/migrate-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "additionalProperties": { 4 | "type": "object", 5 | "properties": { 6 | "welcome_message": { "type": "string" }, 7 | "success": { "type": "string" }, 8 | "fail": { "type": "string" } 9 | }, 10 | "required": [ 11 | "welcome_message", 12 | "success", 13 | "fail" 14 | ], 15 | "additionalProperties": false 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.ci/status-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "additionalProperties": { 4 | "type": "object", 5 | "properties": { 6 | "instructions": { "type": "string" } 7 | }, 8 | "required": [ "instructions" ], 9 | "additionalProperties": false 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.ci/tool-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "additionalProperties": { 4 | "type": "object", 5 | "properties": { 6 | "searching": { "type": "string" }, 7 | "found": { "type": "string" }, 8 | "not_found": { "type": "string" }, 9 | "no_cfg": { "type": "string" }, 10 | "menu": { "type": "string" }, 11 | "quit": { "type": "string" }, 12 | "prompt": { "type": "string" }, 13 | "invalid": { "type": "string" }, 14 | "install": { "type": "string" }, 15 | "migrate": { "type": "string" }, 16 | "update": { "type": "string" }, 17 | "backup": { "type": "string" }, 18 | "details": { "type": "string" }, 19 | "status": { "type": "string" } 20 | }, 21 | "required": [ 22 | "searching", 23 | "found", 24 | "not_found", 25 | "no_cfg", 26 | "menu", 27 | "quit", 28 | "prompt", 29 | "invalid", 30 | "install", 31 | "migrate", 32 | "update", 33 | "backup", 34 | "details", 35 | "status" 36 | ], 37 | "additionalProperties": false 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /.ci/update-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "additionalProperties": { 4 | "type": "object", 5 | "properties": { 6 | "welcome_message": { "type": "string" }, 7 | "checking": { "type": "string" }, 8 | "up_to_date": { "type": "string" }, 9 | "outdated": { "type": "string" }, 10 | "updated": { "type": "string" }, 11 | "and": { "type": "string" }, 12 | "restart": { "type": "string" }, 13 | "fail": { "type": "string" } 14 | }, 15 | "required": [ 16 | "welcome_message", 17 | "checking", 18 | "up_to_date", 19 | "outdated", 20 | "updated", 21 | "and", 22 | "restart", 23 | "fail" 24 | ], 25 | "additionalProperties": false 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /.ci/validate.py: -------------------------------------------------------------------------------- 1 | import json 2 | import argparse 3 | from jsonschema import validate, ValidationError 4 | 5 | def read_json_file(file_path): 6 | with open(file_path, 'r') as file: 7 | try: 8 | data = json.load(file) 9 | except json.JSONDecodeError as e: 10 | raise ValueError(f"Invalid JSON syntax in the file: {file_path}") from e 11 | return data 12 | 13 | def validate_json_file(json_file, schema_file): 14 | try: 15 | json_data = read_json_file(json_file) 16 | except ValueError as e: 17 | print(str(e)) 18 | exit(1) 19 | with open(schema_file, 'r') as file: 20 | schema = json.load(file) 21 | 22 | try: 23 | validate(json_data, schema) 24 | print(f"Validation successful: {json_file} matches the schema {schema_file}.") 25 | except ValidationError as e: 26 | print(f"Validation failed: {json_file} does not match the schema {schema_file}.") 27 | print("Validation error details:", e) 28 | exit(1) 29 | 30 | def main(): 31 | parser = argparse.ArgumentParser(description='Validate JSON files against schemas.') 32 | parser.add_argument('json_file', type=str, help='Path to the JSON file to validate') 33 | parser.add_argument('schema_file', type=str, help='Path to the JSON schema file') 34 | args = parser.parse_args() 35 | 36 | validate_json_file(args.json_file, args.schema_file) 37 | 38 | if __name__ == '__main__': 39 | main() 40 | 41 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Run script 16 | 2. Select option '....' 17 | 3. Input '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. Ubuntu] 28 | - Version [e.g. 20.04] 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/translation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Translation 3 | about: Create a request for a missing language or let us know about untranslated parts 4 | of the script 5 | title: '' 6 | labels: translation 7 | assignees: '' 8 | 9 | --- 10 | 11 | **What's the language(s) that's missing the translation?** 12 | A simple statement listing the language(s). 13 | 14 | **Is the language missing from the entire script or from part(s) of the script?** 15 | A simple statement identifying one of the two options 16 | 17 | **If it's missing from a specific part of the script please point it out below** 18 | A list with the part(s) of the script that the translations are missing if the language is already supported. 19 | -------------------------------------------------------------------------------- /.github/workflows/translations.yml: -------------------------------------------------------------------------------- 1 | name: translations 2 | 3 | # Controls when the workflow will run 4 | on: 5 | # Triggers the workflow on push or pull request events but only for the "main" branch 6 | push: 7 | paths: 8 | - 'text/*' 9 | branches: [ "main" ] 10 | pull_request: 11 | paths: 12 | - 'text/*' 13 | branches: [ "main" ] 14 | 15 | # Allows you to run this workflow manually from the Actions tab 16 | workflow_dispatch: 17 | 18 | jobs: 19 | validate: 20 | runs-on: ubuntu-latest 21 | 22 | steps: 23 | - uses: actions/checkout@v3 24 | 25 | - name: Setup Python 26 | uses: actions/setup-python@v3.1.4 27 | with: 28 | python-version: '3.x' 29 | 30 | - name: Install dependencies 31 | run: | 32 | python3 -m pip install --upgrade pip 33 | pip install jsonschema 34 | 35 | - name: Run JSON validation 36 | run: | 37 | python3 .ci/validate.py text/backup.json .ci/backup-schema.json 38 | python3 .ci/validate.py text/change-details.json .ci/change-details-schema.json 39 | python3 .ci/validate.py text/check-vps.json .ci/check-vps-schema.json 40 | python3 .ci/validate.py text/install.json .ci/install-schema.json 41 | python3 .ci/validate.py text/migrate.json .ci/migrate-schema.json 42 | python3 .ci/validate.py text/status.json .ci/status-schema.json 43 | python3 .ci/validate.py text/tool.json .ci/tool-schema.json 44 | python3 .ci/validate.py text/update.json .ci/update-schema.json 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | old-archive/ 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 ExploreNYM 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 2 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 3 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 4 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 5 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 6 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 7 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 8 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 9 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 10 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 11 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 12 | ## !!!DO NOT USE UNTIL BUG FIXED!!! 13 | 14 | 15 |
16 |
17 | 18 | Logo 19 | 20 | 21 |

ExploreNYM Bash Scripts

22 |

23 | Supporting the installation and management of NYM nodes. 24 |
25 |
26 |

27 |
28 | 29 | 30 | 31 | ### Table of Contents 32 | 33 |
    34 | 35 |
  1. Languages
  2. 36 | 37 |
  3. About The Project
  4. 38 | 39 |
  5. Getting Started 40 | 41 |
  6. Usage
  7. 42 | 43 |
  8. Contributing
  9. 44 | 45 |
  10. License
  11. 46 | 47 |
  12. Contact
  13. 48 | 49 |
50 | 51 | ## Languages available on the script 52 | - English 53 | - Português 54 | - Yкраїнська 55 | - Русский 56 | - Français 57 | 58 | ## About The Project 59 | 60 | Simple bash scripts to support community with the technical side of NYM infrastucture. 61 | 62 | This is an attempt to make it a simple process as possible for anyone no matter there experience. 63 | 64 | If you have any issues contact details below. 65 |

(back to top)

66 | 67 | 68 | ## Getting Started 69 | These scripts are only tested on ubuntu 20.04 70 | 71 | #### Hardware Requirements 72 | 73 | * 1 cpu core 74 | * 0.5gb ram 75 | * 8gb storage space 76 | * ipv4 & ipv6 connection 77 | 78 | ## Usage 79 | 80 | ### Mixnode Tool 81 | 82 | 1. Open a terminal in your local computer. (mac terminal) (windows shell) 83 | 2. Connect to your server via ssh using your username and i.p **example** below. 84 | ```sh 85 | ssh username@i.p 86 | ``` 87 | 3. Intall git and jq on the server 88 | ```sh 89 | sudo apt install git jq 90 | ``` 91 | 4. Copy and paste the script below into the server. 92 | 93 | ```sh 94 | git clone https://github.com/ExploreNYM/bash-tool ~/bash-tool && ~/bash-tool/scripts/explore-nym.sh 95 | ``` 96 | if you are using this tool after already installing manually select migrate. 97 | 98 |

(back to top)

99 | 100 | 101 | ## Contributing 102 | 103 | We greatly appreciate any and all contributions to this project. 104 | - [Contributing with NYM](#contributing-with-nym) 105 | - [Contributing with translations](#contributing-with-translations) 106 | 107 | ### Contributing with NYM 108 | If coding is not your thing you can support by delegating to our nodes. 109 | 110 | 1. Indonesia: `4sxonGjdD4vNxWUvk8x8gCB7VpZgUBV4YDLg98oB4PUP` 111 | 2. Thailand: `B9PJBmkT1gVNM4JSmhCa59Dj5aJ7vjk5uvuN5nbJKJW7` 112 | 3. Brazil: `2KuFi7CjKVh1mQrNKhdwLjhXBhVLRktvWMg5k4WXKdrX` 113 | 114 | We only accept donations to our nym wallet address below. 115 | 116 | `n1cvcmxmdgw39np3ft9duxj8vdfp9ktny6jtfc0r` 117 | 118 | ### Contributing with translations 119 | **Steps to translate the script to your language:** 120 | 1. Create your own Fork of the project. 121 | 122 | ![image](https://github.com/ExploreNYM/bash-tool/assets/69059969/62993136-a439-4572-b0e6-5fea1518d734) 123 | 124 | 2. On your own Fork, edit the `.json` files inside the text folder. Add the json object with your language and **only translate the values, not the keys**. Follow the example below where pt-br was added: 125 | 126 | ![image](https://github.com/ExploreNYM/bash-tool/assets/69059969/b5b5e2da-206c-43b8-9344-f0c1800c9ea4) 127 | 128 | 3. After you have added your translations create a pull request to add it to the script: 129 | 130 | ![image](https://github.com/ExploreNYM/bash-tool/assets/69059969/4f9eecef-3aa9-4412-bd3a-e78c87fadd73) 131 | 132 | 4. After you create the pull request an automated validation script will check the integrity of the files you edited. If the test passes you're all good and your language will soon be added, If you didn't pass the automated test check the details to see what happened at which file and then correct it in order to pass the test. 133 | 134 | #### Examples of pull requests failing: 135 | ![image](https://github.com/ExploreNYM/bash-tool/assets/69059969/c44da60d-651c-411c-84d3-66f05a3889bf) 136 | 137 | 1. Details output when there's invalid syntax on one of the json files (invalid syntax on install.json in this case): 138 | 139 | ![image](https://github.com/ExploreNYM/bash-tool/assets/69059969/4d0fe097-0968-4e5d-9223-df20b246328e) 140 | 141 | 2. Details output when there's extra or missing keys on one of the json files (extra key on install.json in this case): 142 | 143 | ![image](https://github.com/ExploreNYM/bash-tool/assets/69059969/7ab0f6c9-23b9-40c6-8ac7-f3b4d9d45b28) 144 | 145 | 3. If you have **conflicts with the base branch** you should sync your fork similar to the way you created the pull request: 146 | ![image](https://github.com/ExploreNYM/bash-tool/assets/69059969/652e8830-c325-4222-b275-dc07dcf6ec87) 147 | 148 | 4. This is what it looks like if you pass the automated tests: 149 | ![image](https://github.com/ExploreNYM/bash-tool/assets/69059969/fedae5da-fc6c-43b2-b1f4-d997b93c4215) 150 | 151 |

(back to top)

152 | 153 | 154 | ## License 155 | 156 | Distributed under the MIT License. See `LICENSE` for more information. 157 | 158 |

(back to top)

159 | 160 | 161 | ## Contact 162 | 163 | Twitter - @Pawnflake 164 | 165 | Discord - Pawnflake 166 | 167 | Discord - supermeia 168 | 169 | Website - explorenym.net 170 | -------------------------------------------------------------------------------- /scripts/check-vps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############### 4 | ## VARIABLES ## 5 | ############### 6 | 7 | check_mark="\xE2\x9C\x93" 8 | fail_x="\xE2\x9C\x97" 9 | set_bold="\033[1m" 10 | set_normal="\033[22m" 11 | announce_ip=$(curl -4 ifconfig.me) 12 | [ -z "$announce_ip" ] && announce_ip=$(curl ipinfo.io/ip) 13 | #Load text into associative array 14 | translations=$(jq -r ".\"$EXPLORE_NYM_LANG\"" $EXPLORE_NYM_PATH/../text/check-vps.json) 15 | if [[ "$translations" == "null" ]]; then 16 | echo -e "No translation for $EXPLORE_NYM_LANG available for this part of the" \ 17 | "script, If you're able to translate the text displayed on the script" \ 18 | "please contribute here https://github.com/ExploreNYM/bash-tool\n" 19 | translations=$(jq -r ".\"en-us\"" ../text/check-vps.json) 20 | fi 21 | declare -A text 22 | while IFS=':' read -r key value; do 23 | key=$(echo "${key//\"/}" | xargs) 24 | value=$(echo "${value//\"/}" | xargs -0 | sed 's/,$//') 25 | text["$key"]="$value" 26 | done <<< "$translations" 27 | 28 | ############### 29 | ## FUNCTIONS ## 30 | ############### 31 | 32 | check_ipv6() { 33 | if ip -6 addr show | grep -q "inet6"; 34 | then 35 | echo -e "$check_mark ${text[enabled]}\n" 36 | else 37 | echo -e "$fail_x ${text[not_found]}\n" 38 | echo "! ${text[force_exit]} !"; exit 1 39 | fi 40 | } 41 | 42 | check_ubuntu_version() { 43 | vps_version=$(lsb_release -rs) 44 | stable_version="20.04" 45 | 46 | if [ $vps_version == $stable_version ] 47 | then 48 | echo -e "$check_mark Ubuntu $stable_version\n" 49 | else 50 | echo -e "$fail_x Ubuntu $vps_version.\n" 51 | echo -e "! ${text[version_warning]} !\n" 52 | read -p "${text[run_anyway]} " perm 53 | if ! [[ "$perm" == "Y" || "$perm" == "y" || "$perm" == "" ]] 54 | then 55 | echo -e "\n! ${text[force_exit]} !"; exit 1 56 | fi 57 | fi 58 | } 59 | 60 | check_nat() { 61 | bind_ip=$(hostname -I | awk '{print $1}') 62 | docs_link="https://nymtech.net/docs/nodes/troubleshooting.html#running-on-a\ 63 | -local-machine-behind-nat-with-no-fixed-ip-address" 64 | 65 | if [[ $bind_ip == $announce_ip ]] 66 | then 67 | echo -e "$check_mark ${text[nat_ok]}\n" 68 | else 69 | echo -e "$fail_x ${text[nat_fail]}\n" 70 | echo "$docs_link" 71 | exit 1; 72 | fi 73 | } 74 | 75 | check_user() { 76 | case "$(groups)" in 77 | *sudo*) 78 | echo -e "$check_mark $USER ${text[has_sudo]}\n" 79 | ;; 80 | *root*) 81 | echo -e "$fail_x ${text[root]}\n" 82 | echo -e "! ${text[root_warning]} !\n" 83 | read -p "${text[make_user]} " perm 84 | if [[ "$perm" == "Y" || "$perm" == "y" || "$perm" == "" ]] 85 | then 86 | created="false" 87 | while [[ "$created" == "false" ]] 88 | do 89 | while [[ -z "$new_user" ]]; do 90 | read -p "${text[enter_user]} " new_user 91 | done 92 | adduser --gecos GECOS $new_user 93 | if [ $? -eq 0 ]; then 94 | created="true" 95 | usermod -aG sudo $new_user 96 | else 97 | echo -e "\n$fail_x ${text[user_fail]} $new_user,"\ 98 | "${text[diff_name]}\n" 99 | new_user="" 100 | fi 101 | done 102 | echo -e "$set_bold\n! ${text[reconnecting]} !\n$set_normal" 103 | $EXPLORE_NYM_PATH/cleanup.sh 104 | ssh -o StrictHostKeyChecking=no "$new_user@$announce_ip" 105 | exit 1 106 | fi 107 | ;; 108 | *) 109 | echo -e "$fail_x $USER ${text[no_sudo]}\n" 110 | echo "! ${text[force_exit]} !"; exit 1 111 | ;; 112 | esac 113 | } 114 | 115 | update_server() { 116 | cleanup() { 117 | if [[ -n "$animation_pid" ]] 118 | then 119 | kill "$animation_pid" 120 | fi 121 | echo -e "\n\n${text[stopping]}\n" 122 | if [[ -n "$update_pid" ]] 123 | then 124 | sudo kill "$update_pid" 125 | fi 126 | if [[ -n "$upgrade_pid" ]] 127 | then 128 | sudo kill "$upgrade_pid" 129 | fi 130 | echo -e "${text[stopped]}\n" 131 | exit 1 132 | } 133 | trap cleanup SIGINT 134 | echo -e "${text[updating]}" 135 | sudo sleep 0.01 #useless sudo command to get verification out of the way 136 | { #loading animation 137 | while true; do 138 | echo -ne '\r-' 139 | sleep 0.1 140 | echo -ne '\r\\' 141 | sleep 0.1 142 | echo -ne '\r|' 143 | sleep 0.1 144 | echo -ne '\r/' 145 | sleep 0.1 146 | done 147 | } & 148 | animation_pid=$! 149 | sudo apt update -qq &>'/dev/null' & 150 | update_pid=$! 151 | wait "$update_pid" ; update_pid="" 152 | sudo apt upgrade -y -qq &>'/dev/null' & 153 | upgrade_pid=$! 154 | wait "$upgrade_pid" ; upgrade_pid="" 155 | kill "$animation_pid" ; animation_pid="" 156 | echo -e "\n$check_mark ${text[updated]}\n" 157 | } 158 | 159 | ############################## 160 | ## MAIN EXECUTION OF SCRIPT ## 161 | ############################## 162 | 163 | echo -e "${set_bold}${text[welcome_message]}\n${set_normal}" 164 | check_ipv6 165 | check_ubuntu_version 166 | check_nat 167 | check_user 168 | update_server 169 | -------------------------------------------------------------------------------- /scripts/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -rf "$HOME/bash-tool" &> /dev/null 4 | rm "$HOME/ne-output.txt" &> /dev/null 5 | unset EXPLORE_NYM_PATH 6 | unset EXPLORE_NYM_LANG 7 | unset variables 8 | -------------------------------------------------------------------------------- /scripts/display-logo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | clear ; echo 4 | echo " _____ _ _ ___ ____ __ " 5 | echo -e "| ____|_ ___ __ | | ___ _ __ ___| \ | \ \ / / \/ |" 6 | echo -e "| _| \ \/ / '_ \| |/ _ \| '__/ _ \ \| |\ V /| |\/| |" 7 | echo -e "| |___ > <| |_) | | (_) | | | __/ |\ | | | | | | |" 8 | echo -e "|_____/_/\_\ .__/|_|\___/|_| \___|_| \_| |_| |_| |_|" 9 | echo -e " |_| \033[4mhttps://explorenym.net\033[0m\n" 10 | -------------------------------------------------------------------------------- /scripts/explore-nym.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #Characters 4 | check_mark="\xE2\x9C\x93" 5 | fail_x="\xE2\x9C\x97" 6 | #Font formats 7 | set_bold="\033[1m" 8 | set_normal="\033[22m" 9 | 10 | ############### 11 | ## FUNCTIONS ## 12 | ############### 13 | 14 | language_menu() { 15 | while true 16 | do 17 | clear ; $EXPLORE_NYM_PATH/display-logo.sh 18 | echo -e "\n$set_bold ExploreNYM language menu:$set_normal\n" 19 | echo "1. English (US)" 20 | echo "2. Português (BR)" 21 | echo "3. Yкраїнська (UA)" 22 | echo "4. Русский (RU)" 23 | echo "5. Français (FR)" 24 | echo "6. Español (ES)" 25 | echo "7. Quit" 26 | echo "(Add your language through https://github.com/ExploreNYM/bash-tool)" 27 | read -p "Enter your choice: " choice 28 | 29 | case $choice in 30 | 1) 31 | export EXPLORE_NYM_LANG="en-us" ; return 32 | ;; 33 | 2) 34 | export EXPLORE_NYM_LANG="pt-br" ; return 35 | ;; 36 | 3) 37 | export EXPLORE_NYM_LANG="ua-укр" ; return 38 | ;; 39 | 4) 40 | export EXPLORE_NYM_LANG="ru-рф" ; return 41 | ;; 42 | 5) 43 | export EXPLORE_NYM_LANG="fr-fr" ; return 44 | ;; 45 | 6) 46 | export EXPLORE_NYM_LANG="es-es" ; return 47 | ;; 48 | 7) 49 | exit 50 | ;; 51 | *) 52 | echo -e "\n$fail_x Invalid option, please try again." 53 | sleep 1 54 | ;; 55 | esac 56 | done 57 | } 58 | 59 | 60 | ############################## 61 | ## MAIN EXECUTION OF SCRIPT ## 62 | ############################## 63 | 64 | export EXPLORE_NYM_PATH=$(dirname "$0") 65 | trap $EXPLORE_NYM_PATH/cleanup.sh exit 66 | $EXPLORE_NYM_PATH/display-logo.sh 67 | language_menu 68 | $EXPLORE_NYM_PATH/check-vps.sh || exit 69 | $EXPLORE_NYM_PATH/mixnode/tool.sh 70 | -------------------------------------------------------------------------------- /scripts/mixnode/backup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############### 4 | ## VARIABLES ## 5 | ############### 6 | 7 | set_bold="\033[1m" 8 | set_normal="\033[22m" 9 | #Load text into associative array 10 | translations=$(jq -r ".\"$EXPLORE_NYM_LANG\"" $EXPLORE_NYM_PATH/../text/backup.json) 11 | if [[ "$translations" == "null" ]]; then 12 | echo -e "No translation for $EXPLORE_NYM_LANG available for this part of the" \ 13 | "script, If you're able to translate the text displayed on the script" \ 14 | "please contribute here https://github.com/ExploreNYM/bash-tool\n" 15 | translations=$(jq -r ".\"en-us\"" ../text/check-vps.json) 16 | fi 17 | declare -A text 18 | while IFS=':' read -r key value; do 19 | key=$(echo "${key//\"/}" | xargs) 20 | value=$(echo "${value//\"/}" | xargs -0 | sed 's/,$//') 21 | text["$key"]="$value" 22 | done <<< "$translations" 23 | 24 | ############################## 25 | ## MAIN EXECUTION OF SCRIPT ## 26 | ############################## 27 | 28 | node_path="$1/mixnodes" 29 | nym_node_id=$(find "$node_path" -mindepth 1 -maxdepth 1 -type d \ 30 | -printf "%f\n" | head -n1) 31 | 32 | $EXPLORE_NYM_PATH/display-logo.sh 33 | echo -e "${set_bold}${text[welcome_message]}\n$set_normal" 34 | echo -e "${text[instructions]}\n" 35 | echo -e "scp -r $USER@$announce_ip:$node_path/$nym_node_id/ ~/$nym_node_id\n" 36 | -------------------------------------------------------------------------------- /scripts/mixnode/change-details.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############### 4 | ## VARIABLES ## 5 | ############### 6 | 7 | check_mark="\xE2\x9C\x93" 8 | fail_x="\xE2\x9C\x97" 9 | set_bold="\033[1m" 10 | set_normal="\033[22m" 11 | #Load text into associative array 12 | translations=$(jq -r ".\"$EXPLORE_NYM_LANG\"" $EXPLORE_NYM_PATH/../text/change-details.json) 13 | if [[ "$translations" == "null" ]]; then 14 | echo -e "No translation for $EXPLORE_NYM_LANG available for this part of the" \ 15 | "script, If you're able to translate the text displayed on the script" \ 16 | "please contribute here https://github.com/ExploreNYM/bash-tool\n" 17 | translations=$(jq -r ".\"en-us\"" ../text/check-vps.json) 18 | fi 19 | declare -A text 20 | while IFS=':' read -r key value; do 21 | key=$(echo "${key//\"/}" | xargs) 22 | value=$(echo "${value//\"/}" | xargs -0 | sed 's/,$//') 23 | text["$key"]="$value" 24 | done <<< "$translations" 25 | 26 | ############################## 27 | ## MAIN EXECUTION OF SCRIPT ## 28 | ############################## 29 | 30 | node_path="$1/mixnodes" 31 | nym_node_id=$(find "$node_path" -mindepth 1 -maxdepth 1 -type d \ 32 | -printf "%f\n" | head -n1) 33 | 34 | $EXPLORE_NYM_PATH/display-logo.sh 35 | echo -e "${set_bold}${text[welcome_message]}\n$set_normal" 36 | nym-mixnode describe --id $nym_node_id 37 | sudo systemctl restart nym-mixnode 38 | if [[ `service nym-mixnode status | grep active` =~ "running" ]] 39 | then 40 | echo -e "$check_mark ${text[success]}\n" 41 | sleep 2 42 | else 43 | echo -e "$fail_x ${text[fail]}\n" 44 | sleep 2 45 | fi 46 | -------------------------------------------------------------------------------- /scripts/mixnode/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############### 4 | ## VARIABLES ## 5 | ############### 6 | 7 | set_bold="\033[1m" 8 | set_normal="\033[22m" 9 | fail_x="\xE2\x9C\x97" 10 | #Load text into associative array 11 | translations=$(jq -r ".\"$EXPLORE_NYM_LANG\"" $EXPLORE_NYM_PATH/../text/install.json) 12 | if [[ "$translations" == "null" ]]; then 13 | echo -e "No translation for $EXPLORE_NYM_LANG available for this part of the" \ 14 | "script, If you're able to translate the text displayed on the script" \ 15 | "please contribute here https://github.com/ExploreNYM/bash-tool\n" 16 | translations=$(jq -r ".\"en-us\"" ../text/check-vps.json) 17 | fi 18 | declare -A text 19 | while IFS=':' read -r key value; do 20 | key=$(echo "${key//\"/}" | xargs) 21 | value=$(echo "${value//\"/}" | xargs -0 | sed 's/,$//') 22 | text["$key"]="$value" 23 | done <<< "$translations" 24 | 25 | ############### 26 | ## FUNCTIONS ## 27 | ############### 28 | 29 | setup_binary() { 30 | binary_name="nym-mixnode" 31 | nym_url="https://github.com/nymtech/nym/releases/latest/download/$binary_name" 32 | 33 | wget -q -O $binary_name "$nym_url" 34 | chmod u+x $binary_name 35 | sudo mv $binary_name /usr/local/bin/ 36 | } 37 | 38 | setup_mixnode() { 39 | host=$(curl -4 ifconfig.me) 40 | [ -z "$host" ] && host=$(curl ipinfo.io/ip) 41 | nym_node_id="nym-mixnode" 42 | 43 | nym-mixnode init --id $nym_node_id --host $host > $HOME/ne-output.txt 44 | } 45 | 46 | setup_firewall() { 47 | sudo ufw allow 1789,1790,8000,22/tcp >/dev/null && yes |\ 48 | sudo ufw enable >/dev/null 49 | sudo systemctl restart ufw 50 | } 51 | 52 | setup_daemon() { 53 | echo "Storage=persistent" | sudo tee /etc/systemd/journald.conf >/dev/null 54 | sudo systemctl restart systemd-journald 55 | 56 | sudo tee /etc/systemd/system/nym-mixnode.service >/dev/null <> /etc/systemd/system.conf" 75 | sudo systemctl daemon-reload 76 | sudo systemctl enable nym-mixnode 77 | sudo systemctl restart nym-mixnode 78 | } 79 | 80 | display_mixnode_info() { 81 | if [[ `service nym-mixnode status | grep active` =~ "running" ]] 82 | then 83 | $EXPLORE_NYM_PATH/display-logo.sh 84 | echo -e "$set_bold${text[success]}\n\n$set_normal" 85 | sleep 1 86 | grep -E "Identity Key|Sphinx Key|Host|Version|Mix Port|Verloc port\ 87 | |Http Port|bonding to wallet address" ne-output.txt 88 | echo -e "\n${text[instructions]}\n" 89 | echo -e "${text[restart]}" 90 | $EXPLORE_NYM_PATH/cleanup.sh 91 | sudo reboot 92 | else 93 | echo -e "$fail_x ${text[fail]}" 94 | sleep 2 95 | exit 1 96 | fi 97 | } 98 | 99 | ############################## 100 | ## MAIN EXECUTION OF SCRIPT ## 101 | ############################## 102 | 103 | $EXPLORE_NYM_PATH/display-logo.sh 104 | echo -e "$set_bold${text[welcome_message]}\n$set_normal" 105 | setup_binary 106 | setup_mixnode 107 | setup_firewall 108 | setup_daemon 109 | display_mixnode_info 110 | -------------------------------------------------------------------------------- /scripts/mixnode/migrate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############### 4 | ## VARIABLES ## 5 | ############### 6 | 7 | check_mark="\xE2\x9C\x93" 8 | fail_x="\xE2\x9C\x97" 9 | set_bold="\033[1m" 10 | set_normal="\033[22m" 11 | #Load text into associative array 12 | translations=$(jq -r ".\"$EXPLORE_NYM_LANG\"" $EXPLORE_NYM_PATH/../text/migrate.json) 13 | if [[ "$translations" == "null" ]]; then 14 | echo -e "No translation for $EXPLORE_NYM_LANG available for this part of the" \ 15 | "script, If you're able to translate the text displayed on the script" \ 16 | "please contribute here https://github.com/ExploreNYM/bash-tool\n" 17 | translations=$(jq -r ".\"en-us\"" ../text/check-vps.json) 18 | fi 19 | declare -A text 20 | while IFS=':' read -r key value; do 21 | key=$(echo "${key//\"/}" | xargs) 22 | value=$(echo "${value//\"/}" | xargs -0 | sed 's/,$//') 23 | text["$key"]="$value" 24 | done <<< "$translations" 25 | 26 | ############### 27 | ## FUNCTIONS ## 28 | ############### 29 | 30 | move_nym_folder() { 31 | nym_path=$(sudo find / -type d -name ".nym" 2>/dev/null) 32 | if [[ -n "$nym_path" ]] 33 | then 34 | sudo mv "$nym_path" "$HOME/" 35 | echo -e "$check_mark ${text[success]} $HOME\n" 36 | sudo chown -R $USER:$USER $HOME/.nym 37 | sleep 2 38 | else 39 | echo -e "$fail_x ${text[fail]}\n" 40 | sleep 2 41 | exit 1 42 | fi 43 | } 44 | 45 | ############################## 46 | ## MAIN EXECUTION OF SCRIPT ## 47 | ############################## 48 | 49 | $EXPLORE_NYM_PATH/display-logo.sh 50 | echo -e "${set_bold}${text[welcome_message]}\n$set_normal" 51 | move_nym_folder 52 | -------------------------------------------------------------------------------- /scripts/mixnode/status.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############### 4 | ## VARIABLES ## 5 | ############### 6 | 7 | set_bold="\033[1m" 8 | set_normal="\033[22m" 9 | #Load text into associative array 10 | translations=$(jq -r ".\"$EXPLORE_NYM_LANG\"" $EXPLORE_NYM_PATH/../text/status.json) 11 | if [[ "$translations" == "null" ]]; then 12 | echo -e "No translation for $EXPLORE_NYM_LANG available for this part of the" \ 13 | "script, If you're able to translate the text displayed on the script" \ 14 | "please contribute here https://github.com/ExploreNYM/bash-tool\n" 15 | translations=$(jq -r ".\"en-us\"" ../text/check-vps.json) 16 | fi 17 | declare -A text 18 | while IFS=':' read -r key value; do 19 | key=$(echo "${key//\"/}" | xargs) 20 | value=$(echo "${value//\"/}" | xargs -0 | sed 's/,$//') 21 | text["$key"]="$value" 22 | done <<< "$translations" 23 | 24 | ############################## 25 | ## MAIN EXECUTION OF SCRIPT ## 26 | ############################## 27 | 28 | $EXPLORE_NYM_PATH/display-logo.sh 29 | echo -e "${set_bold}${text[instructions]}\n$set_normal" 30 | sudo systemctl status nym-mixnode ; sleep 5 31 | -------------------------------------------------------------------------------- /scripts/mixnode/tool.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############### 4 | ## VARIABLES ## 5 | ############### 6 | 7 | nym_path="" 8 | nym_config_file="" 9 | check_mark="\xE2\x9C\x93" 10 | fail_x="\xE2\x9C\x97" 11 | set_bold="\033[1m" 12 | set_normal="\033[22m" 13 | #Load text into associative array 14 | translations=$(jq -r ".\"$EXPLORE_NYM_LANG\"" $EXPLORE_NYM_PATH/../text/tool.json) 15 | if [[ "$translations" == "null" ]]; then 16 | echo -e "No translation for $EXPLORE_NYM_LANG available for this part of the" \ 17 | "script, If you're able to translate the text displayed on the script" \ 18 | "please contribute here https://github.com/ExploreNYM/bash-tool\n" 19 | translations=$(jq -r ".\"en-us\"" ../text/check-vps.json) 20 | fi 21 | declare -A text 22 | while IFS=':' read -r key value; do 23 | key=$(echo "${key//\"/}" | xargs) 24 | value=$(echo "${value//\"/}" | xargs -0 | sed 's/,$//') 25 | text["$key"]="$value" 26 | done <<< "$translations" 27 | 28 | ############### 29 | ## FUNCTIONS ## 30 | ############### 31 | 32 | find_nym_folder() { 33 | echo -e "\n${text[searching]}\n" 34 | nym_path=$(find $HOME -type d -name ".nym" 2>/dev/null) 35 | if [ -n "$nym_path" ] 36 | then 37 | echo -e "$check_mark ${text[found]}\n" 38 | sleep 2 39 | return 40 | else 41 | echo -e "$fail_x ${text[not_found]}\n" 42 | sleep 2 43 | return 1 44 | fi 45 | } 46 | 47 | find_config() { 48 | node_path="$nym_path/mixnodes" 49 | nym_node_id=$(find "$node_path" -mindepth 1 -maxdepth 1 -type \ 50 | d -printf "%f\n" | head -n1) 51 | nym_config_file=$node_path/$nym_node_id/config/config.toml 52 | 53 | if ! [ -f "$nym_config_file" ] 54 | then 55 | echo -e "${text[no_cfg]}\n" 56 | return 1 57 | fi 58 | } 59 | 60 | no_nym_folder_menu() { 61 | while true 62 | do 63 | clear ; $EXPLORE_NYM_PATH/display-logo.sh 64 | echo -e "\n$set_bold${text[menu]}\n$set_normal" 65 | echo "1. ${text[install]}" 66 | echo "2. ${text[migrate]}" 67 | echo "3. ${text[quit]}" 68 | read -p "${text[prompt]}" choice 69 | 70 | case $choice in 71 | 1) 72 | $EXPLORE_NYM_PATH/mixnode/install.sh && exit 73 | ;; 74 | 2) 75 | $EXPLORE_NYM_PATH/mixnode/migrate.sh && exit 76 | ;; 77 | 3) 78 | exit 79 | ;; 80 | *) 81 | echo -e "\n$fail_x ${text[invalid]}" 82 | sleep 1 83 | ;; 84 | esac 85 | done 86 | } 87 | 88 | has_nym_folder_menu() { 89 | while true 90 | do 91 | clear ; $EXPLORE_NYM_PATH/display-logo.sh 92 | echo -e "$set_bold${text[menu]}\n$set_normal" 93 | echo "1. ${text[update]}" 94 | echo "2. ${text[backup]}" 95 | echo "3. ${text[details]}" 96 | echo "4. ${text[status]}" 97 | echo "5. ${text[quit]}" 98 | read -p "${text[prompt]}" choice 99 | 100 | case $choice in 101 | 1) 102 | $EXPLORE_NYM_PATH/mixnode/update.sh $nym_path 103 | ;; 104 | 2) 105 | $EXPLORE_NYM_PATH/mixnode/backup.sh $nym_path && exit 106 | ;; 107 | 3) 108 | $EXPLORE_NYM_PATH/mixnode/change-details.sh $nym_path 109 | ;; 110 | 4) 111 | $EXPLORE_NYM_PATH/mixnode/status.sh 112 | ;; 113 | 5) 114 | exit 115 | ;; 116 | *) 117 | echo -e "\n$fail_x ${text[invalid]}" 118 | sleep 1 119 | ;; 120 | esac 121 | done 122 | } 123 | 124 | ############################### 125 | ### MAIN EXECUTION OF SCRIPT ## 126 | ############################### 127 | 128 | if find_nym_folder 129 | then 130 | find_config || exit; 131 | has_nym_folder_menu 132 | else 133 | no_nym_folder_menu 134 | fi 135 | -------------------------------------------------------------------------------- /scripts/mixnode/update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############### 4 | ## VARIABLES ## 5 | ############### 6 | 7 | nym_path=$1 8 | node_path="$nym_path/mixnodes" 9 | nym_node_id=$(find "$node_path" -mindepth 1 -maxdepth 1 -type d \ 10 | -printf "%f\n" | head -n1) 11 | nym_config_file=$node_path/$nym_node_id/config/config.toml 12 | check_mark="\xE2\x9C\x93" 13 | fail_x="\xE2\x9C\x97" 14 | set_bold="\033[1m" 15 | set_normal="\033[22m" 16 | announce_ip=$(curl -4 ifconfig.me) 17 | [ -z "$announce_ip" ] && announce_ip=$(curl ipinfo.io/ip) 18 | #Load text into associative array 19 | translations=$(jq -r ".\"$EXPLORE_NYM_LANG\"" $EXPLORE_NYM_PATH/../text/update.json) 20 | if [[ "$translations" == "null" ]]; then 21 | echo -e "No translation for $EXPLORE_NYM_LANG available for this part of the" \ 22 | "script, If you're able to translate the text displayed on the script" \ 23 | "please contribute here https://github.com/ExploreNYM/bash-tool\n" 24 | translations=$(jq -r ".\"en-us\"" ../text/check-vps.json) 25 | fi 26 | declare -A text 27 | while IFS=':' read -r key value; do 28 | key=$(echo "${key//\"/}" | xargs) 29 | value=$(echo "${value//\"/}" | xargs -0 | sed 's/,$//') 30 | text["$key"]="$value" 31 | done <<< "$translations" 32 | 33 | ############### 34 | ## FUNCTIONS ## 35 | ############### 36 | 37 | setup_binary() { 38 | binary_name="nym-mixnode" 39 | nym_url="https://github.com/nymtech/nym/releases/latest/download/$binary_name" 40 | 41 | echo "${text[checking]}" 42 | sudo wget -q -O $binary_name "$nym_url" 43 | sudo chmod u+x $binary_name 44 | installed_version=$(nym-mixnode --version 2> /dev/null | grep "Build Version" | awk '{print $3}') 45 | remote_version=$(./nym-mixnode --version 2> /dev/null | grep "Build Version" | awk '{print $3}') 46 | if [[ $installed_version == $remote_version ]]; then 47 | echo "${text[up_to_date]}" 48 | sudo rm nym-mixnode 49 | sleep 2 ; exit 50 | else 51 | echo "${text[outdated]}" ; sleep 2 52 | fi 53 | sudo mv $binary_name /usr/local/bin/ 54 | } 55 | 56 | init_binary() { 57 | sudo nym-mixnode init --id $nym_node_id --host $announce_ip > ne-output.txt 58 | } 59 | 60 | display_status() { 61 | nym_version=$(grep "version" "$nym_config_file" | awk -F "'" '{print $2}') 62 | 63 | if [[ `service nym-mixnode status | grep active` =~ "running" ]] 64 | then 65 | $EXPLORE_NYM_PATH/display-logo.sh ; sleep 1 66 | echo -e "${set_bold}${text[updated]} $nym_version ${text[and]}\n$set_normal" 67 | sleep 2 ; sudo systemctl status nym-mixnode --no-pager 68 | echo -e "\n\n${text[restart]}" 69 | $EXPLORE_NYM_PATH/cleanup.sh 70 | sudo reboot 71 | else 72 | echo -e "$fail_x ${text[fail]}" 73 | sleep 10 74 | exit 1 75 | fi 76 | } 77 | 78 | ############################## 79 | ## MAIN EXECUTION OF SCRIPT ## 80 | ############################## 81 | 82 | $EXPLORE_NYM_PATH/display-logo.sh 83 | echo -e "${set_bold}${text[welcome_message]}\n$set_normal" 84 | setup_binary 85 | sudo systemctl stop nym-mixnode 86 | init_binary 87 | sudo systemctl start nym-mixnode 88 | display_status 89 | -------------------------------------------------------------------------------- /text/backup.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-us": { 3 | "welcome_message": "Mixnode backup started", 4 | "instructions": "Copy this script and paste it in your local terminal(mac/linux) or powershell(windows) to pull a backup of your mixnode" 5 | }, 6 | "pt-br": { 7 | "welcome_message": "Backup do mixnode inicializado", 8 | "instructions": "Copie esse comando e cole ele no seu terminal(mac/linux) ou powershell(windows) local para puxar um backup do seu mixnode" 9 | }, 10 | "ua-укр": { 11 | "welcome_message": "Розпочато резервне копіювання мікс-ноди", 12 | "instructions": "Щоб створити резервну копію вашої мікс-ноди, скопіюйте цей скрипт і вставте у свій локальний термінал, якщо користуєтесь mac/linux або powershell, якщо користуєтесь windows." 13 | }, 14 | "ru-рф": { 15 | "welcome_message": "Началось резервное копирование Mixnode", 16 | "instructions": "Скопируйте этот скрипт и вставьте его в локальный терминал (mac/linux) или powershell (windows) для создания резервной копии mixnode" 17 | }, 18 | "fr-fr": { 19 | "welcome_message": "Démarrage de la sauvegarde du mixnode", 20 | "instructions": "Copiez le script et collez le sur votre terminal(mac/linux) ou powershell(windows) pour récupérer la sauvegarde de votre mixnode" 21 | }, 22 | "es-es": { 23 | "welcome_message": "Copia de seguridad de Mixnode iniciada", 24 | "instructions": "Copia este script y pégalo en tu terminal local(mac/linux) o powershell(windows) para sacar una copia de seguridad de tu mixnode" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /text/change-details.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-us": { 3 | "welcome_message": "Updating description of your mixnode", 4 | "success": "Description updated successfully", 5 | "fail": "Error: mixnode not running" 6 | }, 7 | "pt-br": { 8 | "welcome_message": "Atualizando descrição do seu mixnode", 9 | "success": "Descrição atualizada com sucesso", 10 | "fail": "Erro: mixnode não está rodando" 11 | }, 12 | "ua-укр": { 13 | "welcome_message": "Оновлюємо опис вашої мікс-ноди", 14 | "success": "Опис успішно оновлено", 15 | "fail": "Помилка: мікс-нода не запущена" 16 | }, 17 | "ru-рф": { 18 | "welcome_message": "Обновление описания вашего mixnode", 19 | "success": "Описание успешно обновлено", 20 | "fail": "Ошибка: mixnode не запущен" 21 | }, 22 | "fr-fr": { 23 | "welcome_message": "Mise à jour de la description de votre mixnode", 24 | "success": "Description mise à jour avec succès", 25 | "fail": "Erreur: le mixnode n'est pas démarré" 26 | }, 27 | "es-es": { 28 | "welcome_message": "Actualizando descripción de tu mixnode", 29 | "success": "Descripción actualizada con éxito", 30 | "fail": "Error: mixnode no se está ejecutando" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /text/check-vps.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-us": { 3 | "welcome_message": "Mixnode tool initialized please be patient checking and updating server", 4 | "enabled": "IPv6 enabled", 5 | "not_found": "No IPv6 addess found!", 6 | "force_exit": "Force Exit", 7 | "version_warning": "Warning script and nym binaries are tested on Ubuntu 20.04", 8 | "run_anyway": "Run script anyway? (Y/n)", 9 | "nat_ok": "The server is not behind a NAT", 10 | "nat_fail": "The server is behind a NAT if you running on a home network please check the docs about port forwarding", 11 | "has_sudo": "has sudo privileges", 12 | "no_sudo": "has no sudo privileges", 13 | "root": "root user", 14 | "root_warning": "Warning you should create a sudo user for running nym", 15 | "make_user": "Make a new sudo user? (Y/n)", 16 | "enter_user": "Enter new username:", 17 | "user_fail": "Failed to create user", 18 | "diff_name": "try a different username or certify that you typed the password correctly", 19 | "reconnecting": "Reconnecting as new user please re run script after connecting", 20 | "stopping": "Stopping update", 21 | "stopped": "Update stoped", 22 | "updating": "Updating server please be patient...", 23 | "updated": "Server up to date" 24 | }, 25 | "pt-br": { 26 | "welcome_message": "Ferramenta para mixnode inicializada, por favor seja paciente enquanto checamos e atualizamos o servidor", 27 | "enabled": "IPv6 habilitado", 28 | "not_found": "Nenhum endereço IPv6 encontrado!", 29 | "force_exit": "Saída Forçada", 30 | "version_warning": "Aviso, o script e os binários nym são testados no Ubuntu 20.04", 31 | "run_anyway": "Rodar o script mesmo assim? (Y/n)[Y para sim e n para não]", 32 | "nat_ok": "O servidor não está atrás de um NAT", 33 | "nat_fail": "O servidor está atrás de um NAT, se você está rodando em uma rede caseira cheque os docs sobre port forwarding", 34 | "has_sudo": "possui privilégios sudo", 35 | "no_sudo": "não possui privilégios sudo", 36 | "root": "usuário root", 37 | "root_warning": "Aviso, você deve criar um usuário com privilégios sudo para rodar nym", 38 | "make_user": "Criar novo usuário com privilégios sudo? (Y/n)[Y para sim e n para não]", 39 | "enter_user": "Insira o nome do usuário:", 40 | "user_fail": "Falha ao criar usuário", 41 | "diff_name": "Tente outro nome de usuário ou certifique-se que inseriu a senha corretamente", 42 | "reconnecting": "Reconectando com o novo usuário, rode o script novamente após se conectar", 43 | "stopping": "Interrompendo atualização", 44 | "stopped": "Atualização interrompida", 45 | "updating": "Atualizando o servidor, por favor seja paciente...", 46 | "updated": "Servidor atualizado" 47 | }, 48 | "ua-укр": { 49 | "welcome_message": "Мікс-ноду ініціалізовано. Перевіряємо та оновлюємо сервер, будь ласка, зачекайте", 50 | "enabled": "IPv6 ввімкнено", 51 | "not_found": "Не знайдено IPv6 адреси!", 52 | "force_exit": "Примусовий вихід", 53 | "version_warning": "Увага! Скрипт та двійкові файли Nym тестуються на Ubuntu 20.04", 54 | "run_anyway": "Запустити скрипт примусово? (y/n)", 55 | "nat_ok": "Сервер не знаходиться за NAT", 56 | "nat_fail": "Сервер за NAT. Якщо ви запустились у домашній мережі, будь ласка, перевірте документи про переадресацію портів", 57 | "has_sudo": "має привілеї sudo", 58 | "no_sudo": "не не має привілеїв sudo", 59 | "root": "кореневий користувач", 60 | "root_warning": "Увага! Вам слід створити користувача sudo для запуску Nym", 61 | "make_user": "Створити нового користувача sudo? (y/n)", 62 | "enter_user": "Введіть нове імʼя користувача:", 63 | "user_fail": "Не вдалося створити користувача", 64 | "diff_name": "спробуйте інше ім’я користувача або переконайтеся, що ви ввели пароль правильно", 65 | "reconnecting": "Повторне підключення як новий користувач. Будь ласка, повторно запустіть сценарій після підключення", 66 | "stopping": "Припинення оновлення", 67 | "stopped": "Оновлення зупинено", 68 | "updating": "Оновлення сервера, будь ласка, зачекайте...", 69 | "updated": "Сервер оновлено" 70 | }, 71 | "ru-рф": { 72 | "welcome_message": "Mixnode инициализирован, пожалуйста, будьте терпеливы при проверке и обновлении сервера", 73 | "enabled": "IPv6 включён", 74 | "not_found": "IPv6 адреса не найдены!", 75 | "force_exit": "Принудительный выход", 76 | "version_warning": "Внимание! Скрипт и исполняемые файлы Nym тестируются на Ubuntu 20.04", 77 | "run_anyway": "Всё равно запустить скрипт? (Y/n)", 78 | "nat_ok": "Сервер не находится за NAT", 79 | "nat_fail": "Сервер за NAT. Если вы запустились в домашней сети, пожалуйста, проверьте документы о переадресации портов", 80 | "has_sudo": "имеет привилегии sudo", 81 | "no_sudo": "не имеет привилегии sudo", 82 | "root": "root пользователь", 83 | "root_warning": "Предупреждение о необходимости создания пользователя sudo для запуска nym", 84 | "make_user": "Создать нового пользователя sudo? (Y/n)", 85 | "enter_user": "Введите новое имя пользователя:", 86 | "user_fail": "Не удалось создать пользователя", 87 | "diff_name": "попробуйте использовать другое имя пользователя или убедитесь, что вы правильно ввели пароль", 88 | "reconnecting": "Повторное подключение нового пользователя, пожалуйста, повторите запуск скрипта после подключения", 89 | "stopping": "Прекращение обновления", 90 | "stopped": "Обновление остановлено", 91 | "updating": "Обновление сервера, пожалуйста, подождите...", 92 | "updated": "Сервер обновлён" 93 | }, 94 | "fr-fr": { 95 | "welcome_message": "Outil initialisé, veuillez patienter en vérifiant et en mettant à jour le serveur", 96 | "enabled": "IPv6 activé", 97 | "not_found": "Aucune adresse IPv6 trouvée !", 98 | "force_exit": "Forcer l'arrêt", 99 | "version_warning": "Le script d'avertissement et les exécutables nym sont testés sur Ubuntu 20.04", 100 | "run_anyway": "Exécuter le script quand même ? (O/n)", 101 | "nat_ok": "Le serveur n'est pas derrière un NAT", 102 | "nat_fail": "Le serveur est derrière un NAT si vous utilisez un réseau local, veuillez consulter la documentation sur la redirection de port", 103 | "has_sudo": "a des privilèges sudo", 104 | "no_sudo": "n'a pas de privilèges sudo", 105 | "root": "utilisateur root", 106 | "root_warning": "Attention, vous devez créer un utilisateur sudo pour exécuter nym", 107 | "make_user": "Créer un nouvel utilisateur sudo ? (O/n)", 108 | "enter_user": "Entrez un nouveau nom d'utilisateur :", 109 | "user_fail": "Échec de la création de l'utilisateur", 110 | "diff_name": "essayez un autre nom d'utilisateur ou certifiez que vous avez correctement tapé le mot de passe", 111 | "reconnecting": "Reconnexion en tant que nouvel utilisateur, veuillez relancer le script après la connexion", 112 | "stopping": "Arrêt de la mise à jour", 113 | "stopped": "Mise à jour arrêtée", 114 | "updating": "Mise à jour du serveur, veuillez patienter...", 115 | "updated": "Serveur à jour" 116 | }, 117 | 118 | "es-es": { 119 | "welcome_message": "La herramienta Mixnode se ha inicializado. Por favor, ten paciencia mientras se revisa y actualiza el servidor.", 120 | "enabled": "IPv6 habilitado", 121 | "not_found": "¡No se encontró ninguna dirección IPv6!", 122 | "force_exit": "Forzar salida", 123 | "version_warning": "Advertencia: el script y los binarios nym se han probado en Ubuntu 20.04", 124 | "run_anyway": "¿Ejecutar el script de todos modos? (S/n)", 125 | "nat_ok": "El servidor no está detrás de un NAT", 126 | "nat_fail": "El servidor está detrás de un NAT. Si estás en una red doméstica, consulta las instrucciones sobre reenvío de puertos.", 127 | "has_sudo": "Tiene privilegios sudo", 128 | "no_sudo": "No tiene privilegios sudo", 129 | "root": "Usuario root", 130 | "root_warning": "Advertencia: debes crear un usuario sudo para ejecutar nym", 131 | "make_user": "¿Crear un nuevo usuario sudo? (S/n)", 132 | "enter_user": "Introduce un nuevo nombre de usuario:", 133 | "user_fail": "Error al crear el usuario", 134 | "diff_name": "Prueba con un nombre de usuario diferente o verifica que escribiste la contraseña correctamente", 135 | "reconnecting": "Reconectando como nuevo usuario. Por favor, vuelve a ejecutar el script después de conectarte", 136 | "stopping": "Deteniendo la actualización", 137 | "stopped": "Actualización detenida", 138 | "updating": "Actualizando el servidor, por favor ten paciencia...", 139 | "updated": "Servidor actualizado" 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /text/install.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-us": { 3 | "welcome_message": "Mixnode installation started", 4 | "success": "Mixnode installed and running", 5 | "instructions": "nym-mixnode installed, remember to bond your node in your wallet details above!", 6 | "restart": "Server Restart Initialized", 7 | "fail": "nym-mixnode was not installed correctly, please re-install" 8 | }, 9 | "pt-br": { 10 | "welcome_message": "Instalação do mixnode inicializada", 11 | "success": "Mixnode instalado e rodando", 12 | "instructions": "nym-mixnode instalado, lembre-se de dar bond no seu mixnode pela wallet com os detalhes acima!", 13 | "restart": "Servidor reiniciado", 14 | "fail": "nym-mixnode não foi instalado corretamente, por favor reinstale" 15 | }, 16 | "ua-укр": { 17 | "welcome_message": "Розпочато встановлення мікс-ноди", 18 | "success": "Мікс-нода встановлена та працює", 19 | "instructions": "Мікс-нода Ny, встановлена. Не забудьте привʼязати свою ноду до свого гаманця!", 20 | "restart": "Перезапуск сервера ініціалізовано", 21 | "fail": "Мікс-ноду Nym не було встановлено належним чином, будь-ласка перевстановіть її" 22 | }, 23 | "ru-рф": { 24 | "welcome_message": "Началась установка Mixnode", 25 | "success": "Mixnode установлена и работает", 26 | "instructions": "nym-mixnode установлена, не забудьте привязать ноду к кошельку!", 27 | "restart": "Перезапуск сервера инициализирован", 28 | "fail": "nym-mixnode была установлена неправильно, пожалуйста, установите его заново" 29 | }, 30 | "fr-fr": { 31 | "welcome_message": "L'installation du mixnode a commencé", 32 | "success": "Mixnode installé et en cours d'exécution", 33 | "instructions": "nym-mixnode installé, n'oubliez pas de lier votre nœud avec les détails via votre portefeuille ci-dessus !", 34 | "restart": "Redémarrage du serveur initialisé", 35 | "fail": "nym-mixnode n'a pas été installé correctement, veuillez réinstaller" 36 | }, 37 | "es-es": { 38 | "welcome_message": "La instalación del Mixnode ha comenzado", 39 | "success": "Mixnode instalado y funcionando", 40 | "instructions": "¡nym-mixnode instalado, recuerda vincular tu nodo en los detalles de tu cartera!", 41 | "restart": "Reinicio del servidor inicializado", 42 | "fail": "nym-mixnode no se instaló correctamente, por favor vuelve a instalarlo" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /text/migrate.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-us": { 3 | "welcome_message": "Mixnode migration started", 4 | "success": "Folder moved successfully to", 5 | "fail": ".nym folder not found" 6 | }, 7 | "pt-br": { 8 | "welcome_message": "Migração do mixnode inicializada", 9 | "success": "Pasta movida com suesso para ", 10 | "fail": "Pasta .nym não encontrada" 11 | }, 12 | "ua-укр": { 13 | "welcome_message": "Міграція мікс-ноди почалась", 14 | "success": "Папка успішно переміщена до", 15 | "fail": "Папки .nym не знайдено" 16 | }, 17 | "ru-рф": { 18 | "welcome_message": "Начат перенос Mixnode", 19 | "success": "Папка успешно перемещена в", 20 | "fail": "Папка .nym не найдена" 21 | }, 22 | "fr-fr": { 23 | "welcome_message": "La migration du mixnode a commencé", 24 | "success": "Dossier déplacé vers", 25 | "fail": "Dossier .nym introuvable" 26 | }, 27 | "es-es": { 28 | "welcome_message": "Migración de Mixnode iniciada", 29 | "success": "Carpeta movida con éxito a", 30 | "fail": "Carpeta .nym no encontrada" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /text/status.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-us": { 3 | "instructions": "Mixnode current status, press [q] to exit" 4 | }, 5 | "pt-br": { 6 | "instructions": "Estado atual do mixnode, pressione [q] para sair" 7 | }, 8 | "ua-укр": { 9 | "instructions": "Поточний статус мікс-ноди. Натисніть [q] для виходу" 10 | }, 11 | "ru-рф": { 12 | "instructions": "Текущий статус Mixnode. Нажмите [q] для выхода" 13 | }, 14 | "fr-fr": { 15 | "instructions": "État actuel du mixnode, appuyez sur [q] pour quitter" 16 | }, 17 | "es-es":{ 18 | "instructions": "Estado actual del Mixnode, pulse [q] para salir" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /text/tool.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-us": { 3 | "searching": "Searching for .nym folder on current user, please wait", 4 | "found": ".nym folder found", 5 | "not_found": ".nym folder not found", 6 | "no_cfg": "Cant find config.toml", 7 | "menu": "nym-mixnode menu:", 8 | "quit": "Quit", 9 | "prompt": "Enter your choice: ", 10 | "invalid": "Invalid option, please try again", 11 | "install": "Install nym-mixnode", 12 | "migrate": "Migrate nym-mixnode", 13 | "update": "Update nym-mixnode", 14 | "backup": "Backup nym-mixnode", 15 | "details": "Change nym-mixnode details (name/description/link/location)", 16 | "status": "Check nym-mixnode status" 17 | }, 18 | "pt-br": { 19 | "searching": "Procurando pela pasta .nym no atual usuário, espere por favor", 20 | "found": "Pasta .nym encontrada", 21 | "not_found": "Pasta .nym não encontrada", 22 | "no_cfg": "Não foi possível encontrar o arquivo config.toml", 23 | "menu": "menu nym-mixnode:", 24 | "quit": "Sair", 25 | "prompt": "Insira uma opção: ", 26 | "invalid": "Opção inválida, tente novamente", 27 | "install": "Instalar nym-mixnode", 28 | "migrate": "Migrar nym-mixnode", 29 | "update": "Atualizar nym-mixnode", 30 | "backup": "Fazer backup do nym-mixnode", 31 | "details": "Mudar dedscrição do nym-mixnode (nome/descrição/link/localização)", 32 | "status": "Checar estado do nym-mixnode" 33 | }, 34 | "ua-укр": { 35 | "searching": "Шукаю папку .nym для поточного користувача. Будь ласка, зачекайте", 36 | "found": "Папка .nym знайдена", 37 | "not_found": "Папка .nym не знайдена", 38 | "no_cfg": "Не можу знайти config.toml", 39 | "menu": "Меню мікс-ноди Nym:", 40 | "quit": "Вихід", 41 | "prompt": "Введіть свій вибір: ", 42 | "invalid": "Недійсний параметр, спробуйте ще раз", 43 | "install": "Встановити мікс-ноду Nym", 44 | "migrate": "Перемістити мікс-ноду Nym", 45 | "update": "Оновити мікс-ноду Nym", 46 | "backup": "Резервне копіювання мікс-ноди Nym", 47 | "details": "Змінити деталі мікс-ноди Nym (назва/опис/посилання/розташування)", 48 | "status": "Перевірити статус мікс-ноди Nym" 49 | }, 50 | "ru-рф": { 51 | "searching": "Поиск папки .nym для текущего пользователя, пожалуйста, подождите", 52 | "found": "Папка .nym найдена", 53 | "not_found": "Папка .nym не найдена", 54 | "no_cfg": "Не удается найти config.toml", 55 | "menu": "nym-mixnode меню:", 56 | "quit": "Выйти", 57 | "prompt": "Введите свой выбор: ", 58 | "invalid": "Неверный параметр, попробуйте еще раз", 59 | "install": "установить nym-mixnode", 60 | "migrate": "Перенос nym-mixnode", 61 | "update": "Обновить nym-mixnode", 62 | "backup": "Резервное копирование nym-mixnode", 63 | "details": "Изменение сведений о nym-mixnode (имя/описание/ссылка/местоположение)", 64 | "status": "Проверка статуса nym-mixnode" 65 | }, 66 | "fr-fr": { 67 | "searching": "Recherche du dossier .nym pour l'utilisateur actuel, veuillez patienter", 68 | "found": "dossier .nym trouvé", 69 | "not_found": "Dossier .nym introuvable", 70 | "no_cfg": "Impossible de trouver le fichier config.toml", 71 | "menu": "menu nym-mixnode :", 72 | "quit": "Quitter", 73 | "prompt": "Entrez votre choix : ", 74 | "invalid": "Option invalide, veuillez réessayer", 75 | "install": "Installer nym-mixnode", 76 | "migrate": "Migrer nym-mixnode", 77 | "update": "Mettre à jour nym-mixnode", 78 | "backup": "Sauvegarder nym-mixnode", 79 | "details": "Modifier les détails de nym-mixnode (nom/description/lien/emplacement)", 80 | "status": "Vérifier l'état de nym-mixnode" 81 | }, 82 | "es-es": { 83 | "searching": "Buscando la carpeta .nym del usuario actual, por favor espera", 84 | "found": "Carpeta .nym encontrada", 85 | "not_found": "Carpeta .nym no encontrada", 86 | "no_cfg": "No se encuentra el archivo config.toml", 87 | "menu": "Menú de nym-mixnode:", 88 | "quit": "Salir", 89 | "prompt": "Ingresa tu opción: ", 90 | "invalid": "Opción inválida, intenta de nuevo", 91 | "install": "Instalar nym-mixnode", 92 | "migrate": "Migrar nym-mixnode", 93 | "update": "Actualizar nym-mixnode", 94 | "backup": "Respaldar nym-mixnode", 95 | "details": "Cambiar detalles de nym-mixnode (nombre/descripción/enlace/ubicación)", 96 | "status": "Verificar estado de nym-mixnode" 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /text/update.json: -------------------------------------------------------------------------------- 1 | { 2 | "en-us": { 3 | "welcome_message": "Mixnode update started", 4 | "checking": "Checking mixnode version", 5 | "up_to_date": "Mixnode already up to date", 6 | "outdated": "Mixnode outdated, updating", 7 | "updated": "Mixnode updated to version:", 8 | "and": "and running, remember update the version in your wallet!", 9 | "restart": "Server restart initiated, Mixnode updated and running cya next update :)", 10 | "fail": "nym-mixnode was not updated correctly, please re-update." 11 | }, 12 | "pt-br": { 13 | "welcome_message": "Atualização do mixnode inicializada", 14 | "checking": "Checando a versão do mixnode", 15 | "up_to_date": "Mixnode já está atualizado", 16 | "outdated": "Mixnode desatualizado, atualizando", 17 | "updated": "Mixnode atualizado para a versão:", 18 | "and": "e rodando, lembre-se de atualizar a versão na sua wallet!", 19 | "restart": "Reiniciando servidor, Mixnode atualizado e rodando até o próximo update :)", 20 | "fail": "nym-mixnode não foi atualizado corretamente, por favor atualize novamente" 21 | }, 22 | "ua-укр": { 23 | "welcome_message": "Розпочато оновлення мікс-ноди", 24 | "checking": "Перевіряю версію мікс-ноди", 25 | "up_to_date": "Встановлена актуальна версія мікс-ноди", 26 | "outdated": "Мікс-нода застаріла, оновлюю", 27 | "updated": "Мікс-нода оновлена до версії:", 28 | "and": "і працює. Не забудьте оновити версію у своєму гаманці!", 29 | "restart": "Розпочато перезапуск сервера. Мікс-нода оновлена та працює. Побачимось на наступному оновленні :)", 30 | "fail": "Мікс-ноду Nym не було оновлено належним чином. Будь ласка, оновіть ще раз." 31 | }, 32 | "ru-рф": { 33 | "welcome_message": "Начато обновление Mixnode", 34 | "checking": "Проверка версии mixnode", 35 | "up_to_date": "Mixnode уже обновлена", 36 | "outdated": "Mixnode устарела, обновленяю", 37 | "updated": "Mixnode обновлена до версии:", 38 | "and": "Работает, не забудьте обновить версию в своем кошельке!", 39 | "restart": "Начата перезагрузка сервера, Mixnode обновлена и работает, до следующего обновления :)", 40 | "fail": "nym-mixnode была обновлена некорректно, пожалуйста, выполните повторное обновление." 41 | }, 42 | "fr-fr": { 43 | "welcome_message": "La mise à jour du mixnode a commencé", 44 | "checking": "Vérification de la version du mixnode", 45 | "up_to_date": "Mixnode déjà à jour", 46 | "outdated": "Mixnode obsolète, mise à jour", 47 | "updated": "Mixnode mis à jour vers la version :", 48 | "and": "et en cours d'exécution, n'oubliez pas de mettre à jour la version dans votre portefeuille !", 49 | "restart": "Redémarrage du serveur lancé,Mixnode mis à jour et en cours d'exécution jusqu'à la prochaine mise à jour :)", 50 | "fail": "nym-mixnode n'a pas été mis à jour correctement, veuillez re-mettre à jour." 51 | }, 52 | "es-es": { 53 | "welcome_message": "Actualización del Mixnode iniciada", 54 | "checking": "Comprobando la versión del Mixnode", 55 | "up_to_date": "El Mixnode ya está actualizado", 56 | "outdated": "El Mixnode está desactualizado, actualizando", 57 | "updated": "Mixnode actualizado a la versión:", 58 | "and": "y en funcionamiento, ¡recuerda actualizar la versión en tu cartera!", 59 | "restart": "Reinicio del servidor iniciado, Mixnode actualizado y en funcionamiento, ¡hasta la próxima actualización! :)", 60 | "fail": "nym-mixnode no se actualizó correctamente, por favor vuelve a actualizarlo." 61 | } 62 | } 63 | --------------------------------------------------------------------------------