├── .gitmodules ├── .project ├── README.md ├── blank_scripts ├── create-script-UserInstall ├── delete-script-UserDocker ├── restart-script-UserDocker ├── start-script-UserDocker └── stop-script-UserDocker ├── changeUserPassword ├── createCouchpotatoUserInstall ├── createDelugeUserInstall ├── createEthereumCPPUserInstall ├── createFileManagerUserInstall ├── createFileZillaUserInstall ├── createLetsEncryptUserInstall ├── createMySQLUserInstall ├── createOpenSSLCACertificate ├── createOpenSSLServiceCertificate ├── createPlexUserInstall ├── createPureFTPdUserInstall ├── createRTorrentUserInstall ├── createRadarrUserInstall ├── createRapidLeechUserInstall ├── createSFTPServerUserInstall ├── createSabnzbdUserInstall ├── createSeedboxUser ├── createSickbeardUserInstall ├── createSickrageUserInstall ├── createSonarrUserInstall ├── createSyncThingUserInstall ├── createUbooquityUserInstall ├── cronTasks ├── cronUpdates ├── deleteCouchpotatoUserDocker ├── deleteDelugeUserDocker ├── deleteFileManagerUserDocker ├── deleteFileZillaUserDocker ├── deleteLetsEncryptUserDocker ├── deleteMySQLUserDocker ├── deletePlexUserDocker ├── deletePureFTPDUserDocker ├── deleteRTorrentUserDocker ├── deleteRadarrUserDocker ├── deleteRapidLeechUserDocker ├── deleteSFTPServerUserDocker ├── deleteSabnzbdUserDocker ├── deleteSeedboxUser ├── deleteSickbeardUserDocker ├── deleteSickrageUserDocker ├── deleteSonarrUserDocker ├── deleteSyncThingUserDocker ├── deleteUbooquityUserDocker ├── deleteUserDocker ├── deluge.password.py ├── development ├── create-wordpress-UserInstall ├── delete-wordpress-UserDocker ├── restart-wordpress-UserDocker ├── start-wordpress-UserDocker └── stop-wordpress-UserDocker ├── favicon.ico ├── installOpenVPN ├── installRTorrent ├── installWebmin ├── installs ├── jailkit-2.19.tar.gz ├── vsftpd_3.0.3-3ubuntu2_amd64.deb ├── vsftpd_3.0.3-3ubuntu2_i386.deb └── xmlrpc-c-1.39.12.tgz ├── iptodomain ├── iso2mkv.sh ├── ovhInstallScript.sh ├── ovpni ├── removeWebmin ├── restartDelugeUserDocker ├── restartFileManagerUserDocker ├── restartFileZillaUserDocker ├── restartLetsEncryptUserDocker ├── restartMySQLUserDocker ├── restartPlexUserDocker ├── restartPureFTPDUserDocker ├── restartRTorrentUserDocker ├── restartRadarrUserDocker ├── restartRapidLeechUserDocker ├── restartSFTPServerUserDocker ├── restartSabnzbdUserDocker ├── restartSickbeardUserDocker ├── restartSickrageUserDocker ├── restartSonarrUserDocker ├── restartSyncThingUserDocker ├── restartUbooquityUserDocker ├── seedbox-from-scratch.sh ├── seedbox.png ├── seedbox.psd ├── sfsDecryptTemporaryEncryptedText ├── sfsEncryptTemporaryEncryptedText ├── sfsGenerateRandomPasswordString ├── sfsGenerateUserHtpassword ├── sfsInstalledDockerInfo ├── sfsOVHCorrectInstall ├── sfsRunningUserDockerInfo ├── sfsgetAvailablePort ├── speedTEST ├── speedtest.py ├── startDelugeUserDocker ├── startFileManagerUserDocker ├── startFileZillaUserDocker ├── startLetsEncryptUserDocker ├── startMySQLUserDocker ├── startPlexUserDocker ├── startPureFTPDUserDocker ├── startRTorrentUserDocker ├── startRadarrUserDocker ├── startRapidLeechUserDocker ├── startSFTPServerUserDocker ├── startSabnzbdUserDocker ├── startSickbeardUserDocker ├── startSickrageUserDocker ├── startSonarrUserDocker ├── startSyncThingUserDocker ├── startUbooquityUserDocker ├── startUserDocker ├── stopDelugeUserDocker ├── stopFileManagerUserDocker ├── stopFileZillaUserDocker ├── stopLetsEncryptUserDocker ├── stopMySQLUserDocker ├── stopPlexUserDocker ├── stopPureFTPDUserDocker ├── stopRTorrentUserDocker ├── stopRadarrUserDocker ├── stopRapidLeechUserDocker ├── stopSFTPServerUserDocker ├── stopSabnzbdUserDocker ├── stopSickbeardUserDocker ├── stopSickrageUserDocker ├── stopSonarrUserDocker ├── stopSyncThingUserDocker ├── stopUbooquityUserDocker ├── stopUserDocker ├── templates ├── Snoopy.class.inc.template ├── docker.nginx.conf.template ├── etc.apache2.default.template ├── etc.fail2ban.jail.conf.template ├── etc.jailkit.jk_init.ini.template ├── home.user.autodl.autodl.cfg.template ├── index.html.template ├── mtn.sh.template ├── my.cnf.template ├── root.ca.cacert.conf.template ├── rtorrent.rc.template ├── rutorrent.conf.users.plugins.autodl-irssi.conf.php.template ├── rutorrent.plugins.filemanager.conf.php.template ├── rutorrent.plugins.fileshare.conf.php.template └── seedboxInfo.php.template ├── test.sh ├── updateInstalledScripts ├── updateSeedBoxServices ├── updateSeedboxToVersion2 ├── updateSeedboxUser ├── updateSeedboxUsers ├── updatejkinit └── webserver ├── blue-32px.png ├── functions.php ├── green-32px.png ├── handleactions.php ├── index.php ├── jquery-3.2.1.min.js ├── letsencrypt.php ├── mysql.php ├── plex.php ├── red-32px.png ├── services.php ├── userdetails.php └── yellow-32px.png /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "php"] 2 | path = php 3 | url = https://github.com/thevisad/php.git 4 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | seedbox-from-scratch 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## The Seedbox From Scratch Mod 2 Script 2 | 3 | Donate by buying me a Beer via paypal: paypal address: visad@yahoo.com 4 | 5 | Donate by buying me a Beer via ETH : ETH address: 0x3eA5719D684F8F0cb6b08a65dBd315AC53720D60 6 | 7 | ## Read the Wiki on how to handle certain tasks 8 | https://github.com/thevisad/seedbox-from-scratch/wiki 9 | 10 | 11 | ## Inspiration 12 | 13 | When I originally started playing with this script it was one of the few that actually setup an environment properly for multiple users. I learned what was needed to get it operational and I am now in the process of eliminating all aspects that are server specific. The script should be designed to install into a machine and then have docker services that are geared specifically towards the needs of each user. This script has been heavily modified from the original, but you can upgrade from the original to this version with a little effort. A script may be created later to handle the upgrade process. 14 | 15 | 16 | ## Core Server Features 17 | 18 | * Security built into the multiuser web system. Users can only restart their own services and have no access to the system themselves. 19 | * Backend cron system to handle installation, deletion and service management for all dockers. 20 | * Automatic Update system tied to Github Repository, obtain a patch within minutes of it being deployed. 21 | * A true multi-user enviroment built around core technologies on the server, without actually accessing the server itself. 22 | * Invidualized docker container services for all user service environments. 23 | * Linux Quota, to control how much space every user can use in your box (disabled by default) 24 | * Central Web Management system to handle user service install/removal/update functionality. 25 | 26 | ## Core Server Software 27 | 28 | * Web interface for user service interaction 29 | * Fail2ban - to avoid apache and ssh exploits. Fail2ban bans IPs that show malicious signs (disabled by default) 30 | * Apache (SSL) 31 | * OpenVPN 32 | * OS Specific PHP and PHP-FPM (FastCGI to increase performance) 33 | * Linux Quota 34 | * SSH Server (for SSH terminal and sFTP connections) 35 | * vsftpd (Very Secure FTP Deamon) 36 | * Webmin (use it to manage your users quota) 37 | 38 | 39 | ## Supported Docker Containers 40 | * Docker Plex - https://hub.docker.com/r/plexinc/pms-docker/dockerfile 41 | * Docker Deluge - https://hub.docker.com/r/binhex/arch-deluge/ 42 | * Docker RuTorrent - https://hub.docker.com/r/thevisad/rutorrent/ 43 | * Docker Ubooquity - https://hub.docker.com/r/linuxserver/ubooquity/ 44 | * Docker Rapidleech - https://hub.docker.com/r/wpzzz/rapidleech/ 45 | * Docker sabnzbd - https://hub.docker.com/r/linuxserver/sabnzbd/ 46 | * Docker Sickbeard - https://hub.docker.com/r/linuxserver/sickbeard/ 47 | * Docker CouchPotato - https://hub.docker.com/r/linuxserver/couchpotato/ 48 | * Docker SickRage - https://hub.docker.com/r/linuxserver/sickrage/ 49 | * Docker FileManager - https://hub.docker.com/r/hacdias/filemanager/ 50 | * Docker Radarr - https://hub.docker.com/r/linuxserver/radarr/ 51 | * Docker Sonarr - https://hub.docker.com/r/linuxserver/sonarr/ 52 | * Docker MySQL - https://hub.docker.com/_/mysql 53 | * Docker SFTP Server - https://hub.docker.com/r/atmoz/sftp 54 | * Docker Pure-FTPd - https://hub.docker.com/r/stilliard/pure-ftpd/ 55 | * Docker FileZilla - https://hub.docker.com/r/jlesage/filezilla/ 56 | 57 | ## Buggy Docker Containers 58 | * Docker LetsEncrypt - https://github.com/linuxserver/docker-letsencrypt (not working) 59 | 60 | ## Tested servers (should work on any system support debian commands) 61 | * Ubuntu Server 16.04 - 32 and 64 bit 62 | * Ubuntu Server 16.10 - 32 and 64 bit 63 | 64 | ## Support 65 | Support for this version of the script can be obtained [From This Link HERE](https://www.torrent-invites.com/forum/seedboxes/seedbox-tutorials/270973-multiuser-dockerized-seedbox-from-scratch) While this is based off of the original Seed Box from Scratch it is no longer the same software and the previous support channel will not be able to assist you. 66 | 67 | 68 | **** Note this is for the older version of the script, which this still leverage's very little. Be careful attempting any fixes from these forums as it likely will have a negative impact on this install. **** 69 | 70 | There is no real support for this script, but nerds are talking a lot about it [HERE](http://www.torrent-invites.com/showthread.php?t=272859) and you may find solutions for your problems in that thread. 71 | 72 | 73 | ## Changelog 74 | Version 16.60.0 (Internal Revision) 75 | September 25th 2019 76 | - Docker SFTP Server - https://hub.docker.com/r/atmoz/sftp 77 | - Docker Pure-FTPd - https://hub.docker.com/r/stilliard/pure-ftpd/ 78 | - Docker FileZilla - https://hub.docker.com/r/jlesage/filezilla/ 79 | 80 | Version 16.50.0 (Internal Revision) 81 | February 27th 20:25 GMT-5 82 | - Docker MySQL - https://hub.docker.com/_/mysql 83 | - Docker Plex - https://hub.docker.com/r/plexinc/pms-docker/dockerfile 84 | - Corrected issue with Plex docker that was preventing an update past a certain version. This entailed switching to the original plex docker and moving to a more secure connection process using the https://plex.tv/link option instead of trying to figure out how to obtain a token or using a username and password. 85 | - Added restart option for Dockers to Web Control Panel 86 | 87 | 88 | Version 16.35.0 (Internal Revision) 89 | June 18 2018 10:48 GMT-5 90 | - Docker Radarr - https://hub.docker.com/r/linuxserver/radarr/ 91 | - Docker Sonarr - https://hub.docker.com/r/linuxserver/sonarr/ 92 | - Minor changes in web servers and application support 93 | 94 | Version 16.31.0 (Internal Revision) 95 | March 14 2018 19:21 GMT-5 96 | - Docker FileManager - https://hub.docker.com/r/hacdias/filemanager/ 97 | 98 | Version 16.21.0 (Internal Revision) 99 | March 14 2018 19:21 GMT-5 100 | Removal if the last of the settings locking the core server into usage. 101 | - ruTorrent 3.7 + official plugins 102 | - rTorrent 0.8.9, 0.9.2, 0.9.3 or 0.9.6 103 | - libTorrrent 0.13.3, 0.13.4 or 0.13.6 104 | - IRSSI 105 | 106 | Version 16.01.0 (Internal Revision) 107 | May 15 2017 12:34 GMT-5 108 | - Additional cleanups on the environment installs 109 | - Updated dockers to the latest versions 110 | 111 | Version 16.00.3 (Internal Revision) 112 | May 15 2017 12:34 GMT-5 113 | - Major clean up on primary OS install, central server should only contain the applications needed to actually run all docker containers. 114 | 115 | 116 | Version 16.00.1 (Internal Revision) 117 | April 22 2017 12:34 GMT-5 118 | - Switched to cromigon/ubooquity since linuxserver/ubooquity wouldn't execute properly 119 | - Switched to downloading the git and compiling the docker containers rather then using the default image. This allows us to inject the proper user permission functionality into the docker to prevent issues with the user not being properly registered inside of the docker. This is outlined here https://denibertovic.com/posts/handling-permissions-with-docker-volumes/ 120 | - Removed Rapisleech, Deluge and SABnxbd from the default installs. 121 | 122 | 123 | Version 16.00 124 | April 18 2017 1:57 GMT-5 125 | - Version bump to correspond to the supported version of Ubuntu 126 | - Corrected major issues with script downloading from multiple repositories that simply do not exist, are different from the download repository and other issues. 127 | - RTorrent 0.9.6 support 128 | - Upgrade SABnxbd to 2.0.0 129 | - Upgrade xmlrpc-c to 1.39.12 130 | - Upgrade webmin to 1.831 131 | - Upgrade jailkit to 2.19 132 | - Upgrade autodl-trackers to the latest version 133 | - Upgrade PLEX to a Docker container version to allow multiple plex users per server 134 | - Added libtorrent-0.13.6 135 | - Defaulted SABnzbd to off 136 | - Changed default SSH port to 22101 137 | - Defaulted FAIL2BAN to off 138 | - Moved to OS Specific Plowshare install 139 | - Updated VSFTP to version 3.0.3 140 | - Updated MediaInfo CLI to 0.7.94 141 | - Updated Rtorrent logoff to 1.3 142 | - Updated all rutorrent third party plugins to the latest version (filemanager, fileshare, fileupload, mediastream) 143 | - New installRTorrent script: move to RTorrent 0.9.2, 0.9.3 or 0.9.6 144 | - Deluge v1.3.5 multi-user installation script (it will install the last stable version): installDeluge 145 | 146 | Version 2.1.9 (not stable yet) 147 | Dec 26 2012 17:37 GMT-3 148 | - RTorrent 0.9.3 support (optionally installed) 149 | - New installRTorrent script: move to RTorrent 0.9.3 or back to 0.9.2 at any time 150 | - Deluge v1.3.5 multi-user installation script (it will install the last stable version): installDeluge 151 | - Optionally install Deluge when you first install your seedbox-from-scratch box 152 | 153 | Version 2.1.8 (stable) 154 | - Bug fix release 155 | 156 | Version 2.1.4 (stable) 157 | Dec 11 2012 2:34 GMT-3 158 | - Debian 6 (Squeeze) Compatibile 159 | - Check if user root is running the script 160 | - vsftpd - FTP access with SSL (AUTH SSL - Explicit) 161 | - vsftpd downgraded on Ubuntu to 2.3.2 (oneiric) 162 | - iptables tweaked to make OpenVPN work as it should both on Ubuntu and Debian 163 | - SABnzbd is now being installed from sources and works better 164 | - New script: changeUserPassword --- example: changeUserPassword notos 133t rutorrent 165 | - restartSeedbox now kill processes even if there are users attached on screens 166 | - Installs rar, unrar and zip separately from main installations to prevent script from breaking on bad sources from non-OVH providers 167 | 168 | Version 2.1.2 (stable) 169 | Nov 16 2012 20:48 GMT-3 170 | - new upgradeSeedbox script (to download git files for a new version, it will not really upgrade it, at least for now :) 171 | - ruTorrent fileshare Plugin (http://forums.rutorrent.org/index.php?topic=705.0) 172 | - rapidleech (http://www.rapidleech.com/ - http://www.rapidleech.com/index.php?showtopic=2226|Go ** tutorial: http://www.seedm8.com/members/knowledgebase/24/Installing-Rapidleech-on-your-Seedbox.html 173 | 174 | Version 2.1.1 (stable) 175 | Nov 12 2012 20:15 176 | - OpenVPN was not working as expected (fixed) 177 | - OpenVPN port now is configurable (at main install) and you can change it anytime before reinstalling: /etc/seedbox-from-scratch/openvpn.info 178 | 179 | Version 2.1.0 (not stable yet) 180 | Nov 11 2012 20:15 181 | - sabnzbd: http://wiki.sabnzbd.org/install-ubuntu-repo 182 | - restartSeedbox script for each user 183 | - User info files in /etc/seedbox-from-scratch/users 184 | - Info about all users in https://hostname.tld/seedboxInfo.php 185 | - Password protected webserver Document Root (/var/www/) 186 | 187 | Version 2.0.0 (stable) 188 | Oct 31 2012 23:59 189 | - chroot jail for users, using JailKit (http://olivier.sessink.nl/jailkit/) 190 | - Fail2ban for ssh and apache - it bans IPs that show the malicious signs -- too many password failures, seeking for exploits, etc. 191 | - OpenVPN (after install you can download your key from http:///rutorrent/vpn.zip) 192 | - createSeedboxUser script now asks if you want your user jailed, to have SSH access and if it should be added to sudoers 193 | - Optionally install packages JailKit, Webmin, Fail2ban and OpenVPN 194 | - Choose between RTorrent 0.8.9 and 0.9.2 (and their respective libtorrent libraries) 195 | - Upgrade and downgrade RTorrent at any time 196 | - Full automated install, now you just have to download script and run it in your box: 197 | > wget -N https://raw.github.com/Notos/seedbox-from-scratch/v2.x.x/seedbox-from-scratch.sh 198 | > time bash ~/seedbox-from-scratch.sh 199 | - Due to a recent outage of Webmin site and SourceForge's svn repositories, some packages are now in git and will not be downloaded from those sites 200 | - Updated list of trackers in Autodl-irssi 201 | - vsftpd FTP Server (working in chroot jail) 202 | - New ruTorrent default theme: Oblivion 203 | 204 | Version 1.30 205 | Oct 23 2012 04:54:29 206 | - Scripts now accept a full install without having to create variables and do anything else 207 | 208 | Version 1.20 209 | Oct 19 2012 03:24 (by Notos) 210 | - Install OpenVPN - (BETA) Still not in the script, just an outside script 211 | Tested client: http://openvpn.net/index.php?option=com_content&id=357 212 | 213 | Version 1.11 214 | Oct 18 2012 05:13 (by Notos) 215 | - Added scripts to downgrade and upgrade RTorrent 216 | 217 | - Added all supported plowshare sites into fileupload plugin: 115, 1fichier, 2shared, 4shared, bayfiles, bitshare, config, cramit, data_hu, dataport_cz, 218 | depositfiles, divshare, dl_free_fr, euroshare_eu, extabit, filebox, filemates, filepost, freakshare, go4up, hotfile, mediafire, megashares, mirrorcreator, multiupload, netload_in, 219 | oron, putlocker, rapidgator, rapidshare, ryushare, sendspace, shareonline_biz, turbobit, uploaded_net, uploadhero, uploading, uptobox, zalaa, zippyshare 220 | 221 | Version 1.10 222 | 06/10/2012 14:18 (by Notos) 223 | - Added Fileupload plugin 224 | 225 | - Added all supported plowshare sites into fileupload plugin: 115, 1fichier, 2shared, 4shared, bayfiles, bitshare, config, cramit, data_hu, dataport_cz, 226 | depositfiles, divshare, dl_free_fr, euroshare_eu, extabit, filebox, filemates, filepost, freakshare, go4up, hotfile, mediafire, megashares, mirrorcreator, multiupload, netload_in, 227 | oron, putlocker, rapidgator, rapidshare, ryushare, sendspace, shareonline_biz, turbobit, uploaded_net, uploadhero, uploading, uptobox, zalaa, zippyshare 228 | 229 | Version 1.00 230 | 30/09/2012 14:18 (by Notos) 231 | - Changing some file names and depoying version 1.00 232 | 233 | Version 0.99b 234 | 27/09/2012 19:39 (by Notos) 235 | - Quota for users 236 | - Download dir inside user home 237 | 238 | Version 0.99a 239 | 27/09/2012 19:39 (by Notos) 240 | - Quota for users 241 | - Download dir inside user home 242 | 243 | Version 0.92a 244 | 28/08/2012 19:39 (by Notos) 245 | - Also working on Debian now 246 | 247 | Version 0.91a 248 | 24/08/2012 19:39 (by Notos) 249 | - First multi-user version sent to public 250 | 251 | Version 0.90a 252 | 22/08/2012 19:39 (by Notos) 253 | - Working version for OVH Kimsufi 2G Server - Ubuntu Based 254 | 255 | Version 0.89a 256 | 17/08/2012 19:39 (by Notos) 257 | 258 | 259 | ## License 260 | Copyright (c) 2013 Notos (https://github.com/Notos/seedbox-from-scratch/) 261 | 262 | Modified by dannyti 2015 (https://github.com/dannyti/seedbox-from-scratch) 263 | 264 | Modified by thevisad 2017 (https://github.com/thevisad/seedbox-from-scratch) 265 | 266 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 267 | 268 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 269 | 270 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 271 | 272 | --> Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php 273 | 274 | -------------------------------------------------------------------------------- /blank_scripts/create-script-UserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--username) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | 22 | trlt="$(curl -s https://api.github.com/repos/autodl-community/autodl-trackers/releases/latest | sed -rn 's/(.*)"tag_name": "v(.*)",/\2/p')" 23 | dltrkrs="https://github.com/autodl-community/autodl-trackers/releases/download/v$trlt/autodl-trackers-v$trlt.zip" 24 | 25 | IRSSIPASSWORD1=`sfsGenerateRandomPasswordString` 26 | USERPASSWORD=$(echo "$(cat /etc/seedbox-from-scratch/users/${USERNAME}.info)" | grep "Password: " | head -n1 | awk '{print $2}') 27 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 28 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8081 -ep 8180) 29 | WEBSSLSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8444 -ep 8543) 30 | IRSSIPORT1=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 51000 -ep 51999) 31 | SERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 51414 -ep 51513) 32 | UDPPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 6882 -ep 6982) 33 | OTHERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 5001 -ep 5999) 34 | USERUID=$(id -u ${USERNAME}) 35 | USERGID=$(id -g ${USERNAME}) 36 | HTPASSWDGENED=$(/etc/seedbox-from-scratch/sfsGenerateUserHtpassword -u ${USERNAME}) 37 | 38 | 39 | docker pull thevisad/REPLACESCRIPTNAME:latest 40 | 41 | docker run --restart=always -d --name ${USERNAME}_REPLACESCRIPTNAME -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads/manual:/downloads -v /home/${USERNAME}/rtorrent/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSSLSERVERPORT}:443 -p ${WEBSERVERPORT}:80 -p ${SERVERPORT}:${SERVERPORT} -p ${UDPPORT}:6881 -p ${OTHERPORT}:${OTHERPORT} -v /etc/seedbox-from-scratch/ssl:/etc/ssl/certs -v /etc/localtime:/etc/localtime:ro thevisad/REPLACESCRIPTNAME 42 | 43 | 44 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d REPLACESCRIPTNAME | tr -cd '[[:alnum:]]._-' ) 45 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 46 | sudo docker restart ${USERNAME}_REPLACESCRIPTNAME 47 | fi 48 | 49 | if [[ -n $1 ]]; then 50 | echo "Last line of file specified as non-opt/last argument:" 51 | tail -1 $1 52 | fi -------------------------------------------------------------------------------- /blank_scripts/delete-script-UserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_REPLACESCRIPTNAME 23 | rm -rf /home/${USERNAME}/private/REPLACESCRIPTNAME.serviceinfo 24 | rm -rf /home/${USERNAME}/rtorrent/config/rtorrent/rtorrent.rc 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /blank_scripts/restart-script-UserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_REPLACESCRIPTNAME 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /blank_scripts/start-script-UserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_REPLACESCRIPTNAME 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /blank_scripts/stop-script-UserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_REPLACESCRIPTNAME 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /changeUserPassword: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | # changeUserPassword 6 | 7 | 8 | NEWUSER1=$1 9 | PASSWORD1=$2 10 | REALM1=$3 11 | MAINUSER1=`cat /etc/seedbox-from-scratch/mainuser.info` 12 | 13 | sudo touch /etc/apache2/htpasswd 14 | echo -e "$PASSWORD1\\n$PASSWORD1" | sudo passwd $NEWUSER1 15 | echo -n $NEWUSER1:$REALM1:$PASSWORD1 | sudo tee /tmp/file 16 | echo -n $NEWUSER1:private:$PASSWORD1 | sudo tee /tmp/file1 17 | sudo perl -pi -e "s/^$NEWUSER1\:$REALM1.*\n$//g" /etc/apache2/htpasswd 18 | sudo perl -pi -e "s/^$NEWUSER1\:private.*\n$//g" /etc/apache2/htpasswd 19 | echo $NEWUSER1:$REALM1:`md5sum /tmp/file | cut -d" " -f1` | sudo tee -a /etc/apache2/htpasswd 20 | echo $NEWUSER1:private:`md5sum /tmp/file1 | cut -d" " -f1` | sudo tee -a /etc/apache2/htpasswd 21 | 22 | if [ "$NEWUSER1" = "$MAINUSER1" ]; then 23 | REALM1=documentroot 24 | echo -n $NEWUSER1:$REALM1:$PASSWORD1 | sudo tee /tmp/file 25 | sudo perl -pi -e "s/^$NEWUSER1\:$REALM1.*\n$//g" /etc/apache2/htpasswd 26 | echo $NEWUSER1:$REALM1:`md5sum /tmp/file | cut -d" " -f1` | sudo tee -a /etc/apache2/htpasswd 27 | fi 28 | 29 | sudo rm /tmp/file 30 | sudo rm /tmp/file1 31 | 32 | -------------------------------------------------------------------------------- /createCouchpotatoUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 5051 -ep 5151) 24 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 25 | 26 | USERUID=$(id -u ${USERNAME}) 27 | USERGID=$(id -g ${USERNAME}) 28 | 29 | 30 | docker pull linuxserver/couchpotato 31 | 32 | docker run --restart=always -d --name ${USERNAME}_couchpotato -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/couchpotato/config:/config -v /home/${USERNAME}/downloads:/data -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:5050 -v /etc/localtime:/etc/localtime:ro linuxserver/couchpotato 33 | 34 | sleep 5 35 | 36 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d couchpotato | tr -cd '[[:alnum:]]._-' ) 37 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 38 | echo "SERVICE: COUCHPOTATO" > /home/${USERNAME}/private/couchpotato.serviceinfo 39 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/couchpotato.serviceinfo 40 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/couchpotato.serviceinfo 41 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/couchpotato.serviceinfo 42 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 43 | if [ ! -d "/home/${USERNAME}/couchpotato" ]; then 44 | mkdir /home/${USERNAME}/couchpotato 45 | mkdir /home/${USERNAME}/couchpotato/config 46 | mkdir /home/${USERNAME}/couchpotato/data 47 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/couchpotato/ -R 48 | fi 49 | fi 50 | 51 | if [[ -n $1 ]]; then 52 | echo "Last line of file specified as non-opt/last argument:" 53 | tail -1 $1 54 | fi -------------------------------------------------------------------------------- /createDelugeUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8113 -ep 8212) 25 | SERVERDAEMONPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 58847 -ep 58945) 26 | SERVERTORRENTPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 58947 -ep 59046) 27 | USERUID=$(id -u ${USERNAME}) 28 | USERGID=$(id -g ${USERNAME}) 29 | 30 | 31 | docker pull binhex/arch-deluge 32 | 33 | docker run --restart=always -d --name ${USERNAME}_deluge -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads:/downloads -v /home/${USERNAME}/deluge/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:8112 -p ${SERVERDAEMONPORT}:58846 -p ${SERVERTORRENTPORT}:58946 -v /etc/localtime:/etc/localtime:ro binhex/arch-deluge 34 | 35 | sleep 5 36 | 37 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d deluge | tr -cd '[[:alnum:]]._-' ) 38 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 39 | if [ ! -d "/home/${USERNAME}/deluge" ]; then 40 | mkdir /home/${USERNAME}/deluge 41 | mkdir /home/${USERNAME}/deluge/config 42 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/deluge/ -R 43 | fi 44 | 45 | echo "SERVICE: DELUGE" > /home/${USERNAME}/private/deluge.serviceinfo 46 | echo "PASSWORD: deluge" >> /home/${USERNAME}/private/deluge.serviceinfo 47 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/deluge.serviceinfo 48 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/deluge.serviceinfo 49 | echo "SERVERDAEMONPORT: $SERVERDAEMONPORT" >> /home/${USERNAME}/private/deluge.serviceinfo 50 | echo "SERVERTORRENTPORT: $SERVERTORRENTPORT" >> /home/${USERNAME}/private/deluge.serviceinfo 51 | echo "Please log in and create a username and password, admins are not responsible for user failure to secure the system." >> /home/${USERNAME}/private/deluge.serviceinfo 52 | 53 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 54 | fi 55 | 56 | if [[ -n $1 ]]; then 57 | echo "Last line of file specified as non-opt/last argument:" 58 | tail -1 $1 59 | fi -------------------------------------------------------------------------------- /createEthereumCPPUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | docker pull ethereum/client-go 8 | 9 | while [[ $# -gt 1 ]] 10 | do 11 | key="$1" 12 | 13 | case $key in 14 | -u|--username) 15 | USERNAME="$2" 16 | shift # past argument 17 | ;; 18 | *) 19 | # unknown option 20 | ;; 21 | esac 22 | shift # past argument or value 23 | done 24 | 25 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 26 | PORT1=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 30304 -ep 30403) 27 | PORT2=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8546 -ep 8645) 28 | USERUID=$(id -u ${USERNAME}) 29 | USERGID=$(id -g ${USERNAME}) 30 | 31 | if [ ! -d "/home/${USERNAME}/.ethereum" ]; then 32 | mkdir -p /home/${USERNAME}/.ethereum 33 | fi 34 | 35 | if [ ! -d "/home/${USERNAME}/.web3" ]; then 36 | mkdir -p /home/${USERNAME}/.web3 37 | fi 38 | 39 | 40 | docker pull ethereum/client-go 41 | 42 | docker run --restart=always -d --name ${USERNAME}_ethereumcpp -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/.ethereum:/root/.ethereum -v /home/${USERNAME}/.web3:/.web3 -p ${PORT1}:30303 -p ${PORT2}:8545 ethereum/client-go 43 | 44 | sleep 5 45 | 46 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d ethereumcpp | tr -cd '[[:alnum:]]._-' ) 47 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 48 | echo "SERVICE: ethereumcpp" > /home/${USERNAME}/private/ethereumcpp.serviceinfo 49 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/ethereumcpp.serviceinfo 50 | echo "PORT1: $PORT1" >> /home/${USERNAME}/private/ethereumcpp.serviceinfo 51 | echo "PORT2: $PORT2" >> /home/${USERNAME}/private/ethereumcpp.serviceinfo 52 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 53 | fi 54 | 55 | if [[ -n $1 ]]; then 56 | echo "Last line of file specified as non-opt/last argument:" 57 | tail -1 $1 58 | fi -------------------------------------------------------------------------------- /createFileManagerUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--username) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | 22 | USERPASSWORD=$(echo "$(cat /etc/seedbox-from-scratch/users/${USERNAME}.info)" | grep "Password: " | head -n1 | awk '{print $2}') 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8081 -ep 8180) 25 | USERUID=$(id -u ${USERNAME}) 26 | USERGID=$(id -g ${USERNAME}) 27 | 28 | 29 | docker pull hacdias/filebrowser 30 | 31 | docker run --restart=always -d --name ${USERNAME}_filemanager -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}:/srv -p ${WEBSERVERPORT}:80 -e PGID=${USERGID} -e PUID=${USERUID} -v /etc/seedbox-from-scratch/ssl:/etc/ssl/certs -v /etc/localtime:/etc/localtime:ro hacdias/filebrowser 32 | 33 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d filemanager | tr -cd '[[:alnum:]]._-' ) 34 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 35 | 36 | echo "SERVICE: FILEMANAGER" > /home/${USERNAME}/private/filemanager.serviceinfo 37 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/filemanager.serviceinfo 38 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/filemanager.serviceinfo 39 | echo "USERNAME: admin" >> /home/${USERNAME}/private/filemanager.serviceinfo 40 | echo "PASSWORD: admin" >> /home/${USERNAME}/private/filemanager.serviceinfo 41 | echo "Change your username and password once logged into the system. We are not responsible for users failure to secure the system." >> /home/${USERNAME}/private/filemanager.serviceinfo 42 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 43 | 44 | fi 45 | 46 | if [[ -n $1 ]]; then 47 | echo "Last line of file specified as non-opt/last argument:" 48 | tail -1 $1 49 | fi -------------------------------------------------------------------------------- /createFileZillaUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | WEBSERVERPORT1=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 5801 -ep 5899) 25 | WEBSERVERPORT2=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 5901 -ep 5999) 26 | USERUID=$(id -u ${USERNAME}) 27 | USERGID=$(id -g ${USERNAME}) 28 | RANDOMPASS=$(tr -d -c "a-zA-Z0-9" < /dev/urandom | head -c 8) 29 | 30 | docker pull jlesage/filezilla 31 | 32 | docker run --restart=always -d --name ${USERNAME}_filezilla -e USER_ID=${USERUID} -e GROUP_ID=${USERGID} -h ${SYSTEMHOSTNAME} -e VNC_PASSWORD=${RANDOMPASS} -e SECURE_CONNECTION=1 -v /home/${USERNAME}/downloads:/storage:rw -v /home/${USERNAME}/filezilla/config:/config:rw -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT1}:5800 -p ${WEBSERVERPORT2}:5900 -v /etc/localtime:/etc/localtime:ro jlesage/filezilla 33 | 34 | sleep 5 35 | 36 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d filezilla | tr -cd '[[:alnum:]]._-' ) 37 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 38 | if [ ! -d "/home/${USERNAME}/filezilla" ]; then 39 | mkdir /home/${USERNAME}/filezilla 40 | mkdir /home/${USERNAME}/filezilla/config 41 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/filezilla/ -R 42 | fi 43 | 44 | echo "SERVICE: filezilla" > /home/${USERNAME}/private/filezilla.serviceinfo 45 | echo "PASSWORD: $RANDOMPASS" >> /home/${USERNAME}/private/filezilla.serviceinfo 46 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT1" >> /home/${USERNAME}/private/filezilla.serviceinfo 47 | echo "VNCPORT: $WEBSERVERPORT2" >> /home/${USERNAME}/private/filezilla.serviceinfo 48 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 49 | fi 50 | 51 | if [[ -n $1 ]]; then 52 | echo "Last line of file specified as non-opt/last argument:" 53 | tail -1 $1 54 | fi -------------------------------------------------------------------------------- /createLetsEncryptUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | -e|--email) 17 | USEREMAIL="$2" 18 | shift # past argument 19 | ;; 20 | -s|--subdomains) 21 | SUBDOMAINSLIST="$2" 22 | shift # past argument 23 | ;; 24 | -d|--dhlevel) 25 | DHLEVEL="$2" 26 | shift # past argument 27 | ;; 28 | *) 29 | # unknown option 30 | ;; 31 | esac 32 | shift # past argument or value 33 | done 34 | 35 | WEBSERVERSSLPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8444 -ep 8543) 36 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 37 | 38 | USERUID=$(id -u ${USERNAME}) 39 | USERGID=$(id -g ${USERNAME}) 40 | 41 | SUBZONESONLYVAR=false 42 | if [ ${SUBZONEONLY} = "true"]; then 43 | SUBZONESONLYVAR=true 44 | fi 45 | 46 | 47 | docker pull linuxserver/letsencrypt 48 | 49 | docker run --restart=always -d --name ${USERNAME}_letsencrypt -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/letsencrypt/config:/config -e PGID=${USERGID} -e URL=${SYSTEMHOSTNAME} -e SUBDOMAINS=${SUBDOMAINSLIST} -e EMAIL=${USEREMAIL} -e PUID=${USERUID} -p ${WEBSERVERSSLPORT}:443 -e DHLEVEL=${DHLEVEL} -v /etc/localtime:/etc/localtime:ro linuxserver/letsencrypt -e ONLY_SUBDOMAINS=${SUBZONESONLYVAR} 50 | 51 | sleep 5 52 | 53 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d letsencrypt | tr -cd '[[:alnum:]]._-' ) 54 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 55 | if [ ! -d "/home/${USERNAME}/letsencrypt/config" ]; then 56 | mkdir /home/${USERNAME}/letsencrypt 57 | mkdir /home/${USERNAME}/letsencrypt/config 58 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/letsencrypt/ -R 59 | fi 60 | 61 | echo "SERVICE: LETSENCRYPT" > /home/${USERNAME}/private/letsencrypt.serviceinfo 62 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/letsencrypt.serviceinfo 63 | echo "ACCESSURL: https://$SYSTEMHOSTNAME:$WEBSERVERSSLPORT" >> /home/${USERNAME}/private/letsencrypt.serviceinfo 64 | echo "WEBSERVERSSLPORT: $WEBSERVERSSLPORT" >> /home/${USERNAME}/private/letsencrypt.serviceinfo 65 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 66 | fi 67 | 68 | if [[ -n $1 ]]; then 69 | echo "Last line of file specified as non-opt/last argument:" 70 | tail -1 $1 71 | fi 72 | -------------------------------------------------------------------------------- /createMySQLUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | -v|--version) 17 | VERSION="$2" 18 | shift # past argument 19 | ;; 20 | *) 21 | # unknown option 22 | ;; 23 | esac 24 | shift # past argument or value 25 | done 26 | 27 | SERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 3307 -ep 3406) 28 | USERPASSWDGENED=$(/etc/seedbox-from-scratch/sfsGenerateRandomPasswordString) 29 | ROOTPASSWDGENED=$(/etc/seedbox-from-scratch/sfsGenerateRandomPasswordString) 30 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 31 | 32 | 33 | docker pull mysql:${VERSION} 34 | 35 | docker create --restart=always -d --name ${USERNAME}_mysql -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/mysql:/docker-entrypoint-initdb.d/ -p ${SERVERPORT}:3306 -e MYSQL_ROOT_PASSWORD=${ROOTPASSWDGENED} -e MYSQL_USER=${USERNAME} -e MYSQL_PASSWORD=${USERPASSWDGENED} -v /etc/localtime:/etc/localtime:ro mysql:${VERSION} 36 | 37 | sleep 5 38 | 39 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d mysql | tr -cd '[[:alnum:]]._-' ) 40 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 41 | echo "SERVICE: MYSQL" > /home/${USERNAME}/private/mysql.serviceinfo 42 | echo "SERVERPORT: $SERVERPORT" >> /home/${USERNAME}/private/mysql.serviceinfo 43 | echo "ROOTPASSWORD: $ROOTPASSWDGENED" >> /home/${USERNAME}/private/mysql.serviceinfo 44 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/mysql.serviceinfo 45 | echo "USERPASSWORD: $USERPASSWDGENED" >> /home/${USERNAME}/private/mysql.serviceinfo 46 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 47 | 48 | if [ ! -d "/home/${USERNAME}/mysql" ]; then 49 | mkdir /home/${USERNAME}/mysql 50 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/mysql/ -R 51 | fi 52 | 53 | if [ ! -f /home/${USERNAME}/mysql/my.cnf ]; then 54 | cp /etc/seedbox-from-scratch/templates/my.cnf.template /home/${USERNAME}/mysql/my.cnf 55 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/mysql/ -R 56 | fi 57 | fi 58 | 59 | docker start ${USERNAME}_mysql 60 | 61 | if [[ -n $1 ]]; then 62 | echo "Last line of file specified as non-opt/last argument:" 63 | tail -1 $1 64 | fi 65 | -------------------------------------------------------------------------------- /createOpenSSLCACertificate: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | CERTPASS1=`cat /etc/seedbox-from-scratch/certpass.info` 6 | #IPADDRESS1=`cat /etc/seedbox-from-scratch/hostname.info` 7 | IPADDRESS1=`ip route get 8.8.8.8 | tr -s ' ' | cut -d' ' -f7` 8 | NEWUSER1=`cat /etc/seedbox-from-scratch/mainuser.info` 9 | #RANDOM1=`cat /etc/seedbox-from-scratch/sslca.info` 10 | cd /etc/seedbox-from-scratch/ 11 | rm -r /etc/seedbox-from-scratch/ssl/CA 12 | mkdir -p /etc/seedbox-from-scratch/ssl/CA/newcerts 13 | mkdir -p /etc/seedbox-from-scratch/ssl/CA/private 14 | cd /etc/seedbox-from-scratch/ssl/CA 15 | 16 | echo '01' > serial && touch index.txt && touch index.txt.attr 17 | cp /etc/seedbox-from-scratch/templates/root.ca.cacert.conf.template /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf 18 | #perl -pi -e "s//${RANDOM1}/g" /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf 19 | perl -pi -e "s//${NEWUSER1}/g" /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf 20 | perl -pi -e "s//${IPADDRESS1}/g" /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf 21 | 22 | openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -nodes -passout pass:${CERTPASS1} -out cacert.pem -days 3650 -config /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf 23 | openssl req -new -nodes -out /etc/seedbox-from-scratch/ssl/CA/req.pem -nodes -passout pass:${CERTPASS1} -config /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf 24 | openssl ca -batch -out /etc/seedbox-from-scratch/ssl/CA/cert.pem -config /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf -passin pass:${CERTPASS1} -infiles /etc/seedbox-from-scratch/ssl/CA/req.pem 25 | cp /etc/seedbox-from-scratch/ssl/CA/cert.pem /etc/seedbox-from-scratch/ssl/CA/tmp.pem 26 | openssl x509 -in /etc/seedbox-from-scratch/ssl/CA/tmp.pem -out /etc/seedbox-from-scratch/ssl/CA/cert.pem 27 | cat /etc/seedbox-from-scratch/ssl/CA/key.pem /etc/seedbox-from-scratch/ssl/CA/cert.pem > /etc/seedbox-from-scratch/ssl/CA/key-cert.pem 28 | 29 | cp /etc/seedbox-from-scratch/ssl/CA/cacert.pem /etc/seedbox-from-scratch/ssl 30 | cp /etc/seedbox-from-scratch/ssl/CA/cert.pem /etc/seedbox-from-scratch/ssl 31 | cp /etc/seedbox-from-scratch/ssl/CA/key-cert.pem /etc/seedbox-from-scratch/ssl 32 | cp /etc/seedbox-from-scratch/ssl/CA/key.pem /etc/seedbox-from-scratch/ssl 33 | cp /etc/seedbox-from-scratch/ssl/CA/private/cakey.pem /etc/seedbox-from-scratch/ssl 34 | cp /etc/seedbox-from-scratch/ssl/CA/req.pem /etc/seedbox-from-scratch/ssl 35 | 36 | bash /etc/seedbox-from-scratch/createOpenSSLServiceCertificate sabnzbd 37 | 38 | chmod 600 /etc/seedbox-from-scratch/ssl/* 39 | chmod 644 /etc/seedbox-from-scratch/ssl/cert.pem 40 | chmod 644 /etc/seedbox-from-scratch/ssl/key.pem 41 | 42 | ##################### LAST LINE ########### 43 | -------------------------------------------------------------------------------- /createOpenSSLServiceCertificate: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | sudo mkdir -p /etc/seedbox-from-scratch/ssl/CA 6 | sudo chmod 777 /etc/seedbox-from-scratch/ssl/CA 7 | cd /etc/seedbox-from-scratch/ssl/CA 8 | 9 | IPADDRESS1=`cat /etc/seedbox-from-scratch/hostname.info` 10 | NEWUSER1=`cat /etc/seedbox-from-scratch/mainuser.info` 11 | SERVICENAME1=$1 12 | SUBJ1="/C=US/ST=Denial/L=Springfield/O=Dis/CN=$IPADDRESS1/emailAddress=root@$NEWUSER1.com/OU=$NEWUSER1" 13 | CERTPASS1=`cat /etc/seedbox-from-scratch/certpass.info` 14 | 15 | sudo openssl genrsa 1024 | sudo tee /etc/seedbox-from-scratch/ssl/CA/$SERVICENAME1.key 16 | sudo openssl req -new -x509 -nodes -sha1 -days 365 -key /etc/seedbox-from-scratch/ssl/CA/$SERVICENAME1.key -config /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf -batch -subj $SUBJ1 | sudo tee /etc/seedbox-from-scratch/ssl/CA/$SERVICENAME1.cert 17 | sudo openssl ca -batch -keyfile /etc/seedbox-from-scratch/ssl/CA/private/cakey.pem -subj $SUBJ1 -out /etc/seedbox-from-scratch/ssl/CA/$SERVICENAME1.pem -config /etc/seedbox-from-scratch/ssl/CA/caconfig.cnf -ss_cert /etc/seedbox-from-scratch/ssl/CA/$SERVICENAME1.cert 18 | sudo cp /etc/seedbox-from-scratch/ssl/CA/$SERVICENAME1.* /etc/seedbox-from-scratch/ssl/ 19 | sudo chmod 600 /etc/seedbox-from-scratch/ssl/* 20 | sudo chmod 644 /etc/seedbox-from-scratch/ssl/cert.pem 21 | sudo chmod 644 /etc/seedbox-from-scratch/ssl/key.pem 22 | 23 | ##################### LAST LINE ########### 24 | -------------------------------------------------------------------------------- /createPlexUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | # createPlexUserInstall -u USERNAME -pt PLEXTOKEN -pp yes/no 5 | 6 | exec 1> >(logger -s -t $(basename $0)) 2>&1 7 | 8 | while [[ $# -gt 1 ]] 9 | do 10 | key="$1" 11 | 12 | case $key in 13 | -u|--username) 14 | USERNAME="$2" 15 | shift # past argument 16 | ;; 17 | -pt|--plextoken) 18 | PLEXTOKEN="$2" 19 | shift # past argument 20 | ;; 21 | -pp|--plexpass) 22 | PLEXPASS="$2" 23 | shift # past argument 24 | ;; 25 | *) 26 | # unknown option 27 | ;; 28 | esac 29 | shift # past argument or value 30 | done 31 | 32 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 33 | PLEXPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 32401 -ep 32500) 34 | USERPASSWORD=$(echo "$(cat /etc/seedbox-from-scratch/users/${USERNAME}.info)" | grep "Password: " | head -n1 | awk '{print $2}') 35 | OLDPLEXPORT=$(grep -o 'ManualPortMappingPort.*' /home/${USERNAME}/plex/config/Library/Application\ Support/Plex\ Media\ Server/Preferences.xml | cut -d \" -f2) 36 | 37 | 38 | docker pull plexinc/pms-docker:latest 39 | docker pull plexinc/pms-docker:plexpass 40 | 41 | if [[ (${PLEXPASS} == "yes") ]]; then 42 | docker run --restart=always -d --name ${USERNAME}_plex -h ${SYSTEMHOSTNAME} -e PLEX_CLAIM="${PLEXTOKEN}" -e ADVERTISE_IP="https://${SYSTEMHOSTNAME}:${PLEXPORT}/" --dns=$(grep nameserver /etc/resolv.conf|tail -1|cut -d ' ' -f 2) -v /home/${USERNAME}/media:/data -v /home/${USERNAME}/downloads/manual:/download -v /home/${USERNAME}/plex/config:/config -p ${PLEXPORT}:32400 plexinc/pms-docker:plexpass 43 | fi 44 | 45 | if [[ (${PLEXPASS} == "no") ]]; then 46 | docker run --restart=always -d --name ${USERNAME}_plex -h ${SYSTEMHOSTNAME} -e PLEX_CLAIM="${PLEXTOKEN}" -e ADVERTISE_IP="https://${SYSTEMHOSTNAME}:${PLEXPORT}/" --dns=$(grep nameserver /etc/resolv.conf|tail -1|cut -d ' ' -f 2) -v /home/${USERNAME}/media:/data -v /home/${USERNAME}/downloads/manual:/download -v /home/${USERNAME}/plex/config:/config -p ${PLEXPORT}:32400 plexinc/pms-docker:latest 47 | fi 48 | 49 | sleep 5 50 | 51 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d plex | tr -cd '[[:alnum:]]._-' ) 52 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 53 | 54 | echo "SERVICE: PLEX" > /home/${USERNAME}/private/plex.serviceinfo 55 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/plex.serviceinfo 56 | echo "ACCESSURL: https://$SYSTEMHOSTNAME:$PLEXPORT/web" >> /home/${USERNAME}/private/plex.serviceinfo 57 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$PLEXPORT/web" >> /home/${USERNAME}/private/plex.serviceinfo 58 | echo "PLEXPORT: $PLEXPORT" >> /home/${USERNAME}/private/plex.serviceinfo 59 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 60 | fi 61 | 62 | if ((${OLDPLEXPORT} >= 1000)); then 63 | sudo perl -pi -e "s/${OLDPLEXPORT}/${PLEXPORT}/g" /home/${USERNAME}/plex/config/Library/Application\ Support/Plex\ Media\ Server/Preferences.xml 64 | fi 65 | 66 | if [[ -n $1 ]]; then 67 | echo "Last line of file specified as non-opt/last argument:" 68 | tail -1 $1 69 | fi -------------------------------------------------------------------------------- /createPureFTPdUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 2121 -ep 2221) 25 | WEBSERVERPORTSTART=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 31000 -ep 32000) 26 | WEBSERVERPORTEND=$(($WEBSERVERPORTSTART + 9)) 27 | USERPASSWORD=$(echo "$(cat /etc/seedbox-from-scratch/users/${USERNAME}.info)" | grep "Password: " | head -n1 | awk '{print $2}') 28 | 29 | USERUID=$(id -u ${USERNAME}) 30 | USERGID=$(id -g ${USERNAME}) 31 | 32 | docker pull stilliard/pure-ftpd:hardened 33 | 34 | docker run --restart=always -d --name ${USERNAME}_pureftpd -e FTP_USER_NAME=${USERNAME} -e FTP_USER_PASS=${USERPASSWORD} -e FTP_USER_HOME=/home/${USERNAME}/pure-ftpd -e FTP_USER_UID=${USERUID} -e FTP_USER_GID=${USERGID} -e "PUBLICHOST=${SYSTEMHOSTNAME}" -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads:/home/${USERNAME}/pure-ftpd -v /home/${USERNAME}/pureftpd/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:21 -p ${WEBSERVERPORTSTART}-${WEBSERVERPORTEND}:30000-30009 -v /etc/localtime:/etc/localtime:ro stilliard/pure-ftpd:hardened bash /run.sh -c 5 -C 5 -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -R -P ${SYSTEMHOSTNAME} -p 30000:30059 35 | 36 | sleep 5 37 | 38 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d pureftpd | tr -cd '[[:alnum:]]._-' ) 39 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 40 | if [ ! -d "/home/${USERNAME}/pureftpd" ]; then 41 | mkdir /home/${USERNAME}/pureftpd 42 | mkdir /home/${USERNAME}/pureftpd/config 43 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/pureftpd/ -R 44 | fi 45 | 46 | echo "SERVICE: Pure-FTPd" > /home/${USERNAME}/private/pureftpd.serviceinfo 47 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/pureftpd.serviceinfo 48 | echo "PASSWORD: Your system password" >> /home/${USERNAME}/private/pureftpd.serviceinfo 49 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/pureftpd.serviceinfo 50 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/pureftpd.serviceinfo 51 | echo "Please log in and create a username and password, admins are not responsible for user failure to secure the system." >> /home/${USERNAME}/private/pureftpd.serviceinfo 52 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 53 | fi 54 | 55 | if [[ -n $1 ]]; then 56 | echo "Last line of file specified as non-opt/last argument:" 57 | tail -1 $1 58 | fi 59 | -------------------------------------------------------------------------------- /createRTorrentUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--username) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | 22 | trlt="$(curl -s https://api.github.com/repos/autodl-community/autodl-trackers/releases/latest | sed -rn 's/(.*)"tag_name": "v(.*)",/\2/p')" 23 | dltrkrs="https://github.com/autodl-community/autodl-trackers/releases/download/v$trlt/autodl-trackers-v$trlt.zip" 24 | 25 | IRSSIPASSWORD1=`sfsGenerateRandomPasswordString` 26 | USERPASSWORD=$(echo "$(cat /etc/seedbox-from-scratch/users/${USERNAME}.info)" | grep "Password: " | head -n1 | awk '{print $2}') 27 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 28 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8081 -ep 8180) 29 | WEBSSLSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8444 -ep 8543) 30 | IRSSIPORT1=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 51000 -ep 51999) 31 | SERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 51414 -ep 51513) 32 | UDPPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 6882 -ep 6982) 33 | OTHERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 5001 -ep 5999) 34 | USERUID=$(id -u ${USERNAME}) 35 | USERGID=$(id -g ${USERNAME}) 36 | HTPASSWDGENED=$(/etc/seedbox-from-scratch/sfsGenerateUserHtpassword -u ${USERNAME}) 37 | 38 | 39 | docker pull thevisad/rutorrent:latest 40 | 41 | docker run --restart=always -d --name ${USERNAME}_rutorrent -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads/manual:/downloads -v /home/${USERNAME}/rtorrent/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSSLSERVERPORT}:443 -p ${WEBSERVERPORT}:80 -p ${SERVERPORT}:${SERVERPORT} -p ${UDPPORT}:6881 -p ${OTHERPORT}:${OTHERPORT} -v /etc/seedbox-from-scratch/ssl:/etc/ssl/certs -v /etc/localtime:/etc/localtime:ro thevisad/rutorrent 42 | 43 | 44 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d rutorrent | tr -cd '[[:alnum:]]._-' ) 45 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 46 | 47 | sudo docker cp /etc/seedbox-from-scratch/templates/rutorrent.plugins.filemanager.conf.php.template ${USERNAME}_rutorrent:/usr/share/webapps/rutorrent/plugins/filemanager/conf.php 48 | sudo docker cp /etc/seedbox-from-scratch/templates/rutorrent.plugins.fileshare.conf.php.template ${USERNAME}_rutorrent:/usr/share/webapps/rutorrent/plugins/fileshare/conf.php 49 | sudo docker cp /etc/seedbox-from-scratch/templates/Snoopy.class.inc.template ${USERNAME}_rutorrent:/usr/share/webapps/rutorrent/php/Snoopy.class.inc 50 | 51 | sudo wget https://raw.githubusercontent.com/nelu/rutorrent-thirdparty-plugins/stable/filemanager/flm.class.php -O /tmp/rutorrent.filemanager.flm.class.php 52 | sudo wget https://raw.githubusercontent.com/nelu/rutorrent-thirdparty-plugins/stable/filemanager/settings.js.php -O /tmp/rutorrent.filemanager.settings.js.php 53 | sudo perl -pi -e "s/\\\$topDirectory/\\\$homeDirectory/g" /tmp/rutorrent.filemanager.settings.js.php 54 | sudo perl -pi -e "s/\\\$topDirectory\, \\\$fm/\\\$homeDirectory\, \\\$topDirectory\, \\\$fm/g" /tmp/rutorrent.filemanager.flm.class.php 55 | sudo perl -pi -e "s/\\\$this\-\>userdir \= addslash\(\\\$topDirectory\)\;/\\\$this\-\>userdir \= \\\$homeDirectory \? addslash\(\\\$homeDirectory\) \: addslash\(\\\$topDirectory\)\;/g" /tmp/rutorrent.filemanager.flm.class.php 56 | sudo docker cp /tmp/rutorrent.filemanager.flm.class.php ${USERNAME}_rutorrent:/usr/share/webapps/rutorrent/plugins/filemanager/flm.class.php 57 | sudo docker cp /tmp/rutorrent.filemanager.settings.js.php ${USERNAME}_rutorrent:/usr/share/webapps/rutorrent/plugins/filemanager/settings.js.php 58 | 59 | sudo rm -R /tmp/rtorrentinstalltemp/ 60 | sudo mkdir -p /tmp/rtorrentinstalltemp/.irssi/scripts/ 61 | sudo curl -sL http://git.io/vlcND | grep -Po '(?<="browser_download_url": ")(.*-v[\d.]+.zip)' | sudo xargs wget --quiet -O /tmp/rtorrentinstalltemp/.irssi/scripts/autodl-irssi.zip 62 | sudo unzip -o /tmp/rtorrentinstalltemp/.irssi/scripts/autodl-irssi.zip -d /tmp/rtorrentinstalltemp/.irssi/scripts/ 63 | sudo rm /tmp/rtorrentinstalltemp/.irssi/scripts/autodl-irssi.zip 64 | sudo mkdir -p /tmp/rtorrentinstalltemp/.irssi/scripts/autorun/ 65 | sudo mv /tmp/rtorrentinstalltemp/.irssi/scripts/autodl-irssi.pl /tmp/rtorrentinstalltemp/.irssi/scripts/autorun/ 66 | 67 | sudo wget -qO /tmp/rtorrentinstalltemp/autodl-trackers.zip $dltrkrs 68 | sudo unzip -qo /tmp/rtorrentinstalltemp/autodl-trackers.zip -d /tmp/rtorrentinstalltemp/.irssi/scripts/AutodlIrssi/trackers/ 69 | 70 | sudo mkdir -p /tmp/rtorrentinstalltemp/.autodl 71 | sudo cp /etc/seedbox-from-scratch/templates/home.user.autodl.autodl.cfg.template /tmp/rtorrentinstalltemp/.autodl/autodl.cfg 72 | sudo chown -R root:root /tmp/rtorrentinstalltemp/.irssi 73 | sudo perl -pi -e "s//$IRSSIPASSWORD1/g" /tmp/rtorrentinstalltemp/.autodl/autodl.cfg 74 | sudo perl -pi -e "s//$IRSSIPORT1/g" /tmp/rtorrentinstalltemp/.autodl/autodl.cfg 75 | sudo perl -pi -e "s/use Digest\:\:SHA1 qw/use Digest\:\:SHA qw/g" /tmp/rtorrentinstalltemp/.irssi/scripts/AutodlIrssi/MatchedRelease.pm 76 | sudo docker cp /tmp/rtorrentinstalltemp/.irssi ${USERNAME}_rutorrent:/root/ 77 | sudo docker cp /tmp/rtorrentinstalltemp/.autodl ${USERNAME}_rutorrent:/root/ 78 | 79 | 80 | # Replace this with the new data??> 81 | sudo cp /etc/seedbox-from-scratch/templates/docker.nginx.conf.template /home/${USERNAME}/rtorrent/config/nginx/nginx.conf 82 | sudo cp /etc/seedbox-from-scratch/templates/rutorrent.conf.users.plugins.autodl-irssi.conf.php.template /tmp/rutorrent.conf.users.plugins.autodl-irssi.conf.php.template.tmp 83 | sudo perl -pi -e "s//$IRSSIPASSWORD1/g" /tmp/rutorrent.conf.users.plugins.autodl-irssi.conf.php.template.tmp 84 | sudo perl -pi -e "s//$IRSSIPORT1/g" /tmp/rutorrent.conf.users.plugins.autodl-irssi.conf.php.template.tmp 85 | sudo docker cp /tmp/rutorrent.conf.users.plugins.autodl-irssi.conf.php.template.tmp ${USERNAME}_rutorrent:/usr/share/webapps/rutorrent/plugins/autodl-irssi/conf.php 86 | 87 | sudo mkdir -p /tmp/rtorrentinstalltemp/rutorrent/plugins/ 88 | sudo git clone https://github.com/autodl-community/autodl-rutorrent.git /tmp/rtorrentinstalltemp/rutorrent/plugins/autodl-irssi 89 | sudo cp /tmp/rtorrentinstalltemp/rutorrent/plugins/autodl-irssi/_conf.php /tmp/rtorrentinstalltemp/rutorrent/plugins/autodl-irssi/conf.php 90 | sudo docker cp /tmp/rtorrentinstalltemp/rutorrent/plugins/* ${USERNAME}_rutorrent:/var/www/localhost/rutorrent/plugins 91 | sudo rm -R /tmp/rtorrentinstalltemp/ 92 | 93 | sudo echo ${HTPASSWDGENED} > /tmp/temp.htpasswd 94 | sudo docker cp /tmp/temp.htpasswd ${USERNAME}_rutorrent:/usr/share/webapps/.htpasswd 95 | sudo rm -rf /tmp/temp.htpasswd 96 | 97 | sudo echo "SERVICE: RTORRENT" > /home/${USERNAME}/private/rutorrent.serviceinfo 98 | sudo echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/rutorrent.serviceinfo 99 | sudo echo "ACCESSURL: https://$SYSTEMHOSTNAME:$WEBSSLSERVERPORT" >> /home/${USERNAME}/private/rutorrent.serviceinfo 100 | sudo echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/rutorrent.serviceinfo 101 | sudo echo "WEBSSLSERVERPORT: $WEBSSLSERVERPORT" >> /home/${USERNAME}/private/rutorrent.serviceinfo 102 | sudo echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/rutorrent.serviceinfo 103 | sudo echo "IRSSIPORT1: $IRSSIPORT1" >> /home/${USERNAME}/private/rutorrent.serviceinfo 104 | sudo echo "SERVERPORT: $SERVERPORT" >> /home/${USERNAME}/private/rutorrent.serviceinfo 105 | sudo echo "UDPPORT: $UDPPORT" >> /home/${USERNAME}/private/rutorrent.serviceinfo 106 | sudo echo "OTHERPORT: $OTHERPORT" >> /home/${USERNAME}/private/rutorrent.serviceinfo 107 | sudo echo "UDPPORT: $UDPPORT" >> /home/${USERNAME}/private/rutorrent.serviceinfo 108 | sudo echo "IRSSIPASSWORD1: $IRSSIPASSWORD1" >> /home/${USERNAME}/private/rutorrent.serviceinfo 109 | sudo chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 110 | 111 | sudo docker restart ${USERNAME}_rutorrent 112 | fi 113 | 114 | if [[ -n $1 ]]; then 115 | echo "Last line of file specified as non-opt/last argument:" 116 | tail -1 $1 117 | fi -------------------------------------------------------------------------------- /createRadarrUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 7878 -ep 7978) 25 | USERUID=$(id -u ${USERNAME}) 26 | USERGID=$(id -g ${USERNAME}) 27 | 28 | 29 | docker pull linuxserver/radarr 30 | 31 | docker run --restart=always -d --name ${USERNAME}_radarr -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads:/downloads -v /home/${USERNAME}/media/Movies:/movies -v /home/${USERNAME}/radarr/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:7878 -v /etc/localtime:/etc/localtime:ro linuxserver/radarr 32 | 33 | sleep 5 34 | 35 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d radarr | tr -cd '[[:alnum:]]._-' ) 36 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 37 | if [ ! -d "/home/${USERNAME}/radarr" ]; then 38 | mkdir /home/${USERNAME}/radarr 39 | mkdir /home/${USERNAME}/radarr/config 40 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/radarr/ -R 41 | fi 42 | 43 | echo "SERVICE: radarr" > /home/${USERNAME}/private/radarr.serviceinfo 44 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/radarr.serviceinfo 45 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/radarr.serviceinfo 46 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/radarr.serviceinfo 47 | echo "Please log in and create a username and password, admins are not responsible for user failure to secure the system." >> /home/${USERNAME}/private/radarr.serviceinfo 48 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 49 | fi 50 | 51 | if [[ -n $1 ]]; then 52 | echo "Last line of file specified as non-opt/last argument:" 53 | tail -1 $1 54 | fi -------------------------------------------------------------------------------- /createRapidLeechUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8081 -ep 8181) 25 | WEBSERVERSSLPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8444 -ep 8544) 26 | HTPASSWDGENED=$(/etc/seedbox-from-scratch/sfsGenerateUserHtpassword -u ${USERNAME}) 27 | 28 | 29 | USERUID=$(id -u ${USERNAME}) 30 | USERGID=$(id -g ${USERNAME}) 31 | 32 | 33 | docker pull wpzzz/rapidleech 34 | 35 | docker run --restart=always -d --name ${USERNAME}_rapidleech -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads/:/downloads -v /home/${USERNAME}/rapidleech/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:80 -p ${WEBSERVERSSLPORT}:443 -v /etc/seedbox-from-scratch/ssl:/etc/ssl/certs -v /etc/localtime:/etc/localtime:ro wpzzz/rapidleech 36 | 37 | echo ${HTPASSWDGENED} > /tmp/temp.htpasswd 38 | docker cp /tmp/temp.htpasswd ${USERNAME}_rapidleech:/var/www/.htpasswd 39 | rm -rf /tmp/temp.htpasswd 40 | 41 | sleep 5 42 | 43 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d rapidleech | tr -cd '[[:alnum:]]._-' ) 44 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 45 | if [ ! -d "/home/${USERNAME}/rapidleech" ]; then 46 | mkdir /home/${USERNAME}/rapidleech 47 | mkdir /home/${USERNAME}/rapidleech/config 48 | fi 49 | 50 | echo "SERVICE: RAPIDLEECH" > /home/${USERNAME}/private/rapidleech.serviceinfo 51 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/rapidleech.serviceinfo 52 | echo "ACCESSURL: https://$SYSTEMHOSTNAME:$WEBSERVERSSLPORT" >> /home/${USERNAME}/private/rapidleech.serviceinfo 53 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/rapidleech.serviceinfo 54 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/rapidleech.serviceinfo 55 | echo "WEBSERVERSSLPORT: $WEBSERVERSSLPORT" >> /home/${USERNAME}/private/rapidleech.serviceinfo 56 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 57 | fi 58 | 59 | if [[ -n $1 ]]; then 60 | echo "Last line of file specified as non-opt/last argument:" 61 | tail -1 $1 62 | fi 63 | -------------------------------------------------------------------------------- /createSFTPServerUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 22800 -ep 22900) 25 | USERPASSWORD=$(echo "$(cat /etc/seedbox-from-scratch/users/${USERNAME}.info)" | grep "Password: " | head -n1 | awk '{print $2}') 26 | 27 | USERUID=$(id -u ${USERNAME}) 28 | USERGID=$(id -g ${USERNAME}) 29 | 30 | docker pull atmoz/sftp 31 | 32 | docker run --restart=always -d --name ${USERNAME}_sftp -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads:/home/${USERNAME}/upload:rw -v /home/${USERNAME}/sftp/config:/config:rw -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:22 -v /etc/localtime:/etc/localtime:ro atmoz/sftp ${USERNAME}:${USERPASSWORD}:1001 33 | 34 | sleep 5 35 | 36 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d sftp | tr -cd '[[:alnum:]]._-' ) 37 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 38 | if [ ! -d "/home/${USERNAME}/sftp" ]; then 39 | mkdir /home/${USERNAME}/sftp 40 | mkdir /home/${USERNAME}/sftp/config 41 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/sftp/ -R 42 | fi 43 | 44 | echo "SERVICE: sftp" > /home/${USERNAME}/private/sftp.serviceinfo 45 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/sftp.serviceinfo 46 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/sftp.serviceinfo 47 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/sftp.serviceinfo 48 | echo "Please log in and create a username and password, admins are not responsible for user failure to secure the system." >> /home/${USERNAME}/private/sftp.serviceinfo 49 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 50 | fi 51 | 52 | if [[ -n $1 ]]; then 53 | echo "Last line of file specified as non-opt/last argument:" 54 | tail -1 $1 55 | fi 56 | -------------------------------------------------------------------------------- /createSabnzbdUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--username) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | 22 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8081 -ep 8180) 23 | WEBSERVERSSLPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 9091 -ep 9190) 24 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 25 | 26 | USERUID=$(id -u ${USERNAME}) 27 | USERGID=$(id -g ${USERNAME}) 28 | 29 | 30 | docker pull linuxserver/sabnzbd 31 | 32 | docker run --restart=always -d --name ${USERNAME}_sabnzbd -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads:/data -v /home/${USERNAME}/sabnzbd/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:8080 -p ${WEBSERVERSSLPORT}:9090 -v /etc/localtime:/etc/localtime:ro linuxserver/sabnzbd 33 | 34 | sleep 5 35 | 36 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d sabnzbd | tr -cd '[[:alnum:]]._-' ) 37 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 38 | if [ ! -d "/home/${USERNAME}/sabnzbd" ]; then 39 | mkdir /home/${USERNAME}/sabnzbd 40 | mkdir /home/${USERNAME}/sabnzbd/config 41 | mkdir /home/${USERNAME}/sabnzbd/data 42 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/sabnzbd/ -R 43 | fi 44 | 45 | echo "SERVICE: SABNZBD" > /home/${USERNAME}/private/sabnzbd.serviceinfo 46 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/sabnzbd.serviceinfo 47 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/sabnzbd.serviceinfo 48 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/sabnzbd.serviceinfo 49 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 50 | fi 51 | 52 | if [[ -n $1 ]]; then 53 | echo "Last line of file specified as non-opt/last argument:" 54 | tail -1 $1 55 | fi -------------------------------------------------------------------------------- /createSickbeardUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8082 -ep 8181) 24 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 25 | 26 | USERUID=$(id -u ${USERNAME}) 27 | USERGID=$(id -g ${USERNAME}) 28 | 29 | 30 | docker pull linuxserver/sickbeard 31 | 32 | docker run --restart=always -d --name ${USERNAME}_sickbeard -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads:/data -v /home/${USERNAME}/sickbeard/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:8081 -v /etc/localtime:/etc/localtime:ro linuxserver/sickbeard 33 | 34 | sleep 5 35 | 36 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d sickbeard | tr -cd '[[:alnum:]]._-' ) 37 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 38 | if [ ! -d "/home/${USERNAME}/sickbeard" ]; then 39 | mkdir /home/${USERNAME}/sickbeard 40 | mkdir /home/${USERNAME}/sickbeard/config 41 | mkdir /home/${USERNAME}/sickbeard/data 42 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/sickbeard/ -R 43 | fi 44 | 45 | echo "SERVICE: SICKBEARD" > /home/${USERNAME}/private/sickbeard.serviceinfo 46 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/sickbeard.serviceinfo 47 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/sickbeard.serviceinfo 48 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/sickbeard.serviceinfo 49 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 50 | fi 51 | 52 | if [[ -n $1 ]]; then 53 | echo "Last line of file specified as non-opt/last argument:" 54 | tail -1 $1 55 | fi -------------------------------------------------------------------------------- /createSickrageUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8082 -ep 8181 ) 24 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 25 | 26 | USERUID=$(id -u ${USERNAME}) 27 | USERGID=$(id -g ${USERNAME}) 28 | 29 | 30 | docker pull linuxserver/sickrage 31 | 32 | docker run --restart=always -d --name ${USERNAME}_sickrage -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads:/data -v /home/${USERNAME}/sickrage/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:8081 -v /etc/localtime:/etc/localtime:ro linuxserver/sickrage 33 | 34 | sleep 5 35 | 36 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d sickrage | tr -cd '[[:alnum:]]._-' ) 37 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 38 | if [ ! -d "/home/${USERNAME}/sickrage" ]; then 39 | mkdir /home/${USERNAME}/sickrage 40 | mkdir /home/${USERNAME}/sickrage/config 41 | mkdir /home/${USERNAME}/sickrage/data 42 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/sickrage/ -R 43 | fi 44 | 45 | echo "SERVICE: SICKRAGE" > /home/${USERNAME}/private/sickrage.serviceinfo 46 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/sickrage.serviceinfo 47 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/sickrage.serviceinfo 48 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/sickrage.serviceinfo 49 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 50 | fi 51 | 52 | if [[ -n $1 ]]; then 53 | echo "Last line of file specified as non-opt/last argument:" 54 | tail -1 $1 55 | fi -------------------------------------------------------------------------------- /createSonarrUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8889 -ep 8989) 25 | USERUID=$(id -u ${USERNAME}) 26 | USERGID=$(id -g ${USERNAME}) 27 | 28 | 29 | docker pull linuxserver/sonarr 30 | 31 | docker run --restart=always -d --name ${USERNAME}_sonarr -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads:/downloads -v /home/${USERNAME}/media/TVShows:/tv -v /home/${USERNAME}/sonarr/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:8989 -v /etc/localtime:/etc/localtime:ro linuxserver/sonarr 32 | 33 | sleep 5 34 | 35 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d sonarr | tr -cd '[[:alnum:]]._-' ) 36 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 37 | if [ ! -d "/home/${USERNAME}/sonarr" ]; then 38 | mkdir /home/${USERNAME}/sonarr 39 | mkdir /home/${USERNAME}/sonarr/config 40 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/sonarr/ -R 41 | fi 42 | 43 | echo "SERVICE: sonarr" > /home/${USERNAME}/private/sonarr.serviceinfo 44 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/sonarr.serviceinfo 45 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/sonarr.serviceinfo 46 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/sonarr.serviceinfo 47 | echo "Please log in and create a username and password, admins are not responsible for user failure to secure the system." >> /home/${USERNAME}/private/sonarr.serviceinfo 48 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 49 | fi 50 | 51 | if [[ -n $1 ]]; then 52 | echo "Last line of file specified as non-opt/last argument:" 53 | tail -1 $1 54 | fi -------------------------------------------------------------------------------- /createSyncThingUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--username) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | LISTENINGPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 22001 -ep 22101) 25 | PROTOCOLPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 21028 -ep 21128) 26 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8385 -ep 8485) 27 | USERPASSWORD=`sfsGenerateRandomPasswordString` 28 | USERUID=$(id -u ${USERNAME}) 29 | USERGID=$(id -g ${USERNAME}) 30 | USERHASH=$(openssl passwd -apr1 ${USERPASSWORD}) 31 | 32 | grep '${USERNAME}:' | awk '{print $2}' 33 | 34 | 35 | docker pull linuxserver/syncthing:latest 36 | 37 | docker run --restart=always -d --name ${USERNAME}_syncthing -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/media:/data1 -v /home/${USERNAME}/downloads:/data2 -v /home/${USERNAME}/syncthing/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:8384 -v /etc/localtime:/etc/localtime:ro linuxserver/syncthing:latest 38 | 39 | sleep 5 40 | 41 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d syncthing | tr -cd '[[:alnum:]]._-' ) 42 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 43 | if [ ! -d "/home/${USERNAME}/syncthing" ]; then 44 | mkdir /home/${USERNAME}/syncthing 45 | mkdir /home/${USERNAME}/syncthing/config 46 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/syncthing/ -R 47 | fi 48 | 49 | echo "SERVICE: syncthing" > /home/${USERNAME}/private/syncthing.serviceinfo 50 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/syncthing.serviceinfo 51 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/syncthing.serviceinfo 52 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/syncthing.serviceinfo 53 | echo "LISTENINGPORT: $LISTENINGPORT" >> /home/${USERNAME}/private/syncthing.serviceinfo 54 | echo "PROTOCOLPORT: $PROTOCOLPORT" >> /home/${USERNAME}/private/syncthing.serviceinfo 55 | echo "Please log in and create a username and password, admins are not responsible for a users failure to secure the system." >> /home/${USERNAME}/private/syncthing.serviceinfo 56 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 57 | fi 58 | 59 | sudo perl -ip -e "s/<\/user>/${USERNAME}<\/user>/g" /home/${USERNAME}/syncthing/config/config.xml 60 | sudo perl -ip -e 's/<\/password>/USERHASH<\/password>/g' /home/${USERNAME}/syncthing/config/config.xml 61 | 62 | sudo perl -pi -e "s/tls=\"false\"/tls=\"true\"/g" /home/${USERNAME}/syncthing/config/config.xml 63 | 64 | if [[ -n $1 ]]; then 65 | echo "Last line of file specified as non-opt/last argument:" 66 | tail -1 $1 67 | fi -------------------------------------------------------------------------------- /createUbooquityUserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | 22 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 2203 -ep 2302) 23 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 24 | 25 | USERUID=$(id -u ${USERNAME}) 26 | USERGID=$(id -g ${USERNAME}) 27 | 28 | docker pull linuxserver/ubooquity 29 | 30 | docker run --restart=always -d --name=${USERNAME}_ubooquity -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/ubooquity/config:/config -v /home/${USERNAME}/media/books:/books -v /home/${USERNAME}/media/comics:/comics -v /home/${USERNAME}/media/files:/files -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSERVERPORT}:2202 -p ${WEBSERVERSSLPORT}:2203 linuxserver/ubooquity -webadmin 31 | 32 | sleep 5 33 | 34 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d ubooquity | tr -cd '[[:alnum:]]._-' ) 35 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 36 | echo "SERVICE: UBOOQUITY" > /home/${USERNAME}/private/ubooquity.serviceinfo 37 | echo "USERNAME: $USERNAME" >> /home/${USERNAME}/private/ubooquity.serviceinfo 38 | echo "ACCESSURL: http://$SYSTEMHOSTNAME:$WEBSERVERPORT" >> /home/${USERNAME}/private/ubooquity.serviceinfo 39 | echo "WEBSERVERPORT: $WEBSERVERPORT" >> /home/${USERNAME}/private/ubooquity.serviceinfo 40 | chown www-data:www-data /home/${USERNAME}/private/*.serviceinfo 41 | 42 | if [ ! -d "/home/${USERNAME}/ubooquity" ]; then 43 | mkdir /home/${USERNAME}/ubooquity 44 | mkdir /home/${USERNAME}/ubooquity/comics 45 | mkdir /home/${USERNAME}/ubooquity/books 46 | mkdir /home/${USERNAME}/ubooquity/config 47 | mkdir /home/${USERNAME}/ubooquity/files 48 | chown ${USERNAME}:${USERNAME} /home/${USERNAME}/ubooquity/ -R 49 | fi 50 | fi 51 | 52 | if [[ -n $1 ]]; then 53 | echo "Last line of file specified as non-opt/last argument:" 54 | tail -1 $1 55 | fi -------------------------------------------------------------------------------- /cronUpdates: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | /opt/seedbox-from-scratch/updateInstalledScripts 7 | 8 | for f in /etc/seedbox-from-scratch/users/*.info; do 9 | f=${f##*/} 10 | 11 | #update web pages for users 12 | \cp /etc/seedbox-from-scratch/webserver/* /home/${f%.info}/private/ 13 | 14 | #update scripts for power users (to be removed) 15 | #\cp /opt/seedbox-from-scratch/templates/user.restartSeedbox.template /home/${f%.info}/restartSeedbox 16 | #chmod +x /home/${f%.info}/restartSeedbox 17 | done -------------------------------------------------------------------------------- /deleteCouchpotatoUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker rm -f ${USERNAME}_couchpotato 24 | rm -rf /home/${USERNAME}/private/couchpotato.serviceinfo 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteDelugeUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_deluge 23 | rm -rf /home/${USERNAME}/private/deluge.serviceinfo 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi 28 | -------------------------------------------------------------------------------- /deleteFileManagerUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_filemanager 23 | sudo rm -rf /home/${USERNAME}/filemanager/database.db 24 | sudo rm -rf /home/${USERNAME}/filemanager/config.json 25 | sudo rm -rf /home/${USERNAME}/private/filemanager.serviceinfo 26 | if [[ -n $1 ]]; then 27 | echo "Last line of file specified as non-opt/last argument:" 28 | tail -1 $1 29 | fi 30 | 31 | 32 | -------------------------------------------------------------------------------- /deleteFileZillaUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_filezilla 23 | rm -rf /home/${USERNAME}/private/filezilla.serviceinfo 24 | rm -rf /home/${USERNAME}/filezilla/config/config.xml 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteLetsEncryptUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker rm -f ${USERNAME}_letsencrypt 24 | rm -rf /home/${USERNAME}/private/letsencrypt.serviceinfo 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteMySQLUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker rm -f ${USERNAME}_mysql 24 | rm -rf /home/${USERNAME}/private/mysql.serviceinfo 25 | rm -rf /home/${USERNAME}/mysql 26 | 27 | if [[ -n $1 ]]; then 28 | echo "Last line of file specified as non-opt/last argument:" 29 | tail -1 $1 30 | fi 31 | -------------------------------------------------------------------------------- /deletePlexUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_plex 23 | rm -rf /home/${USERNAME}/private/plex.serviceinfo 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi 28 | -------------------------------------------------------------------------------- /deletePureFTPDUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_pureftpd 23 | rm -rf /home/${USERNAME}/private/pureftpd.serviceinfo 24 | rm -rf /home/${USERNAME}/pureftpd/config/config.xml 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteRTorrentUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_rutorrent 23 | rm -rf /home/${USERNAME}/private/rutorrent.serviceinfo 24 | rm -rf /home/${USERNAME}/rtorrent/config/rtorrent/rtorrent.rc 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteRadarrUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_radarr 23 | rm -rf /home/${USERNAME}/private/radarr.serviceinfo 24 | rm -rf /home/${USERNAME}/radarr/config/config.xml 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteRapidLeechUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker rm -f ${USERNAME}_rapidleech 24 | rm -rf /home/${USERNAME}/private/rapidleech.serviceinfo 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteSFTPServerUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_sftp 23 | rm -rf /home/${USERNAME}/private/sftp.serviceinfo 24 | rm -rf /home/${USERNAME}/sftp/config/config.xml 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteSabnzbdUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker rm -f ${USERNAME}_sabnzbd 24 | rm -rf /home/${USERNAME}/private/sabnzbd.serviceinfo 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteSeedboxUser: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | NEWUSER1=a 7 | NEWUSER2=b 8 | 9 | while [ ! $NEWUSER1 = $NEWUSER2 ]; 10 | do 11 | clear 12 | echo -n "Type username to be DELETED: " 13 | read NEWUSER1 14 | echo -n "Retype username: " 15 | read NEWUSER2 16 | echo "" 17 | done 18 | 19 | # 3.1.1 20 | 21 | #kill all processes related to that user 22 | sudo kill -9 $( sudo ps -ef | grep $NEWUSER1 | awk '{ print $2 }' ) 23 | 24 | # 3.2 25 | 26 | sudo userdel --remove --force $NEWUSER1 27 | 28 | # 12. 29 | 30 | #remove current password from htpassword 31 | sudo perl -pi -e "s/^$NEWUSER1\:.*\n$//g" /etc/apache2/htpasswd 32 | 33 | # 20. 34 | ############## sudo rm -r /home/downloads/$NEWUSER1 35 | 36 | # 21. 37 | sudo rm /etc/init/rtorrent.$NEWUSER1.conf 38 | 39 | # 29. 40 | 41 | sudo rm /etc/seedbox-from-scratch/users/$NEWUSER1.info 42 | echo "" 43 | echo "$NEWUSER1 has been deleted." 44 | echo "" 45 | 46 | ##################### LAST LINE ########### 47 | 48 | # scripts are now in git form :) 49 | -------------------------------------------------------------------------------- /deleteSickbeardUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker rm -f ${USERNAME}_sickbeard 24 | rm -rf /home/${USERNAME}/private/sickbeard.serviceinfo 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteSickrageUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker rm -f ${USERNAME}_sickrage 24 | rm -rf /home/${USERNAME}/private/sickrage.serviceinfo 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteSonarrUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_sonarr 23 | rm -rf /home/${USERNAME}/private/sonarr.serviceinfo 24 | rm -rf /home/${USERNAME}/sonarr/config/config.xml 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteSyncThingUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_syncthing 23 | rm -rf /home/${USERNAME}/private/syncthing.serviceinfo 24 | rm -rf /home/${USERNAME}/syncthing/config/config.xml 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteUbooquityUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker rm -f ${USERNAME}_ubooquity 24 | rm -rf /home/${USERNAME}/private/ubooquity.serviceinfo 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /deleteUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | -d|--dockername) 17 | DOCKERNAME="$2" 18 | shift # past argument 19 | ;; 20 | *) 21 | # unknown option 22 | ;; 23 | esac 24 | shift # past argument or value 25 | done 26 | echo USERNAME = "${USERNAME}" 27 | sudo docker rm -f ${USERNAME}_${DOCKERNAME} 28 | rm -rf /home/${USERNAME}/private/${DOCKERNAME}.serviceinfo 29 | 30 | case ${DOCKERNAME} in 31 | [1-6]*) 32 | Message="All is quiet." 33 | ;; 34 | [7-8]*) 35 | Message="Start thinking about cleaning out some stuff. There's a partition that is $space % full." 36 | ;; 37 | 9[1-8]) 38 | Message="Better hurry with that new disk... One partition is $space % full." 39 | ;; 40 | 99) 41 | Message="I'm drowning here! There's a partition at $space %!" 42 | ;; 43 | *) 44 | Message="I seem to be running with an nonexistent amount of disk space..." 45 | ;; 46 | esac 47 | 48 | if [[ -n $1 ]]; then 49 | echo "Last line of file specified as non-opt/last argument:" 50 | tail -1 $1 51 | fi 52 | -------------------------------------------------------------------------------- /deluge.password.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | 6 | # deluge.password.py 7 | # 8 | # 9 | 10 | import hashlib 11 | import sys 12 | 13 | password = sys.argv[1] 14 | salt = sys.argv[2] 15 | 16 | s = hashlib.sha1() 17 | s.update(salt) 18 | s.update(password) 19 | 20 | print s.hexdigest() 21 | -------------------------------------------------------------------------------- /development/create-wordpress-UserInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--username) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | 22 | trlt="$(curl -s https://api.github.com/repos/autodl-community/autodl-trackers/releases/latest | sed -rn 's/(.*)"tag_name": "v(.*)",/\2/p')" 23 | dltrkrs="https://github.com/autodl-community/autodl-trackers/releases/download/v$trlt/autodl-trackers-v$trlt.zip" 24 | 25 | IRSSIPASSWORD1=`sfsGenerateRandomPasswordString` 26 | USERPASSWORD=$(echo "$(cat /etc/seedbox-from-scratch/users/${USERNAME}.info)" | grep "Password: " | head -n1 | awk '{print $2}') 27 | SYSTEMHOSTNAME=`cat /etc/seedbox-from-scratch/hostname.info` 28 | WEBSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8081 -ep 8180) 29 | WEBSSLSERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 8444 -ep 8543) 30 | IRSSIPORT1=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 51000 -ep 51999) 31 | SERVERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 51414 -ep 51513) 32 | UDPPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 6882 -ep 6982) 33 | OTHERPORT=$(/etc/seedbox-from-scratch/sfsgetAvailablePort -sp 5001 -ep 5999) 34 | USERUID=$(id -u ${USERNAME}) 35 | USERGID=$(id -g ${USERNAME}) 36 | HTPASSWDGENED=$(/etc/seedbox-from-scratch/sfsGenerateUserHtpassword -u ${USERNAME}) 37 | 38 | 39 | docker pull thevisad/wordpress:latest 40 | 41 | docker run --restart=always -d --name ${USERNAME}_wordpress -e LOCAL_USER_ID=${USERUID} -h ${SYSTEMHOSTNAME} -v /home/${USERNAME}/downloads/manual:/downloads -v /home/${USERNAME}/rtorrent/config:/config -e PGID=${USERGID} -e PUID=${USERUID} -p ${WEBSSLSERVERPORT}:443 -p ${WEBSERVERPORT}:80 -p ${SERVERPORT}:${SERVERPORT} -p ${UDPPORT}:6881 -p ${OTHERPORT}:${OTHERPORT} -v /etc/seedbox-from-scratch/ssl:/etc/ssl/certs -v /etc/localtime:/etc/localtime:ro thevisad/wordpress 42 | 43 | 44 | CHECKIFRUNNING=$(/etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ${USERNAME} -d wordpress | tr -cd '[[:alnum:]]._-' ) 45 | if [[ (${CHECKIFRUNNING} == "STOPPED") || (${CHECKIFRUNNING} == "RUNNING") ]]; then 46 | sudo docker restart ${USERNAME}_wordpress 47 | fi 48 | 49 | if [[ -n $1 ]]; then 50 | echo "Last line of file specified as non-opt/last argument:" 51 | tail -1 $1 52 | fi -------------------------------------------------------------------------------- /development/delete-wordpress-UserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker rm -f ${USERNAME}_wordpress 23 | rm -rf /home/${USERNAME}/private/wordpress.serviceinfo 24 | rm -rf /home/${USERNAME}/rtorrent/config/rtorrent/rtorrent.rc 25 | if [[ -n $1 ]]; then 26 | echo "Last line of file specified as non-opt/last argument:" 27 | tail -1 $1 28 | fi 29 | -------------------------------------------------------------------------------- /development/restart-wordpress-UserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_wordpress 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /development/start-wordpress-UserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_wordpress 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /development/stop-wordpress-UserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_wordpress 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/favicon.ico -------------------------------------------------------------------------------- /installOpenVPN: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | sudo bash /etc/seedbox-from-scratch/ovpni -------------------------------------------------------------------------------- /installRTorrent: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | RTORRENT1=$1 7 | 8 | if [ "$RTORRENT1" = "0.9.6" ]; then 9 | LIBTORRENT1=0.13.6 10 | fi 11 | 12 | if [ "$RTORRENT1" = "0.9.2" ]; then 13 | LIBTORRENT1=0.13.2 14 | fi 15 | 16 | if [ "$RTORRENT1" = "0.9.3" ]; then 17 | LIBTORRENT1=0.13.3 18 | fi 19 | 20 | if [ "$RTORRENT1" = "0.9.4" ]; then 21 | LIBTORRENT1=0.13.4 22 | fi 23 | 24 | if [ ! -d /etc/seedbox-from-scratch/source/rtorrent-$RTORRENT1/ ]; then 25 | sudo tar xvfz /etc/seedbox-from-scratch/installs/rtorrent-$RTORRENT1.tar.gz -C /etc/seedbox-from-scratch/source/ 26 | sudo tar xvfz /etc/seedbox-from-scratch/installs/libtorrent-$LIBTORRENT1.tar.gz -C /etc/seedbox-from-scratch/source/ 27 | fi 28 | 29 | sudo killall rtorrent 30 | sudo kill -9 `sudo ps aux | grep rtorrent | grep -v grep | awk '{print $2}' | cut -d. -f 1` &> /dev/null 31 | 32 | cd /etc/seedbox-from-scratch/source/libtorrent-$LIBTORRENT1 33 | sudo ./autogen.sh 34 | sudo ./configure --prefix=/usr 35 | sudo make -j2 36 | sudo make install 37 | 38 | cd /etc/seedbox-from-scratch/source/rtorrent-$RTORRENT1 39 | sudo ./autogen.sh 40 | sudo ./configure --prefix=/usr --with-xmlrpc-c 41 | sudo make -j2 42 | sudo make install 43 | sudo ldconfig 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /installWebmin: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | 6 | cd /tmp 7 | sudo wget -t 5 http://www.webmin.com/jcameron-key.asc 8 | sudo apt-key add jcameron-key.asc 9 | echo "" | sudo tee -a /etc/apt/sources.list > /dev/null 10 | echo "deb http://download.webmin.com/download/repository sarge contrib" | sudo tee -a /etc/apt/sources.list > /dev/null 11 | sudo apt-get update 12 | sudo apt-get --yes install webmin 13 | -------------------------------------------------------------------------------- /installs/jailkit-2.19.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/installs/jailkit-2.19.tar.gz -------------------------------------------------------------------------------- /installs/vsftpd_3.0.3-3ubuntu2_amd64.deb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/installs/vsftpd_3.0.3-3ubuntu2_amd64.deb -------------------------------------------------------------------------------- /installs/vsftpd_3.0.3-3ubuntu2_i386.deb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/installs/vsftpd_3.0.3-3ubuntu2_i386.deb -------------------------------------------------------------------------------- /installs/xmlrpc-c-1.39.12.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/installs/xmlrpc-c-1.39.12.tgz -------------------------------------------------------------------------------- /iptodomain: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | 6 | IPADDRESS1=`ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p' | grep -v 127 | head -n 1` 7 | read -p "What is your domain name ? (without the http://): " DOMAIN 8 | 9 | sudo sed -i 's/$IPADDRESS1/$DOMAIN/g' /etc/apache2/sites-available/000-default.conf 10 | 11 | echo "Thats it, login to https://$DOMAIN/ " -------------------------------------------------------------------------------- /iso2mkv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | # License: Beerware 2017 6 | # Author: Xyberviri 7 | # Purpose: to make it easier to rip .iso files into .mkv files. 8 | # If you find this script useful you can buy me a beer here: https://www.paypal.me/xyberviri 9 | # wget https://pastebin.com/raw/SRHihAED -O- | tr -d '\r' >iso2mkv.sh;chmod +x iso2mkv.sh 10 | 11 | # Usage info 12 | show_help() { 13 | cat << EOF 14 | Usage: ${0##*/} [-hv] [-s STARTING TITLE] [-e ENDING TITLE] [-o OUTFILE OFFSET] [-f OUTFILE] [FILE]... 15 | Export titles from FILE to OUTFILE, FILE should be a .iso format. 16 | 17 | -h display this help and exit 18 | -f OUTFILE name out output file, DEFAULTS to the input FILE.mkv 19 | -s # starting title, DEFAULT 1 20 | -e # ending title, DEFAULTs to last title 21 | -o # offset the exported title to this, useful when dealing 22 | with multi dvd seasons. This option also forces OUTFILE##.mkv behaviour. 23 | -i inspect the .iso and lists title index, lengths and total title counts. 24 | 25 | ./iso2mkv.sh -e 4 -f SomeShowSeason1E dvd.iso 26 | ..exports titles 1 - 4 to files SomeShowSeason1E{01-04}.mkv 27 | 28 | ./iso2mkv.sh -s 5 -e 10 dvd.iso 29 | ..exports titles 5 - 10 to files dvd{05-10}.mkv 30 | 31 | ./iso2mkv.sh -e 10 -o 11 dvd2.iso 32 | ..exports titles 1 - 10 to files dvd2{11-20}.mkv 33 | 34 | ./iso2mkv.sh -e 1 dvd.iso 35 | ..exports titles 1 as dvd.mkv 36 | 37 | 38 | This script requires handbrake, install with the following: 39 | add-apt-repository ppa:stebbins/handbrake-releases 40 | apt-get update 41 | apt-get install handbrake-cli 42 | 43 | Customize the export on the very last line of the script 44 | Handbrake CLI here: 45 | https://handbrake.fr/docs/en/1.0.0/cli/cli-guide.html 46 | 47 | EOF 48 | } 49 | 50 | # Initialize our own variables: 51 | output_file="" 52 | verbose=0 53 | offset=0 54 | title_start=1 55 | title_end=0 56 | inspect=0 57 | autonumber=0 58 | 59 | OPTIND=1 60 | # Resetting OPTIND is necessary if getopts was used previously in the script. 61 | # It is a good idea to make OPTIND local if you process options in a function. 62 | 63 | while getopts hvif:o:s:e: opt; do 64 | case $opt in 65 | h) 66 | show_help 67 | exit 0 68 | ;; 69 | v) verbose=$((verbose+1)) 70 | ;; 71 | i) inspect=$((inspect+1)) 72 | ;; 73 | f) output_file=$OPTARG 74 | ;; 75 | o) offset=$OPTARG 76 | ((autonumber++)) 77 | ;; 78 | s) title_start=$OPTARG 79 | ;; 80 | e) title_end=$OPTARG 81 | ;; 82 | *) 83 | show_help >&2 84 | exit 1 85 | ;; 86 | esac 87 | done 88 | shift "$((OPTIND-1))" # Discard the options and sentinel -- 89 | 90 | #input file 91 | FILE="$@" 92 | if [ -f "$FILE" ] 93 | then 94 | printf 'iso2mkv: <%s>\n' "$FILE" 95 | else 96 | echo "File $FILE does not exist" >&2 97 | exit 0 98 | fi 99 | 100 | #output filename 101 | if [ -z $output_file ]; then 102 | output_file="$(echo $FILE | sed 's=.*/==;s/.iso//I')" 103 | fi 104 | 105 | #count number of titles in iso 106 | rawout=$(HandBrakeCLI --min-duration 0 -i $FILE -t 0 2>&1 >/dev/null) 107 | count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l) 108 | title_list=$(echo $rawout | grep -Eao "\\+ duration: [0-9]+:[0-9]+:[0-9]+"| sed 's/+\sduration://g') 109 | 110 | #inspect to spit out the title lengths so we know what titles we want to export. 111 | if [ $inspect -gt 0 ] 112 | then 113 | tIndex=1 114 | for title in $title_list; do 115 | printf 'Title: %2s %s\n' "$tIndex" "$title" 116 | ((tIndex++)) 117 | done 118 | exit 0 119 | fi 120 | 121 | #bound title end to max count 122 | if [ $title_end -lt 1 ] || [ $title_end -gt $count ] 123 | then 124 | title_end=$count 125 | fi 126 | 127 | #bound title_start to title_end 128 | if [ $title_start -gt $title_end ] 129 | then 130 | title_start=$title_end 131 | fi 132 | 133 | #set offset to 1 if we haven't overridden it. 134 | if [ $offset -lt 1 ] 135 | then 136 | offset=$title_start 137 | fi 138 | 139 | #enable auto numbering if exporting more then 1 title 140 | if [ $title_end -ne $title_start ] 141 | then 142 | ((autonumber++)) 143 | fi 144 | 145 | #set the file name 146 | filename="${output_file}.mkv" 147 | 148 | #loop from $title_start to $title_end 149 | for i in $(seq $title_start $title_end) 150 | do 151 | #override filename because we have more then one title, or -o was used. 152 | if [ $autonumber -gt 0 ] 153 | then 154 | filename="${output_file}$(printf "%02d" $offset).mkv" 155 | ((offset++)) 156 | fi 157 | echo -e "\tExtracting title $i as '${filename}'\n" 158 | HandBrakeCLI -i "$FILE" -t $i --preset Normal --output "${filename}" 159 | done -------------------------------------------------------------------------------- /ovhInstallScript.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | sudo apt-get install -y git 8 | cd /opt 9 | git clone https://github.com/thevisad/seedbox-from-scratch.git -------------------------------------------------------------------------------- /ovpni: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | OPENVPNPORT1=`cat /etc/seedbox-from-scratch/openvpn.info` 6 | IPADDRESS1=`ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p' | grep -v 127 | head -n 1` 7 | IP1=$(wget -qO- ipv4.icanhazip.com) 8 | 9 | newclient () { 10 | # Generates the client.ovpn 11 | cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/$1.ovpn 12 | sed -i "/ca ca.crt/d" ~/$1.ovpn 13 | sed -i "/cert client.crt/d" ~/$1.ovpn 14 | sed -i "/key client.key/d" ~/$1.ovpn 15 | echo "" >> ~/$1.ovpn 16 | cat /etc/openvpn/easy-rsa/2.0/keys/ca.crt >> ~/$1.ovpn 17 | echo "" >> ~/$1.ovpn 18 | echo "" >> ~/$1.ovpn 19 | cat /etc/openvpn/easy-rsa/2.0/keys/$1.crt >> ~/$1.ovpn 20 | echo "" >> ~/$1.ovpn 21 | echo "" >> ~/$1.ovpn 22 | cat /etc/openvpn/easy-rsa/2.0/keys/$1.key >> ~/$1.ovpn 23 | echo "" >> ~/$1.ovpn 24 | } 25 | # Try to get our IP from the system and fallback to the Internet. 26 | # I do this to make the script compatible with NATed servers (lowendspirit.com) 27 | # and to avoid getting an IPv6. 28 | IP=$(ifconfig | grep 'inet addr:' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | cut -d: -f2 | awk '{ print $1}' | head -1) 29 | if [[ "$IP" = "" ]]; then 30 | IP=$(wget -qO- ipv4.icanhazip.com) 31 | fi 32 | if [[ -e /etc/openvpn/server.conf ]]; then 33 | while : 34 | do 35 | clear 36 | echo "Looks like OpenVPN is already installed" 37 | echo "What do you want to do?" 38 | echo "" 39 | echo "1) Add a cert for a new user" 40 | echo "2) Revoke existing user cert" 41 | echo "3) Remove OpenVPN" 42 | echo "4) Exit" 43 | echo "" 44 | read -p "Select an option [1-4]: " option 45 | case $option in 46 | 1) 47 | echo "" 48 | echo "Tell me a name for the client cert" 49 | echo "Please, use one word only, no special characters" 50 | read -p "Client name: " -e -i client CLIENT 51 | cd /etc/openvpn/easy-rsa/2.0/ 52 | source ./vars 53 | # build-key for the client 54 | export KEY_CN="$CLIENT" 55 | export EASY_RSA="${EASY_RSA:-.}" 56 | "$EASY_RSA/pkitool" $CLIENT 57 | # Generate the client.ovpn 58 | newclient "$CLIENT" 59 | 60 | echo "" 61 | echo "$CLIENT.ovpn is zipped into $CLIENT.zip" 62 | echo "Client $CLIENT added, cert available at https://$IPADDRESS1/private/$CLIENT.zip to use in any OpenVPN client" 63 | sudo chown $CLIENT:$CLIENT *.ovpn 64 | zip $CLIENT.zip ~/$CLIENT.ovpn 65 | sudo mv $CLIENT.zip /home/$CLIENT/private 66 | exit 67 | ;; 68 | 2) 69 | echo "" 70 | echo "Tell me the existing client name" 71 | read -p "Client name: " -e -i client CLIENT 72 | cd /etc/openvpn/easy-rsa/2.0/ 73 | . /etc/openvpn/easy-rsa/2.0/vars 74 | . /etc/openvpn/easy-rsa/2.0/revoke-full $CLIENT 75 | # If it's the first time revoking a cert, we need to add the crl-verify line 76 | if grep -q "crl-verify" "/etc/openvpn/server.conf"; then 77 | echo "" 78 | echo "Certificate for client $CLIENT revoked" 79 | else 80 | echo "crl-verify /etc/openvpn/easy-rsa/2.0/keys/crl.pem" >> "/etc/openvpn/server.conf" 81 | /etc/init.d/openvpn restart 82 | echo "" 83 | echo "Certificate for client $CLIENT revoked" 84 | fi 85 | exit 86 | ;; 87 | 3) 88 | echo "" 89 | read -p "Do you really want to remove OpenVPN? [y/n]: " -e -i n REMOVE 90 | if [[ "$REMOVE" = 'y' ]]; then 91 | apt-get remove --purge -y openvpn openvpn-blacklist 92 | rm -rf /etc/openvpn 93 | rm -rf /usr/share/doc/openvpn 94 | sed -i '/--dport 53 -j REDIRECT --to-port/d' /etc/rc.local 95 | sed -i '/iptables -t nat -A POSTROUTING -s 10.8.0.0/d' /etc/rc.local 96 | echo "" 97 | echo "OpenVPN removed!" 98 | fi 99 | exit 100 | ;; 101 | 4) exit;; 102 | esac 103 | done 104 | else 105 | clear 106 | 107 | apt-get update 108 | apt-get install openvpn iptables openssl -y 109 | cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn 110 | # easy-rsa isn't available by default for Debian Jessie and newer 111 | if [[ ! -d /etc/openvpn/easy-rsa/2.0/ ]]; then 112 | wget --no-check-certificate -O ~/easy-rsa.tar.gz https://github.com/OpenVPN/easy-rsa/archive/2.2.2.tar.gz 113 | tar xzf ~/easy-rsa.tar.gz -C ~/ 114 | mkdir -p /etc/openvpn/easy-rsa/2.0/ 115 | cp ~/easy-rsa-2.2.2/easy-rsa/2.0/* /etc/openvpn/easy-rsa/2.0/ 116 | rm -rf ~/easy-rsa-2.2.2 117 | rm -rf ~/easy-rsa.tar.gz 118 | fi 119 | cd /etc/openvpn/easy-rsa/2.0/ 120 | # Let's fix one thing first... 121 | cp -u -p openssl-1.0.0.cnf openssl.cnf 122 | # Fuck you NSA - 1024 bits was the default for Debian Wheezy and older 123 | sed -i 's|export KEY_SIZE=1024|export KEY_SIZE=2048|' /etc/openvpn/easy-rsa/2.0/vars 124 | # Create the PKI 125 | . /etc/openvpn/easy-rsa/2.0/vars 126 | . /etc/openvpn/easy-rsa/2.0/clean-all 127 | # The following lines are from build-ca. I don't use that script directly 128 | # because it's interactive and we don't want that. Yes, this could break 129 | # the installation script if build-ca changes in the future. 130 | export EASY_RSA="${EASY_RSA:-.}" 131 | "$EASY_RSA/pkitool" --initca $* 132 | # Same as the last time, we are going to run build-key-server 133 | export EASY_RSA="${EASY_RSA:-.}" 134 | "$EASY_RSA/pkitool" --server server 135 | # Now the client keys. We need to set KEY_CN or the stupid pkitool will cry 136 | export KEY_CN="$CLIENT" 137 | export EASY_RSA="${EASY_RSA:-.}" 138 | "$EASY_RSA/pkitool" $CLIENT 139 | # DH params 140 | . /etc/openvpn/easy-rsa/2.0/build-dh 141 | # Let's configure the server 142 | cd /usr/share/doc/openvpn/examples/sample-config-files 143 | gunzip -d server.conf.gz 144 | cp server.conf /etc/openvpn/ 145 | cd /etc/openvpn/easy-rsa/2.0/keys 146 | cp ca.crt ca.key dh2048.pem server.crt server.key /etc/openvpn 147 | cd /etc/openvpn/ 148 | # Set the server configuration 149 | sed -i 's|dh dh1024.pem|dh dh2048.pem|' server.conf 150 | sed -i 's|;push "redirect-gateway def1 bypass-dhcp"|push "redirect-gateway def1 bypass-dhcp"|' server.conf 151 | sed -i "s|port 1194|port $OPENVPNPORT1|" server.conf 152 | # DNS 153 | sed -i 's|;push "dhcp-option DNS 208.67.222.222"|push "dhcp-option DNS 208.67.222.222"|' server.conf 154 | sed -i 's|;push "dhcp-option DNS 208.67.220.220"|push "dhcp-option DNS 208.67.220.220"|' server.conf 155 | 156 | # Listen at port 53 too if user wants that 157 | #if [[ "$ALTPORT" = 'y' ]]; then 158 | #iptables -t nat -A PREROUTING -p udp -d $IPADDRESS1 --dport 53 -j REDIRECT --to-port $OPENVPNPORT1 159 | #sed -i "1 a\iptables -t nat -A PREROUTING -p udp -d $IPADDRESS1 --dport 53 -j REDIRECT --to-port $OPENVPNPORT1" /etc/rc.local 160 | #fi 161 | # Enable net.ipv4.ip_forward for the system 162 | sed -i 's|#net.ipv4.ip_forward=1|net.ipv4.ip_forward=1|' /etc/sysctl.conf 163 | # Avoid an unneeded reboot 164 | echo 1 > /proc/sys/net/ipv4/ip_forward 165 | # Set iptables 166 | #if [[ "$INTERNALNETWORK" = 'y' ]]; then 167 | #iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IPADDRESS1 168 | #sed -i "1 a\iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IPADDRESS1" /etc/rc.local 169 | #else 170 | iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to $IPADDRESS1 171 | sed -i "1 a\iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to $IPADDRESS1" /etc/rc.local 172 | #fi 173 | # And finally, restart OpenVPN 174 | /etc/init.d/openvpn restart 175 | # Try to detect a NATed connection and ask about it to potential LowEndSpirit 176 | # users 177 | EXTERNALIP=$(wget -qO- ipv4.icanhazip.com) 178 | if [[ "$IPADDRESS1" != "$EXTERNALIP" ]]; then 179 | echo "" 180 | echo "Looks like your server is behind a NAT!" 181 | echo "" 182 | echo "If your server is NATed (LowEndSpirit), I need to know the external IP" 183 | echo "If that's not the case, just ignore this and leave the next field blank" 184 | read -p "External IP: " -e USEREXTERNALIP 185 | if [[ "$USEREXTERNALIP" != "" ]]; then 186 | IP=$USEREXTERNALIP 187 | fi 188 | fi 189 | # IP/port set on the default client.conf so we can add further users 190 | # without asking for them 191 | sed -i "s|remote my-server-1 1194|remote $IPADDRESS1 $OPENVPNPORT1|" /usr/share/doc/openvpn/examples/sample-config-files/client.conf 192 | # Generate the client.ovpn 193 | newclient "$CLIENT" 194 | 195 | echo "" 196 | echo "Finished!" 197 | echo "" 198 | echo "$CLIENT.ovpn is zipped into $CLIENT.zip" 199 | echo "Client $CLIENT added, cert available at https://$IPADDRESS1/private/$CLIENT.zip to use in any OpenVPN client" 200 | echo "" 201 | echo "If you want to add more clients, you simply need to run this script another time!" 202 | sudo chown $CLIENT:$CLIENT *.ovpn 203 | zip client.zip ~/client.ovpn 204 | sudo mv client.zip /var/www 205 | fi 206 | -------------------------------------------------------------------------------- /removeWebmin: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | sudo apt-get --yes purge webmin -------------------------------------------------------------------------------- /restartDelugeUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_deluge 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartFileManagerUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_filemanager 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartFileZillaUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_filezilla 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartLetsEncryptUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_letsencrypt 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartMySQLUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker restart ${USERNAME}_mysql 23 | if [[ -n $1 ]]; then 24 | echo "Last line of file specified as non-opt/last argument:" 25 | tail -1 $1 26 | fi -------------------------------------------------------------------------------- /restartPlexUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker restart ${USERNAME}_plex 23 | if [[ -n $1 ]]; then 24 | echo "Last line of file specified as non-opt/last argument:" 25 | tail -1 $1 26 | fi -------------------------------------------------------------------------------- /restartPureFTPDUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_pureftpd 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartRTorrentUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_rutorrent 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartRadarrUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_radarr 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartRapidLeechUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker restart ${USERNAME}_rapidleech 23 | if [[ -n $1 ]]; then 24 | echo "Last line of file specified as non-opt/last argument:" 25 | tail -1 $1 26 | fi -------------------------------------------------------------------------------- /restartSFTPServerUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_sftp 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartSabnzbdUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_sabnzbd 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartSickbeardUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_sickbeard 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartSickrageUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_sickrage 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartSonarrUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_sonarr 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartSyncThingUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker restart ${USERNAME}_syncthing 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /restartUbooquityUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_ubooquity 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /seedbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/seedbox.png -------------------------------------------------------------------------------- /seedbox.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/seedbox.psd -------------------------------------------------------------------------------- /sfsDecryptTemporaryEncryptedText: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | while [[ $# -gt 1 ]] 6 | do 7 | key="$1" 8 | 9 | case $key in 10 | -t|--text) 11 | TEXTVALUE="$2" 12 | shift # past argument 13 | ;; 14 | -p|--password) 15 | PASSWORD="$2" 16 | shift # past argument 17 | ;; 18 | *) 19 | # unknown option 20 | ;; 21 | esac 22 | shift # past argument or value 23 | done 24 | 25 | DECRYPTEDTEXT=$(echo ${TEXTVALUE} | openssl enc -aes-128-cbc -a -d -salt -pass pass:${PASSWORD}) 26 | echo ${DECRYPTEDTEXT} -------------------------------------------------------------------------------- /sfsEncryptTemporaryEncryptedText: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | while [[ $# -gt 1 ]] 6 | do 7 | key="$1" 8 | 9 | case $key in 10 | -t|--text) 11 | TEXTVALUE="$2" 12 | shift # past argument 13 | ;; 14 | -p|--password) 15 | PASSWORD="$2" 16 | shift # past argument 17 | ;; 18 | *) 19 | # unknown option 20 | ;; 21 | esac 22 | shift # past argument or value 23 | done 24 | 25 | ENCRYPTEDTEXT=$(echo ${TEXTVALUE} | openssl enc -aes-128-cbc -a -salt -pass pass:${PASSWORD}) 26 | echo ${ENCRYPTEDTEXT} -------------------------------------------------------------------------------- /sfsGenerateRandomPasswordString: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | #RANDOMPASS=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) # this is ansible blocking 6 | RANDOMPASS=$(tr -d -c "a-zA-Z0-9" < /dev/urandom | head -c 32) # nice random alphanumeric generator 7 | #RANDOMPASS=$(head -c24 < /dev/urandom | base64 -w0) # this adds + and / characters 8 | echo ${RANDOMPASS} -------------------------------------------------------------------------------- /sfsGenerateUserHtpassword: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | while [[ $# -gt 1 ]] 6 | do 7 | key="$1" 8 | 9 | case $key in 10 | -u|--username) 11 | USERNAME="$2" 12 | shift # past argument 13 | ;; 14 | *) 15 | # unknown option 16 | ;; 17 | esac 18 | shift # past argument or value 19 | done 20 | 21 | USERPASSWORD=$(echo "$(cat /etc/seedbox-from-scratch/users/${USERNAME}.info)" | grep "Password: " | head -n1 | awk '{print $2}') 22 | 23 | USERHASH=${USERNAME}:$(openssl passwd -apr1 "${USERPASSWORD}") 24 | 25 | echo $USERHASH -------------------------------------------------------------------------------- /sfsInstalledDockerInfo: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | while [[ $# -gt 1 ]] 6 | do 7 | key="$1" 8 | 9 | case $key in 10 | -d|--docker) 11 | DOCKER="$2" 12 | shift # past argument 13 | ;; 14 | *) 15 | # unknown option 16 | ;; 17 | esac 18 | shift # past argument or value 19 | done 20 | 21 | EXISTS=$(docker images -q docker-hngrutorrent 2> /dev/null) 22 | 23 | if [ ${#EXISTS} -ge 5 ]; then 24 | echo "INSTALLED" 25 | else 26 | echo "NOTINSTALLED" 27 | fi -------------------------------------------------------------------------------- /sfsOVHCorrectInstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | sudo systemctl stop docker 6 | mv /var/lib/docker/ /home/ 7 | ln -s /home/docker /var/lib/docker 8 | systemctl start docker -------------------------------------------------------------------------------- /sfsRunningUserDockerInfo: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | while [[ $# -gt 1 ]] 6 | do 7 | key="$1" 8 | 9 | case $key in 10 | -u|--user) 11 | USERNAME="$2" 12 | shift # past argument 13 | ;; 14 | -d|--docker) 15 | DOCKER="$2" 16 | shift # past argument 17 | ;; 18 | *) 19 | # unknown option 20 | ;; 21 | esac 22 | shift # past argument or value 23 | done 24 | 25 | STOPPED=$(docker ps --filter "status=exited" | grep $USERNAME | grep $DOCKER) 26 | RUNNING=$(docker ps | grep $USERNAME | grep $DOCKER) 27 | 28 | if [ ${#STOPPED} -ge 5 ]; then 29 | echo "STOPPED" 30 | else 31 | if [ ${#RUNNING} -ge 5 ]; then 32 | echo "RUNNING" 33 | else 34 | echo "NOTINSTALLED" 35 | fi 36 | fi 37 | -------------------------------------------------------------------------------- /sfsgetAvailablePort: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | while [[ $# -gt 1 ]] 6 | do 7 | key="$1" 8 | 9 | case $key in 10 | -sp|--startport) 11 | STARTPORT="$2" 12 | shift # past argument 13 | ;; 14 | -ep|--endport) 15 | ENDPORT="$2" 16 | shift # past argument 17 | ;; 18 | *) 19 | # unknown option 20 | ;; 21 | esac 22 | shift # past argument or value 23 | done 24 | 25 | CHECK="do while" 26 | while [[ ! -z $CHECK ]]; do 27 | PORT=$(awk -v min=${STARTPORT} -v max=${ENDPORT} 'BEGIN{srand(); print int(min+rand()*(max-min+1))}') 28 | CHECK=$(sudo netstat -ap | grep ${PORT}) 29 | done 30 | 31 | echo $PORT -------------------------------------------------------------------------------- /speedTEST: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | 6 | ./speedtest.py --share 7 | -------------------------------------------------------------------------------- /startDelugeUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_deluge 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startFileManagerUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_filemanager 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startFileZillaUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_filezilla 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startLetsEncryptUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker start ${USERNAME}_letsencrypt 23 | if [[ -n $1 ]]; then 24 | echo "Last line of file specified as non-opt/last argument:" 25 | tail -1 $1 26 | fi -------------------------------------------------------------------------------- /startMySQLUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_mysql 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startPlexUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_plex 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startPureFTPDUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_pureftpd 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startRTorrentUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_rutorrent 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startRadarrUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_radarr 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startRapidLeechUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_rapidleech 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startSFTPServerUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_sftp 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startSabnzbdUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_sabnzbd 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startSickbeardUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_sickbeard 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startSickrageUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_sickrage 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startSonarrUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_sonarr 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startSyncThingUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_syncthing 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startUbooquityUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_ubooquity 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /startUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | -d|--dockername) 17 | DOCKERNAME="$2" 18 | shift # past argument 19 | ;; 20 | *) 21 | # unknown option 22 | ;; 23 | esac 24 | shift # past argument or value 25 | done 26 | echo USERNAME = "${USERNAME}" 27 | sudo docker start ${USERNAME}_${DOCKERNAME} 28 | if [[ -n $1 ]]; then 29 | echo "Last line of file specified as non-opt/last argument:" 30 | tail -1 $1 31 | fi -------------------------------------------------------------------------------- /stopDelugeUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_deluge 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopFileManagerUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_filemanager 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopFileZillaUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_filezilla 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopLetsEncryptUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_letsencrypt 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopMySQLUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker stop ${USERNAME}_mysql 23 | if [[ -n $1 ]]; then 24 | echo "Last line of file specified as non-opt/last argument:" 25 | tail -1 $1 26 | fi -------------------------------------------------------------------------------- /stopPlexUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker stop ${USERNAME}_plex 23 | if [[ -n $1 ]]; then 24 | echo "Last line of file specified as non-opt/last argument:" 25 | tail -1 $1 26 | fi -------------------------------------------------------------------------------- /stopPureFTPDUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_pureftpd 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopRTorrentUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_rutorrent 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopRadarrUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_radarr 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopRapidLeechUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | while [[ $# -gt 1 ]] 7 | do 8 | key="$1" 9 | 10 | case $key in 11 | -u|--user) 12 | USERNAME="$2" 13 | shift # past argument 14 | ;; 15 | *) 16 | # unknown option 17 | ;; 18 | esac 19 | shift # past argument or value 20 | done 21 | echo USERNAME = "${USERNAME}" 22 | sudo docker stop ${USERNAME}_rapidleech 23 | if [[ -n $1 ]]; then 24 | echo "Last line of file specified as non-opt/last argument:" 25 | tail -1 $1 26 | fi -------------------------------------------------------------------------------- /stopSFTPServerUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_sftp 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopSabnzbdUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_sabnzbd 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopSickbeardUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_sickbeard 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopSickrageUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_sickrage 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopSonarrUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_sonarr 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopSyncThingUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker stop ${USERNAME}_syncthing 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopUbooquityUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | *) 17 | # unknown option 18 | ;; 19 | esac 20 | shift # past argument or value 21 | done 22 | echo USERNAME = "${USERNAME}" 23 | sudo docker start ${USERNAME}_ubooquity 24 | if [[ -n $1 ]]; then 25 | echo "Last line of file specified as non-opt/last argument:" 26 | tail -1 $1 27 | fi -------------------------------------------------------------------------------- /stopUserDocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | while [[ $# -gt 1 ]] 8 | do 9 | key="$1" 10 | 11 | case $key in 12 | -u|--user) 13 | USERNAME="$2" 14 | shift # past argument 15 | ;; 16 | -d|--dockername) 17 | DOCKERNAME="$2" 18 | shift # past argument 19 | ;; 20 | *) 21 | # unknown option 22 | ;; 23 | esac 24 | shift # past argument or value 25 | done 26 | echo USERNAME = "${USERNAME}" 27 | sudo docker stop ${USERNAME}_${DOCKERNAME} 28 | if [[ -n $1 ]]; then 29 | echo "Last line of file specified as non-opt/last argument:" 30 | tail -1 $1 31 | fi -------------------------------------------------------------------------------- /templates/docker.nginx.conf.template: -------------------------------------------------------------------------------- 1 | user abc; 2 | worker_processes 1; 3 | pid /run/nginx.pid; 4 | 5 | events { 6 | worker_connections 768; 7 | # multi_accept on; 8 | } 9 | 10 | http { 11 | upstream backendrutorrent { 12 | server unix:/run/php/php-fpm-rutorrent.sock; 13 | } 14 | upstream backendrtorrent { 15 | server unix:/run/php/.rtorrent.sock; 16 | } 17 | 18 | ## 19 | # Basic Settings 20 | ## 21 | 22 | sendfile on; 23 | tcp_nopush on; 24 | tcp_nodelay on; 25 | keepalive_timeout 65; 26 | types_hash_max_size 2048; 27 | # server_tokens off; 28 | 29 | # server_names_hash_bucket_size 64; 30 | # server_name_in_redirect off; 31 | 32 | client_max_body_size 0; 33 | client_body_temp_path /tmp 1 2; 34 | 35 | include /etc/nginx/mime.types; 36 | default_type application/octet-stream; 37 | 38 | server { 39 | listen 80 default_server; 40 | listen 443 ssl; 41 | ssl_certificate /etc/ssl/certs/cert.pem; 42 | ssl_certificate_key /etc/ssl/certs/key.pem; 43 | root /var/www/localhost/rutorrent; 44 | index index.html index.htm index.php; 45 | 46 | server_name _; 47 | client_max_body_size 0; 48 | 49 | location / { 50 | access_log /config/log/nginx/rutorrent.access.log; 51 | error_log /config/log/nginx/rutorrent.error.log; 52 | location ~ .php$ { 53 | fastcgi_split_path_info ^(.+\.php)(.*)$; 54 | fastcgi_pass backendrutorrent; 55 | fastcgi_index index.php; 56 | fastcgi_intercept_errors on; 57 | fastcgi_ignore_client_abort off; 58 | fastcgi_connect_timeout 60; 59 | fastcgi_send_timeout 180; 60 | fastcgi_read_timeout 180; 61 | fastcgi_buffer_size 128k; 62 | fastcgi_buffers 4 256k; 63 | fastcgi_busy_buffers_size 256k; 64 | fastcgi_temp_file_write_size 256k; 65 | include /etc/nginx/fastcgi_params; 66 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 67 | auth_basic "RuTorrent Area"; 68 | auth_basic_user_file /usr/share/webapps/.htpasswd; 69 | } 70 | } 71 | 72 | location /RPC2 { 73 | access_log /config/log/nginx/rutorrent.rpc2.access.log; 74 | error_log /config/log/nginx/rutorrent.rpc2.error.log; 75 | include /etc/nginx/scgi_params; 76 | scgi_pass backendrtorrent; 77 | } 78 | } 79 | 80 | ## 81 | # Gzip Settings 82 | ## 83 | 84 | gzip on; 85 | gzip_disable "msie6"; 86 | 87 | # gzip_vary on; 88 | # gzip_proxied any; 89 | # gzip_comp_level 6; 90 | # gzip_buffers 16 8k; 91 | # gzip_http_version 1.1; 92 | # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 93 | 94 | ## 95 | # Virtual Host Configs 96 | ## 97 | include /etc/nginx/conf.d/*.conf; 98 | # include /defaults/site-confs/*; 99 | } 100 | daemon off; 101 | -------------------------------------------------------------------------------- /templates/etc.apache2.default.template: -------------------------------------------------------------------------------- 1 | 2 | ServerAdmin webmaster@localhost 3 | ServerName 4 | DocumentRoot /var/www/ 5 | RewriteEngine On 6 | RewriteCond %{HTTPS} off 7 | RewriteCond %{REQUEST_URI} !^\/share\/ 8 | RewriteRule (.*) https://%{HTTP_HOST}:443%{REQUEST_URI} 9 | RewriteCond %{LA-U:remote_user} !^$ 10 | RewriteRule ^/private(.*) /home/%{LA-U:remote_user}/private$1 11 | 12 | 13 | Options FollowSymLinks 14 | AllowOverride All 15 | 16 | 17 | 18 | Options Indexes FollowSymLinks MultiViews 19 | IndexOptions +FancyIndexing +SuppressDescription 20 | AllowOverride None 21 | Order allow,deny 22 | allow from all 23 | AuthType Digest 24 | AuthName "documentroot" 25 | AuthDigestProvider file 26 | AuthUserFile /etc/apache2/htpasswd 27 | Require user 28 | 29 | 30 | 31 | Options Indexes FollowSymLinks MultiViews 32 | IndexOptions +FancyIndexing +SuppressDescription 33 | AuthType Digest 34 | AuthName "private" 35 | AuthDigestDomain /var/www/private 36 | AuthDigestProvider file 37 | AuthUserFile /etc/apache2/htpasswd 38 | Require valid-user 39 | 40 | 41 | ErrorLog /var/log/apache2/error.log 42 | 43 | # Possible values include: debug, info, notice, warn, error, crit, 44 | # alert, emerg. 45 | 46 | LogLevel warn 47 | 48 | CustomLog /var/log/apache2/access.log combined 49 | 50 | 51 | 52 | ServerAdmin webmaster@localhost 53 | ServerName 54 | SSLEngine on 55 | SSLCertificateFile /etc/seedbox-from-scratch/ssl/cert.pem 56 | SSLCertificateKeyFile /etc/seedbox-from-scratch/ssl/key.pem 57 | DocumentRoot /var/www/ 58 | RewriteEngine On 59 | RewriteCond %{LA-U:remote_user} !^$ 60 | RewriteRule ^/private(.*) /home/%{LA-U:remote_user}/private$1 61 | 62 | 63 | Options FollowSymLinks 64 | AllowOverride All 65 | 66 | 67 | 68 | Options Indexes FollowSymLinks MultiViews 69 | IndexOptions +FancyIndexing +SuppressDescription 70 | AllowOverride None 71 | Order allow,deny 72 | allow from all 73 | AuthType Digest 74 | AuthName "documentroot" 75 | AuthDigestProvider file 76 | AuthUserFile /etc/apache2/htpasswd 77 | Require user 78 | 79 | 80 | 81 | Options Indexes FollowSymLinks MultiViews 82 | IndexOptions +FancyIndexing +SuppressDescription 83 | AuthType Digest 84 | AuthName "private" 85 | AuthDigestDomain /var/www/private 86 | AuthDigestProvider file 87 | AuthUserFile /etc/apache2/htpasswd 88 | Require valid-user 89 | 90 | 91 | ErrorLog /var/log/apache2/error.log 92 | # Possible values include: debug, info, notice, warn, error, crit, 93 | # alert, emerg. 94 | LogLevel warn 95 | 96 | CustomLog /var/log/apache2/access.log combined 97 | 98 | -------------------------------------------------------------------------------- /templates/etc.jailkit.jk_init.ini.template: -------------------------------------------------------------------------------- 1 | [rtorrent] 2 | comment = rtorrent 3 | paths = /usr/bin/rtorrent 4 | 5 | [irssi] 6 | comment = irssi 7 | paths = /usr/bin/irssi 8 | 9 | [screen] 10 | comment = files and devices for screen 11 | groups = tty 12 | executables = /usr/bin/screen, /usr/bin/dircolors 13 | paths_w_owner = /usr/share/terminfo, /dev/pts, /var/run/screen 14 | devices = /dev/ptypa, /dev/ttypa, /dev/ptmx, /dev/null 15 | 16 | [id] 17 | comment = id 18 | paths = /usr/bin/id 19 | 20 | [php] 21 | comment = php 22 | paths = /usr/bin/php 23 | 24 | [pgrep] 25 | comment = pgrep 26 | paths = /usr/bin/pgrep 27 | 28 | [mediainfo] 29 | comment = mediainfo 30 | paths = /usr/local/bin/mediainfo 31 | 32 | [ffmpeg] 33 | comment = ffmpeg 34 | paths = /usr/bin/ffmpeg 35 | 36 | [curl] 37 | comment = curl 38 | paths = /usr/bin/curl 39 | 40 | [plowup] 41 | comment = plowup 42 | paths = /usr/bin/plowup 43 | 44 | [unzip] 45 | comment = unzip 46 | paths = /usr/bin/unzip 47 | 48 | [unrar] 49 | comment = unrar 50 | paths = /usr/bin/unrar 51 | 52 | [ping] 53 | comment = ping 54 | paths = /bin/ping 55 | 56 | [wget] 57 | comment = wget 58 | paths = /usr/bin/wget 59 | 60 | [dig] 61 | comment = dig 62 | paths = /usr/bin/dig 63 | 64 | [nslookup] 65 | comment = nslookup 66 | paths = /usr/bin/nslookup 67 | 68 | [openssl] 69 | comment = openssl 70 | paths = /usr/bin/openssl 71 | 72 | [groups] 73 | comment = groups 74 | paths = /usr/bin/groups 75 | 76 | [pkill] 77 | comment = pkill 78 | paths = /usr/bin/pkill 79 | -------------------------------------------------------------------------------- /templates/home.user.autodl.autodl.cfg.template: -------------------------------------------------------------------------------- 1 | [options] 2 | gui-server-port = 3 | gui-server-password = 4 | rt-dir = ~/downloads/auto 5 | rt-label = irssi-autoload 6 | upload-type = rtorrent 7 | -------------------------------------------------------------------------------- /templates/index.html.template: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /templates/mtn.sh.template: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for i in *.wmv; 3 | do mtn "${i}" -f /usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf -c 3 -r 3 -s 300; 4 | done; 5 | for i in *.mkv; 6 | do mtn "${i}" -f /usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf -c 3 -r 3 -s 300; 7 | done; 8 | for i in *.mp4; 9 | do mtn "${i}" -f /usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf -c 3 -r 3 -s 300; 10 | done; 11 | for i in *.avi; 12 | do mtn "${i}" -f /usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf -c 3 -r 3 -s 300; 13 | done; -------------------------------------------------------------------------------- /templates/my.cnf.template: -------------------------------------------------------------------------------- 1 | # 2 | # FromDual configuration file template for MySQL, Galera Cluster, MariaDB and Percona Server 3 | # Location: /etc/my.cnf or /etc/mysql/my.cnf 4 | # This template is intended to work with MySQL 5.6 and newer and MariaDB 10.0 and newer 5 | # Get most recent updated from here: 6 | # http://www.fromdual.com/mysql-configuration-file-sample 7 | # 8 | 9 | [client] 10 | 11 | port = 3306 12 | socket = /var/run/mysqld/mysql.sock 13 | 14 | 15 | [mysql] 16 | 17 | no_auto_rehash 18 | max_allowed_packet = 16M 19 | prompt = '\u@\h [\d]> ' 20 | default_character_set = utf8 # Possibly this setting is correct for most recent Linux systems 21 | 22 | 23 | [mysqldump] 24 | 25 | max_allowed_packet = 16M 26 | 27 | 28 | [mysqld_safe] 29 | 30 | open_files_limit = 8192 # You possibly have to adapt your O/S settings as well 31 | user = mysql 32 | log-error = <hostname>_error.log 33 | 34 | 35 | [mysqld] 36 | 37 | # Connection and Thread variables 38 | 39 | port = 3306 40 | socket = /var/run/mysqld/mysql.sock 41 | # basedir = /usr 42 | # datadir = /var/lib/mysql 43 | # tmpdir = /tmp 44 | 45 | max_allowed_packet = 16M 46 | default_storage_engine = InnoDB 47 | # explicit_defaults_for_timestamp = 1 # MySQL 5.6, test carefully! This can have an impact on application. 48 | 49 | # character_set_server = utf8 # If you prefer utf8 50 | # collation_server = utf8_general_ci 51 | 52 | 53 | max_connections = 505 # Values < 1000 are typically good 54 | max_user_connections = 500 # Limit one specific user/application 55 | thread_cache_size = 505 # Up to max_connections makes sense 56 | 57 | 58 | # Query Cache 59 | 60 | query_cache_type = 1 # Set to 0 to avoid global QC Mutex 61 | query_cache_size = 32M # Avoid too big (> 128M) QC because of QC clean-up lock! 62 | 63 | 64 | # Session variables 65 | 66 | sort_buffer_size = 2M # Could be too big for many small sorts 67 | tmp_table_size = 32M # Make sure your temporary results do NOT contain BLOB/TEXT attributes 68 | 69 | read_buffer_size = 128k # Resist to change this parameter if you do not know what you are doing 70 | read_rnd_buffer_size = 256k # Resist to change this parameter if you do not know what you are doing 71 | join_buffer_size = 128k # Resist to change this parameter if you do not know what you are doing 72 | 73 | 74 | # Other buffers and caches 75 | 76 | table_definition_cache = 1400 # As big as many tables you have 77 | table_open_cache = 2000 # connections x tables/connection (~2) 78 | table_open_cache_instances = 16 # New default in 5.7 79 | 80 | 81 | # MySQL error log 82 | 83 | log_error = <hostname>_error.log 84 | # log_timestamps = SYSTEM # MySQL 5.7, equivalent to old behaviour 85 | log_warnings = 2 86 | # log_error_verbosity = 3 # MySQL 5.7, equivalent to log_warnings = 2 87 | # innodb_print_all_deadlocks = 1 88 | # wsrep_log_conflicts = 1 # for Galera only! 89 | 90 | 91 | # Slow Query Log 92 | 93 | slow_query_log_file = <hostname>_slow.log 94 | slow_query_log = 0 95 | log_queries_not_using_indexes = 0 96 | long_query_time = 0.5 97 | min_examined_row_limit = 100 98 | 99 | 100 | # General Query Log 101 | 102 | general_log_file = <hostname>_general.log 103 | general_log = 0 104 | 105 | 106 | # Performance Schema 107 | 108 | # performance_schema = ON # on some older MariaDB 10 releases 109 | performance_schema_consumer_events_statements_history_long = ON # MySQL 5.6 and newer 110 | 111 | 112 | # Binary logging and Replication 113 | 114 | server_id = 42 115 | log_bin = <hostname>_binlog # Locate outside of datadir 116 | # master_verify_checksum = ON # MySQL 5.6 117 | binlog_cache_size = 1M 118 | binlog_stmt_cache_size = 1M 119 | max_binlog_size = 128M # Make bigger for high traffic to reduce number of files 120 | sync_binlog = 0 # Set to 1 or higher to reduce potential loss of binary-log data 121 | expire_logs_days = 5 # We will survive easter holidays 122 | binlog_format = ROW # Use MIXED if you experience some troubles 123 | # binlog_row_image = MINIMAL # Since 5.6 124 | # auto_increment_increment = 2 # For Master/Master set-ups use 2 for both nodes 125 | # auto_increment_offset = 1 # For Master/Master set-ups use 1 and 2 126 | 127 | 128 | # Slave variables 129 | 130 | log_slave_updates = 1 # Use if Slave is used for Backup and PiTR 131 | read_only = 0 # Set to 1 to prevent writes on Slave 132 | # super_read_only = 0 # Set to 1 to prevent writes on Slave for users with SUPER privilege. Since 5.7 133 | # skip_slave_start = 1 # To avoid start of Slave thread 134 | # relay_log = <hostname>-relay-bin 135 | # relay_log_info_repository = table # MySQL 5.6 136 | # master_info_repository = table # MySQL 5.6 137 | # slave_load_tmpdir = '/tmp' 138 | 139 | 140 | # Security variables 141 | 142 | # local_infile = 0 # If you are security aware 143 | # secure_auth = 1 # If you are security aware 144 | # sql_mode = TRADITIONAL,ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER # Be careful changing this afterwards 145 | # skip_name_resolve = 0 # Set to 1 if you do not trust your DNS or experience problems 146 | # secure_file_priv = '/tmp' # chmod 750 147 | 148 | 149 | # MyISAM variables 150 | 151 | key_buffer_size = 8M # Set to 25 - 33 % of RAM if you still use MyISAM 152 | myisam_recover_options = 'BACKUP,FORCE' 153 | # disabled_storage_engines = 'MyISAM' # MySQL 5.7, do NOT during/before mysql_upgrade 154 | 155 | 156 | # MEMORY variables 157 | 158 | max_heap_table_size = 64M # Should be greater or equal to tmp_table_size 159 | 160 | 161 | # InnoDB variables 162 | 163 | innodb_strict_mode = ON 164 | innodb_file_format_check = 1 165 | # innodb_file_format = Barracuda # For dynamic and compressed InnoDB tables 166 | innodb_buffer_pool_size = 128M # Go up to 80% of your available RAM 167 | innodb_buffer_pool_instances = 8 # Bigger if huge InnoDB Buffer Pool or high concurrency 168 | 169 | innodb_file_per_table = 1 # Is the recommended way nowadays 170 | # innodb_flush_method = O_DIRECT # O_DIRECT is sometimes better for direct attached storage 171 | # innodb_write_io_threads = 8 # If you have a strong I/O system or SSD 172 | # innodb_read_io_threads = 8 # If you have a strong I/O system or SSD 173 | # innodb_io_capacity = 1000 # If you have a strong I/O system or SSD 174 | 175 | innodb_flush_log_at_trx_commit = 2 # 1 for durability, 0 or 2 for performance 176 | innodb_log_buffer_size = 8M # Bigger if innodb_flush_log_at_trx_commit = 0 177 | innodb_log_file_size = 256M # Bigger means more write throughput but longer recovery time 178 | 179 | 180 | # Galera specific MySQL parameter 181 | 182 | # default_storage_engine = InnoDB # Galera only works with InnoDB 183 | # innodb_flush_log_at_trx_commit = 2 # Durability is achieved by committing to the Group 184 | # innodb_autoinc_lock_mode = 2 # For parallel applying 185 | # binlog_format = row # Galera only works with RBR 186 | # query_cache_type = 0 # Use QC with Galera only in a Master/Slave set-up 187 | # query_cache_size = 0 188 | 189 | 190 | # WSREP parameter 191 | 192 | # wsrep_on = on # Only MariaDB >= 10.1 193 | # wsrep_provider = none # Start mysqld without Galera 194 | # wsrep_provider = /usr/lib/galera/libgalera_smm.so # Location of Galera Plugin on Ubuntu ? 195 | # wsrep_provider = /usr/lib64/galera-3/libgalera_smm.so # Location of Galera Plugin on CentOS 7 196 | # wsrep_provider_options = 'gcache.size = 1G' # Depends on you workload, WS kept for IST 197 | 198 | # wsrep_cluster_name = "My cool Galera Cluster" # Same Cluster name for all nodes 199 | # wsrep_cluster_address = "gcomm://" # Old bootstrap method 200 | # wsrep_cluster_address = "gcomm://192.168.0.2,192.168.0.3" # Start other nodes like this 201 | 202 | # wsrep_node_name = "Node A" # Unique node name 203 | # wsrep_node_address = 192.168.0.1 # Our address where replication is done 204 | # wsrep_node_incoming_address = 10.0.0.1 # Our external interface where application comes from 205 | # wsrep_sync_wait = 1 # If you need realy full-synchronous replication (Galera 3.6 and newer) 206 | # wsrep_slave_threads = 16 # 4 - 8 per core, not more than wsrep_cert_deps_distance 207 | 208 | # wsrep_sst_method = rsync # SST method (initial full sync): mysqldump, rsync, rsync_wan, xtrabackup-v2 209 | # wsrep_sst_auth = sst:secret # Username/password for sst user 210 | # wsrep_sst_receive_address = 192.168.0.1 # Our address where to receive SST 211 | 212 | -------------------------------------------------------------------------------- /templates/root.ca.cacert.conf.template: -------------------------------------------------------------------------------- 1 | # 2 | # 3 | # The Seedbox From Scratch Script 4 | # ---> https://github.com/thevisad/ 5 | # 6 | # 7 | ## See Readme.md for License ### 8 | # 9 | # 10 | # OpenSSL configuration file. 11 | # 12 | # --> http://www.eclectica.ca/howto/ssl-cert-howto.php 13 | # 14 | 15 | [ ca ] 16 | default_ca = local_ca 17 | 18 | [ local_ca ] 19 | dir = . 20 | certificate = $dir/cacert.pem 21 | certopt = default_ca 22 | database = $dir/index.txt 23 | default_crl_days = 365 24 | default_days = 1825 25 | default_md = sha256 26 | email_in_dn = no 27 | nameopt = default_ca 28 | new_certs_dir = $dir/newcerts 29 | policy = local_ca_policy 30 | preserve = no 31 | private_key = $dir/private/cakey.pem 32 | serial = $dir/serial 33 | x509_extensions = local_ca_extensions 34 | 35 | [ local_ca_policy ] 36 | commonName = supplied 37 | stateOrProvinceName = supplied 38 | countryName = supplied 39 | emailAddress = supplied 40 | organizationName = supplied 41 | organizationalUnitName = supplied 42 | 43 | [ local_ca_extensions ] 44 | subjectAltName = IP: 45 | basicConstraints = CA:false 46 | nsCertType = server 47 | 48 | [ req ] 49 | default_bits = 2048 50 | default_keyfile = key.pem 51 | default_md = sha256 52 | string_mask = nombstr # permitted characters 53 | distinguished_name = req_distinguished_name 54 | prompt = no 55 | x509_extensions = root_ca_extensions 56 | req_extensions = v3_req 57 | 58 | [ root_ca_distinguished_name ] 59 | commonName = 60 | stateOrProvinceName = NU 61 | countryName = UN 62 | emailAddress = root@.com 63 | organizationName = The Company 64 | organizationalUnitName = 65 | 66 | [ root_ca_extensions ] 67 | basicConstraints = CA:true 68 | 69 | [ req_distinguished_name ] 70 | 0.organizationName = The Company 71 | organizationalUnitName = OU 72 | emailAddress = server@.com 73 | localityName = City of 74 | stateOrProvinceName = State of 75 | countryName = UN 76 | commonName = 77 | 78 | [ v3_ca ] 79 | basicConstraints = CA:TRUE 80 | subjectKeyIdentifier = hash 81 | authorityKeyIdentifier = keyid:always,issuer:always 82 | 83 | [ v3_req ] 84 | basicConstraints = CA:FALSE 85 | subjectKeyIdentifier = hash 86 | -------------------------------------------------------------------------------- /templates/rtorrent.rc.template: -------------------------------------------------------------------------------- 1 | ##################################################################### 2 | # 3 | # The Seedbox From Scratch Script 4 | # ---> https://github.com/thevisad/ 5 | # 6 | # 7 | ## See Readme.md for License ### 8 | 9 | max_downloads_global = 0 10 | max_uploads_global = 0 11 | min_peers = 50 12 | max_peers = 200 13 | min_peers_seed = 50 14 | max_peers_seed = 200 15 | 16 | max_uploads = 50 17 | 18 | download_rate = 0 19 | upload_rate = 0 20 | 21 | directory = /home//downloads/manual 22 | 23 | session = /home//downloads/.session 24 | port_range = 99888-99888 25 | port_random = no 26 | 27 | # Directories 28 | schedule = watch_directory,5,5,load_start=/home//downloads/watch/*.torrent 29 | schedule = tied_directory,5,5,start_tied= 30 | schedule = untied_directory,5,5,stop_untied= 31 | schedule = low_diskspace,5,10,close_low_diskspace=2000M 32 | 33 | # Networking 34 | # network.scgi.open_port = localhost:5000 35 | network.scgi.open_port = 127.0.0.1:5995 36 | # scgi_port = 127.0.0.1:5000 37 | network.http.ssl_verify_peer.set=0 38 | 39 | use_udp_trackers = yes 40 | encryption = allow_incoming,try_outgoing,enable_retry 41 | network.max_open_files.set = 2500 42 | #network.max_open_sockets.set = 1536 43 | network.http.max_open.set = 256 44 | network.send_buffer.size.set = 1M 45 | network.receive_buffer.size.set = 1M 46 | dht = disable 47 | peer_exchange = no 48 | 49 | check_hash = no 50 | pieces.preload.type.set = 1 51 | max_memory_usage = 3500M 52 | 53 | system.file_allocate.set = yes 54 | 55 | # The following line initialises rutorrent plugins without needing to open the web interface 56 | execute = {sh,-c,/usr/bin/php /var/www/rutorrent/php/initplugins.php &} 57 | 58 | -------------------------------------------------------------------------------- /templates/rutorrent.conf.users.plugins.autodl-irssi.conf.php.template: -------------------------------------------------------------------------------- 1 | https://github.com/thevisad/ 7 | /// 8 | /// 9 | ///## See Readme.md for License ### 10 | 11 | $autodlPort = ; 12 | $autodlPassword = ""; 13 | 14 | ?> 15 | -------------------------------------------------------------------------------- /templates/rutorrent.plugins.filemanager.conf.php.template: -------------------------------------------------------------------------------- 1 | https://github.com/thevisad/ 7 | /// 8 | /// 9 | ///## See Readme.md for License ### 10 | 11 | 12 | $fm["tempdir"] = "/tmp"; // path were to store temporary data ; must be writable 13 | $fm["mkdperm"] = 755; // default permission to set to new created directories 14 | 15 | // set with fullpath to binary or leave empty 16 | $pathToExternals["zip"] = "/usr/bin/zip"; 17 | $pathToExternals["unzip"] = "/usr/bin/unzip"; 18 | $pathToExternals["tar"] = "/bin/tar"; 19 | $pathToExternals["bzip2"] = "/usr/bin/bzip2"; 20 | 21 | // archive mangling, see archiver man page before editing 22 | $fm["archive"]["types"] = array( "zip","tar", "gzip", "bzip2"); 23 | 24 | $fm["archive"]["compress"][0] = range(0, 5); 25 | $fm["archive"]["compress"][1] = array("-0", "-1", "-9"); 26 | $fm["archive"]["compress"][2] = $fm["archive"]["compress"][3] = $fm["archive"]["compress"][4] = array(0); 27 | 28 | ?> 29 | -------------------------------------------------------------------------------- /templates/rutorrent.plugins.fileshare.conf.php.template: -------------------------------------------------------------------------------- 1 | https://github.com/thevisad/ 7 | /// 8 | /// 9 | ///## See Readme.md for License ### 10 | 11 | // limits 12 | // 0 = unlimited 13 | $limits['duration'] = 12; // maximum duration hours 14 | $limits['links'] = 0; //maximum sharing links per user 15 | 16 | // path on domain where a symlink to share.php can be found 17 | // example: http://mydomain.com/share.php 18 | $downloadpath = 'http:///share/share.php'; 19 | 20 | ?> -------------------------------------------------------------------------------- /templates/seedboxInfo.php.template: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

The Seedbox From Scratch Script v

5 |

User list

6 | $file) { 13 | $data = explode(".", $file); 14 | if ($data[1] == 'info') { 15 | printUser($dir,$data[0]); 16 | } 17 | } 18 | 19 | function printUser($dir,$user) { 20 | echo "

$user

"; 21 | $data = file($dir."$user.info"); 22 | foreach($data as $index=>$line) { 23 | $line = makelink($line); 24 | echo $line; 25 | } 26 | } 27 | 28 | function makelink($input) { 29 | $parse = explode(' ', $input); 30 | $input = ""; 31 | foreach ($parse as $token) { 32 | $br = "
"; 33 | if (strpos($token, "://") > 0) { 34 | $input .= '' . $token . ' '; 35 | } else if(substr($token, 1, 3) == '---') { 36 | $input .= "
"; 37 | $br = ""; 38 | } else { 39 | $input .= $token." "; 40 | } 41 | } 42 | return trim($input.$br); 43 | } 44 | 45 | function getScriptVersion() { 46 | $data = file("/etc/seedbox-from-scratch/version.info"); 47 | return $data[0]; 48 | } 49 | ?> 50 | 51 |
-------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | 5 | 6 | for f in /etc/seedbox-from-scratch/users/*.info; do 7 | f=${f##*/} 8 | printf ${f%.info} 9 | done 10 | -------------------------------------------------------------------------------- /updateInstalledScripts: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | cd /opt/seedbox-from-scratch/ 7 | git stash 8 | git pull 9 | 10 | rsync -avz --exclude='/.git' /opt/seedbox-from-scratch/ /etc/seedbox-from-scratch/ 11 | cp /etc/seedbox-from-scratch/templates/index.html.template /var/www/index.html 12 | 13 | for f in /etc/seedbox-from-scratch/users/*.info; do 14 | f=${f##*/} 15 | rsync -avz --exclude='/.git' /opt/seedbox-from-scratch/webserver/ /home/${f%.info}/private/ 16 | done -------------------------------------------------------------------------------- /updateSeedBoxServices: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | COUNT=$(grep -o "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/updatePlexUserDocker" "/etc/sudoers"| wc -l) 7 | if [[ $COUNT -gt 1 ]] ; then 8 | sed -i "/www-data ALL=(ALL) NOPASSWD: \/etc\/seedbox-from-scratch\/updatePlexUserDocker/d" /etc/sudoers 9 | else 10 | echo "Nothing to do" > /dev/nul 11 | fi 12 | 13 | if grep -q "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsDecryptTemporaryEncryptedText" "/etc/sudoers"; then 14 | echo "Nothing to do" > /dev/nul 15 | else 16 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsDecryptTemporaryEncryptedText" | tee -a /etc/sudoers > /dev/null 17 | fi 18 | 19 | if grep -q "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsEncryptTemporaryEncryptedText" "/etc/sudoers"; then 20 | echo "Nothing to do" > /dev/nul 21 | else 22 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsEncryptTemporaryEncryptedText" | tee -a /etc/sudoers > /dev/null 23 | fi 24 | 25 | if grep -q "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsGenerateRandomPasswordString" "/etc/sudoers"; then 26 | echo "Nothing to do" > /dev/nul 27 | else 28 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsGenerateRandomPasswordString" | tee -a /etc/sudoers > /dev/null 29 | fi 30 | 31 | if grep -q "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsRunningUserDockerInfo" "/etc/sudoers"; then 32 | echo "Nothing to do" > /dev/nul 33 | else 34 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsRunningUserDockerInfo" | tee -a /etc/sudoers > /dev/null 35 | fi 36 | 37 | if grep -q "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/updatePlexUserDocker" "/etc/sudoers"; then 38 | echo "Nothing to do" > /dev/nul 39 | else 40 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/updatePlexUserDocker" | tee -a /etc/sudoers > /dev/null 41 | fi 42 | 43 | if grep -q "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/updateSeedboxUser" "/etc/sudoers"; then 44 | echo "Nothing to do" > /dev/nul 45 | else 46 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/updateSeedboxUser" | tee -a /etc/sudoers > /dev/null 47 | fi 48 | 49 | if grep -q "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsInstalledDockerInfo" "/etc/sudoers"; then 50 | echo "Nothing to do" > /dev/nul 51 | else 52 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsInstalledDockerInfo" | tee -a /etc/sudoers > /dev/null 53 | fi 54 | -------------------------------------------------------------------------------- /updateSeedboxToVersion2: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | #Kill all processes that might be running from the old services. 7 | kill `screen -ls | grep tached | awk '{print $1}' | cut -d. -f 1` &> /dev/null 8 | kill -9 `screen -ls | grep tached | awk '{print $1}' | cut -d. -f 1` &> /dev/null 9 | kill `ps aux | grep SABnzbd | grep -v grep | awk '{print $2}' | cut -d. -f 1` &> /dev/null 10 | kill -9 `ps aux | grep SABnzbd | grep -v grep | awk '{print $2}' | cut -d. -f 1` &> /dev/null 11 | kill -9 `ps aux | grep deluge | grep -v grep | awk '{print $2}' | cut -d. -f 1` &> /dev/null 12 | kill -9 `ps aux | grep rtorrent | grep -v grep | awk '{print $2}' | cut -d. -f 1` &> /dev/null 13 | kill -9 `ps aux | grep irssi | grep -v grep | awk '{print $2}' | cut -d. -f 1` &> /dev/null 14 | kill -9 `ps aux | grep deluge | grep -v grep | awk '{print $2}' | cut -d. -f 1` &> /dev/null 15 | 16 | #Uninstall all previous versions 17 | cd /etc/seedbox-from-scratch/source/xmlrpc-c-1.16.42/ 18 | make uninstall 19 | cd ../libtorrent-0.13.2 20 | make uninstall 21 | cd ../rtorrent-0.9.2 22 | make uninstall 23 | cd ../xmlrpc-c-1.31.06 24 | make uninstall 25 | cd ../deluge-1.3.6 26 | make uninstall 27 | 28 | rm -rf /etc/seedbox-from-scratch/downgradeRTorrent /etc/seedbox-from-scratch/installruTorrentStreamPlugin /etc/seedbox-from-scratch/installSABnzbd /etc/seedbox-from-scratch/installCurl /etc/seedbox-from-scratch/installDeluge /etc/seedbox-from-scratch/installRapidleech /etc/seedbox-from-scratch/installRTorrent /etc/seedbox-from-scratch/updategitRepository /etc/seedbox-from-scratch/upgradeRTorrent /etc/seedbox-from-scratch/upgradeSeedbox /etc/seedbox-from-scratch/rutorrent.org/ /etc/seedbox-from-scratch/*.template /etc/seedbox-from-scratch/*.tgz /etc/seedbox-from-scratch/*.deb /etc/seedbox-from-scratch/*.zip /etc/seedbox-from-scratch/*.gz /etc/seedbox-from-scratch/versions /etc/seedbox-from-scratch/source deluge.password.py /etc/seedbox-from-scratch/sabnzbd /var/www/rutorrent /var/www/share /var/www/stream 29 | 30 | bash /opt/seedbox-from-scratch/updateInstalledScripts 31 | 32 | cp /etc/seedbox-from-scratch/templates/etc.apache2.default.template /etc/apache2/sites-available/default.conf 33 | IPADDRESS1=`ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p' | grep -v 127 | grep -v 172 | head -n 1` 34 | echo "$IPADDRESS1" > /etc/seedbox-from-scratch/hostname.info 35 | 36 | NEWUSER1=`cat /etc/seedbox-from-scratch/mainuser.info` 37 | PASSWORD1=`cat /etc/seedbox-from-scratch/users/$NEWUSER1.info | grep 'Password' | grep -v 'IRSSI' | sed -e 's/Password: //'` 38 | bash /etc/seedbox-from-scratch/changeUserPassword $NEWUSER1 $PASSWORD1 private 39 | 40 | perl -pi -e "s//$IPADDRESS1/g" /etc/apache2/sites-available/default.conf 41 | perl -pi -e "s//$NEWUSER1/g" /etc/apache2/sites-available/default.conf 42 | 43 | apt-get --yes update 44 | apt-get --yes upgrade 45 | 46 | apt-get --yes install apache2 apache2-utils apt-utils autoconf build-essential ca-certificates comerr-dev curl cfv quota mktorrent dtach htop irssi libapache2-mod-php libcloog-ppl-dev libcppunit-dev libcurl3 libcurl4-openssl-dev libncurses5-dev libterm-readline-gnu-perl libsigc++-2.0-dev libperl-dev openvpn libssl-dev libtool libxml2-dev ncurses-base ncurses-term ntp openssl patch libc-ares-dev pkg-config php php-cli php-dev php-curl php-geoip php-mcrypt php-gd php-xmlrpc pkg-config python-scgi screen ssl-cert subversion texinfo unzip zlib1g-dev expect joe automake flex bison debhelper binutils-gold ffmpeg libarchive-zip-perl libnet-ssleay-perl libhtml-parser-perl libxml-libxml-perl libjson-perl libjson-xs-perl libxml-libxslt-perl libxml-libxml-perl libjson-rpc-perl libarchive-zip-perl tcpdump plowshare4 docker.io nscd handbrake-cli 47 | 48 | mkdir /var/www/private 49 | a2ensite default.conf 50 | a2dissite 000-default.conf 51 | a2dissite default-ssl.conf 52 | a2enmod rewrite 53 | service apache2 reload 54 | service apache2 restart 55 | 56 | echo "www-data ALL=(ALL) NOPASSWD: /usr/sbin/repquota" | tee -a /etc/sudoers > /dev/null 57 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsDecryptTemporaryEncryptedText" | tee -a /etc/sudoers > /dev/null 58 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsEncryptTemporaryEncryptedText" | tee -a /etc/sudoers > /dev/null 59 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsGenerateRandomPasswordString" | tee -a /etc/sudoers > /dev/null 60 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/sfsRunningUserDockerInfo" | tee -a /etc/sudoers > /dev/null 61 | echo "www-data ALL=(ALL) NOPASSWD: /usr/bin/docker" | tee -a /etc/sudoers > /dev/null 62 | echo "www-data ALL=(ALL) NOPASSWD: /etc/seedbox-from-scratch/updatePlexUserDocker" | tee -a /etc/sudoers > /dev/null 63 | cp /etc/seedbox-from-scratch/favicon.ico /var/www/ 64 | cp /etc/seedbox-from-scratch/templates/index.html.template /var/www/index.html 65 | 66 | (crontab -l 2>/dev/null; echo "*/1 * * * * /etc/seedbox-from-scratch/cronTasks >/dev/null 2>&1") | crontab - 67 | (crontab -l 2>/dev/null; echo "* */1 * * * /etc/seedbox-from-scratch/cronUpdates >/dev/null 2>&1") | crontab - 68 | 69 | -------------------------------------------------------------------------------- /updateSeedboxUser: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | exec 1> >(logger -s -t $(basename $0)) 2>&1 4 | 5 | while [[ $# -gt 1 ]] 6 | do 7 | key="$1" 8 | 9 | case $key in 10 | -u|--username) 11 | USERNAME="$2" 12 | shift # past argument 13 | ;; 14 | *) 15 | # unknown option 16 | ;; 17 | esac 18 | shift # past argument or value 19 | done 20 | 21 | HOMEBASE1=/home/$USERNAME 22 | HOMEDIR1=$HOMEBASE1 23 | HOMEJAILED1=$HOMEBASE1 24 | JAILDIR1=$HOMEBASE1 25 | 26 | sudo cp /etc/seedbox-from-scratch/webserver/* $HOMEJAILED1/private/ -------------------------------------------------------------------------------- /updateSeedboxUsers: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | exec 1> >(logger -s -t $(basename $0)) 2>&1 4 | 5 | OS1=$(lsb_release -si) 6 | 7 | IPADDRESS1=`cat /etc/seedbox-from-scratch/hostname.info` 8 | 9 | NEWFTPPORT1=`cat /etc/seedbox-from-scratch/ftp.info` 10 | NEWSSHPORT1=`cat /etc/seedbox-from-scratch/ssh.info` 11 | 12 | ####################################################################################################### 13 | 14 | 15 | ################################################################################################### 16 | 17 | for f in /etc/seedbox-from-scratch/users/*.info; do 18 | f=${f##*/} 19 | 20 | TEMPUSERHASSSHACCESS1=`grep ${f%.info} /etc/passwd` 21 | TEMPUSERINSUDOERS1=`sudo -v` 22 | 23 | if [[ $TEMPUSERHASSSHACCESS1 = *"/bin/bash"* ]]; then 24 | USERHASSSHACCESS1="TRUE" 25 | fi 26 | 27 | if [[ $TEMPUSERINSUDOERS1 = *""* ]]; then 28 | USERINSUDOERS1="TRUE" 29 | fi 30 | 31 | TEMPUSERPASSWORD=`cat /etc/seedbox-from-scratch/users/${f%.info}.info | grep 'Password' | grep -v 'IRSSI' | sed -e 's/Password: //'` 32 | ENCRYPTPASSWORD=$(/etc/seedbox-from-scratch/sfsGenerateRandomPasswordString) 33 | ENCRYPTEDUSERNAME=$(/etc/seedbox-from-scratch/sfsEncryptTemporaryEncryptedText -t ${f%.info} -p ${ENCRYPTPASSWORD}) 34 | ENCRYPTEDPASSWORD=$(/etc/seedbox-from-scratch/sfsEncryptTemporaryEncryptedText -t ${TEMPUSERPASSWORD} -p ${ENCRYPTPASSWORD}) 35 | DECRYPTEDUSERNAME=$(/etc/seedbox-from-scratch/sfsDecryptTemporaryEncryptedText -t ${ENCRYPTEDUSERNAME} -p ${ENCRYPTPASSWORD}) 36 | DECRYPTEDPASSWORD=$(/etc/seedbox-from-scratch/sfsDecryptTemporaryEncryptedText -t ${ENCRYPTEDPASSWORD} -p ${ENCRYPTPASSWORD}) 37 | # encrypt password 38 | 39 | 40 | 41 | if [ /etc/seedbox-from-scratch/users/${f%.info}.ep ]; then 42 | echo ${ENCRYPTPASSWORD} | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.ep 43 | fi 44 | 45 | if [ /etc/seedbox-from-scratch/users/${f%.info}.un ]; then 46 | ENCRYPTEDUSERNAME=$(/etc/seedbox-from-scratch/sfsEncryptTemporaryEncryptedText -t ${f%.info} -p ${ENCRYPTPASSWORD}) 47 | echo ${ENCRYPTEDUSERNAME} | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.un 48 | fi 49 | 50 | if [ /etc/seedbox-from-scratch/users/${f%.info}.up ]; then 51 | ENCRYPTEDPASSWORD=$(/etc/seedbox-from-scratch/sfsEncryptTemporaryEncryptedText -t ${TEMPUSERPASSWORD} -p ${ENCRYPTPASSWORD}) 52 | echo ${ENCRYPTEDPASSWORD} | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.up 53 | fi 54 | 55 | 56 | # decrypt password 57 | DECRYPTEDUSERNAME=$(/etc/seedbox-from-scratch/sfsDecryptTemporaryEncryptedText -t ${ENCRYPTEDUSERNAME} -p ${ENCRYPTPASSWORD}) 58 | DECRYPTEDPASSWORD=$(/etc/seedbox-from-scratch/sfsDecryptTemporaryEncryptedText -t ${ENCRYPTEDPASSWORD} -p ${ENCRYPTPASSWORD}) 59 | rm -rf /etc/seedbox-from-scratch/users/${f%.info}.info 60 | 61 | echo "http://$IPADDRESS1/private/SBinfo.txt" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 62 | 63 | echo "" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 64 | 65 | sudo cp /etc/seedbox-from-scratch/webserver/* /home/${f%.info}/private/ 66 | 67 | echo "" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 68 | echo "User personal info" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 69 | echo "-------------------" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 70 | echo "Username: ${f%.info}" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 71 | echo "Password: $DECRYPTEDPASSWORD" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 72 | 73 | echo "SSH: $USERHASSSHACCESS1" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 74 | echo "Sudo powers: $USERINSUDOERS1" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 75 | echo "Jailed: $CHROOTJAIL1" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 76 | 77 | echo "" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 78 | echo "Directories" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 79 | echo "-----" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 80 | echo "Home base: /home/${f%.info}" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 81 | echo "Private dir: /home/${f%.info}/private" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 82 | echo "Downloads dir: /home/${f%.info}/downloads/manual" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 83 | echo "Media dir: /home/${f%.info}/media" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 84 | 85 | echo "" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 86 | echo "Ports" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 87 | echo "-----" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 88 | echo "SSH port: $NEWSSHPORT1" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 89 | echo "SFTP port: $NEWSSHPORT1" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 90 | echo "vsftp port: $NEWFTPPORT1" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 91 | 92 | echo "" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 93 | echo "Links" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 94 | echo "-----" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 95 | 96 | echo "Downloads Directory: http://$IPADDRESS1/private/Downloads" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 97 | 98 | echo "Webmin: https://$IPADDRESS1:10000" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 99 | echo "FTP: ftp://$IPADDRESS1:$NEWFTPPORT1/" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 100 | 101 | echo "OpenVPN config: https://$IPADDRESS1/private/client.zip" | sudo tee -a /etc/seedbox-from-scratch/users/${f%.info}.info 102 | 103 | sudo cp /etc/seedbox-from-scratch/users/${f%.info}.info /home/${f%.info}/private/SBinfo.txt 104 | sudo cp /etc/seedbox-from-scratch/webserver/* /home/${f%.info}/private/ 105 | 106 | mkdir /home/${f%.info}/services 107 | sudo mkdir -p /home/${f%.info}/downloads/auto 108 | sudo mkdir -p /home/${f%.info}/downloads/manual 109 | sudo mkdir -p /home/${f%.info}/services/ 110 | sudo mkdir -p /home/${f%.info}/media/ 111 | sudo mkdir -p /home/${f%.info}/media/comics 112 | sudo mkdir -p /home/${f%.info}/media/books 113 | sudo mkdir -p /home/${f%.info}/media/files 114 | sudo mkdir -p /home/${f%.info}/media/music 115 | sudo mkdir -p /home/${f%.info}/media/photos 116 | sudo mkdir -p /home/${f%.info}/media/movies 117 | sudo mkdir -p /home/${f%.info}/media/tvshows 118 | sudo mkdir -p /home/${f%.info}/downloads/watch 119 | sudo mkdir -p /home/${f%.info}/downloads/.session 120 | sudo chown -R ${f%.info}:${f%.info} /home/${f%.info}/downloads 121 | sudo chown -R ${f%.info}:${f%.info} /home/${f%.info}/media 122 | sudo mkdir /home/${f%.info}/log 123 | sudo chown ${f%.info}: /home/${f%.info}/log 124 | sudo chown www-data:www-data /home/${f%.info}/services/ 125 | sudo chown ${f%.info}: -R /home/${f%.info}/bin 126 | sudo chown ${f%.info}: -R /home/${f%.info}/private/ 127 | 128 | done -------------------------------------------------------------------------------- /updatejkinit: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Hellish Tech 3 | # No commercial usage without authorization 4 | exec 1> >(logger -s -t $(basename $0)) 2>&1 5 | 6 | 7 | sudo cp /etc/jailkit/jk_init.ini.original /etc/jailkit/jk_init.ini 8 | echo "" | sudo tee -a /etc/jailkit/jk_init.ini >> /dev/null 9 | cat /etc/seedbox-from-scratch/templates/etc.jailkit.jk_init.ini.template | sudo tee -a /etc/jailkit/jk_init.ini >> /dev/null 10 | 11 | ##################### LAST LINE ########### 12 | -------------------------------------------------------------------------------- /webserver/blue-32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/webserver/blue-32px.png -------------------------------------------------------------------------------- /webserver/functions.php: -------------------------------------------------------------------------------- 1 | "; 103 | } 104 | 105 | function displayServiceDetails($servicename){ 106 | 107 | $user = $_SERVER['PHP_AUTH_USER']; 108 | $output = shell_exec('sudo /etc/seedbox-from-scratch/sfsRunningUserDockerInfo -u ' . escapeshellarg($user) . ' -d ' . escapeshellarg($servicename) . ' 2>&1'); 109 | $output = preg_replace("/[^A-Za-z0-9 ]/", '', $output); 110 | if ($output == "NOTINSTALLED"){ 111 | echo "
"; 112 | } 113 | elseif ($output == "RUNNING"){ 114 | echo "
"; 115 | } 116 | elseif ($output == "STOPPED"){ 117 | echo "
"; 118 | } 119 | } 120 | 121 | function displayDockerInstall($servicename){ 122 | 123 | $user = $_SERVER['PHP_AUTH_USER']; 124 | $output = shell_exec('sudo /etc/seedbox-from-scratch/sfsInstalledDockerInfo -d ' . escapeshellarg($servicename) . ' 2>&1'); 125 | $output = preg_replace("/[^A-Za-z0-9 ]/", '', $output); 126 | if ($output == "NOTINSTALLED"){ 127 | echo "
"; 128 | } 129 | elseif ($output == "INSTALLED"){ 130 | echo "
"; 131 | } 132 | } 133 | 134 | function makelink($input) { 135 | $parse = explode(' ', $input); 136 | $input = ""; 137 | foreach ($parse as $token) { 138 | $br = "
"; 139 | if (strpos($token, "://") > 0) { 140 | $input .= '' . $token . ' '; 141 | } else if(substr($token, 1, 3) == '---') { 142 | $input .= "
"; 143 | $br = ""; 144 | } else { 145 | $input .= $token." "; 146 | } 147 | } 148 | return trim($input.$br); 149 | } 150 | 151 | function makefile($file){ 152 | $data = file($file); 153 | foreach($data as $index=>$line) { 154 | $line = $this->makelink($line); 155 | echo $line; 156 | } 157 | 158 | } 159 | } 160 | ?> -------------------------------------------------------------------------------- /webserver/green-32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/webserver/green-32px.png -------------------------------------------------------------------------------- /webserver/letsencrypt.php: -------------------------------------------------------------------------------- 1 | installLetsEncryptService($letsencryptuseremail, $letsencryptsubdomainlist, $letsencryptdhlevel); 10 | header( 'Location: index.php' ) ; 11 | } else { 12 | ?> 13 | 14 |
15 |
16 | LetsEncrypt Login Information: 17 | LetsEncrypt Email:
18 |
19 | Comma Seperated Subdomain List:
20 |
21 | DH Level:
22 | 27 | 28 |
29 |
30 | 31 | -------------------------------------------------------------------------------- /webserver/mysql.php: -------------------------------------------------------------------------------- 1 | installMySQLService($mysqlversion); 8 | header( 'Location: index.php' ) ; 9 | } else { 10 | ?> 11 | 12 |
13 |
14 | MySQL Information: 15 | MySQL Version:
16 | 23 | 24 |
25 |
26 | 27 | -------------------------------------------------------------------------------- /webserver/plex.php: -------------------------------------------------------------------------------- 1 | installPlexService($plexusername,"yes"); 10 | } else { 11 | $seedbox_site_functions->installPlexService($plexusername,"no"); 12 | } 13 | 14 | header( 'Location: index.php' ) ; 15 | } else { 16 | ?> 17 | 18 | Get your Plex claim token 19 |
20 |
21 | Plex Login Information: 22 | Claim Token:
23 |
24 | Plexpass Version:
25 | 26 | 27 |
28 |
29 | 30 | -------------------------------------------------------------------------------- /webserver/red-32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/webserver/red-32px.png -------------------------------------------------------------------------------- /webserver/services.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 |
ServiceStatusServiceStatus
couchpotatodisplayServiceDetails("couchpotato"); ?>delugedisplayServiceDetails("deluge"); ?>
letsencryptdisplayServiceDetails("letsencrypt"); ?>mysqldisplayServiceDetails("mysql"); ?>
plexdisplayServiceDetails("plex"); ?>rapidleechdisplayServiceDetails("rapidleech"); ?>
rutorrentdisplayServiceDetails("rutorrent"); ?>sabnzbddisplayServiceDetails("sabnzbd"); ?>
sickbearddisplayServiceDetails("sickbeard"); ?>sickragedisplayServiceDetails("sickrage"); ?>
ubooquitydisplayServiceDetails("ubooquity"); ?>filemanagerdisplayServiceDetails("filemanager"); ?>
sonarrdisplayServiceDetails("sonarr"); ?>radarrdisplayServiceDetails("radarr"); ?>
syncthingdisplayServiceDetails("syncthing"); ?>SFTPdisplayServiceDetails("sftp"); ?>
FileZilladisplayServiceDetails("filezilla"); ?>PureFTPddisplayServiceDetails("pureftpd"); ?>
76 | 77 | -------------------------------------------------------------------------------- /webserver/userdetails.php: -------------------------------------------------------------------------------- 1 | makefile("SBinfo.txt"); 5 | echo "
"; 6 | echo "
"; 7 | echo "List of User Services"; 8 | echo "
"; 9 | if ($handle = opendir('.')) { 10 | echo "
"; 11 | while (false !== ($file = readdir($handle))) 12 | { 13 | if ($file != "." && $file != ".." && strtolower(substr($file, strrpos($file, '.') + 1)) == 'serviceinfo') 14 | { 15 | $seedbox_site_functions->makefile($file); 16 | echo "
"; 17 | } 18 | } 19 | 20 | closedir($handle); 21 | } 22 | ?> 23 | -------------------------------------------------------------------------------- /webserver/yellow-32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thevisad/seedbox-from-scratch/336f933c390f216970fa4eac509cfdd59c8051f9/webserver/yellow-32px.png --------------------------------------------------------------------------------