Nano Pi NEO 2にOctoPrintを手動インストールしたい！

## はじめに
OctoPrintは3DプリンタとUSB接続されたRaspPi等にインストールしておくことで，同一ネットワークにあるブラウザからプリンタを操作したりスライサから直接gcodeを転送できたりする便利ソフトです．

OctoPrintの導入は多くの場合，RaspPi用にOctoPrint設定済みOSイメージであるOcotoPiをSDに焼き込むだけで完了できます．しかし，Nano Pi Neo 2のようにOctoPiイメージが提供されていないボードを利用する場合には自前でインストールする必要があります．本稿はそのログを残すものです．


## インストール

基本的に[参考ページ](https://community.octoprint.org/t/setting-up-octoprint-on-a-raspberry-pi-running-raspberry-pi-os-debian/2337#basic-installation-1)の手順でOKです．

まずはPython3がインストールされていることを確認します．

```bash
python3 --version
```

Python3がインストール済みであることを確認したら，ホームに移動してからインストールを始めます．まずは関連パッケージをインストールします．

```bash
cd ~
sudo apt update
sudo apt install python3-pip python3-dev python3-setuptools python3-venv git libyaml-dev build-essential
```

`OctoPrint` ディレクトリを作成して，Python仮想環境を作成します．

```bash
mkdir OctoPrint && cd OctoPrint
python3 -m venv venv
source venv/bin/activate
```

仮想環境内に入れたら，pipでOctoPrintをインストールします．

```bash
pip install pip --upgrade
pip install octoprint
```

## シリアルポート設定

USB接続でつなぐプリンタにアクセスするため，下記コマンドシリアルポートの設定を行います．

```bash
sudo usermod -a -G tty [YOUR_USER_NAME]
sudo usermod -a -G dialout [YOUR_USER_NAME]
```

[YOUR_USER_NAME]にはお使いのユーザ名を指定します．例えば，ユーザ名が `pi` であれば，次のようになります．

```bash
sudo usermod -a -G tty [YOUR_USER_NAME]
sudo usermod -a -G dialout [YOUR_USER_NAME]
```

この設定を有効にするには，一度ログアウトしてからログインする必要があります．僕はとりあえずで再起動しています．

## 手動起動

インストールとシリアルポートの設定が完了したら，まずは手動でOctoPrintを起動してみましょう．起動は下記コマンドで行えます．

```bash
~/OctoPrint/venv/bin/octoprint serve
```

しばらく待って，次のように `Starting ...` のログが出たらOKです．

```bash
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 - ***************************
```

起動できたら，同じネットワークにあるマシンのブラウザからOctoPrintにアクセスしてみましょう．ブラウザのURL欄に `http://[YOUR_IP_ADDR]:5000` と入力します．[YOUR_IP_ADDR]にはお使いのNano Piに割り当てられたIPアドレスを指定してください．例えば，Nano Piのアドレスが `192.168.1.33` だったとすれば，`http://192.168.1.33:5000`   と入力します．OctoPrintのUIが表示されればOKです．

## 自動起動設定

先程は手動で起動しましたが，Nano Piの電源を入れ直す度にこの手順を踏むのは面倒なので，自動起動を設定しましょう．まずはinitスクリプトをDLします．

```bash
cd ~
wget https://github.com/OctoPrint/OctoPrint/raw/master/scripts/octoprint.service
```

上記の手順でPython仮想環境にOctoPrintをインストールした場合は，スクリプト内の実行ファイル指定は `ExecStart=/home/pi/OctoPrint/venv/bin/octoprint` になっている必要があります．念のため，スクリプトの中身を確認してみます．

```bash
cat octoprint.service
```

次のようなログが出ていればOKです．もし違っていたらお好みのエディタでoctoprint.serviceを編集してください．

```bash
pi@nanopineo2:~$ cat octoprint.service 
[Unit]
Description=The snappy web interface for your 3D printer
After=network-online.target
Wants=network-online.target

[Service]
Environment="LC_ALL=C.UTF-8"
Environment="LANG=C.UTF-8"
Type=exec
User=pi
ExecStart=/home/pi/OctoPrint/venv/bin/octoprint

[Install]
```

続いて，DLしたスクリプトを自動起動で読み込まれるように移動します．

```bash
 sudo mv octoprint.service /etc/systemd/system/octoprint.service
```

最後に下記コマンドで自動起動をオンにすれば完成です．

```bash
sudo systemctl enable octoprint.service
```

念のためNano Piを再起動して，OctoPrintが自動起動するか確認すると良いでしょう．

## 参考

[https://community.octoprint.org/t/setting-up-octoprint-on-a-raspberry-pi-running-raspberry-pi-os-debian/2337#basic-installation-1](https://community.octoprint.org/t/setting-up-octoprint-on-a-raspberry-pi-running-raspberry-pi-os-debian/2337#basic-installation-1)