├── LICENSE ├── README.md ├── RcloneLab.ipynb ├── VM's specification ├── DATE 2019.02.17 ├── Default.txt ├── GPU.txt └── TPU.txt ├── _config.yml ├── docs └── 01.png ├── img ├── title_qbittorrent.png ├── title_rclonelab.png ├── title_rtorrent_flood.png ├── title_utility.png └── vector │ ├── font.ttf │ └── title.eps └── res ├── qbittorrent ├── favicon.ico └── qBittorrent.conf ├── rclonelab ├── 01.png └── favicon.ico └── rtorrent └── rtorrent.rc /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 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 |

2 | 3 |

4 | 5 | ## What's new in RcloneLab 2.0? 6 | 7 | - Add rTorrent+Flood as an alternative torrent client; It has a beautiful UI and unique traits from qBittorrent. 8 | - Add Ubuntu Virtual Machine Updater. 9 | - Change output from text to HTML; more beautiful and easier to use. 10 | - Remove support for loading rclone.conf from Google Drive. 11 | - Code performance and logic improvement. 12 | - Fix can't use F5 when to enter qBittorrent WebUI for the first time. 13 | 14 | ## Introduction 15 | 16 | [**RcloneLab**](https://minormole.github.io/RcloneLab) is a [**rclone**](https://rclone.org/) 17 | GUI for Google Colaboratory, similar to Rclone Browser. Please consider contributing our project, any improved version of the code is welcome and much appreciate. 18 | 19 | [**qBittorrent**](https://www.qbittorrent.org) is a cross-platform free and open-source BitTorrent client. 20 | 21 | [**Flood**](https://github.com/jfurrow/flood) is a monitoring service for [**rTorrent**](https://github.com/rakshasa/rtorrent) BitTorrent client. 22 | 23 | [**Google Colaboratory**](https://colab.research.google.com) is a free Jupyter notebook environment that requires no setup and runs entirely in the cloud with high speed network. Check the VM's specification [here](https://github.com/MinorMole/RcloneLab/tree/master/VM's%20specification). 24 | 25 | ## Installation [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MinorMole/RcloneLab/blob/master/RcloneLab.ipynb) 26 | 27 | 1. Open the IPython Notebook file in Google Colaboratory by clicking [here](https://colab.research.google.com/github/MinorMole/RcloneLab/blob/master/RcloneLab.ipynb). 28 | 29 | 2. Click "Run cell" (play button) and follow the instruction that show in the output. 30 | 31 | 32 | 33 | ## Tip 34 | 35 | We recommend to use [Rclone Browser](https://github.com/DinCahill/RcloneBrowser) for file browsing and get path for RcloneLab. 36 | 37 | ## Licence [![GitHub license](https://img.shields.io/github/license/MinorMole/RcloneLab.svg)](https://github.com/MinorMole/RcloneLab/blob/master/LICENSE) 38 | 39 | Licenced under the [MIT License](https://github.com/MinorMole/RcloneLab/blob/master/LICENSE). 40 | -------------------------------------------------------------------------------- /RcloneLab.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "RcloneLab", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "collapsed_sections": [ 10 | "6I2huqscJEPn", 11 | "fkaNFMaxHDWz", 12 | "_lxNNpMCqYT4", 13 | "5-5ksQslqmYy" 14 | ], 15 | "toc_visible": true, 16 | "include_colab_link": true 17 | }, 18 | "kernelspec": { 19 | "name": "python3", 20 | "display_name": "Python 3" 21 | }, 22 | "accelerator": "GPU" 23 | }, 24 | "cells": [ 25 | { 26 | "cell_type": "markdown", 27 | "metadata": { 28 | "id": "view-in-github", 29 | "colab_type": "text" 30 | }, 31 | "source": [ 32 | "\"Open" 33 | ] 34 | }, 35 | { 36 | "metadata": { 37 | "id": "HGctdySsIGFS", 38 | "colab_type": "text" 39 | }, 40 | "cell_type": "markdown", 41 | "source": [ 42 | "#### 📚 For more information please visit our [GitHub](https://github.com/MinorMole/RcloneLab/).\n" 43 | ] 44 | }, 45 | { 46 | "metadata": { 47 | "id": "6I2huqscJEPn", 48 | "colab_type": "text" 49 | }, 50 | "cell_type": "markdown", 51 | "source": [ 52 | "# ![](https://minormole.github.io/RcloneLab/img/title_rclonelab.png =x45)" 53 | ] 54 | }, 55 | { 56 | "metadata": { 57 | "id": "iroeLPFdXbif", 58 | "colab_type": "code", 59 | "cellView": "form", 60 | "colab": {} 61 | }, 62 | "cell_type": "code", 63 | "source": [ 64 | "#@markdown

📝 Note: Run this before use RcloneLab.

\n", 65 | "Setup_Time_Zone = False #@param {type:\"boolean\"}\n", 66 | "\n", 67 | "import os; from google.colab import files; from IPython.display import HTML, clear_output\n", 68 | "\n", 69 | "def upload_conf():\n", 70 | " try:\n", 71 | " display(HTML(\"

Please upload the config file of rclone (rclone.conf) from your computer.


\"))\n", 72 | " for fn in files.upload().keys():\n", 73 | " upload_conf = \"{name}\".format(name=fn)\n", 74 | " os.environ[\"rclone_conf\"] = upload_conf\n", 75 | " if os.path.isfile(\"/content/\" + upload_conf) == True:\n", 76 | " !mv -f $rclone_conf /root/.rclone.conf\n", 77 | " !chmod 666 /root/.rclone.conf\n", 78 | " clear_output()\n", 79 | " if Setup_Time_Zone == True:\n", 80 | " !sudo dpkg-reconfigure tzdata\n", 81 | " clear_output()\n", 82 | " return True\n", 83 | " else:\n", 84 | " return False\n", 85 | " except:\n", 86 | " clear_output()\n", 87 | " return False\n", 88 | "\n", 89 | "if os.path.isfile(\"/usr/bin/rclone\") == True:\n", 90 | " if upload_conf() == True:\n", 91 | " display(HTML(\"

Config has been changed.


\"))\n", 92 | " else:\n", 93 | " display(HTML(\"

File upload has been cancelled during upload file.


\"))\n", 94 | "else:\n", 95 | " if upload_conf() == True:\n", 96 | " !rm -rf /content/sample_data/\n", 97 | " !curl -s https://rclone.org/install.sh | sudo bash\n", 98 | " clear_output()\n", 99 | " display(HTML(\"

Installation has been successfully completed.


\"))\n", 100 | " else:\n", 101 | " display(HTML(\"

File upload has been cancelled during upload file.


\"))" 102 | ], 103 | "execution_count": 0, 104 | "outputs": [] 105 | }, 106 | { 107 | "metadata": { 108 | "id": "RIr3CXMAGNdy", 109 | "colab_type": "code", 110 | "cellView": "form", 111 | "colab": {} 112 | }, 113 | "cell_type": "code", 114 | "source": [ 115 | "# ============================= FORM ============================= #\n", 116 | "Mode = \"Config\" #@param [\"Config\", \"Copy\", \"Move\", \"Sync\", \"Checker\", \"Deduplicate\", \"Remove Empty Directories\", \"Empty Trash\", \"qBittorrent\", \"rTorrent\"]\n", 117 | "Compare = \"Size & Mod-Time\" #@param [\"Size & Mod-Time\", \"Size & Checksum\", \"Only Mod-Time\", \"Only Size\", \"Only Checksum\"]\n", 118 | "Source = \"\" #@param {type:\"string\"}\n", 119 | "Destination = \"\" #@param {type:\"string\"}\n", 120 | "Transfers = 10 #@param {type:\"slider\", min:1, max:20, step:1}\n", 121 | "Checkers = 20 #@param {type:\"slider\", min:1, max:40, step:1}\n", 122 | "#@markdown ---\n", 123 | "\n", 124 | "#@markdown

⚙️ Global Configuration ⚙️

\n", 125 | "Simple_Ouput = True #@param {type:\"boolean\"}\n", 126 | "Skip_files_that_are_newer_on_the_destination = False #@param {type:\"boolean\"}\n", 127 | "Skip_all_files_that_exist = False #@param {type:\"boolean\"}\n", 128 | "Do_not_cross_filesystem_boundaries = False\n", 129 | "Do_not_update_modtime_if_files_are_identical = False #@param {type:\"boolean\"}\n", 130 | "Large_amount_of_files_optimization = False\n", 131 | "Google_Drive_optimization = False #@param {type:\"boolean\"}\n", 132 | "Dry_Run = False #@param {type:\"boolean\"}\n", 133 | "Output_Log_File = \"OFF\" #@param [\"OFF\", \"NOTICE\", \"INFO\", \"ERROR\", \"DEBUG\"]\n", 134 | "Extra_Arguments = \"\" #@param {type:\"string\"}\n", 135 | "\n", 136 | "#@markdown

↪️ Sync Configuration ↩️

\n", 137 | "Sync_Mode = \"Delete during transfer\" #@param [\"Delete during transfer\", \"Delete before transfering\", \"Delete after transfering\"]\n", 138 | "Track_Renames = False #@param {type:\"boolean\"}\n", 139 | "\n", 140 | "#@markdown

💞 Deduplicate Configuration 💞

\n", 141 | "Deduplicate_Mode = \"Interactive\" #@param [\"Interactive\", \"Skip\", \"First\", \"Newest\", \"Oldest\", \"Largest\", \"Rename\"]\n", 142 | "Deduplicate_Use_Trash = True #@param {type:\"boolean\"}\n", 143 | "# ================================================================ #\n", 144 | "\n", 145 | "### Variable Declaration\n", 146 | "\n", 147 | "# Optimized for Google Colaboratory\n", 148 | "os.environ[\"bufferC\"] = \"--buffer-size 96M\"\n", 149 | "\n", 150 | "if Compare == \"Size & Checksum\":\n", 151 | " os.environ[\"compareC\"] = \"-c\"\n", 152 | "elif Compare == \"Only Mod-Time\":\n", 153 | " os.environ[\"compareC\"] = \"--ignore-size\"\n", 154 | "elif Compare == \"Only Size\":\n", 155 | " os.environ[\"compareC\"] = \"--size-only\"\n", 156 | "elif Compare == \"Only Checksum\":\n", 157 | " os.environ[\"compareC\"] = \"-c --ignore-size\"\n", 158 | "else:\n", 159 | " os.environ[\"compareC\"] = \"\"\n", 160 | "\n", 161 | "os.environ[\"sourceC\"] = Source\n", 162 | "os.environ[\"destinationC\"] = Destination\n", 163 | "os.environ[\"transfersC\"] = \"--transfers \"+str(Transfers)\n", 164 | "os.environ[\"checkersC\"] = \"--checkers \"+str(Checkers)\n", 165 | "\n", 166 | "if Skip_files_that_are_newer_on_the_destination == True:\n", 167 | " os.environ[\"skipnewC\"] = \"-u\"\n", 168 | "else:\n", 169 | " os.environ[\"skipnewC\"] = \"\"\n", 170 | " \n", 171 | "if Skip_all_files_that_exist == True:\n", 172 | " os.environ[\"skipexistC\"] = \"--ignore-existing\"\n", 173 | "else:\n", 174 | " os.environ[\"skipexistC\"] = \"\"\n", 175 | " \n", 176 | "if Do_not_cross_filesystem_boundaries == True:\n", 177 | " os.environ[\"nocrossfilesystemC\"] = \"--one-file-system\"\n", 178 | "else:\n", 179 | " os.environ[\"nocrossfilesystemC\"] = \"\"\n", 180 | " \n", 181 | "if Do_not_update_modtime_if_files_are_identical == True:\n", 182 | " os.environ[\"noupdatemodtimeC\"] = \"--no-update-modtime\"\n", 183 | "else:\n", 184 | " os.environ[\"noupdatemodtimeC\"] = \"\"\n", 185 | "\n", 186 | "if Large_amount_of_files_optimization == True:\n", 187 | " os.environ[\"filesoptimizeC\"] = \"--fast-list\"\n", 188 | "else:\n", 189 | " os.environ[\"filesoptimizeC\"] = \"\"\n", 190 | " \n", 191 | "if Google_Drive_optimization == True:\n", 192 | " os.environ[\"driveoptimizeC\"] = \"--drive-chunk-size 32M --drive-acknowledge-abuse --drive-keep-revision-forever\"\n", 193 | "else:\n", 194 | " os.environ[\"driveoptimizeC\"] = \"\"\n", 195 | " \n", 196 | "if Dry_Run == True:\n", 197 | " os.environ[\"dryrunC\"] = \"-n\"\n", 198 | "else:\n", 199 | " os.environ[\"dryrunC\"] = \"\"\n", 200 | " \n", 201 | "if Output_Log_File != \"OFF\":\n", 202 | " os.environ[\"statsC\"] = \"--log-file=/root/.rclone_log/rclone_log.txt\"\n", 203 | "else:\n", 204 | " if Simple_Ouput == True:\n", 205 | " os.environ[\"statsC\"] = \"-v --stats-one-line --stats=5s\"\n", 206 | " else:\n", 207 | " os.environ[\"statsC\"] = \"-v --stats=5s\"\n", 208 | " \n", 209 | "if Output_Log_File == \"INFO\":\n", 210 | " os.environ[\"loglevelC\"] = \"--log-level INFO\"\n", 211 | "elif Output_Log_File == \"ERROR\":\n", 212 | " os.environ[\"loglevelC\"] = \"--log-level ERROR\"\n", 213 | "elif Output_Log_File == \"DEBUG\":\n", 214 | " os.environ[\"loglevelC\"] = \"--log-level DEBUG\"\n", 215 | "else:\n", 216 | " os.environ[\"loglevelC\"] = \"\"\n", 217 | "\n", 218 | "os.environ[\"extraC\"] = Extra_Arguments\n", 219 | "\n", 220 | "if Sync_Mode == \"Delete during transfer\":\n", 221 | " os.environ[\"syncmodeC\"] = \"--delete-during\"\n", 222 | "elif Sync_Mode == \"Delete before transfering\":\n", 223 | " os.environ[\"syncmodeC\"] = \"--delete-before\"\n", 224 | "elif Sync_Mode == \"Delete after transfering\":\n", 225 | " os.environ[\"syncmodeC\"] = \"--delete-after\"\n", 226 | " \n", 227 | "if Track_Renames == True:\n", 228 | " os.environ[\"trackrenamesC\"] = \"--track-renames\"\n", 229 | "else:\n", 230 | " os.environ[\"trackrenamesC\"] = \"\"\n", 231 | " \n", 232 | "if Deduplicate_Mode == \"Interactive\":\n", 233 | " os.environ[\"deduplicateC\"] = \"interactive\"\n", 234 | "elif Deduplicate_Mode == \"Skip\":\n", 235 | " os.environ[\"deduplicateC\"] = \"skip\"\n", 236 | "elif Deduplicate_Mode == \"First\":\n", 237 | " os.environ[\"deduplicateC\"] = \"first\"\n", 238 | "elif Deduplicate_Mode == \"Newest\":\n", 239 | " os.environ[\"deduplicateC\"] = \"newest\"\n", 240 | "elif Deduplicate_Mode == \"Oldest\":\n", 241 | " os.environ[\"deduplicateC\"] = \"oldest\"\n", 242 | "elif Deduplicate_Mode == \"Largest\":\n", 243 | " os.environ[\"deduplicateC\"] = \"largest\"\n", 244 | "elif Deduplicate_Mode == \"Rename\":\n", 245 | " os.environ[\"deduplicateC\"] = \"rename\"\n", 246 | " \n", 247 | "if Deduplicate_Use_Trash == True:\n", 248 | " os.environ[\"deduplicatetrashC\"] = \"\"\n", 249 | "else:\n", 250 | " os.environ[\"deduplicatetrashC\"] = \"--drive-use-trash=false\"\n", 251 | " \n", 252 | "### rclone Execution\n", 253 | "\n", 254 | "if Output_Log_File != \"OFF\" and Mode != \"Config\":\n", 255 | " !mkdir -p -m 666 /root/.rclone_log/\n", 256 | " display(HTML(\"

Logging enables, rclone will not output log through the terminal, please wait until finished.


\"))\n", 257 | "\n", 258 | "if Mode == \"Config\":\n", 259 | " !rclone --config=/root/.rclone.conf config\n", 260 | "elif Mode == \"Copy\":\n", 261 | " !rclone --config=/root/.rclone.conf copy \"$sourceC\" \"$destinationC\" $transfersC $checkersC $statsC $loglevelC $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $dryrunC $extraC\n", 262 | "elif Mode == \"Move\":\n", 263 | " !rclone --config=/root/.rclone.conf move \"$sourceC\" \"$destinationC\" $transfersC $checkersC $statsC $loglevelC --delete-empty-src-dirs $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $dryrunC $extraC\n", 264 | "elif Mode == \"Sync\":\n", 265 | " !rclone --config=/root/.rclone.conf sync \"$sourceC\" \"$destinationC\" $transfersC $checkersC $statsC $loglevelC $syncmodeC $trackrenamesC $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $dryrunC $extraC\n", 266 | "elif Mode == \"Checker\":\n", 267 | " !rclone --config=/root/.rclone.conf check \"$sourceC\" \"$destinationC\" $checkersC $statsC $loglevelC $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $dryrunC $extraC\n", 268 | "elif Mode == \"Deduplicate\":\n", 269 | " !rclone --config=/root/.rclone.conf dedupe \"$sourceC\" $checkersC $statsC $loglevelC --dedupe-mode $deduplicateC $deduplicatetrashC $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $dryrunC $extraC\n", 270 | "elif Mode == \"Remove Empty Directories\":\n", 271 | " !rclone --config=/root/.rclone.conf rmdirs \"$sourceC\" $statsC $loglevelC $dryrunC $extraC\n", 272 | "elif Mode == \"Empty Trash\":\n", 273 | " !rclone --config=/root/.rclone.conf cleanup \"$sourceC\" $statsC $loglevelC $dryrunC $extraC\n", 274 | "elif Mode == \"qBittorrent\":\n", 275 | " !chmod -R 666 /content/qBittorrent/\n", 276 | " !rclone --config=/root/.rclone.conf move \"/content/qBittorrent/\" \"$destinationC\" $transfersC $checkersC $statsC $loglevelC --delete-empty-src-dirs --exclude /favicon.ico $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $dryrunC $extraC\n", 277 | "elif Mode == \"rTorrent\":\n", 278 | " !chmod -R 666 /content/rTorrent/\n", 279 | " !rclone --config=/root/.rclone.conf move \"/content/rTorrent/\" \"$destinationC\" $transfersC $checkersC $statsC $loglevelC --delete-empty-src-dirs $compareC $skipnewC $skipexistC $nocrossfilesystemC $noupdatemodtimeC $bufferC $filesoptimizeC $driveoptimizeC $dryrunC $extraC\n", 280 | " \n", 281 | "### Log Output\n", 282 | " \n", 283 | "if Output_Log_File != \"OFF\" and Mode != \"Config\":\n", 284 | " ### Rename log file and output settings.\n", 285 | " !mv /root/.rclone_log/rclone_log.txt /root/.rclone_log/rclone_log_$(date +%Y-%m-%d_%H.%M.%S).txt\n", 286 | " with open(\"/root/.rclone_log/\" + Mode + \"_settings.txt\", \"w\") as f:\n", 287 | " f.write(\"Mode: \" + Mode + \\\n", 288 | " \"\\nCompare: \" + Compare + \\\n", 289 | " \"\\nSource: \\\"\" + Source + \\\n", 290 | " \"\\\"\\nDestination: \\\"\" + Destination + \\\n", 291 | " \"\\\"\\nTransfers: \" + str(Transfers) + \\\n", 292 | " \"\\nCheckers: \" + str(Checkers) + \\\n", 293 | " \"\\nSkip files that are newer on the destination: \" + str(Skip_files_that_are_newer_on_the_destination) + \\\n", 294 | " \"\\nSkip all files that exist: \" + str(Skip_all_files_that_exist) + \\\n", 295 | " \"\\nDo not cross filesystem boundaries: \" + str(Do_not_cross_filesystem_boundaries) + \\\n", 296 | " \"\\nDo not update modtime if files are identical: \" + str(Do_not_update_modtime_if_files_are_identical) + \\\n", 297 | " \"\\nDry-Run: \" + str(Dry_Run) + \\\n", 298 | " \"\\nOutput Log Level: \" + Output_Log_File + \\\n", 299 | " \"\\nExtra Arguments: \\\"\" + Extra_Arguments + \\\n", 300 | " \"\\\"\\nSync Moden: \" + Sync_Mode + \\\n", 301 | " \"\\nTrack Renames: \" + str(Track_Renames) + \\\n", 302 | " \"\\nDeduplicate Mode: \" + Deduplicate_Mode + \\\n", 303 | " \"\\nDeduplicate Use Trash: \" + str(Deduplicate_Use_Trash))\n", 304 | " ### Compressing log file.\n", 305 | " !rm -f /root/rclone_log.zip\n", 306 | " !zip -r -q -j -9 /root/rclone_log.zip /root/.rclone_log/\n", 307 | " !rm -rf /root/.rclone_log/\n", 308 | " !mkdir -p -m 666 /root/.rclone_log/\n", 309 | " ### Send Log\n", 310 | " if os.path.isfile(\"/root/rclone_log.zip\") == True:\n", 311 | " try:\n", 312 | " files.download(\"/root/rclone_log.zip\")\n", 313 | " !rm -f /root/rclone_log.zip\n", 314 | " display(HTML(\"

Sending log to your browser...


\"))\n", 315 | " except:\n", 316 | " !mv /root/rclone_log.zip /content/rclone_log_$(date +%Y-%m-%d_%H.%M.%S).zip\n", 317 | " display(HTML(\"

You can use file explorer to download the log file.



\"))\n", 318 | " else:\n", 319 | " clear_output()\n", 320 | " display(HTML(\"

There is no log file.


\"))\n", 321 | " \n", 322 | "\n", 323 | "### Operation has been successfully completed.\n", 324 | "if Mode != \"Config\":\n", 325 | " display(HTML(\"

✅ Operation has been successfully completed.


\"))" 326 | ], 327 | "execution_count": 0, 328 | "outputs": [] 329 | }, 330 | { 331 | "metadata": { 332 | "id": "fkaNFMaxHDWz", 333 | "colab_type": "text" 334 | }, 335 | "cell_type": "markdown", 336 | "source": [ 337 | "# ![qBittorrent](https://minormole.github.io/RcloneLab/img/title_qbittorrent.png =x45)" 338 | ] 339 | }, 340 | { 341 | "metadata": { 342 | "id": "CmzYd3QGHB7d", 343 | "colab_type": "code", 344 | "cellView": "form", 345 | "colab": {} 346 | }, 347 | "cell_type": "code", 348 | "source": [ 349 | "# ============================= FORM ============================= #\n", 350 | "#@markdown

📝 Note: Run this cell and relax.

\n", 351 | "Install_File_Server = False #@param {type:\"boolean\"}\n", 352 | "# ================================================================ #\n", 353 | "\n", 354 | "import os, string, random, psutil, IPython, uuid\n", 355 | "import ipywidgets as widgets\n", 356 | "\n", 357 | "from IPython.display import HTML, clear_output\n", 358 | "from google.colab import output\n", 359 | "\n", 360 | "SuccessRun = widgets.Button(\n", 361 | " description='✔ Successfully',\n", 362 | " disabled=True,\n", 363 | " button_style='success'\n", 364 | ")\n", 365 | "\n", 366 | "UnsuccessfullyRun = widgets.Button(\n", 367 | " description='✘ Unsuccessfully',\n", 368 | " disabled=True,\n", 369 | " button_style='danger'\n", 370 | ")\n", 371 | "\n", 372 | "class MakeButton(object):\n", 373 | " def __init__(self, title, callback):\n", 374 | " self._title = title\n", 375 | " self._callback = callback\n", 376 | " def _repr_html_(self):\n", 377 | " callback_id = 'button-' + str(uuid.uuid4())\n", 378 | " output.register_callback(callback_id, self._callback)\n", 379 | " template = \"\"\"\n", 380 | " \"\"\"\n", 386 | " html = template.format(title=self._title, callback_id=callback_id)\n", 387 | " return html\n", 388 | "\n", 389 | "def RandomGenerator(size=4, chars=string.digits):\n", 390 | " return \"\".join(random.choice(chars) for x in range(size))\n", 391 | "\n", 392 | "def CheckProcess(processName):\n", 393 | " for proc in psutil.process_iter():\n", 394 | " try:\n", 395 | " if processName.lower() in proc.name().lower():\n", 396 | " return True\n", 397 | " except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):\n", 398 | " pass\n", 399 | " return False;\n", 400 | " \n", 401 | "def AutoSSH(name,port):\n", 402 | " get_ipython().system_raw(\"autossh -l \" + name + \" -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R 80:localhost:\" + port + \" ssh.localhost.run &\")\n", 403 | " get_ipython().system_raw(\"autossh -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R \" + name + \":80:localhost:\" + port + \" serveo.net &\")\n", 404 | "\n", 405 | "def File_Server():\n", 406 | " if os.path.isfile(\"/content/qBittorrent/favicon.ico\") == False:\n", 407 | " !wget -q https://minormole.github.io/RcloneLab/res/qbittorrent/favicon.ico -O /content/qBittorrent/favicon.ico\n", 408 | " !chmod 666 /content/qBittorrent/favicon.ico\n", 409 | " if os.path.isdir(\"/tools/node/lib/node_modules/http-server/\") == True:\n", 410 | " get_ipython().system_raw(\"http-server /content/qBittorrent/ -p 7007 -i false -s -c-1 --no-dotfiles &\")\n", 411 | " else:\n", 412 | " !npm install -g http-server\n", 413 | " get_ipython().system_raw(\"http-server /content/qBittorrent/ -p 7007 -i false -s -c-1 --no-dotfiles &\")\n", 414 | " AutoSSH(\"fs\" + Random_Number, \"7007\")\n", 415 | "\n", 416 | "def Start_Server():\n", 417 | " if CheckProcess(\"qbittorrent-nox\") == False:\n", 418 | " !qbittorrent-nox -d --webui-port=6006\n", 419 | " if Install_File_Server == True:\n", 420 | " File_Server()\n", 421 | "\n", 422 | "try:\n", 423 | " try:\n", 424 | " Random_Number\n", 425 | " except NameError:\n", 426 | " !rm -rf /content/sample_data/\n", 427 | " !apt update -qq -y\n", 428 | " !npm i -g npm\n", 429 | " !yes \"\" | add-apt-repository ppa:qbittorrent-team/qbittorrent-stable\n", 430 | " !apt install qbittorrent-nox -qq -y\n", 431 | " if os.path.isfile(\"/usr/bin/autossh\") == False:\n", 432 | " !apt install autossh -qq -y\n", 433 | " !mkdir -p -m 666 /{content/qBittorrent,root/{.qBittorrent_temp,.config/qBittorrent}}\n", 434 | " !wget -q https://minormole.github.io/RcloneLab/res/qbittorrent/qBittorrent.conf -O /root/.config/qBittorrent/qBittorrent.conf\n", 435 | " Random_Number = RandomGenerator()\n", 436 | " AutoSSH(\"qb\" + Random_Number, \"6006\")\n", 437 | " Start_Server() \n", 438 | " clear_output()\n", 439 | " display(SuccessRun)\n", 440 | " display(MakeButton(\"Recheck\", Start_Server))\n", 441 | " if Install_File_Server == True:\n", 442 | " display(HTML(\"

File Server

Website 1
\" \\\n", 443 | " \"Website 2

\"))\n", 444 | " display(HTML(\"

qBittorrent

Website 1
\" \\\n", 445 | " \"Website 2
\" \\\n", 446 | " \"Username: rclonelab
Password: rclonelab


\"))\n", 447 | "except:\n", 448 | " clear_output()\n", 449 | " display(UnsuccessfullyRun)" 450 | ], 451 | "execution_count": 0, 452 | "outputs": [] 453 | }, 454 | { 455 | "metadata": { 456 | "id": "_lxNNpMCqYT4", 457 | "colab_type": "text" 458 | }, 459 | "cell_type": "markdown", 460 | "source": [ 461 | "# ![rTorrent](https://minormole.github.io/RcloneLab/img/title_rtorrent_flood.png =x45)" 462 | ] 463 | }, 464 | { 465 | "metadata": { 466 | "id": "8d0S3a6hqpoP", 467 | "colab_type": "code", 468 | "cellView": "form", 469 | "colab": {} 470 | }, 471 | "cell_type": "code", 472 | "source": [ 473 | "# ============================= FORM ============================= #\n", 474 | "#@markdown

📝 Note: Run this cell and relax.

\n", 475 | "# ================================================================ #\n", 476 | "\n", 477 | "import os, string, random, psutil, IPython, uuid\n", 478 | "import ipywidgets as widgets\n", 479 | "\n", 480 | "from IPython.display import HTML, clear_output\n", 481 | "from google.colab import output\n", 482 | "\n", 483 | "SuccessRun = widgets.Button(\n", 484 | " description='✔ Successfully',\n", 485 | " disabled=True,\n", 486 | " button_style='success'\n", 487 | ")\n", 488 | "\n", 489 | "UnsuccessfullyRun = widgets.Button(\n", 490 | " description='✘ Unsuccessfully',\n", 491 | " disabled=True,\n", 492 | " button_style='danger'\n", 493 | ")\n", 494 | "\n", 495 | "class MakeButton(object):\n", 496 | " def __init__(self, title, callback):\n", 497 | " self._title = title\n", 498 | " self._callback = callback\n", 499 | " def _repr_html_(self):\n", 500 | " callback_id = 'button-' + str(uuid.uuid4())\n", 501 | " output.register_callback(callback_id, self._callback)\n", 502 | " template = \"\"\"\n", 503 | " \"\"\"\n", 509 | " html = template.format(title=self._title, callback_id=callback_id)\n", 510 | " return html\n", 511 | "\n", 512 | "def random_generator(size=4, chars=string.digits):\n", 513 | " return \"\".join(random.choice(chars) for x in range(size))\n", 514 | "\n", 515 | "def CheckProcess(processName):\n", 516 | " for proc in psutil.process_iter():\n", 517 | " try:\n", 518 | " if processName.lower() in proc.name().lower():\n", 519 | " return True\n", 520 | " except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):\n", 521 | " pass\n", 522 | " return False;\n", 523 | " \n", 524 | "def Start_Server():\n", 525 | " if CheckProcess(\"screen\") == False or CheckProcess(\"rtorrent main\") == False:\n", 526 | " !/usr/bin/screen -d -m -fa -S rtorrent /usr/bin/rtorrent\n", 527 | " get_ipython().system_raw(\"NODE_ENV=production npm start --prefix /root/.Flood/ &\")\n", 528 | "\n", 529 | "try:\n", 530 | " if os.path.isfile(\"/usr/bin/rtorrent\") == False:\n", 531 | " !rm -rf /content/sample_data/\n", 532 | " !apt update -qq -y\n", 533 | " !npm i -g npm\n", 534 | " !apt install rtorrent screen -qq -y\n", 535 | " if os.path.isfile(\"/usr/bin/autossh\") == False:\n", 536 | " !apt install autossh -qq -y\n", 537 | " !mkdir -p -m 666 /{content/rTorrent/,root/.rTorrent_session}\n", 538 | " !mkdir -p -m 777 /root/.Flood/\n", 539 | " !wget -q https://minormole.github.io/RcloneLab/res/rtorrent/rtorrent.rc -O /root/.rtorrent.rc\n", 540 | " !chmod 666 /root/.rtorrent.rc\n", 541 | " !git clone https://github.com/MinorMole/FloodLab.git /root/.Flood/\n", 542 | " rT_Link = \"rt\" + random_generator()\n", 543 | " get_ipython().system_raw(\"autossh -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R \" + rT_Link + \":80:localhost:3000 serveo.net &\")\n", 544 | " get_ipython().system_raw(\"autossh -l \" + rT_Link + \" -M 0 -fNT -o 'StrictHostKeyChecking=no' -o 'ServerAliveInterval 300' -o 'ServerAliveCountMax 30' -R 80:localhost:3000 ssh.localhost.run &\")\n", 545 | " Start_Server()\n", 546 | " clear_output()\n", 547 | " display(SuccessRun)\n", 548 | " display(MakeButton(\"Recheck\", Start_Server))\n", 549 | " display(HTML(\"

rTorrent+Flood

Website 1
\" \\\n", 550 | " \"Website 2
IP: 127.0.0.1
Port: 5000


\"))\n", 551 | "except:\n", 552 | " clear_output()\n", 553 | " display(UnsuccessfullyRun)" 554 | ], 555 | "execution_count": 0, 556 | "outputs": [] 557 | }, 558 | { 559 | "metadata": { 560 | "colab_type": "text", 561 | "id": "5-5ksQslqmYy" 562 | }, 563 | "cell_type": "markdown", 564 | "source": [ 565 | "# ![Utility](https://minormole.github.io/RcloneLab/img/title_utility.png =x45)" 566 | ] 567 | }, 568 | { 569 | "metadata": { 570 | "id": "_y3BOjJ1BcDE", 571 | "colab_type": "code", 572 | "cellView": "form", 573 | "colab": {} 574 | }, 575 | "cell_type": "code", 576 | "source": [ 577 | "# ============================= FORM ============================= #\n", 578 | "#@markdown

Ubuntu Virtual Machine Updater

\n", 579 | "# ================================================================ #\n", 580 | "\n", 581 | "from IPython.display import HTML, clear_output\n", 582 | "\n", 583 | "!apt update -qq -y\n", 584 | "!apt upgrade -qq -y\n", 585 | "!npm i -g npm\n", 586 | "\n", 587 | "clear_output()\n", 588 | "display(HTML(\"

An update has been successfully completed.


\"))" 589 | ], 590 | "execution_count": 0, 591 | "outputs": [] 592 | }, 593 | { 594 | "metadata": { 595 | "colab_type": "code", 596 | "cellView": "form", 597 | "id": "O-jIeNjdbkOQ", 598 | "colab": {} 599 | }, 600 | "cell_type": "code", 601 | "source": [ 602 | "# ============================= FORM ============================= #\n", 603 | "#@markdown

Check VM's Status

\n", 604 | "Loop_Check = False #@param {type:\"boolean\"}\n", 605 | "Loop_Interval = 5 #@param {type:\"slider\", min:1, max:15, step:1}\n", 606 | "# ================================================================ #\n", 607 | "\n", 608 | "import time\n", 609 | "from IPython.display import clear_output\n", 610 | "Loop = True\n", 611 | "\n", 612 | "try:\n", 613 | " while Loop == True:\n", 614 | " clear_output()\n", 615 | " !top -b -n1\n", 616 | " if Loop_Check == False:\n", 617 | " Loop = False\n", 618 | " else:\n", 619 | " time.sleep(Loop_Interval)\n", 620 | "except:\n", 621 | " clear_output()" 622 | ], 623 | "execution_count": 0, 624 | "outputs": [] 625 | }, 626 | { 627 | "metadata": { 628 | "id": "M4tD3PEMEOH9", 629 | "colab_type": "code", 630 | "cellView": "form", 631 | "colab": {} 632 | }, 633 | "cell_type": "code", 634 | "source": [ 635 | "# ============================= FORM ============================= #\n", 636 | "#@markdown

Get VM's Specification

\n", 637 | "Output_Format = \"TEXT\" #@param [\"TEXT\", \"HTML\", \"XML\", \"JSON\"]\n", 638 | "Short_Output = False #@param {type:\"boolean\"}\n", 639 | "# ================================================================ #\n", 640 | "\n", 641 | "import os\n", 642 | "from google.colab import files\n", 643 | "from IPython.display import HTML, clear_output\n", 644 | "\n", 645 | "try:\n", 646 | " Output_Format_Ext\n", 647 | "except NameError:\n", 648 | " !apt install lshw -qq -y\n", 649 | " clear_output()\n", 650 | "\n", 651 | "if Short_Output == True:\n", 652 | " os.environ[\"outputformatC\"] = \"txt\"\n", 653 | " os.environ[\"outputformat2C\"] = \"-short\"\n", 654 | " Output_Format_Ext = \"txt\"\n", 655 | "elif Output_Format == \"TEXT\":\n", 656 | " os.environ[\"outputformatC\"] = \"txt\"\n", 657 | " os.environ[\"outputformat2C\"] = \"\"\n", 658 | " Output_Format_Ext = \"txt\"\n", 659 | "else:\n", 660 | " os.environ[\"outputformatC\"] = Output_Format.lower()\n", 661 | " os.environ[\"outputformat2C\"] = \"-\"+Output_Format.lower()\n", 662 | " Output_Format_Ext = Output_Format.lower()\n", 663 | " \n", 664 | "!lshw $outputformat2C > Specification.$outputformatC\n", 665 | "files.download(\"/content/Specification.\" + Output_Format_Ext)\n", 666 | "!rm -f /content/Specification.$outputformatC\n", 667 | "display(HTML(\"

Sending log to your browser...


\"))" 668 | ], 669 | "execution_count": 0, 670 | "outputs": [] 671 | } 672 | ] 673 | } -------------------------------------------------------------------------------- /VM's specification/DATE 2019.02.17: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/VM's specification/DATE 2019.02.17 -------------------------------------------------------------------------------- /VM's specification/Default.txt: -------------------------------------------------------------------------------- 1 | c3bf4375a376 2 | description: Computer 3 | width: 64 bits 4 | capabilities: smp vsyscall32 5 | *-core 6 | description: Motherboard 7 | physical id: 0 8 | *-memory 9 | description: System memory 10 | physical id: 0 11 | size: 12GiB 12 | *-cpu 13 | product: Intel(R) Xeon(R) CPU @ 2.20GHz 14 | vendor: Intel Corp. 15 | physical id: 1 16 | bus info: cpu@0 17 | width: 64 bits 18 | capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp x86-64 constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat arch_capabilities 19 | *-pci 20 | description: Host bridge 21 | product: 440FX - 82441FX PMC [Natoma] 22 | vendor: Intel Corporation 23 | physical id: 100 24 | bus info: pci@0000:00:00.0 25 | version: 02 26 | width: 32 bits 27 | clock: 33MHz 28 | *-isa 29 | description: ISA bridge 30 | product: 82371AB/EB/MB PIIX4 ISA 31 | vendor: Intel Corporation 32 | physical id: 1 33 | bus info: pci@0000:00:01.0 34 | version: 03 35 | width: 32 bits 36 | clock: 33MHz 37 | capabilities: isa 38 | configuration: latency=0 39 | *-bridge UNCLAIMED 40 | description: Bridge 41 | product: 82371AB/EB/MB PIIX4 ACPI 42 | vendor: Intel Corporation 43 | physical id: 1.3 44 | bus info: pci@0000:00:01.3 45 | version: 03 46 | width: 32 bits 47 | clock: 33MHz 48 | capabilities: bridge 49 | configuration: latency=0 50 | *-generic 51 | description: Non-VGA unclassified device 52 | product: Virtio SCSI 53 | vendor: Red Hat, Inc 54 | physical id: 3 55 | bus info: pci@0000:00:03.0 56 | version: 00 57 | width: 32 bits 58 | clock: 33MHz 59 | capabilities: msix bus_master cap_list 60 | configuration: driver=virtio-pci latency=0 61 | resources: irq:11 ioport:c000(size=64) memory:febfe000-febfe07f 62 | *-virtio0 UNCLAIMED 63 | description: Virtual I/O device 64 | physical id: 0 65 | bus info: virtio@0 66 | configuration: driver=virtio_scsi 67 | *-network 68 | description: Ethernet controller 69 | product: Virtio network device 70 | vendor: Red Hat, Inc 71 | physical id: 4 72 | bus info: pci@0000:00:04.0 73 | version: 00 74 | width: 32 bits 75 | clock: 33MHz 76 | capabilities: msix bus_master cap_list 77 | configuration: driver=virtio-pci latency=0 78 | resources: irq:10 ioport:c040(size=64) memory:febff000-febff07f 79 | *-virtio1 UNCLAIMED 80 | description: Virtual I/O device 81 | physical id: 0 82 | bus info: virtio@1 83 | configuration: driver=virtio_net 84 | *-network 85 | description: Ethernet interface 86 | physical id: 1 87 | logical name: eth0 88 | serial: 02:42:ac:1c:00:02 89 | size: 10Gbit/s 90 | capabilities: ethernet physical 91 | configuration: autonegotiation=off broadcast=yes driver=veth driverversion=1.0 duplex=full ip=172.28.0.2 link=yes multicast=yes port=twisted pair speed=10Gbit/s 92 | -------------------------------------------------------------------------------- /VM's specification/GPU.txt: -------------------------------------------------------------------------------- 1 | c893d18b7dbf 2 | description: Computer 3 | width: 64 bits 4 | capabilities: smp vsyscall32 5 | *-core 6 | description: Motherboard 7 | physical id: 0 8 | *-memory 9 | description: System memory 10 | physical id: 0 11 | size: 12GiB 12 | *-cpu 13 | product: Intel(R) Xeon(R) CPU @ 2.20GHz 14 | vendor: Intel Corp. 15 | physical id: 1 16 | bus info: cpu@0 17 | width: 64 bits 18 | capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp x86-64 constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat arch_capabilities 19 | *-pci 20 | description: Host bridge 21 | product: 440FX - 82441FX PMC [Natoma] 22 | vendor: Intel Corporation 23 | physical id: 100 24 | bus info: pci@0000:00:00.0 25 | version: 02 26 | width: 32 bits 27 | clock: 33MHz 28 | *-isa 29 | description: ISA bridge 30 | product: 82371AB/EB/MB PIIX4 ISA 31 | vendor: Intel Corporation 32 | physical id: 1 33 | bus info: pci@0000:00:01.0 34 | version: 03 35 | width: 32 bits 36 | clock: 33MHz 37 | capabilities: isa 38 | configuration: latency=0 39 | *-bridge UNCLAIMED 40 | description: Bridge 41 | product: 82371AB/EB/MB PIIX4 ACPI 42 | vendor: Intel Corporation 43 | physical id: 1.3 44 | bus info: pci@0000:00:01.3 45 | version: 03 46 | width: 32 bits 47 | clock: 33MHz 48 | capabilities: bridge 49 | configuration: latency=0 50 | *-generic 51 | description: Non-VGA unclassified device 52 | product: Virtio SCSI 53 | vendor: Red Hat, Inc 54 | physical id: 3 55 | bus info: pci@0000:00:03.0 56 | version: 00 57 | width: 32 bits 58 | clock: 33MHz 59 | capabilities: msix bus_master cap_list 60 | configuration: driver=virtio-pci latency=0 61 | resources: irq:11 ioport:c080(size=64) memory:fd000000-fd00007f 62 | *-virtio0 UNCLAIMED 63 | description: Virtual I/O device 64 | physical id: 0 65 | bus info: virtio@0 66 | configuration: driver=virtio_scsi 67 | *-display 68 | description: 3D controller 69 | product: GK210GL [Tesla K80] 70 | vendor: NVIDIA Corporation 71 | physical id: 4 72 | bus info: pci@0000:00:04.0 73 | version: a1 74 | width: 64 bits 75 | clock: 33MHz 76 | capabilities: msi pm bus_master cap_list 77 | configuration: driver=nvidia latency=0 78 | resources: iomemory:40-3f iomemory:80-7f irq:33 memory:fc000000-fcffffff memory:400000000-7ffffffff memory:800000000-801ffffff ioport:c000(size=128) 79 | *-network 80 | description: Ethernet controller 81 | product: Virtio network device 82 | vendor: Red Hat, Inc 83 | physical id: 5 84 | bus info: pci@0000:00:05.0 85 | version: 00 86 | width: 32 bits 87 | clock: 33MHz 88 | capabilities: msix bus_master cap_list 89 | configuration: driver=virtio-pci latency=0 90 | resources: irq:10 ioport:c0c0(size=64) memory:fd001000-fd00107f 91 | *-virtio1 UNCLAIMED 92 | description: Virtual I/O device 93 | physical id: 0 94 | bus info: virtio@1 95 | configuration: driver=virtio_net 96 | *-network 97 | description: Ethernet interface 98 | physical id: 1 99 | logical name: eth0 100 | serial: 02:42:ac:1c:00:02 101 | size: 10Gbit/s 102 | capabilities: ethernet physical 103 | configuration: autonegotiation=off broadcast=yes driver=veth driverversion=1.0 duplex=full ip=172.28.0.2 link=yes multicast=yes port=twisted pair speed=10Gbit/s 104 | -------------------------------------------------------------------------------- /VM's specification/TPU.txt: -------------------------------------------------------------------------------- 1 | 93945fb42d42 2 | description: Computer 3 | width: 64 bits 4 | capabilities: smp vsyscall32 5 | *-core 6 | description: Motherboard 7 | physical id: 0 8 | *-memory 9 | description: System memory 10 | physical id: 0 11 | size: 12GiB 12 | *-cpu 13 | product: Intel(R) Xeon(R) CPU @ 2.30GHz 14 | vendor: Intel Corp. 15 | physical id: 1 16 | bus info: cpu@0 17 | width: 64 bits 18 | capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp x86-64 constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat arch_capabilities 19 | *-pci 20 | description: Host bridge 21 | product: 440FX - 82441FX PMC [Natoma] 22 | vendor: Intel Corporation 23 | physical id: 100 24 | bus info: pci@0000:00:00.0 25 | version: 02 26 | width: 32 bits 27 | clock: 33MHz 28 | *-isa 29 | description: ISA bridge 30 | product: 82371AB/EB/MB PIIX4 ISA 31 | vendor: Intel Corporation 32 | physical id: 1 33 | bus info: pci@0000:00:01.0 34 | version: 03 35 | width: 32 bits 36 | clock: 33MHz 37 | capabilities: isa 38 | configuration: latency=0 39 | *-bridge UNCLAIMED 40 | description: Bridge 41 | product: 82371AB/EB/MB PIIX4 ACPI 42 | vendor: Intel Corporation 43 | physical id: 1.3 44 | bus info: pci@0000:00:01.3 45 | version: 03 46 | width: 32 bits 47 | clock: 33MHz 48 | capabilities: bridge 49 | configuration: latency=0 50 | *-generic 51 | description: Non-VGA unclassified device 52 | product: Virtio SCSI 53 | vendor: Red Hat, Inc 54 | physical id: 3 55 | bus info: pci@0000:00:03.0 56 | version: 00 57 | width: 32 bits 58 | clock: 33MHz 59 | capabilities: msix bus_master cap_list 60 | configuration: driver=virtio-pci latency=0 61 | resources: irq:11 ioport:c000(size=64) memory:febfe000-febfe07f 62 | *-virtio0 UNCLAIMED 63 | description: Virtual I/O device 64 | physical id: 0 65 | bus info: virtio@0 66 | configuration: driver=virtio_scsi 67 | *-network 68 | description: Ethernet controller 69 | product: Virtio network device 70 | vendor: Red Hat, Inc 71 | physical id: 4 72 | bus info: pci@0000:00:04.0 73 | version: 00 74 | width: 32 bits 75 | clock: 33MHz 76 | capabilities: msix bus_master cap_list 77 | configuration: driver=virtio-pci latency=0 78 | resources: irq:10 ioport:c040(size=64) memory:febff000-febff07f 79 | *-virtio1 UNCLAIMED 80 | description: Virtual I/O device 81 | physical id: 0 82 | bus info: virtio@1 83 | configuration: driver=virtio_net 84 | *-network 85 | description: Ethernet interface 86 | physical id: 1 87 | logical name: eth0 88 | serial: 02:42:ac:1c:00:02 89 | size: 10Gbit/s 90 | capabilities: ethernet physical 91 | configuration: autonegotiation=off broadcast=yes driver=veth driverversion=1.0 duplex=full ip=172.28.0.2 link=yes multicast=yes port=twisted pair speed=10Gbit/s 92 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /docs/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/docs/01.png -------------------------------------------------------------------------------- /img/title_qbittorrent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/img/title_qbittorrent.png -------------------------------------------------------------------------------- /img/title_rclonelab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/img/title_rclonelab.png -------------------------------------------------------------------------------- /img/title_rtorrent_flood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/img/title_rtorrent_flood.png -------------------------------------------------------------------------------- /img/title_utility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/img/title_utility.png -------------------------------------------------------------------------------- /img/vector/font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/img/vector/font.ttf -------------------------------------------------------------------------------- /img/vector/title.eps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/img/vector/title.eps -------------------------------------------------------------------------------- /res/qbittorrent/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/res/qbittorrent/favicon.ico -------------------------------------------------------------------------------- /res/qbittorrent/qBittorrent.conf: -------------------------------------------------------------------------------- 1 | [AutoRun] 2 | enabled=false 3 | program= 4 | 5 | [BitTorrent] 6 | Session\CreateTorrentSubfolder=true 7 | Session\DisableAutoTMMByDefault=true 8 | Session\DisableAutoTMMTriggers\CategoryChanged=true 9 | Session\DisableAutoTMMTriggers\CategorySavePathChanged=true 10 | Session\DisableAutoTMMTriggers\DefaultSavePathChanged=true 11 | Session\GlobalMaxSeedingMinutes=0 12 | 13 | [Core] 14 | AutoDeleteAddedTorrentFile=IfAdded 15 | 16 | [Preferences] 17 | Bittorrent\AddTrackers=false 18 | Bittorrent\MaxConnecs=-1 19 | Bittorrent\MaxConnecsPerTorrent=-1 20 | Bittorrent\MaxRatio=0 21 | Bittorrent\MaxRatioAction=0 22 | Bittorrent\PeX=true 23 | Bittorrent\uTP_rate_limited=false 24 | Connection\GlobalDLLimitAlt=0 25 | Connection\GlobalUPLimitAlt=0 26 | Downloads\PreAllocation=false 27 | Downloads\SavePath=/content/qBittorrent/ 28 | Downloads\ScanDirsV2=@Variant(\0\0\0\x1c\0\0\0\x1\0\0\0\x12\0/\0\x63\0o\0n\0t\0\x65\0n\0t\0/\0\0\0\x2\0\0\0\x1) 29 | Downloads\StartInPause=false 30 | Downloads\TempPath=/root/.qBittorrent_temp/ 31 | Downloads\TempPathEnabled=true 32 | DynDNS\DomainName=changeme.dyndns.org 33 | DynDNS\Enabled=false 34 | DynDNS\Password= 35 | DynDNS\Service=0 36 | DynDNS\Username= 37 | General\Locale=en 38 | General\UseRandomPort=false 39 | MailNotification\email= 40 | MailNotification\enabled=false 41 | MailNotification\password= 42 | MailNotification\req_auth=true 43 | MailNotification\req_ssl=false 44 | MailNotification\sender=qBittorrent_notification@example.com 45 | MailNotification\smtp_server=smtp.changeme.com 46 | MailNotification\username= 47 | Queueing\QueueingEnabled=false 48 | WebUI\Address=* 49 | WebUI\AlternativeUIEnabled=false 50 | WebUI\AuthSubnetWhitelist=@Invalid() 51 | WebUI\AuthSubnetWhitelistEnabled=false 52 | WebUI\CSRFProtection=true 53 | WebUI\ClickjackingProtection=true 54 | WebUI\HTTPS\Enabled=false 55 | WebUI\HostHeaderValidation=true 56 | WebUI\LocalHostAuth=true 57 | WebUI\Password_ha1=@ByteArray(322517f6a6fc65697957a1f9da700b43) 58 | WebUI\Port=6006 59 | WebUI\RootFolder= 60 | WebUI\ServerDomains=* 61 | WebUI\UseUPnP=true 62 | WebUI\Username=rclonelab 63 | -------------------------------------------------------------------------------- /res/rclonelab/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/res/rclonelab/01.png -------------------------------------------------------------------------------- /res/rclonelab/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acamposxp/RcloneLab/cac0f767c1c46ebdbc0e41d7886d32169a31fe66/res/rclonelab/favicon.ico -------------------------------------------------------------------------------- /res/rtorrent/rtorrent.rc: -------------------------------------------------------------------------------- 1 | # Where rTorrent saves the downloaded files 2 | directory = /content/rTorrent 3 | 4 | # Where rTorrent saves the session 5 | session = ~/.rTorrent_session 6 | 7 | # Which ports rTorrent can use (Make sure to open them in your router) 8 | port_range = 50000-50000 9 | port_random = no 10 | 11 | # Check the hash after the end of the download 12 | check_hash = yes 13 | 14 | # Enable DHT (for torrents without trackers) 15 | dht = on 16 | dht_port = 6881 17 | peer_exchange = yes 18 | 19 | # Authorize UDP trackers 20 | use_udp_trackers = yes 21 | 22 | # Enable encryption when possible 23 | encryption = allow_incoming,try_outgoing,enable_retry 24 | 25 | # Performance Tuning 26 | throttle.max_downloads.set = 100 27 | throttle.max_uploads.set = 100 28 | min_peers = 199 29 | max_peers = 200 30 | pieces.memory.max.set = 4096M 31 | check_hash = no 32 | 33 | # SCGI port, used to communicate with Flood 34 | scgi_port = 127.0.0.1:5000 --------------------------------------------------------------------------------