一、前言
我在 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
target:~# opkg 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/sftpd
target:~# echo -e '#!/bin/sh /etc/rc.common\n\n./usr/libexec/sftp-server -d /' > /etc/init.d/sftpd
target:~# chmod a+x /etc/init.d/sftpd
target:~# 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,就直接下這樣的標題,感覺比較乾脆一點啦~遠端掛載的方法不只一種,歡迎大家提供更簡便的方法給我~ 我要分享給大家!!!!