MT7688 抗痛寧:遠端掛載檔案系統來開發 Node.js 應用程式

Ivan Chang
Maker Cup

--

Author: simen

一、前言

我在 MT7688 Linkit Smart 主要都是開發 node.js 的東西,但是咧,我真的覺得老是用 scp 在開發主機(Host)與開發板(Target)之間丟檔案真的超麻煩的~~ 以前上課時,老師都用 WinScp 在那 copy 來 copy 去,雖然是視窗化了沒錯~~ 我覺得好像也是有點…. 麻煩阿!!然後,我實在是很不會用 vim 在 target 上寫程式碼,我太笨啦,只會 esc, i, :wq (無限循環)~~ 哈哈哈!我知道 vim 很強,但我就是不會阿(完全很懶得學一下….)。總之,一言以蔽之,我是個沒有 Sublime Text 就無法做開發的人~ 塊陶阿~~

好啦~ 為了方便工作,我就想說,那把 target 上的工作目錄掛到 host 上好了~ 其實一般 IDE(Eclipse)大多有支援 (s)ftp 網路掛載工作目錄,但是我只是要用個(陽春的)Sublime Text 而已阿!立馬想到,那來找個 plugin 好了,google 一下,馬上發現 Sublime SFTP 這個外掛。很好,其實我試了一下,發現我好像看不懂它的說明在寫什麼…. \__/ 放棄~~~

於是,不管了,我打算用自己的方式做了啦!用 sshfs(SSH Filesystem)來把 MT7688 上的目錄掛過來 host 啦!!將遠端目錄掛載到 host 上之後,看你想幹嘛就幹麻,這跟開不開發 node.js 的程式倒是沒有關係~ 你要寫 c、寫 python 都是可以的…. 或是怎樣搞,都是看你自己啦~ 因為遠端掛載工作目錄其實蠻常用到的,我就想說雞婆一下,跟大家分享,或許可以讓一些還不知道的人,可以寫 code寫得舒服一點點~~~~(vim??? 殺了我吧~~~ 我是連 nano 都會用到有點發瘋的人啊~~~~)

二、步驟

1. Host 端,安裝 sshfs(我的 host 是 Ubuntu 14.04 LTS x86_64)

host:~$ sudo apt-get install sshfs

2. Host 端,開個目錄當 mountpoint

 host:~$ mkdir remote7688
host:~$ ls remote7688/

3. Target 端,安裝 openssh-sftp-server

 target:~# opkg update && install openssh-sftp-server

4. Host 端,使用 sshfs 掛載遠端目錄

host:~$ sshfs root@192.168.0.106:/ /home/simen/remote7688/

以上指令會將整個遠端根目錄 / 掛到 host 的 ~/remote7688

ls 一下,可以看到遠端根目錄下的內容都進來囉!

像我只需要把遠端某個工作目錄 (/root/app) 掛到 host,可以這樣做:

 host:~$ sshfs root@192.168.0.106:/root/app /home/simen/remote7688/

5. 將工作目錄拉進 Sublime Text 吧!

試著修改一下檔案,然後在 target 上 cat 看看

檔案的修改立馬同步過去啦~

現在還有個問題,就是 SFTP Server 並不會在開機時啟動,所以當你重開機之後,每次都要重啟服務,這樣 host 才有辦法將遠端的目錄掛載過來哦!! 以下說明如何使 MT7688 每次開機自動啟動 sftp 服務。如果你覺得沒有需要,下一小節可以跳過不用看~

三、讓 MT7688 開機之後,自動啟動 sftp 服務

OpenWrt 的 ssh 服務是由 dropbear 套件所提供的輕量版,你可以把它換成 openssh-server,官網 WiKi 有說明要怎麼做。然後你就可以靠 sshd 來啟用 openssh-sftp-server。

但是~ 我不打算這麼做啦!我只是要單純啟用 openssh-sftp-server 而已,所以接下來,單純在 init.d 增加一支啟動程序。 我們在 /etc/init.d 中加入啟用程式的指令稿,然後在 /etc/rc.d 加入規則檔 (檔名S開頭代表啟動,各檔名數字代表載入順序),ㄟ~我就不多說了,請大家自己參考 System V 的 init 規則吧~

target:~# touch /etc/init.d/sftpdtarget:~# echo -e ‘#!/bin/sh /etc/rc.common\n\n./usr/libexec/sftp-server -d /’ > /etc/init.d/sftpdtarget:~# chmod a+x /etc/init.d/sftpdtarget:~# ln -s /etc/init.d/sftpd /etc/rc.d/S99sftpd

重開機試試看吧!(我沒寫 Kill 規則檔, 加 -f force reboot)

target:~# reboot -f

在 host 端將遠端目錄掛載過來(記得先卸載再掛載)

host:~$ sshfs root@192.168.0.106:/root/app /home/simen/remote7688/

四、結語

遠端目錄掛載到 host 上之後,看你想幹嘛就幹麻,這跟開不開發 node.js 的程式倒是沒有關係~ 你要寫 C、寫 Python 都是可以的…. 或是整個根目錄掛載回來,在裡面修修改改的也是可以的~ 還有,遠端掛載其實跟 MT7688 也沒什麼關係,科科~ 單純就是我自己正在 MT7688 上面寫 node.js 的 program,就直接下這樣的標題,感覺比較乾脆一點啦~

遠端掛載的方法不只一種,歡迎大家提供更簡便的方法給我~ 我要分享給大家!!!!

PS: 原文連結請參考 E. E. 狂想曲:http://simeneer.blogspot.tw/2016/02/mt7688-nodejs.html

--

--

Ivan Chang
Maker Cup

A passionate normal guy with 10+ years experience in IoT, RF, and Wired/Wireless Testing. Now a dedicated advocate for timing sync and network emulator.