├── 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 [](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 [](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 | " "
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 | "# "
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 | "# "
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 = \"\"\"{title} \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 | "# "
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 = \"\"\"{title} \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 | "# "
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
--------------------------------------------------------------------------------