101010

プログラミング備忘録とともに、ポエムってます。

sshfsを使ってラズパイをMacにマウントする | Raspberry Pi

f:id:araemonz:20190316164739j:plain

ラズパイのディレクトリをMacにマウントできてしまうsshfsという存在を知ったので早速使ってみることにした。

sshfsのインストール

$ brew cask install osxfuse

sshfs をインストールするためには先ずosxfuseが必要らしい。

caskオプションはbrewの拡張でなんとGUIアプリケーションもインストールできるようだ。 ブラウザのChromeもbrew cask install google-chromeのようにインストール出来てしまうんだとか!

参考:

次に本命のsshfsをインストールする。

$ brew install sshfs

インストール出来たか確認してみよう。

$ sshfs --version
SSHFS version 2.10
OSXFUSE 3.8.3
FUSE library version: 2.9.7
fuse: no mount point

sshfsの使い方

sshfsを使うまでを説明する。なおラズパイはSSHで接続可能な状態になっているものとする。

まず、Mac上で~/Projects/RaspberryPi/piというラズパイのマウント用のディレクトリを作った。

そしてsshfsをつかってラズパイの/home/pi/ディレクトリをMacの~/Projects/RaspberryPi/piへマウントする。

$ sshfs pi@raspi0.local:/home/pi ~/Projects/RaspberryPi/pi -p 22

これでマウントされたはずなのでMacの~/Projects/RaspberryPi/piディレクトリを確認してみよう。

$ ll ./pi
total 80
-rw-r--r--  1 Mopipico  staff   675 11 13 22:09 .profile
-rw-r--r--  1 Mopipico  staff  3523 11 13 22:09 .bashrc
-rw-r--r--  1 Mopipico  staff   220 11 13 22:09 .bash_logout
-rw-r--r--  1 Mopipico  staff    25  3 12 23:10 hoge.txt
-rw-------  1 Mopipico  staff  9930  3 16 16:22 .viminfo
-rw-------  1 Mopipico  staff   728  3 16 16:43 .bash_history
drwxr-xr-x  5 Mopipico  staff   160  3 16 17:00 ..
drwxr-xr-x  1 Mopipico  staff  4096  3 16 17:05 a
drwxr-xr-x@ 1 Mopipico  staff  4096  3 16 17:05 .

ラズパイのディレクトリがそのままMac上で表示されるようになった!感動! しかもMacのシェルコマンドを使うことが出来るという何という快適さだ!

そしてそして、codeコマンドでファイルを開けばVSCodeで直接ファイル編集出来てしまう!!!

$ code hoge.txt 

最高ぉおおお!!!!!!!!!

接続を解除したい場合は次のようにしてアンマウントして終了すればよい。

umount ~/Projects/RaspberryPi/pi

C言語でハローワールド

sshfsを初めて使ってテンション上がったところで、さっそくお決まりのハローワールドをC言語でやってみよう!

$ code hello.c

しかしこの時点でなにか腑に落ちない、違和感のようなものを感じていた。

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Hello, World!\n");
    return 0;
}

ハローワールドプログラムをVSCodeで書いて保存したので、次はこのファイルをコンパイルすればよいのだが。。。

はい、ここぉおおお!!!!

$ gcc hello.c 

いやいやいや、gccってどっちのやねん!

これはMacのgccなのかLinuxのgccなのか。

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin18.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

確認してみるとやっぱりMacやん!ええ、知ってたっす。

そしてそして実行できるやん!って話っす。

$ ./a.out 
Hello, World!

(なぜか関西弁になってしまった)

よく考えればMac上でコンパイルしてMac上で動く実行バイナリを生成したのだから、Macで実行できるのは当たり前であった。バイナリファイルがLinux上に置かれているってだけな話なわけです。

じゃぁラズパイにSSHでログインして実行してみると?

$ ./a.out 
-bash: ./a.out: cannot execute binary file: Exec format error

見事に実行できない!

つまりソースコードはラズパイ上でコンパイルしましょうってこと。

$ gcc hello.c 
$ ./a.out 
Hello, World!

結局はSSHでログインしなければならないのかな。 これだとsshfsとsshを使う羽目になり、混乱を招くかもしれないなぁ。

もしくは開発環境をUbuntuとかにしてソースをビルドするところまでやって、バイナリファイルをラズパイへデプロイするっていうのが正解なのかなぁ?これってアプリ開発と全く同じっすよね?

そんな本気出しちゃう?

いやいや💦、私はとりあえずラズパイで遊んでいるだけなので下記のようにターミナルを分割して対処することにしよう。

f:id:araemonz:20190316180021j:plain

参考

https://qiita.com/zwirky/items/8bbebf01f99078d392dc https://qiita.com/nrainiero/items/475c299905b3f89222b0