Introduction
The two top programs in the Usenet world are NZBGet and SABnzbd. Both of these tools have their strengths and weaknesses. Both of them also have a strong community that chooses one over the other and have their own preferences why they did. But at the end of the day, both of them are amazing and well maintained by their developers and the community that follows them.
I’ve recently begun packaging these tools in addition to some of the plugins that go with them. My goal was to just bring awareness to those who use the CentOS/Fedora/RedHat world that their lives just got easier! At the time this blog was written CentOS 8, Fedora 31, Fedora 32, and Fedora 33 were the current distributions.
The Setup and Target Audience
This blog was centered around the Nuxref repositories I maintain. Thus, this is the cleanest CentOS/RedHat RPM based installation with very little effort required. Simply:
- Connect to my repository.
- Install your desired packages (explained below):
- Enjoy!
The Nuxref Repositories
Before you proceed with the rest of this blog; you’ll first want to get yourself set up with the Nuxref repositories. This is where all of the packages are that will allow you to proceed with one (or both) of the solutions below.
The easiest way to do this is to visit the repository website and follow the instructions to get connected.
CentOS 8 users will want to connect to EPEL if they haven’t already done so:
# Connect to EPEL: sudo dnf install -y epel-release
NZBGet Usenet Solution
The NZBGet solution comes with the following:
Provides a SystemD service ready to go for those who want to tie it to their systems startup and shutdown.
# Install NZBGet from the Nuxref repository sudo dnf install -y nzbget # Add NZBGet to the startup of your system sudo systemctl enable nzbget.service # Start it up now if you like too! sudo systemctl start nzbget.service
You’ll now be able to access the web page through your browser accessing:
http://localhost:6789.
Note: The default login/password is nzbget/tegbzn6789 when prompted.
Here is a breakdown of how the custom NZBGet package works:
- A default configuration (/etc/nzbget.conf) is pre-prepared for you which
- sets up the logging directory to be /var/log/nzbget/nzbget.log (with log rotation on).
- All of the variable data (file processing, etc) will be located in /var/lib/nzbget/*. In fact this is a very important directory because unless you configure things differently, all downloaded content will appear in /var/lib/nzbget/downloads.
To grant users on your system access to the data available through NZBGet, simply just add them to the nzbget
group:
# swap the USER with your username you want to add to the # nzbget group: sudo usermod -aG nzbget USER
You can optionally choose to just run nzbget -d using your general account to launch a personal instance of NZBGet.
NZBGet Notifications
NZBGet can keep you posted on what it’s doing by sending you emails when a download completes (or fails). But it’s not just emails it can use as a medium; it can be Gotify, Twitter, Telegram, Amazon SNS, Slack, etc.
To leverage the notification features, you just need to install the NZB-Notify Plugin:
# Install the notification plugin from the Nuxref repository sudo dnf install -y nzbget-script-notify # Reload NZBGet so it takes on the new configuration sudo systemctl restart nzbget
To enable it, you simply need to need to access the Notifications tab from within the NZBGet Settings section.
- Select the SETTINGS entry at the top right.
- Select the NOTIFY entry on the left hand side
- Notifications basically have to be defined as Apprise URLs; you can learn to construct the one for the services you wish to use here.
Finally it is a good idea to ensure the Notifications are triggered to run at the proper times:
- Select the SETTINGS entry at the top right (if you’re not there already still from the previous steps).
- Select the EXTNSION SCRIPTS entry on the left hand side
- Make sure the
Notify.py
is listed in both the Extensions and ScriptOrder section.
NZBGet Video Sorting
Another great plugin for NZBGet is one that allows all content downloaded to be automatically sorted/renamed into a very conventional format. The amazing tool that does this is VideoSort. I’ve also gone ahead and packaged this so it would easy to use in a CentOS/Fedora enviroment like everything else:
# Install the videosort plugin from the Nuxref repository sudo dnf install -y nzbget-script-videosort # VideoSort can be a bit confusing to setup the first time; so the best way I can # make this incredibly easy for you is to pre-load you with some good default # configuration. Here is how you can do it: # First stop NZBGet: sudo systemctl stop nzbget # Backup the configuration file (so you can restore things they way they # were if you don't like my approach): sudo cp /etc/nzbget.conf /etc/nzbget.conf.backup # Now thrown in our default configuration # (just copy and paste the below): NZBGETCFG=/etc/nzbget.conf # First tidy up any conflicting entries (don't worry # you backed this file up remember, we can roll back if you're # not happy after: sudo sed -i '/Videosort/d' $NZBGETCFG sudo sed -i '/Category[0-9]\+/d' $NZBGETCFG # Now copy in our new settings: ( cat << _EOF # Custom Categories Category1.Name=movies # (option <DestDir>) is used. In this case if the option <AppendCategoryDir> Category1.DestDir=\${DestDir}/Movies Category1.Unpack=yes Category1.Extensions=VideoSort.py, Notify.py Category1.Aliases=movies* Category2.Name=tv Category2.DestDir=\${DestDir}/TVShows Category2.Unpack=yes Category2.Extensions=VideoSort.py, Notify.py Category2.Aliases=hdtv, tv*, s??e?? # VideoSort Script VideoSort.py:MoviesDir=\${DestDir}/Movies VideoSort.py:SeriesDir=\${DestDir}/TVShows VideoSort.py:DatedDir=\${DestDir}/TVShows VideoSort.py:OtherTvDir=\${DestDir}/TVShows VideoSort.py:TvCategories=tv VideoSort.py:VideoExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso VideoSort.py:SatelliteExtensions=.srt,.sub,.idx,.subs.rar,.rar,.nfo,.jpg VideoSort.py:MinSize=100 VideoSort.py:MoviesFormat=%.t.(%y)/%.t.%y.%qss.%qf.%qvc-%qrg VideoSort.py:SeriesFormat=%s.n/S%0s/%s.n.S%0sE%0e.%e.n.%qss.%qf.%qvc-%qrg VideoSort.py:EpisodeSeparator=E VideoSort.py:SeriesYear=yes VideoSort.py:DatedFormat=%s.n/%s.n-%e.n-%y-%0m-%0d VideoSort.py:OtherTvFormat=%t VideoSort.py:LowerWords=the,of,and,at,vs,a,an,but,nor,for,on,so,yet VideoSort.py:UpperWords=III,II,IV VideoSort.py:DNZBHeaders=yes VideoSort.py:PreferNZBName=yes VideoSort.py:Overwrite=no VideoSort.py:Cleanup=yes VideoSort.py:Preview=no VideoSort.py:Verbose=no _EOF ) | sudo tee -a $NZBGETCFG # Restart our NZBGet instance so it takes on the new configuration sudo systemctl start nzbget
Firewall Configuration
The package will provide you the files needed to set up the firewall and make NZBGet available to you from other stations by simply doing the following:
# Assuming your network is set up to the `home` zone, the following # sets you up to expose TCP Port 6789 on your network firewall-cmd --zone=home --add-service nzbget --permanent # You can optionally expose your secure instance of NZBGet on TCP # port 6791 as well if you want firewall-cmd --zone=home --add-service nzbget-secure --permanent # Now reload your firewall to take on the new change: firewall-cmd --reload
SABnzbd Usenet Solution
You can start it up with the command:
# Install SABnzbd from the Nuxref repository sudo dnf install -y sabnzbd # Add SABnzbd to the startup of your system sudo systemctl enable sabnzbd.service # Start it up now if you like too! sudo systemctl start sabnzbd.service
You’ll now be able to access the web page through your browser accessing:
http://localhost:9080.
Here is a breakdown of how the custom SABnzbd package works:
- All of your log files will show up in /var/log/sabnzbd/sabnzbd.log
- All of configuration will get written to /etc/sabnzbd/sabnzbd.conf
- All of the variable data (file processing, etc) will be located in /var/lib/sabnzbd/*. In fact this is a very important directory because unless you configure things differently, all downloaded content will appear in /var/lib/sabnzbd/complete.
To grant users on your system access to the data available through SABnzbd, simply just add them to the sabnzbd
group:
# swap the USER with your username you want to add to the # sabnzbd group: sudo usermod -aG sabnzbd USER
Firewall Configuration
The package will provide you the files needed to set up the firewall and make SABnzbd available to you from other stations by simply doing the following:
# Assuming your network is set up to the `home` zone, the following # sets you up to expose TCP Port 9080 on your network firewall-cmd --zone=home --add-service sabnzbd --permanent # You can optionally expose your secure instance of SABnzbd on TCP # port 9090 as well if you want firewall-cmd --zone=home --add-service sabnzbd-secure --permanent # Now reload your firewall to take on the new change: firewall-cmd --reload
SABnzbd Notifications
SABnzbd can keep you posted on what it’s doing by sending you emails when a download completes (or fails). But it’s not just emails it can use as a medium; it can be Gotify, Twitter, Telegram, Amazon SNS, Slack, etc.
To leverage the notification features, you just need to install the NZB-Notify Plugin:
# Install the notification plugin from the Nuxref repository sudo dnf install -y sabnzbd-script-notify
To enable it, you simply need to need to access the Notifications tab from within the SABnzbd Configuration section.
- Select the Enable notification script checkbox
- Select the Notify.py script from the dropdown list next to the Script category
- Next to the Parameter category, you must specify the URL(s) identifying which service(s) you want to notify.Depending on what you want plan on alerting, the URL(s) you specify in the Parameter field will vary. You can get a better understanding of the URL options supported here.
NGinX Frontend
Regardless of what downloader you chose to setup from the instructions above, you should NEVER directly expose SABnzbd or NZBGet to the internet… EVER! ALWAYS uses some sort of proxy to bridge the internet from systems you run on your local network. NGinX (pronounced Engine-X) can solve this very thing for you. NginX is much more actively maintained and focuses entirely protecting your servers while allowing them to safely host their backend HTTP(S) solutions.
# Install NGinX and httpd-tools (if they're not there already) sudo dnf install nginx httpd-tools # Add nginx to the startup of your system sudo systemctl enable nginx.service # Start it up now if you like too! sudo systemctl start nginx.service # Expose port 80 and port 443 sudo firewall-cmd --zone=home --add-service http --permanent sudo firewall-cmd --zone=home --add-service https --permanent # If you're installing NginX on the same server that you've installed # SABnzbd or NGinX on, make sure you no longer expose the ports associated # with them anymore: sudo firewall-cmd --zone=home --remove-service nzbget --permanent sudo firewall-cmd --zone=home --remove-service nzbget-secure --permanent sudo firewall-cmd --zone=home --remove-service sabnzbd --permanent sudo firewall-cmd --zone=home --remove-service sabnzbd-secure --permanent # Now reload your firewall to take on the new change: firewall-cmd --reload
Now add the following into your /etc/nginx/default.d/usenet.conf file:
# NZBGet wrapper location /nzbget/ { proxy_pass http://localhost:6789; proxy_cache off; # Simple Security auth_basic "Restricted Usenet Area"; auth_basic_user_file usenet.htpasswd; } # SABnzbd wrapper location /sabnzbd/ { proxy_pass http://localhost:9080; proxy_cache off; # Simple Security auth_basic "Restricted Usenet Area"; auth_basic_user_file usenet.htpasswd; }
Now let’s set up a simple password file we can use to secure our content.
# Generate a password for the user 'usenet'. You might want to # switch this for your own name if you like: sudo htpasswd -c /etc/nginx/usenet.htpasswd usenet # you will be prompted to enter a password to associate with your # new user. Go ahead and provide one! :) # You can generate more account if you want too; just remove the # -c for future calls. e.g: # sudo htpasswd /etc/nginx/usenet.htpasswd user2 # It wouldn't hurt to just enhance the security associated with our # new password file (for prying eyes): chown root.nginx /etc/nginx/usenet.htpasswd chmod 640 /etc/nginx/usenet.htpasswd # You're almost done!
# Make sure your configuration won't break anything nginx -t -c /etc/nginx/nginx.conf # If the above passed okay, then it's safe to make your configuration # live. sudo systemctl reload nginx
Credit
Please note that this information took me several days to put together and test thoroughly. There was a tremendous effort put in place to make all versions of these programs compatible with all recent RPM based Linux distributions. I may not blog often; but I want to re-assure the stability and testing I put into everything I intend share.
If you like what you see and wish to copy and paste this HOWTO, please reference back to this blog post at the very least. It’s really all I ask.
Sources
- NZBGet’s official website.
- SABnzbd’s official website.
- Older blog on setting up NZBGet for CentOS 7.x
- Older blog on setting up SABnzbd for CentOS 7.x
- Just another blog on a good Usenet solution that I wrote years ago. There is still some good info in here to check out.
Note that this is configuring:
WebDir=/usr/share/nzbget/webui/var/lib/nzbget/webui
which should be:
WebDir=/usr/share/nzbget/webui
i really like the fact that this repo exists.. and i wish it had a newer version of SABnzbd. currently the repo has version 3.1.1 released 187 days ago. After this came 3.2.0 released 81 days ago. And 3.2.1 released 48 days ago. For me that’s the reason i’m going to try to install via source. only problem is dependencies.. There is no Flatpak for SABnzbd i’m running fedora 33 and planning to migrate to Fedora 34 soon. i did see a snap but i don’t like snaps as they make a mess of my filesystems with all the loopback devices..
i really hope you have a bit of time to update and give people newer versions of SABnzbd.. thanks for all the hard work you do for the repo.