Server Guide: Automation, Homelabs, Networking, Storage, Hardware, & More

All severs, all the time

2024-06-04

1 Announcements

2 To Do

Here are some planned updates for the website

3 Lots and lots of servers!

This webpage is all about servers. Home servers, work servers, custom build servers, OEM pre built servers, networking, file systems, containers, virtualization, and all kinds of cool stuff you can do with your computers for work and play.

Servers you love, servers you hate, servers you want to build, servers you want to try out, if its a computer and you do stuff with it, this page will show you things you can do with it.

OLD SERVERS!

NEW SERVERS!

BIG SERVERS!

SMALL SERVERS!

WEIRD SERVERS!

SERVERS FROM AROUND THE WORLD!

4 Home Media Server

4.1 Base Server Configuration

Want to build a home media server but dont know where to start? Do you love Linux? Well maybe the "Perfect Media Server" guide will be a good choice for you!

4.2 Media Server Software

4.2.1 Plex

One of the most popular media server applications to watch your legally obtained movies, TV shows, and music, on any device. With Plex, you can share your library with others, and access your library remotely from over the internet easily. A Plex account is free (despite what all the self-ads on their webpage and apps suggest), and you do not need to sign up for any subscriptions to use Plex. The person hosting the Plex Media Server will eventually want to purchase the "Plex Pass" lifetime membership to enable extra features such as better remote library access support and better transcoding support. Users accessing the Plex library (not hosting their own) do not ever need to pay anything. Note that the default Plex app and web dashboards will often be cluttered with self-ads for Plex's own internal subscription services which you do not need, so be sure to un-pin them from the Plex all Home page sidebar.

4.2.2 Other Media Library Softwares

Plex is not the only game in town, there are a few alternatives, with some feature trade-offs.

4.3 More Home Media Server resources

4.4 Building a Plex Server

"What is the Best CPU for Plex?"

tl;dr: get a 7th gen or later Intel CPU if possible in order to utilize Quick Sync (used for transcoding e.g. down-converting media to play on mobile devices, etc.). You can use older CPU's just fine but they will not have as advanced Quick Sync capabilities. If you do not transcode and only play the source media directly as-is, then you should be fine with even less.

While not needed for Plex, if you do wish to encode HEVC 10-bit, then you should look at Intel 11th generation or later. The integrated graphics on those processors are capable of encoding HEVC 10-bit.

Regardless of your requirements, I suggest going with an Intel 7th generation or later, to get the best experience out of your Plex server.

Pro Tip: you can find used micro computers such as the Dell Optiplex 3060 and 3070 Micro models with 8th gen Intel CPU's (e.g. i5 8500T) for dirt cheap on eBay which should work great for hosting a Plex Media Server, assuming you store the files on a separate NAS or similar file server. Bonus: since most of these are ex-office computers, they will often have a Windows 10 Pro key embedded in the motherboard. Just make sure to get one includes a power cable!

An Intel NUC with a similar generation CPU also makes a fantastic small Plex Media Server host.

You can of course use a dedicated GPU such as the offerings from Nvidia or AMD, however Intel's Quick Sync is more power-efficient for the price and does not use up extra space in your PC.

source: https://en.wikipedia.org/wiki/Intel_Quick_Sync_Video

"Do I need transcoding?"

Transcoding is the process of converting video files on your computer from one format to another. By default, if you are streaming media on Plex (movies, TV shows) on your own home network, you will usually being using direct-play, where the raw file contents will be streamed directly to your device as-is, without any transcoding.

Transcoding comes into play primarily in two situations;

In both situations, transcoding can be used (and will be chosen automatically by a properly configured Plex Media Server) in order to re-compress and re-format the video in real time while its being servered up to the client device.

If transcoding is performed on the CPU, it can become a very resource intensive process, however GPU's are able to accelerate the process greatly if they offer hardware support to match the requirements. This is the case especially for Intel iGPU's (integrated GPU) which come built-in to many Intel CPUs. So if you choose a system with an Intel CPU with Quick Sync support, you will have access to transcoding capabilities.

5 Networking

Networking can be fun when you use third party router software that you can install and configure yourself! Here are some common and fun software packages to check out.

5.1 pfsense

Homepage: https://www.pfsense.org/

5.2 OPNsense

Homepage: https://opnsense.org/

Install: https://docs.opnsense.org/manual/install.html

Download: https://opnsense.org/download/

Great video on installing and setting up OPNSense;

https://www.youtube.com/watch?v=54JWsGedXpo

https://www.youtube.com/watch?v=h2_cQxTkh3Q

5.3 Others

5.4 Networking Tasks

How to set a static IP address for a device on your local network

How to set up port forwarding

How to get your current IP address on your internal local network

(Linux, macOS)

ifconfig

# or
ip a

will show the details for all network devices, amongst them should be some devices with names like eth0, with IP addresses such as 192.168.x.x

Windows: https://www.howtogeek.com/858334/how-to-find-your-ip-address-from-cmd-command-prompt/

How to get your public internet IP address

curl http://checkip.amazonaws.com
# or
curl ifconfig.me

How to get IP address(es) of website

nslookup github.com
# or
dig github.com

How to check that a server (local or remote) can be reached

ping 8.8.8.8

How to check what local process is running on a port

sudo lsof -i :1234

How to check which local ports are in use

lsof -i TCP | grep LISTEN

How to check if a port is open on a server

# netcat
nc -vz 192.168.1.2 7878
# Connection to 192.168.1.2 7878 port [tcp/*] succeeded!

nc -vz 192.168.1.2 7879
# nc: connect to 192.168.1.2 port 7879 (tcp) failed: Connection refused

How to check if a server has a DHCP server running

sudo nmap -sU -p 67 --script=dhcp-discover 192.168.1.1

How to search for connected devices on your local subnet

nmap -sn 192.168.1.0/24

Another backup method to search for devices on your subnet

# find the broadcast IP for your subnet ; should end with .255
ifconfig | grep broadcast

# ping that ip
ping 192.168.1.255

# update arp table
arp -a

How to renew your DHCP server lease

# might want to run this in a 'screen' session since the first command may disconnect you
sudo dhclient -r ; sudo dhclient

How to check which TCP and UDP ports are open on your server

netstat -plnut

How to scan all ports on a server

sudo nmap -n -PN -sT -sU -p- 192.168.1.2

How to check your internet speed

sudo apt install speedtest-cli
speedtest-cli --secure

5.5 Network Usage Monitoring

Here are some tools you can use to monitor your network activity on your server

# top style programs
sudo iptraf

sudo iftop

btop

sudo nethogs

# get the usage of ports
netstat -nlp

sudo lsof -i :51886
# lsof -i tcp:51886

sudo fuser -n tcp 51886

Resources;

5.6 Netgate 1100

https://shop.netgate.com/products/1100-pfsense

5.7 Intel N100 mini PC clones

Example; https://www.aliexpress.us/item/3256804116114245.html

5.8 Network Switches

2.5Gb network switches are now widely available for low prices. See this video for a bunch of examples

https://www.youtube.com/watch?v=-pYQvEX9Ct0

6 Data Storage

resources:

6.1 Building a NAS Server

The best guide around for general purpose building of a basic NAS (network attached storage) server

6.2 Object Storage

An alternative to traditional filesystems, object storage can be run at home (or in the cloud) using services such as:

6.3 Format and Mount drives

Methods to format, mount, and manage drives in Linux / macOS.

Identify the new drive on the system.

sudo parted -l
# or
lsblk
# or
ls -l /dev/disk/by-uuid/

Create a new partition table on a blank drive

# using GPT partition table
# WARNING! put your drive's path here!!
sudo parted /dev/sdc mklabel gpt

Make a ext4 partition on the drive

sudo parted -a opt /dev/sdc mkpart primary ext4 0% 100%

Format the ext4 partition on the drive

sudo mkfs.ext4 -L DRIVELABEL /dev/sdc1

Get the UUID of the formatted drive (this can also be set when you format it)

lsblk -f

Mount the drive interactively. Use the UUID for more stable mount command (the drive letters can change)

# FIRST: make the mount point if it doesnt already exist;
# sudo mkdir -p /mnt/DRIVELABEL
# sudo chown -R username /mnt/DRIVELABEL
# sudo chgrp -R username /mnt/DRIVELABEL

sudo mount UUID=abc123xyz /mnt/DRIVELABEL

If it looks good, add it to your /etc/fstab

# put a line like this in your fstab
UUID=abc123xyz /mnt/DRIVELABEL ext4 defaults 0 0

You can unmount the drive like this

sudo umount /mnt/DRIVELABEL

You can mount all the drives in your /etc/fstab like this

sudo mount -a

6.4 Drive Stats

Check the SMART stats on your drives using smartmontools

sudo smartctl --all /dev/sdc

Check the stats on NVMe SSD using nvme-cli

sudo nvme smart-log /dev/nvme0

Run a SMART drive test on every mounted drive (drives a through f)

for i in {a..f}; do sudo smartctl -t long /dev/sd${i}; done

Check the status of a running SMART test (output in JSON format so you can parse with jq)

sudo smartctl -j -l selftest /dev/sda

Check disk usage per process

sudo iotop

Resources

6.5 SMB Share

So you have your storage on one server (or PC, etc.), and you want to access it from another server (or PC, etc.), on the same network. How do you do that? You can do this with an SMB share.

Resources

6.5.1 Create SMB Share

Different operating systems will have different methods for creating a SMB share. For example, on macOS you can use the System Preferences > Sharing > File Sharing menu options to create and configure a SMB share (you can also do it from the command line; link). Note that you may or may not also want to set up guest access to the share, and or create a share user just for sharing.

6.5.2 Connect to SMB Share

Different operating systems will have different methods for accessing a SMB share.

On Ubuntu 22.04, you first need to install some extra tools

sudo apt install samba cifs-utils smbclient

You can check if a SMB share is available on the network with a command like

smbclient -L 192.168.1.10 -U guest

Where the IP is the address of the computer on your network hosting the share, and "guest" is used as the user assuming you enabled guest access to the share from the share host. If it works, you should see a list of available share points.

You can manually mount a SMB share with a command like this

# need to create the mount point first
mkdir -p /media/share/Media

# try to mount the share
sudo mount -t cifs -o guest,username=guest,vers=3.0,uid=yourlocalusername //192.168.1.10/Media /media/share/Media

In this command;

//192.168.1.10/Media is the local network address to the SMB share "Media" on the system at IP address 192.168.1.10. Note that the share point name "Media" does not include the path to the directory on the local system in the SMB address.

we are using both the guest mounting option to disable the password prompt, and the username=guest to mount it under the remote guest user access available on the remote SMB host ; you might want to exclude this if you are not using guest access on the SMB share

vers=3.0 is specifying to use SMB Version 3.0 ; there have been numerous security vulnerabilities found in old versions of SMB, so this option forces the local client to try and connect to the remote host with one of the most modern versions of SMB which is currently 3.0

uid=yourlocalusername, where yourlocalusername can be replaced with the username of your current user, changes the file ownership of the mounted files on the local system to that of the current user, in order to alleviate some issues with file permissions when trying to write to the files and directories on the SMB share

/media/share/Media is the path to the location on the local system where the SMB should be mounted; make sure this directory path already exists, and you may need to adjust the ownership of that location for your current user as well (cant remember if I needed to do that or not but I usually end up having to do it for other mount points with sudo chown -R myusername /path/to/dir)

If it does not work, you may need to check the system logs with

sudo dmesg

If it does work, you should not see any error messages, and you should be able to see the contents of the SMB share at the specified local path with ls -l.

Once you get it working, you can unmount the share (sudo umount /media/share/Media) and then add an entry to your /etc/fstab, it might look like this

# open the fstab file; always a good idea to make a backup copy first!
sudo nano /etc/fstab
...

# edit the file; add a line like this to the file:
//192.168.1.10/Media /media/share/Media cifs    guest,username=guest,vers=3.0,uid=yourlocalusername     0       0

# save and close the file

# reload all the mount points from your /etc/fstab
sudo mount -a

If you have issues, troubleshoot based on error messages from dmesg, and keep in mind that you can copy / paste most error messages into Google and even ChatGPT to search for some guidance.

Note also that you may need to allow SMB access through your firewall, if you have it enabled, with a command such as

sudo ufw allow Samba

This requires that you have installed the samba package from apt. You can check your firewall configuration with commands like

sudo ufw status
sudo ufw app list

Resources

7 Creating a SMB Share

Creating a SMB (Samba) Share on Linux (Ubuntu)

Resources:

Creating and configuring a SMB share in Ubuntu is one of the more involved tasks I have done yet. Its not hard, its just a number of steps that need to be completed and are easy to miss or mix up.

The overall process goes like this;

phew that was a lot... lets see if I can recount all the steps correctly to achieve this; I have them in my bash history but the history is a little out of order after messing up and having to repeat a few steps

7.0.0.1 Make sure you have Samba installed

sudo apt install samba

7.0.0.2 Creation of sharing user

# create the "sharing" user group
sudo addgroup sharing

# check that sharing user group we just created actually exists
getent group
# ...
# sharing:x:1002:

# create a user account just for sharing
sudo adduser shareuser
# follow the prompts to create user account password
# you can skip the input for these;
# Full Name []:
# Room Number []:
# Work Phone []:
# Home Phone []:
# Other []:


# log in as the new user to verify
su - shareuser
# as the new shareuser check your groups;
id
# or
groups
# log out with the 'exit' command or Ctrl-D

# as your primary user account

# add the shareuser to the sharing user group
sudo addgroup shareuser sharing

# also add your primary user account to the sharing group for convenience
sudo addgroup username sharing

# verify all the users in the group
sudo getent group sharing

7.0.0.3 Update Samba SMB Config

# first make a backup copy of the file!
cp /etc/samba/smb.conf smb.conf.bu

# edit the file
sudo nano /etc/samba/smb.conf

Add a section to the file that looks like this

[Media]
path = /mnt/media
valid users = @sharing
browsable = yes
writable = yes
read only = no

where "Media" is the name of your share, and /mnt/media is the path on the host system to the directory to share. The config @sharing gives all users in the "sharing" user group access to the share.

Once you have edited the file, you must test it to make sure there are no errors

testparm

7.0.0.4 Configure the filesystem for the share

# change the group of the array disks to the new sharing group
sudo chgrp -R sharing /mnt/disk1
sudo chgrp -R sharing /mnt/disk2
sudo chgrp -R sharing /mnt/disk3
sudo chgrp -R sharing /mnt/disk4
sudo chgrp -R sharing /mnt/media # this one is the mergerfs array volume made from the other disks

# change the access permissions to allow for sharing group users to have read and write access
sudo chmod -R 755 /mnt/disk1
sudo chmod -R 755 /mnt/disk2
sudo chmod -R 755 /mnt/disk3
sudo chmod -R 755 /mnt/disk4
sudo chmod -R 755 /mnt/media

# optional: should probably do a umask setting to make sure that these permissions
# propagate automatically to all newly created subdirs of these volumes

# verify that the sharing user has access to the dirs
su - shareuser
# as shareuser;
touch /mnt/disk1/foo
mkdir /mnt/media/bar
touch /mnt/media/bar/foo
# log out of shareuser

# as primary user account

7.0.0.5 Add sharing user to Samba

The sharing user needs to also be added Samba, and enabled, and supplied with a password.

# add the user
sudo smbpasswd -a shareuser

# enable the user
sudo smbpasswd -e shareuser

# restart the samba daemon
sudo systemctl restart smbd

# check that your shares are active
sudo smbstatus --shares

# verify that your Samba user account is set up
sudo pdbedit -L -v

7.0.0.6 Connect to your SMB Share from another Linux system

# check that the SMB share is available
# insert the IP address to the other server here;
smbclient -L 192.168.1.2 -U shareuser

# test out the mount manually
# make sure that /mnt/media exists on the local system already with 'sudo mkdir -p' and that you have ownership of the dir first!! Before you run this
sudo mount -t cifs -o username=shareuser //192.168.1.2/Media /mnt/media

# if it worked then unmount it;
sudo umount /mnt/media

# edit your fstab
# good idea to make a backup copy first!
sudo nano /etc/fstab

Add an entry like this to your fstab

//192.168.1.2/Media /mnt/media cifs username=shareuser,password=putpasswordhere,uid=username,gid=username,vers=3.0 0 0

Try to mount the new fstab

sudo mount -a

# if you get errors, check
sudo dmesg

Finally, you should verify that it works;

touch /mnt/media/foo

7.1 Notes

If you start having permissions issues, you need to verify that the permissions are set correctly for all dirs and subdirs and files - from the SMB host "shareuser" on the individual mergerfs array disks - on the mergerfs array volume - on the SMB client's mounted volume

Make sure to propagate the SMB client UID and GID into your Docker containers correctly in the Docker compose file.

Make sure to mount the volume into your Docker containers with /mnt/media:/mnt/media; preserving the exact same file path from your SMB host to your SMB client to inside your Docker containers will save you a lot of path-mapping headaches.

To verify that your docker containers have correct permissions, you can enter them and test it out;

docker exec -ti radarr bash
# inside the docker container

# check that you can see the mounted volume
ls -l /mnt/

# check that you can write to the mounted volume
touch /mnt/media/foo

# potentially repeat ^^^ for other subdirs as needed

8 Containers

Lighter than a virtual machine, heavier than a virtual environment, containers are a popular way to manage applications in an isolated manner that keeps apps' software installations from colliding with each other, and with the host operating system. This allows for greater portablity, reproducibility, and orchestration of applications on your system. Many types of containers can be shared freely on remote container repositories such as Docker Hub and Quay.io, and containers can usually be created in a scripted manner using a recipe file which lists all the commands needed to install and configure desired packages on top of a base operating system image.

8.1 Docker

Docker is the de facto standard for portable containers. Note that the term "Docker" can refer both to the container format, and to the engine which runs the containers; some other non-Docker container engines are compatible with Docker containers. Many containers are freely available on Docker Hub, and Docker containers can be (re)built using the Dockerfile recipe format. Multiple independent containers can be orchestrated at the same time with the Docker Compose plugin.

Resources

8.1.1 How to install Docker

IMPORTANT NOTE: If you use ufw or firewalld to manage firewall settings, be aware that when you expose container ports using Docker, these ports bypass your firewall rules. For more information, refer to Docker and ufw.

Official docs here; https://docs.docker.com/engine/install/ubuntu/

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# install the latest version of Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# verify that its running
sudo docker run hello-world

If you are having trouble getting Docker to run, you can do a couple things to investigate;

# try to start the docker daemon
dockerd

# check the status of the Docker service
systemctl status docker

If Docker does not start automatically on system boot, you can also configure that like this;

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

8.1.2 Docker Compose for *arr apps

Docker Compose is a plugin for Docker that lets you use a YAML file to define the config for multiple containers, and start and stop them all at once (or individually) as needed.

resources: - https://docs.docker.com/compose/ - https://www.howtogeek.com/devops/what-is-docker-compose-and-how-do-you-use-it/ - https://docs.linuxserver.io/general/docker-compose/

Make sure you installed compose when you installed Docker

sudo apt-get install docker-compose-plugin
# verify that its installed
docker compose version

Each of the Wiki pages for the -*arr apps includes an example Docker Compose YAML. You can use a single YAML file with all of the services listed for easier management. See the link there for the guide's example YAML configuration.

in this example, the contents of a file named docker-compose.yml look like this:

---
version: "2.1"
services:
  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=EST
    volumes:
      - /home/username/radarr:/config
      - /media/share/Media:/media/share/Media
    ports:
      - 7878:7878
    restart: unless-stopped
  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=EST
    volumes:
      - /home/username/bazarr:/config
      - /media/share/Media:/media/share/Media
    ports:
      - 6767:6767
    restart: unless-stopped
  lidarr:
    image: lscr.io/linuxserver/lidarr:latest
    container_name: lidarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=EST
    volumes:
      - /home/username/lidarr:/config
      - /media/share/Media:/media/share/Media
    ports:
      - 8686:8686
    restart: unless-stopped
  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=EST
    volumes:
      - /home/username/sonarr:/config
      - /media/share/Media:/media/share/Media
    ports:
      - 8989:8989
    restart: unless-stopped

Start the containers with the command

docker compose up -d

This starts all containers and runs them in a detached state in the background.

Check on which containers are running with

docker compose ps

(you can also use docker ps but its less descriptive)

Stop all the containers with

docker compose down

You can also start / stop / restart containers individually

docker compose up lidarr -d

Once the containers are running, you can navigate to your web browser to access them. Navigate to a URL that looks like http://192.168.1.123:8989/, inserting the local IP address of the server running the services.

See the guides at LinuxServerIO and Servarr Wiki and TRaSH Guides and the official docs for each service for further setup instructions for each service.

9 Interacting with FTP Server

9.1 lftp

You can use the command line tool lftp to interact with FTP servers in order upload and download files, and even mirror entire directories.

lftp home page is here; https://lftp.yar.ru/ - docs here; https://lftp.yar.ru/lftp-man-alt.html

To install lftp, on macOS you can use Homebrew (brew install lftp), and on Ubuntu you can use the package manager (sudo apt install lftp). Once installed, you can see the tool's internal documentation with man lftp.

Check the man pages for lftp to see the full details of commands, settings, and more.

lftp can be used interactively, or non-interactively, from the command line. In interactive mode, lftp will start a new session inside your terminal connecting you to the remote FTP server. From there you can use a handful of commands to browse the FTP file system and upload / download files and directories, among other things.

You can connect to an FTP server with a URL in a format like this:

ftp://username:password@server.com

where username and password are the username and password you plan to log in with; you can omit the password and enter it at the interactive prompt if you like, though it might be a good idea to keep the username in the URL so it does not try to automatically log you in as a user you did not intend for. If the username or password contains special characters that your shell does not like, you may need to wrap some or all of the URL in single (') or double (") quotes.

The full command should look like this

lftp ftp://username:password@server.com

and if it works you should be presented with an interactive prompt

lftp username@server.com:~> pwd
ftp://username:password@server.com

lftp username@server.com:~> ls
drwxrwxrwx   1 user     group                0 Jan 01  1970 ..
drwxrwxrwx   1 user     group                0 Jan 01  1970 .
drwxrwxrwx   1 user     group                1 Dec 07 20:52 Books
drwxrwxrwx   1 user     group                1 Nov 27 22:01 Movies
drwxrwxrwx   1 user     group                1 Dec 07 18:04 TV
lftp username@server.com:/>

lftp has its own set of commands that mimic (but are NOT 100% equivalent to) your standard POSIX shell commands, such as ls, pwd, and cd.

Importantly, unlike a normal shell, lftp tracks both your local pwd and your remote pwd, and uses both values (often implicitly) in its commands. By default, your local pwd will be the directory on your local system from where you started the lftp session. You can check your local pwd by prefixing the command with the local keyword

lftp username@server.com:/> local pwd
file:/Volumes/Media/TV/

lftp username@server.com:/> local ls
total 38132360
drwxr-xr-x   4 username  staff   128 Dec  4 14:23 The Big O
-rw-r--r--@  1 username  staff  1170119875 Oct 31  2018 batman.mkv

9.1.1 Upload File

You can upload a single file with the put command. The default behavior is to upload a file from your local pwd to the remote pwd with the same filename

put batman.mkv

This will upload the file batman.mkv from your local pwd to the remote pwd. You can change the filename on the remote side with the -o flag

put batman.mkv -o batman2.mkv

9.1.2 Upload Directory

The easiest way to upload an entire directory is with the mirror command; mirror sourceRemoteDir targetLocalDir

By default the source is remote and the target is a local directory. When using -R, the source directory is local and the target is remote. If the target directory is omitted, base name of the source directory is used. If both directories are omitted, current local and remote directories are used.

mirror -R "The Big O"

will upload the entire local directory "The Big O" to the remote pwd, with the name "The Big O"

If you instead ran the command

mirror "The Big O"

it would attempt to download the entire remote directory "The Big O" to your local pwd

a command like

mirror remoteDir/ /path/to/localDir/

would download the contents of remoteDir to the local path /path/to/localDir/

It can be a little confusing to remember which direction the mirror will run, so you can preview the transfer without running it by including the --dry-run argument.

9.1.3 Non-Interactive

You can run lftp from the command line non-interactively with the -e and -c flags.

A command like this

lftp -c "pwd; ls" ftp://username:password@server.com

will log into the server, run the pwd and ls commands, then exit.

You can use -e to instead drop you into an interactive session after running the commands. This is really useful for example in situations where you need to pass in some settings in order for your login to work, such as for disabling SSL verification on servers with self-signed certificates

lftp -e "set ssl:verify-certificate false; pwd" ftp://username:password@server.com

This will start a session on the server with SSL verification disabled, print your remote pwd, then enter the interactive session.

9.1.4 Resources

10 Raspberry Pi & PiHole Setup

Official Raspberry Pi background docs

10.1 Docker

Docker Installation guide: https://docs.docker.com/engine/install/debian/ - since Pi is using a Debian based OS the steps are slightly different from the Ubuntu steps I listed previously

Copied verbatim from official docs;

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install the Docker packages.
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

dont forget these steps

sudo systemctl status docker
sudo usermod -aG docker ${USER}
sudo reboot

# check that it works

docker run hello-world

10.2 Docker Compose

Some example Docker compose files

10.3 Router config

You may need to adjust the router config in a couple places to ensure that the Pi Hole is being used for DNS. You may also need to flush the DNS cache on client devices and/or renew DHCP leases for the new DNS settings to propagate

11 Cloud Server

Dont want a physical server living in your house? Consider using the cloud! You can spin up a virtual private server (VPS) easily with providers such as AWS and Digital Ocean, among others. Cloud is a great option for applications that need high-availability.

Want a general purpose cloud based server for cheap? Try some of these options!

12 Usenet

12.1 How does Usenet work?

Unlike torrenting, which is peer-to-peer and essentially free, for Usenet you typically pay fees to a provider service and also maybe for your indexer account too. The fees allow you to access and download whatever you want. There is no "seeding" required. You are paying the platform providers directly for access. Many private indexers will have paid memberships, and may or may not have open account registration.

In order to download stuff, you will need accounts with both a provider and an indexer. Then you will get an NZB file (similar to the .torrent file you may be used to) and load that into your NZB downloader app (SABnzbd)

12.2 How to use Usenet:

You need three things to use Usenet to pirate shit

12.3 Indexers

The Indexer is a search engine that you will use to search items to download. Similar to how you use a torrent website to find torrents, you use an indexer's website (or API) to find content.

You can use the indexer website interactively directly and download .nzb files (conceptually similar to .torrent files) which you load into your newsreader app to download the files (over your provider service). If you use services such as Sonarr / Radarr / Lidarr, etc., you do not even need to access the indexer site directly, instead you can configure those services to search (multiple) indexers for you and automatically download and import your desired movies / tv shows / music.

Some popular Indexers include;

prices for private indexers are in the ballpark of $15/year for basic access, some have free accounts (with limitations, example Ninja Central has a login requirement for free accounts), and many also offer lifetime memberships too which can be a great deal.

find info on more indexers here:

12.4 Providers

The provider is the server which is holding the data you want to download. Providers will attempt to mirror each others' content, with varying levels of success, and varying levels of retention time for old files. In order to download from a provider you generally must pay for access.

Prices are in the ballpark of $3 - $10/month (USD) or less, and you can purchase longer subscriptions for different discounts.

some providers will also let you purchase "blocks", which is basically purchasing a set amount of data (e.g. 500GB or 2TB or w/e) that you can use to download at any point in the future, without a set time-period to use it in.

From: someuser at 2023-11-26 20:14:54

tc block accounts end up being way cheaper than a monthly sub

pick up two different block accounts that are on two different providers, that way you have better completion. (but even with multiple providers, networks like HBO are so good at takedowns that it can be really hard to watch their shows)

unless you're downloading like 300+gb a month you come out way ahead vs $3-6 a month

Some popular Providers (some of these have gimmick pricing deals as well)

more info here; https://www.reddit.com/r/usenet/wiki/faq/#wiki_providers

you can read more about some popular ones that are having Black Friday Deals here as well https://www.reddit.com/r/usenet/comments/17noby8/2023_black_friday_deal_thread_providers_and/

there's a list of some more popular providers here; https://usenetreviewz.com/best-usenet-providers/

some more provider lists; https://www.reddit.com/r/usenet/wiki/providerdeals/

Provider Map - Usenet provider services are dominated by a few large companies and a lot of smaller companies, you might want to select two or more providers on different backbones (or not if your current provider is not giving you issues) - https://www.reddit.com/r/usenet/wiki/providers/

12.5 Newsreader

You need a newsreader app to download stuff from Usenet. Just use this one:

You will configure your newsreader app with the login credentials given by your provider after you sign up for a provider plan.

The same way that a torrent client loads a torrent from a .torrent file or magnet URL, the newsreader loads a file for download from the .nzb file provided by the indexer. It then uses that file to direct itself to the data for download from the configured providers of your choice.

If you are use Sonarr / Radarr / Lidarr / etc., you will also be able to link your newsreader (SABnzbd) with these services, in order for the services to automatically search for movies / tv shows / music / etc. for you and queue them up for download by SABnzbd, and then automatically import them to your media library

12.6 Resources


12.7 tl;dr: Putting it all together

(manual)

manual method is rarely needed, only need to log in to some indexer websites occasionally to maintain your account. Otherwise use the automatic method

(automatic)

If you want to start automating your downloads, you can connect them to Sonarr / Radarr / Lidarr / etc. too, so you dont actually have to search the indexers interactively and manually download .nzb files, you can connect these services to your Indexers and your download client (SABnzbd)

Super easy, and fast download speeds too. No messing with ratios, seeding, or asshole elitist private torrent tracker admins. Dont need a seedbox either. Just sign up, install a newsreader, and start downloading stuff. Also bonus, a lot of providers and indexers have PayPal so its super easy to pay for subscriptions too.

Usenet is cool!

13 Torrents

13.1 What is torrenting?

tl;dr: peer-to-peer file sharing where people sharing pieces of files with each other until everyone has all the pieces needed to assemble the completed file(s)

13.2 How do I torrent?

You need two main things to torrent;

13.3 What precautions should I take while torrenting?

Since your IP address is publicly visible while torrenting, if you are downloading illegal content then you should use a VPN with a reliable killswitch, and/or a dedicated seedbox on someone else's server.

13.4 Where can I go to get more information on torrenting?

There are lots of resources on the internet for information about torrenting

13.5 What is Port Forwarding and why do I need it?

By default, all of the ports used on your computer for networking are typically no accessible outside of your local network. For example, if you have a program on your PC such as a torrent download client that listens on port 1234 for communication with other programs, that port will only be reachable by other computers on your network. Internally, your PC's local IP address may be something like 192.168.1.2, and the port would be accessed at an address such as http://192.168.1.2:1234.

However, if your public IP address is something like 200.100.9.23, your PC's port would usually by default not be reachable at an address such as http://200.100.9.23:1234. This is partially due to the public IP being assigned at the router-level, not the device level, so all devices on your network would typically share the same public IP address.

In order to get a public address such as http://200.100.9.23:1234 to point back to your PC's internal port 1234, you use port forwarding. It is a configuration that you apply inside your router's settings that allow an internal port on a local device to be reached publicly.

More information;

It is possible to download torrents without configuring port forwarding, but you may experience poor performance for downloads and uploads.

https://www.youtube.com/watch?v=1YDVebJlGbM

13.5.1 Is Port Forwarding Safe?

Port forwarding on its own is not unsafe. Any potential security risks would be placed on the software listening on the ports. So make sure that any software listening on a publicly accessible is kept up to date. You may even consider using something like a Docker container to try to further isolate it from the host system.

If a computer does not have any application listening on a particular port, then any attempts to communicate on that port will simply be left with no response.

13.6 Trackers

will update with more info later

A lot of information can be found in publicly available FAQ threads and websites;

13.7 Seedboxes

A "seedbox" is just a virtual server instance that you can rent from a company for the purpose of downloading and seeding torrents.

You can purchase a seedbox with a monthly subscription the same way you would subscribe to any other digital service (e.g. YouTube Premium, etc.).

Once you sign up for a seedbox, you will be provided access to a small server where you can run download clients for torrents, among other things. The "seed" part of the seedbox comes from the fact that these server instances typically have very fast internet connections, making them ideal for seeding torrents.

You may or may not be provided access to log into the seedbox server directly over ssh ("root access") but most seedbox providers will have available various apps you can install easily on the seedbox, especially torrent download clients such as rtorrent + rutorrent.

A handy list of some seedbox providers can be found here; https://www.reddit.com/r/seedboxes/comments/140pyv8/cheap_seedbox_table/

Website Cost £ Disk Space (GB) Max Band
https://dediseedbox.com/ £ 8.60 750 Unlimited
https://evoseedbox.com/ £ 4.02 150 2 TB
https://www.feralhosting.com/pricing £ 10.00 1000 Unlimited
https://giga-rapid.com/products/gigabox £ 5.98 1000 6TB
https://www.sonicbit.net/ £ 3.82 100
https://www.seedboxco.net/ £ 7.87 1000 Unlimited
https://www.seedhost.eu/shared-hosting.php £ 5.16 2000 3TB
https://ultra.cc/ £ 4.05 1000 2 TB
https://www.seedboxws.com/configurator £ 1.71 100 Unlimited
https://www.seedboxws.com/configurator £ 13.67 1000 Unlimited
https://www.seedboxws.com/configurator £ 2.99 200

Reddit also has a nice wiki on seedboxes; https://www.reddit.com/r/seedboxes/wiki/index/what_is_a_seedbox/

Some torrent trackers such as TorrentLeech and Avistaz may also have deals that will allow you to get invites to their trackers if you sign up for a seedbox with their promotional providers such as Seedit4me (https://seedit4.me/) or RapidSeedbox (https://www.rapidseedbox.com/), and then retain the seedbox for at least 1 month. This can be a convenient way to gain access to such trackers when they are not currently holding open registration.

Once you have access to your seedbox, you can load its torrent download client in the web browser and start adding torrents as normal.

Be sure to read the fine print on your seedbox carefully. For example, some seedboxes may or may not allow the use of Public Trackers (such as The Pirate Bay). There may be other restrictions as well.

To download files from your seedbox to your local system, you can use a couple different methods;

rsync -vrthPz -e 'ssh -p1234' seedboxUsername@seedboxServername.com:/home/seedboxUsername/torrents/ /path/to/local_torrents/

where 1234 is the port forwarded for ssh access on your seedbox and you fill in the seedbox's local username, and either IP address or hostname. rsync is a good choice here because it supports resuming partial downloads in case your network connection breaks, and it also has --bwlimit args to control download speed (e.g. --bwlimit 1000 limits to 1MB/s download) so you dont saturate your home network connection if you need to do other work. Suggested to keep rsync running in a screen session on your file server to avoid interruptions.

13.8 VPN's

If you are downloading and seeding torrents from public trackers on your home computer, you will likely want to use a VPN.

You can find recommendations on the best VPN's for torrenting from a basic Google search; e.g. https://www.techradar.com/vpn/best-vpn-for-torrenting

A VPN is important for use with public trackers because your IP address will be seen publically by all torrent downloaders including any movie-industry folks trying to send Cease & Desist letters to pirates' ISPs.

If you are using a VPN for torrents, there are some key considersations;

I have used PIA (https://www.privateinternetaccess.com/) in the past with good results. Your mileage may vary.

Its commonly believed that if you use private trackers, you will not need a VPN due to the barrier of entry for DMCA-types to gain access, and many report having torrented for years without VPN using private trackers without issues.

If you have a seedbox, you likely do not need to use a VPN, since most seedboxes are going to be based in countries outside the USA's jurisdiction such as EU countries, and the seedbox may already have its own VPN configured. Check the details on your seedbox to be sure.

VPN's can be useful for other purposes, such as spoofing your global location on the internet so that you can gain access to region-locked content. It can also give you some extra security if you are using a public Wifi or network.