Boot Raspberry Pi 3B with USB SSD

Ensure USB Boot OTP is set

To enable the USB boot bit, the Raspberry Pi 3 needs to be booted from an SD card with a config option to enable USB boot mode. Once this bit has been set, the SD card is no longer required. Note that any change you make to the OTP is permanent and cannot be undone.

You can use any SD card running Raspbian or Raspbian Lite to program the OTP bit. First, prepare the /boot directory with up to date boot files:-

 sudo apt update && sudo apt upgrade && sudo reboot

Then enable USB boot mode with this code:-

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

This adds program_usb_boot_mode=1 to the end of /boot/config.txt. Reboot the Raspberry Pi with:-

sudo reboot

Then check that the OTP has been programmed with:-

 vcgencmd otp_dump | grep 17:

Check that the output 17:3020000a is shown. If it is not, then the OTP bit has not been successfully programmed. In this case, go through the programming procedure again. If the bit is still not set, this may indicate a fault in the Pi hardware itself.

If you wish, you can remove the ‘program_usb_boot_mode’ line from config.txt, so that if you put the SD card in another Raspberry Pi, it won’t program USB boot mode. Make sure there is no blank line at the end of config.txt. You can edit config.txt using the nano editor using the command:-

sudo nano /boot/config.txt              # then scroll all the way to the bottom

Ensure Pi waits for USB to initialise

There are two different things which go by the same name program_usb_boot_timeout (previously called program_usb_timeout): the OTP bit and the corresponding parameter in config.txt. The latter is used to set the former (by booting from SD card), but once the OTP bit is set, there is no need for the SD card anymore. And just in case it’s not clear, OTP is a kind of flash memory, so its content is persistent across reboots.

So the full procedure goes like this:

  • prepare a bootable SD card and boot from it
  • run sudo BRANCH=next rpi-update
  • add program_usb_boot_timeout=1 to your config.txt
  • reboot (this is the moment OTP bit will be programmed)
  • power off, remove the SD card and plug USB device
  • power on.

Fusermount3 error with rclone

Some distributions do not name the fusermount directory as fusermount3 which rclone needs in certain circumstances (mounting as daemon).  To fix this, create a simlink to the fusermount directory in path

sudo ln -s /bin/fusermount /bin/fusermount3

Thats it, rclone will now mount without a fuse error.  you may need to alter the origin location in your environment to reflect where fusermount lives.

QNAP TS-231: configure autorun.sh

Here are some notes for setting up an autorun script on my QNAP TS-231:

Connect via ssh and issue the following commands to mount the partition where the configuration resides:

ubiattach -m  6  -d  2 
/ bin / mount  -t ubifs ubi2:config / tmp / config

Edit the autorun.sh file:

vi  / tmp / config / autorun.sh

Assign execute permissions and unmount the configuration partition:

chmod + x /tmp/config/autorun.sh umount / tmp / config 
ubidetach -m  6

Enable autorun.sh to start automatically from the web interface by going to “Control Panel / System / Hardware / General” and enable the “Run user-defined processes during startup” checkbox:

Source: https://wiki.qnap.com/wiki/Running_Your_Own_Application_at_Startup

Change media location in Plex Database

It seems that Plex gives us no real option to mass change a root directory for indexed media without re scanning the entire media directory.

By using SQLite browser from SQLite Browser we can make the necessary changes .

An example is to have media location changed from /mnt/SMB to /mnt/media. Using SQLite browser we can open the Plex database and run the following SQL statement:

UPDATE media_parts SET file = replace(file, '/mnt/SMB', '/mnt/media') where file like '%/mnt/SMB%'

The above command will change the locations in the Plex database from /mnt/SMB to /mnt/media without the need to reindex your whole Plex library.

I hope this helps someone.

Exclude filetypes with rclone

If you want tofilter filetypes synced by rclone, the following is what you need:

--exclude=*.jpg --exclude=*.txt

and test it using rclone ls remote: -vv

and you can combine them like so
--exclude=*.{jpg,txt}

How to Set Up a Raspberry Pi Web Server

This tutorial aims to host a simple web server on a Raspberry Pi. This produces a very lightweight web server and works well to host a microservice or to test a website without deploying a full web server on the cloud. We will use Docker on Raspbian OS and spin up an Apache 2.4 container from Docker Hub.

Prerequisites

The only prerequisite to following this guide is that you have SSH connection enabled, Raspberry Pi 1, 2, 3, 4 or Pi Zero W with a running Raspbian OS.

Installing Docker to the Raspberry Pi

Step 1: Update and Upgrade

Before installing Docker we need to make sure that the Raspberry Pi is running the latest software.

sudo apt-get update && sudo apt-get upgrade

Step 2: Download the Script to Install Docker on Raspberry Pi

downloading and running the script is very easy just copy and paste the command in the terminal:

curl -fsSL https://get.docker.com -o get-docker.sh

To execute the installation script enter this command:

sudo sh get-docker.sh

Now you have to wait for the script will install all the required packages in Raspberry Pi.

Step 3: Add a Non-Root User to the Docker Group

By default, only root users can run the docker containers. If you are not logged in as the root you will need to use the sudo prefix every time and it’s not recommended. We can easily skip by adding the non-root user to the Docker group here is how to do that:

sudo usermod -aG docker [user_name]

To add the Pi user (the default user in Raspberry Pi OS), use the command:

sudo usermod -aG docker pi

Setting up Apache on Raspberry Pi

One of the best things about the Docker ecosystem is that there are tens of standard docker containers that you can easily download and use.

In this article, we will instantiate an Apache 2.4 container named raspberry-pi-web-server, detached from the current terminal. We will use an image called httpd:2.4 from Docker Hub.

Our plan is to have requests made to raspberry pi’s local IP address on port 8080 be redirected to port 80 on the container. Also, instead of serving content from the container itself, we will serve a simple web page from /home/user/website.

We will do this by mapping /home/user/website/ on the /usr/local/apache2/htdocs/ on the container. Note that you will need to use sudo or login as root to proceed, and do not omit the forward slashes at the end of each directory.

# sudo docker run -dit --name raspberry-pi-web-server -p 8080:80 -v /home/user/website/:/usr/local/apache2/htdocs/ httpd:2.4

At this point, our Apache container should be up and running.

$ sudo docker ps

Now let’s create a simple web page named raspberry-pi-web-server.html inside the /home/user/website directory.

# vi /home/user/website/raspberry-pi-web-server.html

Add the following sample HTML content to the file.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Raspberry Pi Web Server</title>
</head>
<body>
    <h1>Learn Docker</h1>   
</body>
</html>

Next, point your browser to Server-IP:8080/raspberry-pi-web-server.html (where Server-IP is your Raspberry Pi IP address).

If you wish, you can now stop the container.

$ sudo docker stop raspberry-pi-web-server

and remove it:

$ sudo docker rm raspberry-pi-web-server

To finish cleaning up, you may want to delete the image that was used in the container (omit this step if you’re planning on creating other Apache 2.4 containers soon).

$ sudo docker image remove httpd:2.4

Conclusion

In this article, we explained how to Set Up a Raspberry Pi Web Server using docker.

Plex Database Cache Setting

The comands below are for Plex in Docker, however you can change the paths relevant to any Plex install.

To get current cache size…

sqlite3 "/opt/appdata/plex/database/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db" "PRAGMA default_cache_size;"

Change cache size (and confirm value)

sqlite3 "/opt/appdata/plex/database/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db" "PRAGMA default_cache_size = 6000000;" "PRAGMA default_cache_size;"

The default cache size is 20000, if you have thousands of movies and tv shows set it to a larger value (I changed it to 6000000, but any number will work for you)

Before making changes to the sqllite database stop the plex server and service then edit and restart.

also change the paths to your plex installation paths as mine are custom.
ALWAYS MAKE A BACKUP FIRST OF YOUR ENTIRE INSTALLATION FOLDER AND DATABASE STUFF!!!