Skip to content

Instantly share code, notes, and snippets.

@Nottt
Last active April 6, 2024 13:36
Show Gist options
  • Save Nottt/d7a3ae3c7b05f74947084ea3420141e2 to your computer and use it in GitHub Desktop.
Save Nottt/d7a3ae3c7b05f74947084ea3420141e2 to your computer and use it in GitHub Desktop.

Revisions

  1. Nottt revised this gist Oct 21, 2017. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions cloudbox-install.sh
    Original file line number Diff line number Diff line change
    @@ -176,7 +176,7 @@ fi
    if [ -z $PLEXDRIVE ]; then

    tput setaf 1; echo "You'll be redirected to plexdrive setup, you have 4 minutes to complete it" && tput setaf 7;
    timeout --foreground 240s /opt/plexdrive/plexdrive mount -v 3 --refresh-interval=1m --chunk-check-threads=8 --chunk-load-threads=8 --chunk-load-ahead=4 --max-chunks=250 --fuse-options=allow_other,read_only --config=/opt/plexdrive --cache-file=/opt/plexdrive/cache.bolt /mnt/plexdrive
    timeout --foreground 240s /opt/plexdrive/plexdrive mount -v 3 --refresh-interval=1m --chunk-check-threads=8 --chunk-load-threads=8 --chunk-load-ahead=4 --max-chunks=250 --fuse-options=allow_other,read_only --config=/opt/plexdrive --cache-file=/opt/plexdrive/cache.bolt /mnt/plexdrive && systemctl enable plexdrive

    else
    rclone copy gdrive:$PLEXDRIVE /opt/plexdrive && systemctl enable plexdrive
    @@ -285,5 +285,5 @@ EOF

    # Make sure the permissions are correct

    chown $user:$user -R /mnt && chmod 770 -R /mnt && chown $user:$user -R /opt && chmod 770 -R /opt
    echo "Server will reboot now. Enjoy"
    chown $user:$user -R /mnt && chmod 770 -R /mnt && chown $user:$user -R /opt && chmod 770 -R /opt
    echo "Server will reboot now. Enjoy" && reboot
  2. Nottt revised this gist Oct 21, 2017. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions cloudbox-install.sh
    Original file line number Diff line number Diff line change
    @@ -88,7 +88,7 @@ done

    # Install stuff, set time to UTC

    timedatectl set-timezone Etc/UTC && apt-get update && apt-get upgrade -y && apt install linux-generic-hwe-16.04 -y && apt install fuse cifs-utils iotop lsof pv ncdu nload htop iotop git python-pip unattended-upgrades-y && easy_install -U pip && pip install ansible==2.3.1.0 && apt-get autoremove -y && apt-get autoclean -y
    timedatectl set-timezone Etc/UTC && apt-get update && apt-get upgrade -y && apt install linux-generic-hwe-16.04 -y && apt install fuse cifs-utils iotop lsof pv ncdu nload htop iotop git python-pip unattended-upgrades -y && easy_install -U pip && pip install ansible==2.3.1.0 && apt-get autoremove -y && apt-get autoclean -y

    # Create user for cloudbox

    @@ -111,7 +111,7 @@ git clone http://github.com/l3uddz/cloudbox /home/$user/cloudbox/

    ## Change settings.yml

    cat > /home/$USER/cloudbox/settings.yml <<EOF
    cat > /home/$user/cloudbox/settings.yml <<EOF
    user: $user
    passwd: ""
    domain: $DOMAIN
  3. Nottt revised this gist Oct 21, 2017. 1 changed file with 56 additions and 19 deletions.
    75 changes: 56 additions & 19 deletions cloudbox-install.sh
    Original file line number Diff line number Diff line change
    @@ -9,26 +9,30 @@ echo $KERNEL
    if [ "$KERNEL" != "$BASE" ]; then
    tput setaf 1; echo "You don't need to reboot, continuing install" && tput setaf 7;
    else
    echo tput setaf 1; "You have to reboot to update kernel, please wait" && tput setaf 7;
    tput setaf 1; echo "You have to reboot to update kernel, please wait" && tput setaf 7;
    crontab -l | { cat; echo "@reboot /root/install.sh > /root/install.log 2>&1"; } | crontab -
    apt-get update && apt install linux-generic-hwe-16.04 -y && tput setaf 1; echo "Rebooting now" && reboot
    fi

    ## Set Variables

    if [ -z "$user" ] || [ -z "$DOMAIN" ] || [ -z "$EMAIL" ] || [ -z "$RCLONEREMOTE" ] || [ -z "$RCLONEBACKUP" ] || [ -z "$PLEXDRIVE" ] || [ -z "$LOCALSTORAGE" ] || ; then
    if [ -z "$user" ] || [ -z "$DOMAIN" ] || [ -z "$EMAIL" ] || [ -z "$RCLONEREMOTE" ] || [ -z "$RCLONEBACKUP" ] || [ -z "$PLEXDRIVE" ] || [ -z "$LOCALSTORAGE" ] || [ -z "$RCLONEID" ] || [ -z "$RCLONESECRET" ] || [ -z "$RCLONETOKEN" ] || [ -z "$PASSWORD" ]; then
    $user=$1
    $DOMAIN=$2
    $EMAIL=$3
    $RCLONEREMOTE=$4
    $RCLONEBACKUP=$5
    $PLEXDRIVE=$6
    $LOCALSTORAGE=$7
    $RCLONEID=$8
    $RCLONESECRET=$8
    $RCLONETOKEN=$9
    $PASSWORD=$10
    fi

    while [ -z "$user" ]; do
    >&2 echo -n 'Your desired User : '
    read USER
    read user
    done

    while [ -z "$DOMAIN" ]; do
    @@ -51,16 +55,37 @@ while [ -z "$RCLONEBACKUP" ]; do
    read RCLONEBACKUP
    done

    while [ -z "$PLEXDRIVE" ]; do
    >&2 echo -n 'If you have a plexdrive backup in google drive, insert rclone path here : '
    read PLEXDRIVE
    done
    PLEXDRIVE=
    >&2 echo -n 'If you have a plexdrive backup in google drive, insert rclone path here, or press enter : '
    read PLEXDRIVE

    while [ -z "$LOCALSTORAGE" ]; do
    >&2 echo -n 'How much disk space to use to cache files : '
    read LOCALSTORAGE
    done

    RCLONEID=
    >&2 echo -n 'Your rclone ID, just press enter if empty : '
    read RCLONEID


    RCLONESECRET=
    >&2 echo -n 'Your rclone secret, just press enter if empty : '
    read RCLONESECRET


    RCLONETOKEN=
    >&2 echo -n 'Your rclone token, just press enter if empty : '
    read RCLONETOKEN


    while [ -z "$PASSWORD" ]; do
    >&2 echo -n 'Your desired rutorrent password : '
    read PASSWORD
    done



    # Install stuff, set time to UTC

    timedatectl set-timezone Etc/UTC && apt-get update && apt-get upgrade -y && apt install linux-generic-hwe-16.04 -y && apt install fuse cifs-utils iotop lsof pv ncdu nload htop iotop git python-pip unattended-upgrades-y && easy_install -U pip && pip install ansible==2.3.1.0 && apt-get autoremove -y && apt-get autoclean -y
    @@ -94,7 +119,7 @@ cat > /home/$USER/cloudbox/settings.yml <<EOF
    nzbget:
    downloads: "/home/{{user}}/downloads/nzbget"
    rutorrent:
    passwd:
    passwd: $PASSWORD
    downloads: "/home/{{user}}/downloads/rutorrent"
    plex:
    tag: public
    @@ -123,25 +148,40 @@ cd /home/$user/cloudbox/ && ansible-playbook cloudbox.yml --tags full

    # Set rclone for user and root

    if [ -z $RCLONETOKEN ]; then
    rclone config && mkdir -p /opt/rclone/ && cp /root/.config/rclone/rclone.conf /opt/rclone/rclone.conf

    else

    mkdir -p /opt/rclone/
    cat > /opt/rclone/rclone.conf <<EOF
    [$RCLONEREMOTE]
    type = drive
    client_id =
    client_secret =
    token = {"access_token":
    client_id = $RCLONEID
    client_secret = $RCLONESECRET
    token = $RCLONETOKEN
    EOF

    cat > /root/.config/rclone/rclone.conf <<EOF
    [$RCLONEREMOTE]
    type = drive
    client_id =
    client_secret =
    token = {"access_token":
    client_id = $RCLONEID
    client_secret = $RCLONESECRET
    token = $RCLONETOKEN
    EOF
    fi

    # Setup plexdrive

    # Setup plexdrive if necessary files already exist on gdrive, otherwise do manually
    if [ -z $PLEXDRIVE ]; then

    tput setaf 1; echo "You'll be redirected to plexdrive setup, you have 4 minutes to complete it" && tput setaf 7;
    timeout --foreground 240s /opt/plexdrive/plexdrive mount -v 3 --refresh-interval=1m --chunk-check-threads=8 --chunk-load-threads=8 --chunk-load-ahead=4 --max-chunks=250 --fuse-options=allow_other,read_only --config=/opt/plexdrive --cache-file=/opt/plexdrive/cache.bolt /mnt/plexdrive

    else
    rclone copy gdrive:$PLEXDRIVE /opt/plexdrive && systemctl enable plexdrive
    fi


    # Grab Plex Autoscan URL

    @@ -191,8 +231,6 @@ rm -f /tmp/plex_sign_in

    >&2 echo "Your X_PLEX_TOKEN:"

    echo $X_PLEX_TOKEN && echo "This is your Plex Token"

    # Edit plex_autoscan config files

    cat > /opt/plex_autoscan/config/config.json <<EOF
    @@ -248,5 +286,4 @@ EOF
    # Make sure the permissions are correct

    chown $user:$user -R /mnt && chmod 770 -R /mnt && chown $user:$user -R /opt && chmod 770 -R /opt
    echo "Server will reboot now. Enjoy"

    echo "Server will reboot now. Enjoy"
  4. Nottt created this gist Oct 21, 2017.
    252 changes: 252 additions & 0 deletions cloudbox-install.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,252 @@
    #!/bin/bash
    # Docker Setup for streaming backend using cloudbox, intended to be run as root :
    ## To Do : Pass arguments to script if reboot is necessary, edit only the necessary line in plex-autoscan config file.

    KERNEL=$(uname -r)
    BASE=4.10
    echo $KERNEL

    if [ "$KERNEL" != "$BASE" ]; then
    tput setaf 1; echo "You don't need to reboot, continuing install" && tput setaf 7;
    else
    echo tput setaf 1; "You have to reboot to update kernel, please wait" && tput setaf 7;
    crontab -l | { cat; echo "@reboot /root/install.sh > /root/install.log 2>&1"; } | crontab -
    apt-get update && apt install linux-generic-hwe-16.04 -y && tput setaf 1; echo "Rebooting now" && reboot
    fi

    ## Set Variables

    if [ -z "$user" ] || [ -z "$DOMAIN" ] || [ -z "$EMAIL" ] || [ -z "$RCLONEREMOTE" ] || [ -z "$RCLONEBACKUP" ] || [ -z "$PLEXDRIVE" ] || [ -z "$LOCALSTORAGE" ] || ; then
    $user=$1
    $DOMAIN=$2
    $EMAIL=$3
    $RCLONEREMOTE=$4
    $RCLONEBACKUP=$5
    $PLEXDRIVE=$6
    $LOCALSTORAGE=$7
    fi

    while [ -z "$user" ]; do
    >&2 echo -n 'Your desired User : '
    read USER
    done

    while [ -z "$DOMAIN" ]; do
    >&2 echo -n 'Your domain : '
    read DOMAIN
    done

    while [ -z "$EMAIL" ]; do
    >&2 echo -n 'Your email : '
    read EMAIL
    done

    while [ -z "$RCLONEREMOTE" ]; do
    >&2 echo -n 'Desired name for rclone remote : '
    read RCLONEREMOTE
    done

    while [ -z "$RCLONEBACKUP" ]; do
    >&2 echo -n 'Desired path in google drive for backups : '
    read RCLONEBACKUP
    done

    while [ -z "$PLEXDRIVE" ]; do
    >&2 echo -n 'If you have a plexdrive backup in google drive, insert rclone path here : '
    read PLEXDRIVE
    done

    while [ -z "$LOCALSTORAGE" ]; do
    >&2 echo -n 'How much disk space to use to cache files : '
    read LOCALSTORAGE
    done

    # Install stuff, set time to UTC

    timedatectl set-timezone Etc/UTC && apt-get update && apt-get upgrade -y && apt install linux-generic-hwe-16.04 -y && apt install fuse cifs-utils iotop lsof pv ncdu nload htop iotop git python-pip unattended-upgrades-y && easy_install -U pip && pip install ansible==2.3.1.0 && apt-get autoremove -y && apt-get autoclean -y

    # Create user for cloudbox

    groupadd docker --system
    adduser --disabled-login --gecos "" $user && usermod -aG sudo $user && usermod -u 1010 $user && groupmod -g 1010 $user && usermod -aG docker $user

    # Open necessary ports, assumes ssh port is 22

    tput setaf 1; echo "WARNING : DO NOT USE A DIFFERENT PORT FOR SSH OTHER THAN 22 OR YOU WILL BE LOCKED OUT" && tput setaf 7;

    apt-get install ufw && ufw default deny incoming && ufw default allow outgoing && ufw allow 7421 && ufw allow 9000 && ufw allow 9117 && ufw allow 5075 && ufw allow 7878 && ufw allow 8989 && ufw allow 3000 && ufw allow 8181 && ufw allow 80 && ufw allow 443 && ufw allow 6789 && ufw allow 3111 && ufw allow ssh && ufw allow 32400 && ufw allow 3468 && echo "y" | ufw enable

    # Create necessary paths

    mkdir -p /mnt/unionfs /mnt/plexdrive /mnt/local /opt/plexdrive /root/.config/rclone/ /home/$user/downloads/ && chown $user:$user -R /mnt && chmod 770 -R /mnt

    # Install cloudbox

    git clone http://github.com/l3uddz/cloudbox /home/$user/cloudbox/

    ## Change settings.yml

    cat > /home/$USER/cloudbox/settings.yml <<EOF
    user: $user
    passwd: ""
    domain: $DOMAIN
    email: $EMAIL
    nzbget:
    downloads: "/home/{{user}}/downloads/nzbget"
    rutorrent:
    passwd:
    downloads: "/home/{{user}}/downloads/rutorrent"
    plex:
    tag: public
    transcodes: "/home/{{user}}/transcodes"
    plex_autoscan:
    ip: "0.0.0.0"
    rclone:
    version: 1.38
    unionfs_cleaner:
    max_local_gigabytes: $LOCALSTORAGE
    size_check_mins: 15
    rclone_remote: "$RCLONEREMOTE:"
    backup:
    tgz_dest: "/home/{{user}}/Backups"
    rsync_dest: rsync://somehost.com/Backups
    rclone_dest: $RCLONEBACKUP
    use_rsync: false
    use_rclone: true
    cron_time: weekly
    cron_state: absent
    EOF

    ## Install

    cd /home/$user/cloudbox/ && ansible-playbook cloudbox.yml --tags full

    # Set rclone for user and root

    cat > /opt/rclone/rclone.conf <<EOF
    [$RCLONEREMOTE]
    type = drive
    client_id =
    client_secret =
    token = {"access_token":
    EOF

    cat > /root/.config/rclone/rclone.conf <<EOF
    [$RCLONEREMOTE]
    type = drive
    client_id =
    client_secret =
    token = {"access_token":
    EOF

    # Setup plexdrive if necessary files already exist on gdrive, otherwise do manually

    rclone copy gdrive:$PLEXDRIVE /opt/plexdrive && systemctl enable plexdrive

    # Grab Plex Autoscan URL

    IP=$(curl ipecho.net/plain)

    sleep 5s
    key=$(awk -vFS=/ '$0 ~ "http://0.0.0.0:3468/"{print $NF}' /opt/plex_autoscan/*.log)
    tput setaf 1; echo "Your Plex Autoscan URL when adding to sonarr/etc is http://$IP:3468/$key - please save it" && tput setaf 7;

    # Grab the Plex AutoScan Token
    # credits: https://raw.githubusercontent.com/wernight/docker-plex-media-server/master/root/usr/local/bin/retrieve-plex-token

    if [ -z "$PLEX_LOGIN" ] || [ -z "$PLEX_PASSWORD" ]; then
    PLEX_LOGIN=$1
    PLEX_PASSWORD=$2
    fi

    while [ -z "$PLEX_LOGIN" ]; do
    >&2 echo -n 'Your Plex login (e-mail or username): '
    read PLEX_LOGIN
    done

    while [ -z "$PLEX_PASSWORD" ]; do
    >&2 echo -n 'Your Plex password: '
    read PLEX_PASSWORD
    done

    >&2 echo 'Retrieving a X-Plex-Token using Plex login/password...'

    curl -qu "${PLEX_LOGIN}":"${PLEX_PASSWORD}" 'https://plex.tv/users/sign_in.xml' \
    -X POST -H 'X-Plex-Device-Name: PlexMediaServer' \
    -H 'X-Plex-Provides: server' \
    -H 'X-Plex-Version: 0.9' \
    -H 'X-Plex-Platform-Version: 0.9' \
    -H 'X-Plex-Platform: xcid' \
    -H 'X-Plex-Product: Plex Media Server'\
    -H 'X-Plex-Device: Linux'\
    -H 'X-Plex-Client-Identifier: XXXX' --compressed >/tmp/plex_sign_in
    X_PLEX_TOKEN=$(sed -n 's/.*<authentication-token>\(.*\)<\/authentication-token>.*/\1/p' /tmp/plex_sign_in)
    if [ -z "$X_PLEX_TOKEN" ]; then
    cat /tmp/plex_sign_in
    rm -f /tmp/plex_sign_in
    >&2 echo 'Failed to retrieve the X-Plex-Token.'
    exit 1
    fi
    rm -f /tmp/plex_sign_in

    >&2 echo "Your X_PLEX_TOKEN:"

    echo $X_PLEX_TOKEN && echo "This is your Plex Token"

    # Edit plex_autoscan config files

    cat > /opt/plex_autoscan/config/config.json <<EOF
    {
    "DOCKER_NAME": "plex",
    "PLEX_DATABASE_PATH": "/opt/plex/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db",
    "PLEX_EMPTY_TRASH": true,
    "PLEX_EMPTY_TRASH_CONTROL_FILES": [
    "/mnt/unionfs/mounted.bin"
    ],
    "PLEX_EMPTY_TRASH_MAX_FILES": 100,
    "PLEX_EMPTY_TRASH_ZERO_DELETED": false,
    "PLEX_LD_LIBRARY_PATH": "/usr/lib/plexmediaserver",
    "PLEX_LOCAL_URL": "http://plex.{{domain}}",
    "PLEX_SCANNER": "/usr/lib/plexmediaserver/Plex\\ Media\\ Scanner",
    "PLEX_SECTION_PATH_MAPPINGS": {
    "1": [
    "/Movies/"
    ],
    "2": [
    "/TV/"
    ]
    },
    "PLEX_SUPPORT_DIR": "/var/lib/plexmediaserver/Library/Application\\ Support",
    "PLEX_TOKEN": "$X_PLEX_TOKEN",
    "PLEX_USER": "plex",
    "PLEX_WAIT_FOR_EXTERNAL_SCANNERS": true,
    "SERVER_ALLOW_MANUAL_SCAN": false,
    "SERVER_FILE_EXIST_PATH_MAPPINGS": {
    "/mnt/unionfs/Media": [
    "/data"
    ]
    },
    "SERVER_IP": "{{plex_autoscan.ip}}",
    "SERVER_MAX_FILE_CHECKS": 10,
    "SERVER_PASS": "{{plex_autoscan_pass.stdout}}",
    "SERVER_PATH_MAPPINGS": {
    "/data/TV/": [
    "/tv/"
    ],
    "/data/Movies/": [
    "/movies/"
    ]
    },
    "SERVER_PORT": 3468,
    "SERVER_SCAN_DELAY": 5,
    "USE_DOCKER": true,
    "USE_SUDO": false
    }
    EOF


    # Make sure the permissions are correct

    chown $user:$user -R /mnt && chmod 770 -R /mnt && chown $user:$user -R /opt && chmod 770 -R /opt
    echo "Server will reboot now. Enjoy"