The problem with installing manually is if you want to use the Arducam motorized focus camera.
Installing manually
The generic setup instructions boil down to
This starts it up manually
/path/to/OctoPrint/bin/octoprint serve
Basic Installation
cd ~ sudo apt update sudo apt install python3-pip python3-dev python3-setuptools python3-venv git libyaml-dev build-essential mkdir OctoPrint && cd OctoPrint python3 -m venv venv source venv/bin/activate
OctoPrint and it's Python dependencies can then be installed using pip:
pip install pip --upgrade pip install octoprint
Note
If this installs an old version of OctoPrint, pip probably still has something cached. In that case add --no-cache-dir to the install command, e.g. pip install --no-cache-dir octoprint To make this permanent, clean pip's cache: rm -r ~/.cache/pip
Starting the server for the first time
pi@raspberrypi:~ $ ~/OctoPrint/venv/bin/octoprint serve 2020-11-03 17:39:17,979 - octoprint.startup - INFO - *************************** 2020-11-03 17:39:17,980 - octoprint.startup - INFO - Starting OctoPrint 1.4.2 2020-11-03 17:39:17,980 - octoprint.startup - INFO - ***************************
Automatic start up
Download the init script files from OctoPrint's repository, move them to their respective folders and make the init script executable:
wget https://github.com/OctoPrint/OctoPrint/raw/master/scripts/octoprint.service && sudo mv octoprint.service /etc/systemd/system/octoprint.service
Adjust the paths to your octoprint binary in /etc/systemd/system/octoprint.service. If you set it up in a virtualenv as described above make sure your
/etc/systemd/system/octoprint.service looks like this:
ExecStart=/home/pi/OctoPrint/venv/bin/octoprint
Then add the script to autostart using sudo systemctl enable octoprint.service.
This will also allow you to start/stop/restart the OctoPrint daemon via
sudo service octoprint {start|stop|restart}
Make everything accessible on port 80
If you want to have nicer URLs or simply need OctoPrint to run on port 80 (http's default port) due to some network restrictions, I recommend using HAProxy 593 as a reverse proxy instead of configuring OctoPrint to run on port 80. This has the following advantages:
Setup on Raspbian is as follows:
pi@raspberrypi ~ $ sudo apt install haproxy
I'm using the following configuration in /etc/haproxy/haproxy.cfg, for further examples take a look at the post here 385:
global maxconn 4096 user haproxy group haproxy daemon log 127.0.0.1 local0 debug defaults log global mode http option httplog option dontlognull retries 3 option redispatch option http-server-close option forwardfor maxconn 2000 timeout connect 5s timeout client 15min timeout server 15min frontend public bind :::80 v4v6 use_backend webcam if { path_beg /webcam/ } default_backend octoprint backend octoprint reqrep ^([^\ :]*)\ /(.*) \1\ /\2 option forwardfor server octoprint1 127.0.0.1:5000 backend webcam reqrep ^([^\ :]*)\ /webcam/(.*) \1\ /\2 server webcam1 127.0.0.1:8080
This will make OctoPrint accessible under http:<your Raspi's IP>/ and make mjpg-streamer accessible under http:<your Raspi's IP>/webcam/. You'll also need to modify /etc/default/haproxy and enable HAProxy by setting ENABLED to 1. After that you can start HAProxy by issuing the following command
sudo service haproxy start
Pointing your browser to http:<your Raspi's IP> should greet you with OctoPrint's UI. Now open the settings and switch to the webcam tab or alternatively open ~/.octoprint/config.yaml. Set the webcam's stream URL from http:<your Raspi's IP>:8080/?action=stream to /webcam/?action=stream (leave the snapshotUrl at http://127.0.0.1:8080/?action=snapshot!) and reload the page.
If everything works you can add the following lines to ~/.octoprint/config.yaml (just create it if it doesn't exist yet) to make the server bind only to the loopback interface:
server: host: 127.0.0.1
Restart the server. OctoPrint should still be available on port 80, including the webcam feed (if enabled).
Updating & changing release channels & rolling back
OctoPrint should offer to update itself automatically and also allow you to switch to other Release Channels out of the box.
If for whatever reason you want or need to perform any of this manually however, perform the following commands to install <version> of OctoPrint
source ~/OctoPrint/venv/bin/activate pip install octoprint==<version>
e.g.
source ~/OctoPrint/venv/bin/activate pip install octoprint==1.4.0
Support restart/shutdown through OctoPrint's system menu
In the UI, under Settings > Commands, configure the following commands:
Optional: Webcam
If you also want webcam and timelapse support, you'll need to download and compile MJPG-Streamer:
cd ~ sudo apt install subversion libjpeg62-turbo-dev imagemagick ffmpeg libv4l-dev cmake git clone https://github.com/jacksonliam/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental export LD_LIBRARY_PATH=. make
Heads-up The required packages depend on the underlying version of Debian! The above is what should work on the current Debian Stretch or Buster based images of Raspbian. For Jessie use: sudo apt install subversion libjpeg62-turbo-dev imagemagick libav-tools libv4l-dev cmake For Wheezy or older (you should update...) use: sudo apt install subversion libjpeg8-dev imagemagick libav-tools libv4l-dev cmake
This should hopefully run through without any compilation errors. You should then be able to start the webcam server using:
./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so"
For some webcams (including the PS3 Eye) you'll need to force the YUV mode by using the following start command:
./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so"