Friday, September 27, 2013

ssh のクライアント側の設定メモ


手元のssh 関連の設定をまとめてみた。


・ControlMasterで接続を再利用すると高速になるので便利。
手元ではこんな設定にしている。

ControlMaster auto
ControlPersist 120
ControlPath ~/tmp/ssh-%r@%h:%p


ControlPersistとすると、ssh が親プロセスが1のdaemon プロセスになってくれてコネクションを張りっぱなしにしてくれる。

デフォルトで設定されているとマニュアルには書いてあるんだけど、手元ではControlPath指定しないと動かなかった。なんでだろう。
ホームディレクトリ以下の tmp にしているのはファイル名の衝突について心配しなくてよいように。

ControlMasterをAutoにしておくとすでにコネクションが開いていない場合はデーモンをたちあげてもしコネクションが開いている場合にはそれを利用するように。


・コネクション Keep-Alive 関連の設定

試行錯誤しているんだけどこれくらいがいいのかな。
ServerAliveInterval 3
ServerAliveCountMax 5

・パソコンがsleep から復活した時に再接続する設定
大抵ネットワーク接続の構成が変わったらssh のコネクションは終了して再接続するべき、だと思うんだけどまだそういう設定ができる方法は発見しておらず。
dbusのイベントとかでおしえてくれないんだろうか。


・ホスト名を適当につける
DNSの登録設定とか面倒なのでsshでしか使えないホスト名みたいなものが作れる。ssh経由でつながるtrampとかではつかえるので便利。bash のsshのコマンドライン補完でも使えるし。

・*.local用の設定
Mac のRendezvousとかLinuxのAvahiとか設定しているとホスト名.local という名前で名前解決ができるようになるけどIPアドレスは毎回変わるのでホストIPをチェックしないようにする。

Host *.local
  CheckHostIP no




あとついでに公開鍵認証にしておくとよさげ。

Host raspberrypi.vpn
  Hostname そのホストのIPアドレス
  IdentityFile ~/.ssh/ssh-keygenで作ったファイルのパス
  IdentitiesOnly yes


mjpg-streamer on raspberry pi のすすめ

1FPS とかしかでないよという話題のでているraspberry piを使ったUVC 監視カメラですが、YUVとかの形式のデータを頑張って変換しようとしているからなんじゃないかと思ってます。手元の
UVC カメラではデバイス側で MJPEG形式でデータをはいてくるようになっていて、多分殆どのカメラではそうなってるんじゃないでしょうか。MJPEGはJPEGファイルを多数つなげたような形式でそれをほぼそのまま垂れ流せばいいだけのはずでraspberrypiがいくら遅いからってそれを使えばまともなFPSがでるんじゃないかとおもって調査してみました。

世間でmjpegをそのままHTTPサーバに出してくれるというツールが意外とないんですが、mjpg-streamerというツールがそれにあたるっぽいので試して見ました。

$ sudo apt-get install libjpeg-dev imagemagick libv4l-dev
$ svn co 'https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer' mjpg-streamer 
$ cd mjpg-streamer
$ make USE_LIBV4L2=true clean all
$ LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www" -i "./input_uvc.so -f 30 -r vga"

以上で  http://hostname:8080/ にウェブサーバが立ち上がるのでそれにアクセスするとストリーミングで表示してくれます。

30fps, VGA でCPU負荷4%くらい。解像度あげるとフレームが落ちている気がするけど30fpsでてるのかどうかよくわからない。15fps以上は目で見ても差がよくわからないのでどうやって確認するのが良いのかな?



  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                  
 6938 pi        20   0 47392 2528 2184 S   4.2  0.5   0:02.16 mjpg_streamer
 2668 pi        20   0 17672 5220 1420 S   2.3  1.0   2:05.09 mosh-server

Sunday, September 15, 2013

tramp の設定つづき

忘れそうなのでまとめ。しかしまだいろいろと自分のネットワーク設定が解決してない

・ssh の速度

・接続される側の /etc/sshd_config
サーバ側の /etc/ssh/sshd_config を確認してもしDNSでリゾルブすることのできないホストを使っているなら UseDNS no を指定する

VPN 経由の通信の場合、MTUが1500になっていると多分大きすぎる?
mssfix, fragment あたりのオプションが必要か?
とりあえず適当に fragment 1280, mssfix としたら安定した(テストケース、ssh でログインして dmesg をながすと代替最大サイズのフラグメントをながそうとして消えてなくなるようだ)。
path mtu discovery がどっかの時点で失敗してるっぽい。


・接続する側の ~/.ssh/config

ssh のコネクションが死んだ時に tramp は検出できないので、ssh側で keepalive の頻度を上げる。

ServerAliveInterval 3
ServerAliveCountMax 3

/ssh: だと特にコネクションの再利用とかしてくれないので自動でコネクションの再利用をして、バックグラウンドで生き残るようにする

ControlMaster auto
ControlPersist 120
ControlPath ~/tmp/ssh-%r@%h:%p


・tramp の設定

/ssh: hostname:/path でファイルが開ける

/sudo:root@hostname:/で一般ユーザ権限でログインして、root権限でファイルが開けるように .emacs に設定した。

(add-to-list 'tramp-default-proxies-alist
    '("\\.local\\'" "\\`root\\'" "/ssh:%h:"))



・vcの設定

vc-handled-backends CVS Git のみにしてみた。RCSとかインストールしなくてすむように。

git の設定がなんかたりないきがする。RCS はもう使わないでしょう。

・リモート側の .bashrc

プロンプトがファンシーだといろいろとめんどうなのでシンプルにするために、.bashrcの頭に追加してみた。

if [ "$TERM" == 'dumb' -o "$EMACS" == 't' ]; then
  return
fi

これでもなんか安定しないケースがある気がしたのでraspberrypi から .bashrc を消した。
raspbianの標準の.bashrcは.bash_profileでやるべき設定をやりすぎている気がする。


・shell-mode の設定
shell-mode-hookでPS1を設定するコマンドを送信するようにする

(defun dancer-set-prompt ()
  (insert "PS1='\\w\\$ '\n")
  (comint-send-input))
(add-hook 'shell-mode-hook 'dancer-set-prompt)

・リモート側のemacsclient の設定

未解決



Wednesday, September 4, 2013

tramp のための ssh 設定

.ssh/config に
     ServerAliveCountMax 10
     ServerAliveInterval 10
を追加した。

適当だけど接続が切断した場合にsshが死ぬように。

あと、ControlMaster の設定を適切にやってくれてコネクションを使いまわしてくれるscpc が良い気がする。

/scpc:hostname:... でファイルをひらけばよい。


raspbian のデフォルトの.bashrc で tramp が動かないので少しハマった。
colorを有効にしていると期待している形でプロンプトが出ないらしい。
なんで.bashrc でやってるんだろう。

bashrcを変更して TERM=dumb の場合になにもしないようにした。