2020年11月29日 星期日

LibreELEC on Raspberry Pi

由於網路上大部分介紹Kodi都展示了它強大的連結,並撥放有版權疑慮的網路串流來源功能,這邊就來點合法的youtube串流來源玩法的介紹。
在開始之前,很重要的要先把Kodi的環境架設好,我這的範例是利用Rapberry Pi 3B搭配LibreELEC建置。我第一次接觸LibreELEC是9.2.4,這次測試都是在9.2.6上完成,未來如果有改版,設定的位置可能會有些不同。
到LibreELEC官網抓好後,記得要抓他們官方的寫入SD的工具,我沒有細究他們的工具的細節,不過我有直接透過 dd 指令去把img檔的資料copy到SD上,結果就是不能用,像是開機時/etc/fstab裡面寫的掛載磁區UUID與實際的UUID不一致,這點處理完了還是不能開,一定還有其他的細節。由於我不想去細究哪邊出問題,所以我馬上就重燒了一次。

第一次開機
第一次開機的時候,就跟新版的Raspberry Pi OS一樣,會去做一些初始化的動作,初始化完成後會顯示15s後自動重開機並倒數重開機。

基本設定
第一次進入系統,LibreELEC會出現視窗,要求填入基本的設定,包括機器的名稱 (預設LibreELEC)、網路設定、要不要開起ssh與samba的功能 (預設ssh關閉、samba開啟)。
機器名稱,事實上沒那麼重要,使用預設也沒關係
網路設定部分,以後可以到setting -> LibreELEC -> connections再重新設定一次
開啟ssh會允許使用者透過ssh連線方式連到這台Raspberry Pi,通常是不會這樣做,除非你很想了解LibreELEC系統的架構與細節。如果有開啟ssh連線,請記得要額外設定ssh的密碼,預設帳號是root
開啟samba連線方式可以讓windows電腦透過網路的芳鄰連線到這台樹莓派,可以透過網方把影片或音樂傳到樹莓派裡。我個人是會把這個關掉,比較實用的方式應該是找台NAS開啟NFS磁碟共享,讓LibreELEC連線過去。

中文化設定
要把LibreELEC介面改為中文介面,首先要先把LibreELEC的字型改為Arial
setting -> Interface settings -> Skin -> Fonts -> Arial based
接著再去更改顯示的語言為繁體中文
setting -> Interface settings -> Regional -> Language -> Chinese (Tranditional)

第一點注意,這邊的步驟是有順序性的,如果沒有先更改Arial字體,那很恭喜,你會看到一大堆的 ロ ,這些是預設字體不支援這些中文字造成的結果,摸黑去找到Arial字體的設定位置,就會正常了。
第二點注意,預設LibreELEC的語言只有English,如果點下去語言只有English,請先確認有沒有連上網路,並稍後再試,給LibreELEC一點時間更新資訊。

Add-ons

接下來就是讓Kodi之所以這麼強大的部分,也讓初學者非常頭痛的部分。我這邊的教學,只著重在合法的影片來源,也就是youtube的影音串流,其他LibreELEC本身有提供的Add-on基本上影音來源都算是源頭主動提供的,可以嘗試安裝看看,像是National Geographic,雖然我瀏覽過覺得不是我想要的操作方式。

這邊要安裝兩個Add-on
Youtube
Kodi Add-on repository -> Video add-ons -> Youtube
它會同時安裝其他需求的套件,就讓它跑就可以

PVR
LibreELEC Add-ons -> PVR Clients -> PVR IPTV SimpleClient
安裝完成後,就將後續介紹的文件檔設定到這個add-on,設定方式
PVR IPTV SimpleClient -> Setup
M3U playlist: 把你的文件檔案位置貼到這
確定,會提示你要重新開機,重新開機後,到電視(PVR)裡,就會有剛剛設定的youtube頻道可以看

準備PVR清單
首先,先準備一個文件,並在最上面輸入
#EXTM3U
接下來,準備你想看的節目,這邊以 公共電視Live 來昨範例,它的Youtube位置是
https://www.youtube.com/watch?v=ED4QXd5xAco
這邊要來將影片位置填入這份文件變成一個頻道,格式內容為

#EXTINF:0 tvg-country="{國家}" tvg-logo="{圖片url}" group-title="{類別}",{名稱}

plugin://plugin.video.youtube/?path=/root/video&action=play_video&videoid={Youtube 影片ID}

所以 公共電視Live 的資訊就填入,像是

#EXTINF:0 tvg-country="TW" tvg-logo="https://yt3.ggpht.com/ytc/AAUvwni0DEMnGx--oU8PchFsjzaI4BJW5jG8e63LtRxl=s176-c-k-c0xffffffff-no-rj-mo" group-title="news",公共電視Live

plugin://plugin.video.youtube/?path=/root/video&action=play_video&videoid=ED4QXd5xAco


tvg-logo是會在kodi 電視(PVR)裡面所顯示的圖片,找個合適的放上去是不錯的選擇。

接這就把想要得youtube影片全部打到這份文件裡面,像是我的播放清單

文件準備好了以後,開個Google Doc,把這些資料貼進去,並把檔案開啟分享,複製它的網路位置,把最後面的edit?usp=sharing改為export?format=txt,打到PVR IPTV SimpleClient的設定裡面,恭喜你大功告成。

註記,這邊把youtube影音作為播放清單的缺點,就跟辛苦地去找到的IPTV直播源斷掉了依樣麻煩,就是要一直去維護這個播放清單。可能某天這個youtube直播的源頭關機或怎麼了,再次開啟直播時,youtube ID就改變了。
另外,如果頻道設定為某個有時間長度限制的影片,撥放完後,就謝幕了,不會自動撥放下一個頻道的影片。

個人化撥放頻道

youtube add-on是有提供另一個寫法,讓youtube的播放清單變成是kodi PVR裡面的一個頻道

#EXTINF:0 tvg-country="{國家}" tvg-logo="{圖片url}" group-title="{類別}",{名稱}

plugin://plugin.video.youtube/play/?playlist_id={Youtube影片清單ID}&order=default&play=1

不過在youtube創建自己的播放清單,並把資訊填進去這裡面,記得去申請Youtube API key並把申請到的client ID, client password, Youtube API key輸入到前面安裝的Youtube add-on裡面,這樣你的個人youtube影音清單就變成一個頻道

參考



2020年11月18日 星期三

家用樹莓 NAS

 設定RAID

安裝Linux軟體定義RAID管理套件 mdadm

# apt install mdadm

準備好USB Drives,並檢查這些drive的位置,通常會是/dev/sd*,或是用blkid來檢查磁碟機編號

在開始建立RAID之前,可以先透過fdisk等工具確認分割磁區大小相似 (mdadm允許在建立RAID用得磁碟有1%容量的差距,並使用容量最小的為依據建立RAID) ,假設已經準備好的磁碟編號分別為 /dev/sda1, /dev/sdb1, /dev/sdc1,預計建立後的位置為 /dev/md0,並建立為RAID5:

# mdadm --create /dev/md0 --verbose --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1

建立完成後,可以檢查RAID磁碟的狀態

# mdadm --detail /dev/md0

或觀察RAID的狀態

# cat /proc/mdstat


格式化

在建立好RAID磁碟後,首先要先把磁區format為ext4格式

# mkfs.ext4 --quick /dev/md0


掛載磁碟

接著把它掛載起來

# mount -t ext4 /dev/md0 /mnt

但實際使用上,不會希望每次開機都手動掛載一次,因此會把在掛載磁碟的資訊寫入到/etc/fstab裡;/etc/fstab在指定掛載的磁碟有多總寫法,透過路徑(/dev/md0)、也又透過磁碟區的UUID,前者的寫法就很單純,寫法如下

/dev/md0   /mnt   ext4   defaults 0 0

但是容易因為開機時,沒有辦法控制Linux把磁碟機放到/dev裡面的哪個位置 (尤其以USB device最常遇到這個問題),所以比較好的做法是透過UUID的作法。磁碟的UUID可以由先前的blkid指令得到,因此/etc/fstab的設定如下

UUID=.....   /mnt  ext4   defaults 0 0

/etc/fstab的參數設定也不少,建議可以查一下後再做設定,會比較符合使用的需求


NFS分享磁碟

NFS是Linux常見的網路磁碟分享的方法,在Raspberry Pi OS是比較接近Debian/Ubuntu系列,NFS套件是 nfs-kernel-server,與Redhat/CentOS使用的rpcbind + nfs_utils不大一樣

# apt install nfs-kernel-server

不過都是在 /etc/exports 設定要分享的磁碟

/mnt 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)

exports裡面也有一堆參數可以設定,也一樣建議看過相關設定值後再將需要的放上。

如果是家裡有使用Windows的人,可以考慮額外安裝SAMBA,讓Windows可以直接掛載SAMBA分享的磁碟,或是Windows掛載NFS,都是選項。不過,更建議直接把RAID的空間建立一個家用雲端硬碟的方式 (如NextCloud) 來使用,這樣連行動裝置都可以透過網頁或APP操作。


注意面:

由於樹莓派的電源供應本身最大輸出只在5V 2.5~3A,我本身選擇使用3顆2.5"硬碟組成,每顆要0.5~0.55A,絕對沒辦法穩定讓整個電源供應順暢,我這邊的解決辦法是額外用一個5V的電源供應給USB HUB,並把所有的硬碟插在這個HUB上,再把USB HUB的頭接去樹莓派上。為了做到這個架構,我特地找了一個4 port可以額外用micro USB供電的USB HUB來完成這個架構。


維護面:

用樹莓派組RAID,硬碟遺失真的不是不可能發生的事,不小心撞到,電源供應不穩定等等都會造成這個狀況 (這也就是我最後找了一個能額外接電源的USB hub的原因),這可以透過先前介紹的mdadm --detail /dev/md0來檢查目前的狀態,如果有遺失,可以透過增加硬碟的方式來把硬碟增加回來

mdadm --add /dev/md0 /dev/sdc1

而後可以透過cat /proc/mdstat來觀察磁碟重建的進度。

如果遇到的狀況是將整個RAID搬去另一台電腦,這也不會是甚麼嚴重的問題,由於mdadm會在硬碟增加md參數,所以另一台電腦如果有mdadm的狀態下,會自動掛載到/dev/md*,以我重燒Raspberry Pi OS的狀態下,會自動掛為/dev/md127。

如果要更改RAID5配置為RAID6,首先要先達到4顆硬碟配置,才能滿足RAID6的基本需求,透過mdadm --add將磁碟加入陣列當中,這時候新增加的這顆磁碟會被列為被援用 (spare),而後變更當下的RAID狀態

#mdadm --grow /dev/md0 --level=6 --raid-devices=4