顯示具有 TS-109 標籤的文章。 顯示所有文章
顯示具有 TS-109 標籤的文章。 顯示所有文章

2015年10月24日 星期六

[NETWORK] 用 QNAP TS-109 NAS 網路喚醒開機 GIGABYTE BRIX

通常不是很機車我不會寫 blog, 一定是很花時間才需要紀錄下來.

狀況是這樣, 我買了 GIGABYTE BRIX 4770R 作為家中的開發機器. 它體積小攜帶方便, 可以定點在辦公室, 實驗室或家中進行開發使用. 但是如果有時候忘了帶, 或者是臨時用用. 抑或是出國的時候不想帶. 臨時要開機就很麻煩, 若一直開著會有耗電問題. 所以今天想設定看看能不能讓 BRIX 網路開機. 想不到過程比我想的還麻煩.

BRIX 4770R 端的設定:

完全不需要設定, 預設 BIOS 就會把 wake on lan 的功能打開, 事實上 BIOS menu 中也沒有任何選項可以調整. 讓我找了一陣子. 我的 BIOS 是 2014 年底的 F6 版

不過後來發現, 這次造成卡關的真正元兇還是 BIOS, 4770R BIOS 的 Erp support 要關掉才能讓 wake-on-lan 功能在 shutdown 的狀態下能開機. 否則網路發動開機成功率很低. 可能是 Erp support 打開後 standby 在 LAN 的電力不足. 造成無法 100% 成功.

所以請看官同好若要設定 BRIX 網路開機, 一定要把 Erp support 先關掉.


另外就是確認你的 NIC 已經將wake on lan 功能打開, 在 Linux 下可以用 ethtool:

# ethtool enp3s0
Settings for enp3s0:
[...snip]
        Supports Wake-on: pumbg
        Wake-on: g
[...snip]

只要看到 Wake-on 設定為 g, 代表已經打開了. 若沒有打開請下:

ethtool -s enp3s0 wol g

或者 google 一下看你的 Linux 版本怎麼開比較好.


QNAP TS-109 NAS 端的設定:

為什麼會扯到 QNAP NAS 的原因主要是因為這是家中除了 router 以外會24小時開機的機器。 我的 router 很舊沒有支援 wake-on-lan 的界面, 也就是沒有發出 magic packet 的功能。 所以只能從 QNAP NAS 下手. 這台 TS-109 也很舊了. 有幾種方法可以讓它發出 magic packet.

第一種方法, 請安裝 wakelan 工具:

首先安裝  ipkg, 到 QNAP TS-109 的 Administration 介面中的 Applications >> QPKG Plugins 下安裝 Optware ipkg 的管理程式.

安裝好後記得將將它 Enable, Optware圖示會從灰色變成彩色.



接下來 ssh 進入 QNAP NAS, ssh 不會開請 google 一下. 用 admin 身份 ssh 進去之後, 下指令安裝 waklan tool:
    # ipkg install wakelan

安裝好之後打 wakelan command 應該可以看到 wakelan 能用了.  然後下:
    # wakelan -m MACADDRESS -b 192.168.1.255

MACADDRESS 是 BRIX 上的網卡的 Mac Address, Linux 下用 ifconfig, 可以看到很像: AA:BB:CC:DD:EE:FF 這樣的字串, 把冒號去掉打在 wakelan 後面就可以用.

下達如上的 wakelan 指令後應該就可以把 BRIX 從關機狀態下喚醒了.

第二種方法是用 python script 發出 magic packet, 程式的話如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 # wol.py
 #
 # This module is from ActiveState Code Recipes:
 # http://code.activestate.com/recipes/358449-wake-on-lan/
 # and patched for Python 3 with:
 # http://code.activestate.com/recipes/577609-wake-on-lan-for-python-3/
 #
 # Example:
 # import wol
 # wol.wake_on_lan('70:F3:95:15:00:B5')
 #
import socket
import struct

def wake_on_lan(macaddress):
    """ Switches on remote computers using WOL. """

    # Check macaddress format and try to compensate
    if len(macaddress) == 12:
        pass
    elif len(macaddress) == 12 + 5:
        sep = macaddress[2]
        macaddress = macaddress.replace(sep,'')
    else:
        raise ValueError('Incorrect MAC address format')


    # Pad the synchronization stream
    data = b'FFFFFFFFFFFF' + (macaddress * 20).encode()
    send_data = b''

    # Split up the hex values in pack
    for i in range(0, len(data), 2):
        send_data += struct.pack('B', int(data[i: i + 2], 16))

    # Broadcast it to the LAN
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sock.sendto(send_data, ('255.255.255.255',40000))

import wol

wol.wake_on_lan('AABBCCDDEEFF')

以上範例來自國外網站, 我測過是可以跑的. 當然 AABBCCDDEEFF 請換成你自己的 Mac Address. 還有 QNAP 預設沒有裝 Python, 請一樣用 TS-109 NAS 的 Applications >> QPKG Plugins 介面把 Python 裝起來.

所以兩個方法來說, 都需要安裝 QNAP 的包, 不過第一種方法不用寫程式, 所以我推荐.

搞定 NAS 的 wakelan command 之後, 接下來就見仁見智了, 我一樣 google 了一下, 做了簡單的 php page, 來作為前端 UI, 方便自己按一下就下 wakelan 指令, 就不需要 ssh 進 NAS 了:

[/share/Qweb] # cat index.php

<?php
if ($_GET['wol-brix']) {
  exec("/opt/bin/wakelan -m AABBCCDDEEFF -b 192.168.1.255");
}
?>

<br><p>
<input type="button" value="Power On GigaByte BRIX" onclick="location.href='?wol-brix=true'">

要使用這個網頁請將 QNAP TS-109 的 web server 功能打開, 然後把 index.php 放到 /share/Qweb 目錄下這樣打入 NAS 的 ip 就可以看到網頁了, 按一下按鍵就可以把 BRIX 網路開機. 如何將 index.php 放到 /share/Qweb 目錄可以用 scp 或者 NAS 的介面 copy 到 Qweb 目錄下就可以了.
記得 index.php 中的 AABBCCDDEEFF 一樣改為您的 BRIX 的 NIC mac address.

開這個網頁要注意的是 QNAP TS-109 的 web server 沒有 SSL 功能, 所以安全性要有警覺. 儘量不要有太複雜的東西在網頁上, 以避免 hacking, 而且要承擔 QNAP TS-109 web server 和 php 可能的漏洞. 畢竟機器舊了已經沒有 update 了.

如果要遠端透過網際網路 access 這個網頁來達到開機, 我是在 router 上作 port forward, 把某個 port mapping 到 NAS 上的 80 port. 這樣記住自己家裡固網對外的 ip 和 port 號碼這樣就可以遠端用這個網頁把家裡的 BRIX 開機了. 然後 ssh 去遙控 BRIX 就可以開工了.

這些動作大約搞了半天時間, 主要時間花在 python 的撰寫和 debug, 但後來發現 BRIX BIOS 中的 Erp support 應該關掉才是 key point. 希望同好們不用再像我一樣卡關了.

目前快樂使用中, 人在外面的話只要有帶 Notebook 或者平板這些能夠 ssh 的工具, 用網頁把家裡的 BRIX 開機後就可以工作了, 很方便.

2015年7月25日 星期六

[Tivo] 在QNAP TS-109 NAS 上安裝 pyTivo server

很久沒發Tivo相關的文章了, 這次紀錄一下小弟_爆肝_安裝 pyTivo server的過程. 事實上後來才發現並不是 pyTivo讓小弟爆肝的, 請看後續的說明... 
 
- Tivo與NAS
 
一晃眼安裝和使用Tivo已經快5年了, 從以前錄製Discovery, 電影, 影集, 到現在我的小孩拿它來看多啦ㄟ夢, 一堆卡通長片直接錄下來給小孩看到爛. Tivo陪伴我看電視這些年來, 小弟對於它提供的電子節目表算是很滿意. 由於一直擔心在台灣的Tivo服務收掉(搞不好是杞人憂天), 所以在下是很規矩的每年都繳交保護費.
 
Tivo (time shift)錄製影集真是他x的好用, 配上LocationFree (location shift)更是所向無敵, 真是電視狂的終極武器.
 
好了, 虎濫完了,  
狀況是這樣, 小弟除了Tivo以外, 還有一台QNAP TS-109的NAS也是一樣服役很久, 我的 TS-109 平常提供我兩項服務:
    1. BT
    2. Tivo影片的server
 
原本我都是使用官方的Tivo Desktop軟體去拉 NAS 上用網路芳鄰分享出來的的folder, 但是它一直有幾項限制小弟想抱怨一下:
a. TGC Taiwan提供download的免費版的Tivo Desktop處理中文檔名沒問題, 但是無法支援網路芳鄰folder,
          所以沒辦法拉TS-109 NAS上分享出來的檔案.
b. 小弟還真的花大約800元台幣到Tivo原廠網站購買Tivo Desktop Plus for PC, 它可以支援網路芳鄰folder,
          但是處理中文檔名有問題, 基本上還堪用, 但那些錄下萊的電影檔名都要改英文, 頗麻煩.
c. 而且需要另外開一台Windows電腦來run Tivo Desktop去拉NAS理的東西, 很不環保, 而且喪失使用NAS的意義.
 
所以小弟趁著幫TS-109升級 1.5 T 硬碟, 而且更新firmware的同時, 就乾脆想把pyTivo裝上去一次搞定. pyTivo是python寫的一個Tivo come back server, 可以跨平台運行. 我run在NAS上效果還可以, 有圖有真相:
 
pytivo1 
 
tivo2 
上面兩張照片就是我用客廳的Tivo去拉在書房裡的NAS的影片實況. 使用pyTivo有幾個優點:
    - 對於中文檔名沒問題.
    - 可以同時存在多個 folder, 原廠的 Tivo Desktop只能有一個在一台電腦上.
    - 傳檔案的速度比原廠 Tivo Desktop 快. (純體感, 沒有實際測量時間) 
 
以下就是步驟, 有Linux經驗者尤佳 (其實很簡單拉!)
 
- 材料
+ QNAP TS-109 NAS (firmware Version 3.3.0 build 0924T) 
  + 80G Tivo
+ 一台有裝 Linux 的工作用電腦, 用來連到NAS, 或者是Windows電腦但是有裝SSH client, e.g. putty 
 
Sorry, 恕不保證其他的NAS, 因為小弟也只有hack過這一台. 不過如果你的NAS有開ssh而且能裝python and ffmpeg, 那應該都可以試試看. 只是請不要來問問題, 搞濫了也請責任自負, 小弟無法且沒時間幫你解決, Thank's
 
無論哪台NAS, 弄之前最好先備份你裡面裝的資料, 至於如果你真的把系統搞爛了, 我記得QNAP是 firmware 重裝就OK了!
資料! 還是你自己的資料比較重要! 
 
 
- 安裝 python
 
這個步驟最簡單, 點點選選就ok了. 請先login到 TS-109 的web管理介面裡面選 Administration > Applications > QPKG Plugins, 在該頁選 GET QPKG後請download python 套件包, 建議使用我用的 2.7 版.
Download 之後在Installation tab下選擇安裝那個套件包. 
 
接著確認你的ssh server有打開.
就是 Network Services > Remote Login > Allow SSH connection 有打勾. 
 
安裝python and enable SSH 後請 reboot TS-109 NAS.
 
 
- Download pyTivo
 
pyTivo wiki page: 
 
我用的是TheBayer's fork這個版本
http://repo.or.cz/w/pyTivo/TheBayer.git/snapshot/79fd85b2b5af79da8923cbb833f37fb08d11316a.tar.gz 
 
請相信我爆肝後的選擇, 不要使用wmcbrine's fork, 除非您有志投入開發 pyTivo 這個 Opensource project.

 
- 安裝 pyTivo server 
 
記得你有開ssh 嗎? 接下來請使用你的Linux電腦, 打開一個 Terminal:
copy pyTivo tarball 到 TS-109 的 qpkg folder, 像這樣:
 
scp TheBayer-79fd85b2b5af79da8923cbb833f37fb08d11316a.tar.gz  admin@192.168.1.11:/share/HDA_DATA/.qpkg
 
它會問你NAS的admin password, 如果你忘了那我也無言了. 
 
接下來請 ssh login 到 TS-109上, 類似這樣:
ssh admin@192.168.1.11
 
請解開 pyTivo tarball並改名 
# cd /share/HDA_DATA/.qpkg
# tar -zxvf TheBayer-79fd85b2b5af79da8923cbb833f37fb08d11316a.tar.bz2
# mv TheBayer pyTivo
 
 
- 設定pyTivo.conf
 
請copy一份pyTivo.conf提供自己修改:
# cd /share/HDA_DATA/.qpkg/pyTivo
# cp pyTivo.conf.dist pyTivo.conf
 
請您自行參考 pyTivo.conf 中的一些說明, 可以定義很多個share folder出來給Tivo使用.
類似這樣:
 
[電影]
type=video
path=/share/Public/Movies 
 
還有一個很重要的, 要指定ffmpeg的位置, 在我的QNAP NAS上是放在:
 
ffmpeg=/mnt/HDA_ROOT/ffmpeg/ffmpeg 
 
pyTivo.conf中其他的值都別改也可以用, 我就是這樣.
 
 
- 設定開機自動執行 pyTivo 
 
Sorry! 我不是QNAP的開發人員, 但是以下的設定對我有用, 可以開機自動執行pyTivo:
 
編輯 python.sh 
# vi /etc/init.d/python.sh
 
請找到  /bin/sleep 5, 在它的後面添加:
 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/HDA_ROOT/ffmpeg
/sbin/daemon_mgr pyTivo start "/share/HDA_DATA/.qpkg/pyTivo/pyTivo.py &" 
 
看起來會變成這樣:
 
        RETVAL=$?
        /bin/sleep 5
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/HDA_ROOT/ffmpeg
        /sbin/daemon_mgr pyTivo start "/share/HDA_DATA/.qpkg/pyTivo/pyTivo.py &"
        ;; 
 
- 爆肝之旅
別擔心, 接下來這個爆肝之旅你不用走, 我走就可以了, 先告訴你我爆肝後的結論, 很愚蠢的一個結論, 那就是: 
80G Tivo 內建的 Ethernet _疑似_不能接到 _太新的_ switch hub !?

狀況是這樣,
在我安裝pyTivo的時候, 我一直在使用的Asus無線ip分享器在時間上很巧合的掛掉了, 而Tivo一開始就是接到這台Asus分享器上並連接到intranet, 那個Asus機器起碼有五年以上, 當時我立刻換了一台DrayTek的有線分享器, 而且不以為意. 
後來在pyTivo安裝完成之後, 用Tivo直接去拉NAS裡面的影片, 發現一直沒辦法拉超過2個影片, 總是在拉第二個片子的時候Tivo的網路功能會掛掉, 而且會塞住我整個intranet. 我一直以為是software的問題, 所以花了數個晚上去trace pyTivo和整個 python 的 httpserver stuff.
 
就快要放棄的時候,
發現直接把Tivo和NAS接到種花電信小烏龜上面, 居然可以很順利的拉超過2片影片, 才開始懷疑是hub的問題, 接下來不斷的測試很多hub, 最後還是把Tivo接到一台滿老的SMC SMCWB14S-N2 無線ip分享器才解決. 我不是網路專門, 所以不知道這是什麼樣的靈異現象, 但是總之後來是好了. 
 
好像80G的Tivo現在也沒賣了, 希望新的Tivo沒有這樣的問題. 這個也要小小抱怨一下, 可能台灣市場太小, 人家老美都有好多種奇奇怪怪的Tivo可以選, 還可以直接看Youtube影片, 希望台灣這裡加油一下.
 
 
- 快樂使用中
 
接下來就跟一開始的照片一樣, 我關掉了windows機器, 直接用Tivo開始拉QNAP NAS上的影片, 當然僅限於不需要real time 轉檔的 mpeg2 和 tivo 檔案, 我沒測過其他需要轉檔的格式, 不過NAS上沒有已經編譯的tivodecode, 應該也是無法使用, 況且以NAS那麼弱的CPU, 應該會轉到死為止. 
 
到目前為止, 只能說非常滿意, 快樂使用中. 又一個opensource軟體強過於close source的例子!
 
我不是很會寫一些教學, 寫了之後才知道鳥哥的偉大, 以上給有使用Tivo的人參考囉! 


2017-11-19 update
最近買了 ZyXEL 合勤的 PLA5256 電力線設備, 發現台灣版的Tivo接到PLA5256上利用電力線上網也可以達成 SMCWB14S-N2 的效果. 在這邊紀錄一下.