Add detailed comments to script and comprehensive README
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
72072eb445
commit
a2714aac1d
2 changed files with 245 additions and 31 deletions
170
README.md
Normal file
170
README.md
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
# Plex Server Setup
|
||||
|
||||
One-script setup for a Plex Media Server on Ubuntu or Linux Mint. Handles drive mounting and Plex installation in a single run.
|
||||
|
||||
## Requirements
|
||||
|
||||
- **OS**: Ubuntu 20.04+ or Linux Mint 20+
|
||||
- **Plex .deb file**: Downloaded from [plex.tv](https://www.plex.tv/media-server-downloads/) to `~/Downloads/`
|
||||
- **A media drive**: Internal or external drive for storing your media
|
||||
|
||||
## Quick Start
|
||||
|
||||
1. **Download the Plex .deb** from [plex.tv/media-server-downloads](https://www.plex.tv/media-server-downloads/)
|
||||
- Choose **Linux**
|
||||
- Select **Ubuntu (16.04+) / Debian (8+)** → `.deb` package
|
||||
- Save to `~/Downloads/`
|
||||
|
||||
2. **Run the installer**:
|
||||
```bash
|
||||
git clone https://github.com/28allday/Plex-Server-Setup.git
|
||||
cd Plex-Server-Setup
|
||||
chmod +x plexint.sh
|
||||
sudo ./plexint.sh
|
||||
```
|
||||
|
||||
3. **Access Plex** at `http://<your-server-ip>:32400/web`
|
||||
|
||||
## What It Does
|
||||
|
||||
### Part A: Drive Mount Setup
|
||||
|
||||
Mounts your media drive permanently so it survives reboots.
|
||||
|
||||
1. Shows all available drives and partitions (`lsblk`)
|
||||
2. Asks you to select a device (e.g. `/dev/sdb1`)
|
||||
3. Detects the drive's UUID (unique identifier that won't change)
|
||||
4. Asks for a mount point (e.g. `/mnt/media`)
|
||||
5. Asks for the filesystem type (ext4, ntfs, xfs, exfat)
|
||||
6. Adds the mount to `/etc/fstab` and mounts it immediately
|
||||
|
||||
**Why UUID?** Device paths like `/dev/sdb1` can change if you add or remove drives. UUIDs are permanent identifiers tied to the filesystem itself.
|
||||
|
||||
**Supported filesystems:** ext4, ntfs, xfs, exfat, btrfs, and any other type supported by your kernel.
|
||||
|
||||
### Part B: Plex Installation
|
||||
|
||||
1. Installs prerequisites (`curl`, `apt-transport-https`, `gnupg`)
|
||||
2. Finds the Plex `.deb` file in `~/Downloads/`
|
||||
3. Installs it with `dpkg` and resolves any missing dependencies
|
||||
4. Enables Plex to start on boot (`systemctl enable`)
|
||||
5. Starts Plex immediately
|
||||
6. Opens port 32400 in UFW firewall
|
||||
|
||||
## After Installation
|
||||
|
||||
### Initial Plex Setup
|
||||
|
||||
1. Open `http://<server-ip>:32400/web` in a browser
|
||||
2. Sign in with your Plex account (or create one)
|
||||
3. Name your server
|
||||
4. Add your media library — point it to the mount point you chose (e.g. `/mnt/media`)
|
||||
5. Let Plex scan and organize your media
|
||||
|
||||
### Organise Your Media
|
||||
|
||||
For best results, organise your media like this:
|
||||
|
||||
```
|
||||
/mnt/media/
|
||||
├── Movies/
|
||||
│ ├── Movie Name (2024)/
|
||||
│ │ └── Movie Name (2024).mkv
|
||||
│ └── ...
|
||||
├── TV Shows/
|
||||
│ ├── Show Name/
|
||||
│ │ ├── Season 01/
|
||||
│ │ │ ├── Show Name - S01E01.mkv
|
||||
│ │ │ └── ...
|
||||
│ │ └── ...
|
||||
│ └── ...
|
||||
└── Music/
|
||||
├── Artist Name/
|
||||
│ ├── Album Name/
|
||||
│ │ ├── 01 - Track Name.flac
|
||||
│ │ └── ...
|
||||
│ └── ...
|
||||
└── ...
|
||||
```
|
||||
|
||||
## Files Modified
|
||||
|
||||
| Path | Purpose |
|
||||
|------|---------|
|
||||
| `/etc/fstab` | Drive mount entry added (one line) |
|
||||
|
||||
## Services
|
||||
|
||||
| Service | Port | Purpose |
|
||||
|---------|------|---------|
|
||||
| `plexmediaserver.service` | 32400 | Plex Media Server web interface and streaming |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Can't access Plex web interface
|
||||
|
||||
- Check Plex is running: `sudo systemctl status plexmediaserver`
|
||||
- Check firewall: `sudo ufw status` — port 32400 should be ALLOW
|
||||
- Try `http://localhost:32400/web` on the server itself first
|
||||
|
||||
### Drive not mounting after reboot
|
||||
|
||||
- Check fstab syntax: `cat /etc/fstab`
|
||||
- Test it: `sudo mount -a` (mounts all fstab entries)
|
||||
- Check the UUID is correct: `sudo blkid`
|
||||
|
||||
### Plex can't see files on the media drive
|
||||
|
||||
- Check permissions: `ls -la /mnt/media`
|
||||
- Plex runs as the `plex` user — it needs read access to your media:
|
||||
```bash
|
||||
sudo chmod -R 755 /mnt/media
|
||||
sudo chown -R plex:plex /mnt/media
|
||||
```
|
||||
Or add the plex user to your group:
|
||||
```bash
|
||||
sudo usermod -aG your-username plex
|
||||
sudo systemctl restart plexmediaserver
|
||||
```
|
||||
|
||||
### "No .deb file found" error
|
||||
|
||||
- Make sure the file is in `~/Downloads/` (not a subdirectory)
|
||||
- The filename must start with `plexmediaserver` (e.g. `plexmediaserver_1.40.0.1234_amd64.deb`)
|
||||
|
||||
## Updating Plex
|
||||
|
||||
Download the new .deb from plex.tv and install it:
|
||||
|
||||
```bash
|
||||
sudo dpkg -i ~/Downloads/plexmediaserver*.deb
|
||||
sudo systemctl restart plexmediaserver
|
||||
```
|
||||
|
||||
## Uninstalling
|
||||
|
||||
```bash
|
||||
# Stop and remove Plex
|
||||
sudo systemctl stop plexmediaserver
|
||||
sudo systemctl disable plexmediaserver
|
||||
sudo apt remove --purge plexmediaserver
|
||||
|
||||
# Remove firewall rule
|
||||
sudo ufw delete allow 32400/tcp
|
||||
|
||||
# Remove the fstab entry (edit manually)
|
||||
sudo nano /etc/fstab
|
||||
# Delete the line this script added, then:
|
||||
sudo umount /mnt/media
|
||||
|
||||
# Remove Plex data (WARNING: deletes all library metadata)
|
||||
sudo rm -rf /var/lib/plexmediaserver
|
||||
```
|
||||
|
||||
## Credits
|
||||
|
||||
- [Plex](https://www.plex.tv/) - Media server software
|
||||
|
||||
## License
|
||||
|
||||
This project is provided as-is.
|
||||
106
plexint.sh
106
plexint.sh
|
|
@ -1,21 +1,34 @@
|
|||
#!/usr/bin/env bash
|
||||
# ==============================================================================
|
||||
# Plex Media Server Installer with Drive Mount Setup
|
||||
#
|
||||
# install_and_mount.sh
|
||||
# A two-in-one setup script for building a Plex media server on Ubuntu or
|
||||
# Linux Mint. It handles the two things you always need to do when setting
|
||||
# up a new media server:
|
||||
#
|
||||
# This script does two main tasks in one go:
|
||||
# 1) Helps you select and mount a drive/partition at boot (via /etc/fstab).
|
||||
# 2) Installs Plex Media Server from a local .deb file in your ~/Downloads folder,
|
||||
# and opens port 32400 via UFW.
|
||||
# Part A: Mount your media drive permanently (via /etc/fstab)
|
||||
# - Shows available drives/partitions
|
||||
# - Detects UUID for reliable mounting (doesn't break if device order changes)
|
||||
# - Adds the mount to /etc/fstab so it survives reboots
|
||||
#
|
||||
# If the user selects 'exfat' as the file system, we do NOT install exfat-fuse or exfat-utils,
|
||||
# assuming the Ubuntu-based system already supports exFAT natively (e.g., Ubuntu 20.04+).
|
||||
# Part B: Install Plex Media Server
|
||||
# - Installs from a .deb file you've downloaded to ~/Downloads/
|
||||
# - Handles dependencies automatically
|
||||
# - Enables the Plex service to start on boot
|
||||
# - Opens port 32400 in the firewall (UFW)
|
||||
#
|
||||
# Prerequisites:
|
||||
# - Ubuntu 20.04+ or Linux Mint 20+
|
||||
# - An external or internal drive for media storage
|
||||
# - Plex .deb file downloaded to ~/Downloads/
|
||||
# (download from https://www.plex.tv/media-server-downloads/)
|
||||
# - Run with sudo: sudo ./plexint.sh
|
||||
# ==============================================================================
|
||||
|
||||
set -e # Exit on any error
|
||||
set -e # Exit immediately if any command fails
|
||||
|
||||
###############################################################################
|
||||
# 0. Root Check
|
||||
###############################################################################
|
||||
# Root is required because this script modifies /etc/fstab (system mount
|
||||
# config), installs packages with apt, and manages systemd services.
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "ERROR: This script must be run with sudo (root privileges)."
|
||||
exit 1
|
||||
|
|
@ -26,9 +39,16 @@ echo " Combined Setup: Drive Mount + Plex Installation"
|
|||
echo "======================================================="
|
||||
echo
|
||||
|
||||
###############################################################################
|
||||
# 1. MOUNT DRIVE
|
||||
###############################################################################
|
||||
# ==================== Part A: Drive Mount Setup ====================
|
||||
#
|
||||
# Most media servers need a dedicated drive for storing movies, TV shows,
|
||||
# music, etc. This section helps mount that drive permanently so it's
|
||||
# available after every reboot.
|
||||
#
|
||||
# We use lsblk to show available drives, then ask the user to pick one.
|
||||
# The mount is configured via /etc/fstab using the drive's UUID (not the
|
||||
# device path like /dev/sdb1) because device paths can change if you add
|
||||
# or remove drives, but UUIDs are permanent identifiers.
|
||||
echo "-----------------------------"
|
||||
echo " Part A: Drive Mount Setup"
|
||||
echo "-----------------------------"
|
||||
|
|
@ -36,7 +56,8 @@ echo
|
|||
echo "Below are the available drives/partitions on your system:"
|
||||
echo
|
||||
|
||||
# List block devices
|
||||
# Show drives with their sizes, types, current mount points, and filesystem
|
||||
# types. The -p flag shows full device paths (e.g. /dev/sdb1 not just sdb1).
|
||||
lsblk -p -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE
|
||||
|
||||
echo
|
||||
|
|
@ -49,7 +70,10 @@ if [[ ! -b "$DEVICE_PATH" ]]; then
|
|||
echo "Aborting drive-mount portion."
|
||||
echo
|
||||
else
|
||||
# Attempt to get UUID
|
||||
# Try to get the drive's UUID using blkid. UUID is preferred over device
|
||||
# paths in /etc/fstab because /dev/sdX names can change between reboots
|
||||
# (e.g. if you plug in a USB drive before the media drive). UUIDs are
|
||||
# unique identifiers burned into the filesystem and never change.
|
||||
UUID_FOUND=$(blkid -s UUID -o value "${DEVICE_PATH}" 2>/dev/null || true)
|
||||
if [[ -z "$UUID_FOUND" ]]; then
|
||||
echo "WARNING: Could not detect a UUID for '${DEVICE_PATH}'."
|
||||
|
|
@ -76,7 +100,10 @@ else
|
|||
echo "No additional exFAT packages will be installed."
|
||||
fi
|
||||
|
||||
# We'll keep it simple: use 'defaults' for mount options, pass=2
|
||||
# Build the fstab entry. "defaults" enables standard mount options
|
||||
# (read/write, auto-mount, etc.). The "0 2" at the end means:
|
||||
# 0 = don't include in dump backups
|
||||
# 2 = fsck checks this drive second (after the root filesystem)
|
||||
MOUNT_OPTS="defaults"
|
||||
FSTAB_LINE="${DEVICE_IDENTIFIER} ${MOUNT_POINT} ${FS_TYPE} ${MOUNT_OPTS} 0 2"
|
||||
|
||||
|
|
@ -98,9 +125,15 @@ else
|
|||
fi
|
||||
fi
|
||||
|
||||
###############################################################################
|
||||
# 2. INSTALL PLEX
|
||||
###############################################################################
|
||||
# ==================== Part B: Plex Media Server Installation ====================
|
||||
#
|
||||
# Plex Media Server is a media streaming server that organises your movies,
|
||||
# TV shows, music, and photos and streams them to any device on your network
|
||||
# (or remotely over the internet).
|
||||
#
|
||||
# Plex distributes Linux packages as .deb files (for Debian/Ubuntu/Mint).
|
||||
# The user must download it manually from plex.tv because it requires
|
||||
# accepting their terms of service. We look for it in ~/Downloads/.
|
||||
echo
|
||||
echo "-----------------------------"
|
||||
echo " Part B: Plex Installation"
|
||||
|
|
@ -110,8 +143,9 @@ echo
|
|||
read -rp "Would you like to install Plex Media Server now? (y/n): " INSTALL_PLEX
|
||||
if [[ "$INSTALL_PLEX" =~ ^[Yy]$ ]]; then
|
||||
|
||||
# 2.1. Identify the original user for the Downloads folder
|
||||
# (so we can find the .deb in ~<user>/Downloads)
|
||||
# Figure out the real user's home directory. When running with sudo,
|
||||
# $USER is "root" but $SUDO_USER is the person who typed "sudo".
|
||||
# We need their Downloads folder, not root's.
|
||||
if [[ -n "$SUDO_USER" ]]; then
|
||||
ORIGINAL_USER="$SUDO_USER"
|
||||
else
|
||||
|
|
@ -119,15 +153,18 @@ if [[ "$INSTALL_PLEX" =~ ^[Yy]$ ]]; then
|
|||
fi
|
||||
DOWNLOADS_DIR="$(eval echo ~${ORIGINAL_USER})/Downloads"
|
||||
|
||||
# 2.2. Update system packages
|
||||
# Update the package database and install prerequisites:
|
||||
# curl: For downloading files (used by Plex internally)
|
||||
# apt-transport-https: Allows apt to fetch packages over HTTPS
|
||||
# gnupg: GPG key handling for package verification
|
||||
echo "Updating package list..."
|
||||
apt-get update -y
|
||||
|
||||
# 2.3. Install dependencies
|
||||
echo "Installing curl, apt-transport-https, gnupg..."
|
||||
apt-get install -y curl apt-transport-https gnupg
|
||||
|
||||
# 2.4. Find the Plex .deb file in ~/Downloads
|
||||
# Look for the Plex .deb in the user's Downloads folder. The filename
|
||||
# typically looks like "plexmediaserver_1.40.0.1234-abcdef_amd64.deb".
|
||||
PLEX_DEB=$(ls -1 "${DOWNLOADS_DIR}"/plexmediaserver*.deb 2>/dev/null || true)
|
||||
|
||||
if [[ -z "$PLEX_DEB" ]]; then
|
||||
|
|
@ -138,25 +175,32 @@ if [[ "$INSTALL_PLEX" =~ ^[Yy]$ ]]; then
|
|||
echo "$PLEX_DEB"
|
||||
echo "Installing Plex Media Server..."
|
||||
|
||||
# Attempt to install
|
||||
# Install the .deb package. dpkg -i may fail if dependencies are missing
|
||||
# (it doesn't resolve them automatically). That's OK — apt-get -f install
|
||||
# runs right after and pulls in any missing dependencies, then retries
|
||||
# the failed package installation.
|
||||
dpkg -i "$PLEX_DEB" || true
|
||||
|
||||
# Fix missing dependencies if dpkg complained
|
||||
apt-get -f install -y
|
||||
|
||||
# Enable and start Plex
|
||||
# Enable the Plex service so it starts automatically on every boot,
|
||||
# and start it now so the user can access it immediately.
|
||||
echo "Enabling Plex Media Server on boot..."
|
||||
systemctl enable plexmediaserver.service
|
||||
|
||||
echo "Starting Plex Media Server..."
|
||||
systemctl start plexmediaserver.service
|
||||
|
||||
# 2.5. Configure firewall
|
||||
# Open port 32400 in the firewall. This is Plex's default web interface
|
||||
# port — without this, other devices on the network can't access the
|
||||
# server. UFW (Uncomplicated Firewall) is the standard firewall on
|
||||
# Ubuntu/Mint.
|
||||
echo "Installing ufw (if not installed) and allowing port 32400/tcp..."
|
||||
apt-get install -y ufw
|
||||
ufw allow 32400/tcp || true
|
||||
|
||||
# Optionally enable ufw (uncomment if desired):
|
||||
# Note: UFW is not enabled by default. Uncomment the line below if you
|
||||
# want to activate the firewall. Be careful — this will block all ports
|
||||
# except those explicitly allowed (like 32400 above and SSH port 22).
|
||||
# ufw enable
|
||||
|
||||
echo
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue