最近動物機需要重裝,每次都需要重新設定,而且新的官方設定也會有所變動。因此,我在這裡做了一個簡單的紀錄。
我要有幾個需求
- BT下載機
- 外接 USB 硬碟
- 自動抓取番劇
- 線上 Web 存取檔案
我使用 Raspberry Pi 1 來完成這些任務。目前看來,Pi 1 能夠順利完成這些任務。之後我計劃將它放在朋友家,用於網路掛機。
切割磁區和掛載磁區
首先,我們需要查看當前的磁區狀態。這可以通過執行以下命令來完成:
執行上述命令後,你將看到類似以下的輸出:
接著,我們將使用以下命令來格式化我們的磁區:
1
|
sudo mkfs -t ext4 /dev/sda1
|
我們需要創建一個掛載磁區。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 我們需要創建一個掛載點
sudo mkdir -p /media/extHDD
# 我們將磁區掛載到我們剛剛建立的掛載點
sudo mount /dev/sda1 /media/extHDD
# 找出我們的磁區的UUID
sudo blkid
#/dev/sda1: UUID="4411c5bb-2392-45d8-a7ba-7b40275a84fd" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="42f5e0d3-01"
在/etc/fstab加下面設定
UUID="4411c5bb-2392-45d8-a7ba-7b40275a84fd" /media/extHDD ext4 rw,defaults,nofail 0 0
# 確認/etc/fstab 設定無錯誤
mount -a
#可用 df -mh 確認裝置是否有掛載
|
安裝 tranmission
1
2
|
sudo apt update
sudo apt-get install transmission-daemon
|
如果你需要更詳細的設定步驟,你可以參考以下的教學文章:
How to set up transmission-daemon on a Raspberry Pi and control it via web interface - Linux Tutorials - Learn Linux Configuration
安裝 flexget
我已經寫過很多次在樹莓派安裝 Flexget 的教學,無意間發現官方文件有更新,這次我決定按照官方的教學來操作。
官方文件看到
There may be better options for some of the steps, but this works (2022) well.
這個真的很好笑,可能後面幾年就不能跑了。
1
2
3
4
|
# Python3
sudo apt install python3-full libpython3-dev
# 我是無法抓 官方寫 Install distutils (necessary?)
# sudo apt install distutils
|
接著,我們需要下載並安裝 pip:
1
2
3
|
cd /tmp
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
|
然後,我們需要設定 pipx:
1
2
3
|
python3 -m pip install --user pipx
~/.local/bin/pipx ensurepath
source ~/.bashrc
|
接下來,我們可以下載並安裝 Flexget:
1
|
~/.local/bin/pipx install flexget
|
注意,如果你需要使用 transmission-rpc,你需要執行以下的命令:
1
|
pipx inject flexget "transmission-rpc>=3.0.0,<4.0.0"
|
接著,我們需要設定 Flexget 在系統開機時自動啟動。你可以參考 Flexget 的官方教學 來進行設定。
1
|
@reboot /usr/local/bin/flexget daemon start -d
|
注意,你需要將上述命令中的 /usr/local/bin/flexget
替換為你的 Flexget 的實際路徑。如果你不確定 Flexget 的路徑,你可以使用 which flexget
命令來查詢
1
|
/home/pi/.local/bin/flexget
|
最後,我們需要設定 Flexget 的密碼:
1
|
flexget web passwd <some_password>
|
設定完成後,你可以透過 http://pi1.local:5050 來登入 Flexget 的網頁介面。
以下是我個人的 Flexget 設定檔範例,你可以參考並根據你的需求進行修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
web_server: yes
templates:
default:
transmission:
host: 127.0.0.1
port: 9091
username: admin
password: admin
add_paused: no
path: /media/extHDD/Download/TV/{{task}}
free_space:
path: /media/extHDD/
space: 2000
from_transmission:
host: 127.0.0.1
port: 9091
username: admin
password: admin
only_complete: yes
if:
- "'季度全集' in category": reject
tasks:
"TV-Re: 從零開始的異世界生活 第二季":
rss:
url: https://share.dmhy.org/topics/rss/sort_id/2/rss.xml?keyword=%E7%95%B0%E4%B8%96%E7%95%8C%E7%94%9F%E6%B4%BB+team_id%3A604+BIG5+1080+25
other_fields: [category]
accept_all: yes
template: default
transmission:
path: /media/extHDD/Download/TV/202007/{{task[3:]}}
"TV-英雄王 為了窮盡武道而轉生 而後成為世界最強見習騎士":
rss:
url: https://share.acgnx.se/rss-sort-1.xml?keyword=%E8%8B%B1%E9%9B%84%E7%8E%8B+%E6%84%9B%E6%88%80
other_fields: [category]
accept_all: yes
template: default
transmission:
path: /media/extHDD/Download/TV/202211/{{task[3:]}}
schedules:
- tasks: "TV-*"
schedule:
day_of_week: mon,tue,wed,thu,fri,sat,sun
hour: "4,6,8,11,13,15,17,20"
jitter: 60
|
另外,我也學會了如何使用 crontab 來設定系統開機時自動啟動 Flexget。
Info
pipx
第一次安裝,不需要 root 權限就能使用。但做依賴安裝需要搭配 pipx inject
指令去做調整,真的是滿有趣東西。
Warning
我想,您或許會很好奇,咦!那麼通常一般的主機會有多少個 port 呢?!正常來說,所有的 port 是由 1 ~ 65535 這麼多個啦!好啦,那麼在這些 port 上面有沒有保留給系統使用的呢!?是有的!一般而言,只有 root 才可以啟用 1 ~ 1023 以內的 port ,這些 port 就是特殊的埠口,是保留給系統來使用的!至於大於 1024 以上的 port 除了給系統隨機取用來作為連線的需求之外,也可以用來作為服務的 LISTEN 之用。舉例來說,如果您覺得 0~1023 的 port 需要以 root 的身份來啟動,這樣如果該 port 的程序被入侵了,那麼入侵者將擁有 root 的權限,這實在很危險~所以,這個時候您可以以一般身份帳號並使用大於 1024 以上的 port 來啟用某些服務呢!例如 FTP 的 port 預設為 21 ,您也可以將 FTP 以 10021 的 port number 來啟動,並且使用一般身份的帳號來啟用這個 FTP 的服務,會比較安全一點。不過,這樣一來會造成 client 端的困擾,因為一般 FTP Client 軟體都是預設以連接到主機的 port 21 來進行連線的,現在您的主機 FTP 改成 10021 了,除非您的 Client 知道這個設定值,否則 Client 軟體就無法連線成功了。
可以參考: 鳥哥的 Linux 私房菜 – 限制 Linux 對外的埠口 port limit
我這邊在想奇怪一般使用者怎麼能開 port,原來超過1024就不需要 root 權限,這邊不知道 Windows 也是不是這樣?
安裝 docker
Warning
這邊我是為了用 Caddy Server,所以才安裝 Docker,如果你沒有要使用的話可以不用安裝。
Install Docker Engine on Debian
一代機裝完遇到問題,顯示錯誤docker.service: Failed with result 'core-dump'.
。
arm - Docker ‘core-dump’ error when starting service - Raspberry Pi Stack Exchange
還遇到載不到deb套件。這邊更改DNS就能抓到package,這邊真的很奇怪。
我們將使用官方提供的 shell 腳本來安裝 Docker。在安裝之前,我們需要先修改 DNS 設定:
1
2
3
4
5
|
vi /etc/resolv.conf
# 第一個設定改成 8.8.8.8 ,後續再改回來
# Generated by resolvconf
nameserver 8.8.8.8 # 192.168.1.203 <--這是我的舊的設定
nameserver 192.168.1.1
|
接著,我們可以執行以下的命令來安裝 Docker:
1
|
curl https://get.docker.com | sh
|
安裝完成後,我們需要將使用者加入 docker 群組,以便使用者可以直接執行 Docker 命令:
1
|
sudo usermod -G docker -a <username>
|
請將 <username>
替換為你的使用者名稱。
Caddy Server
Caddy Server 可以讓我們方便地透過網頁介面瀏覽影片。Caddy Server 不會有亂碼問題,而且使用起來也更為方便。
Tip
這邊我用 Docker 啟動 Apache 看檔案目錄會亂碼,所以我才使用 Caddy Server,測試使用發現不會亂馬。
首先,我們需要創建一個新的目錄來存放 Caddy Server 的相關檔案:
1
2
|
mkdir CaddyServer
cd CaddyServer
|
接著,我們需要創建一個名為 Caddyfile 的設定檔,並填入以下的內容:
1
2
3
4
5
6
|
http://:80
root * /srv/
file_server browse
basicauth {
user _hashpassword_
}
|
其中的 _hashpassword_
需要替換為你的密碼的雜湊值。你可以使用以下的命令來產生雜湊值:
1
|
caddy hash-password --plaintext <password>
|
請將 <password>
替換為你的密碼。
然後,我們需要創建一個名為 docker-compose.yml
的 Docker Compose 設定檔,並填入以下的內容:
1
2
3
4
5
6
7
8
9
10
|
version: '3'
services:
caddy:
image: arm32v6/caddy
restart: unless-stopped
ports:
- "80:80"
volumes:
- /media/extHDD/:/srv
- $PWD/Caddyfile:/etc/caddy/Caddyfile
|
最後,我們可以使用以下的命令來啟動 Caddy Server:
完成以上的步驟後,你就可以透過網頁介面來瀏覽你的影片了。
反向代理設定調整
最後把 Caddyfile 做反向代理,這邊研究很久特別紀錄一下。方便用 80 port也能連 flexget。
Danger
這邊為什麼我設定 80 port,正常對外網路應該要用 443 port。主要這個服務要用在我和我朋友家,我朋友因為從事網路工作,說正常 https 是防止周邊設備網路竊取,我這邊有提 ISP 外面路由可能會竊取封包問題,他說正常他們不太可能會做這些事情,因為進去設備他們都要送什麼簽核單之類的,正常不會有人做擷取動作,這邊就不使用 https。(反正也沒有很重要資料)
設定檔需要設定 base_url為 flexget
,因為這邊反向代理http://xxxx/flexget/
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
web_server:
base_url: flexget
templates:
default:
transmission:
host: 127.0.0.1
port: 9091
username: admin
password: admin
add_paused: no
path: /media/extHDD/Download/TV/{{task}}
free_space:
path: /media/extHDD/
space: 2000
from_transmission:
host: 127.0.0.1
port: 9091
username: admin
password: admin
only_complete: yes
if:
- "'季度全集' in category": reject
tasks:
"TV-Re: 從零開始的異世界生活 第二季":
rss:
url: https://share.dmhy.org/topics/rss/sort_id/2/rss.xml?keyword=%E7%95%B0%E4%B8%96%E7%95%8C%E7%94%9F%E6%B4%BB+team_id%3A604+BIG5+1080+25
other_fields: [category]
accept_all: yes
template: default
transmission:
path: /media/extHDD/Download/TV/202007/{{task[3:]}}
"TV-英雄王,為了窮盡武道而轉生~而後成為世界最強見習騎士♀~":
rss:
url: https://share.acgnx.se/rss-sort-1.xml?keyword=%E7%82%BA%E4%BA%86%E7%AA%AE%E7%9B%A1%E6%AD%A6%E9%81%93%E8%80%8C%E8%BD%89%E7%94%9F+%E6%84%9B%E6%88%80+%E7%B9%81
other_fields: [category]
accept_all: yes
template: default
transmission:
path: /media/extHDD/Download/TV/202211/{{task[3:]}}
schedules:
- tasks: "TV-*"
schedule:
day_of_week: mon,tue,wed,thu,fri,sat,sun
hour: "4,6,8,11,13,15,17,20"
jitter: 60
|
Caddyfile
1
2
3
4
5
6
7
8
9
10
11
12
|
http://:80
root * /srv/
file_server browse
basicauth {
user $2a$14$
}
handle_path /flexget/* {
rewrite * /flexget{path}
reverse_proxy host.docker.internal:5050
}
|
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
|
version: '3'
services:
caddy:
image: arm32v6/caddy
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "80:80"
volumes:
- /media/extHDD/:/srv
- $PWD/Caddyfile:/etc/caddy/Caddyfile
|