braintag

公開してしまう備忘録

RaspberryPIでクラウドストレージcopyを使用する コンソールモード

f:id:kiwamaru:20130902131232p:plain + Raspberry Pi Type B 512MB

RaspberryPIでDropboxは動作しない。何故?arm用のクライアントが無いからです。
アップロード、ダウンロードを操作するシェルスクリプトはあるようなのですが、やっぱり自動で同期してほしいなーと思ってました。

copyならベータ版ですが、RaspberryPI用?のクライアントがあるらしいので、使ってみます。

copyアカウントをまだ持ってない人は、以下の私の紹介アカウントから是非登録してください。
https://copy.com?r=7XIzQt

** Raspberry PI対応 copyクライアントはここで配布されてます(ただしベータ版)
Client for Raspberry PI(Beta)
https://copy.zendesk.com/entries/23438841-Client-for-Raspberry-PI

2014/05/23追記 いつのまにか、正式にサポートされていました。
https://copy.com/install/linux/Copy.tgz

CopyConsole

私は、RaspberryPIでは一切GUIを使ってないので、コンソールモードでcopyを使用したいと思います。

Raspberry PIの設定

とりあえずRaspbianを更新しておきます

sudo aptitude upgrade 
copyクライアントダウンロード
wget https://copy.com/install/linux/Copy.tgz --no-check-certificate
適当な位置で展開する
tar zxvf Copy.tgz
x86系の余計なモジュール削除
cd copy
rm -r x86*
usrへ移動
sudo mv armv6h /usr/copy
同期ディレクトリを作成

userは自分のアカウントで

sudo mkdir /home/<user>/Copy
デーモンで実行する

emailとuserは自分のアカウントで

sudo /usr/copy/CopyConsole -username=<email> -root=/home/<user>/Copy -daemon

この後、パスワードを聞かれるので、copyアカウントのパスワードを入力する

表示してみる
sudo ls /home/<user>/Copy/

デフォルトのままならば、
"Quickstart Guide.pdf"が表示されるはず

以上

flvをmp4に劣化なしで、複数ファイルをドロップして一括で変換するバッチファイル

表題の通り、flvをmp4に劣化なしで、複数ファイルをドロップして一括で変換するバッチファイルです。
Windowsで動作します。

変換ツールはavconvを使用します。

libav
http://libav.org/download.html

Windows Nightly and Release Buildsから、自分のOSにあったバイナリをダウンロードして、どっかに展開します。

自分は、D:\ols\以下に展開しました。

D:\ols\libav-win64-20130622\usr\bin\avconv.exe

デスクトップ上で、右クリックから空のテキストファイルを作り、"flv4mp4drop.bat"というファイル名にリネームします。

中身を以下のように編集します。
avconvの位置は、自分が展開したパスに置き換えてください。

echo off
echo ----------------------------------------
for %%a in (%*) do D:\ols\libav-win64-20130622\usr\bin\avconv.exe -i %%a -c copy "%%~na.mp4"
echo ----------------------------------------
pause

そして、このバッチファイルに対して、複数のflvファイルをドロップすると、同じフォルダにコンテナが変換された"mp4"のファイルが作成されます。

以上です。

最適化の近道 プロファイラgprofのコールグラフを画像化して、コードのどこがボトルネックかをわかりやすくする

boostを多用して富豪的プログラミングしまくってたらさすがに遅すぎて、プロファイラで解析しようと
思ったのですが、boost使ってるとgprofの出力解読が困難なので、コールグラフを視覚化できないものかなと思ったら良いツールがあったので使ってみました。

参考
gprofでコールグラフ - 三次元日誌
http://d.hatena.ne.jp/ousttrue/20091017/1255754733


配布サイト
https://code.google.com/p/jrfonseca/wiki/Gprof2Dot


以下はUbuntu13.04での話です。

まずは必要なモジュールのインストール

sudo apt-get install python graphviz

次に、scriptを以下からwget

wget http://gprof2dot.jrfonseca.googlecode.com/git/gprof2dot.py
sudo chmod 755 gprof2dot.py

gprof用にMakefileに以下を追加

LDFLAGS = -pg -fno-omit-frame-pointer
LOADLIBES = -pg

一回実行して、gmon.outを出力させる

sudo ./a.out

その後、gprofの出力をパイプでつなぎます。

gprof ./a.out | ./gprof2dot.py | dot -Tpng -o output.png

f:id:kiwamaru:20130528175934p:plain

ボトルネックが一目瞭然!

Windows7をルータ化

無線ルータ化ではなく、有線ルータ化の話です。

試験用にLinuxマシンで対向機を作る必要があり、Internetからいろいろソフトをインストールしたかったのだけど、会社が簡単にIPアドレスくれないのでWindows7 PCにNICを二枚差してルータ化し、それ経由でInternet接続しました。

ググると、ソフト入れたり、コンソールからの面倒なルーティング作業やレジストリいじったり等の情報もありますが、この方法ではすべてGUIでいけます。

その時のメモ。

環境構築

既にInternetに繋がったWindows7のPCに、Ethernetデバイスを1つ追加し、
2つある状態にします。

自分は、筐体を開けてNICを刺すのが面倒なので、下記のUSBの有線LANアダプタを付けました。
PLANEX Wii/MacBookAir対応 USB2.0 有線LANアダプタ UE-100TX-G3
PLANEX Wii/MacBookAir対応 USB2.0 有線LANアダプタ UE-100TX-G3

新たに追加したEthernet側に、ルータ配下にしたいLinuxマシンをつなげます。

Windows側設定

Windows7のコントロールパネルから、
すでにInternetに繋がっているEthernetアダプターの設定を開き、インターネット接続の共有を有効にします。
f:id:kiwamaru:20130524115733p:plain

すると、もう片方のアダプターのIPアドレスが勝手に変更されます。例:192.168.137.1

Ubuntu(Linux)側設定

UbuntuIPアドレスを同じサブネットにして、デフォルトGWをWindows7のLAN側IPアドレスに向けます。

IP Address:192.168.137.2/24
GW 192.168.137.1
DNSは適当に8.8.8.8とかで

以上。

RaspberryPIをVPN(L2TP)サーバにして、スマートフォンからVPN接続

Raspberry Pi Type B 512MB

スマートフォンからRaspberryPIに対してVPN接続し、家のローカルネットワークにつなぎます。

VPNは、PPTPだと設定等が非常に楽なんですが、docomoのSPモードだと接続できないし、PPTPはセキュリティ的にも緩いらしいので、やや難し目のL2TP使います。

最近ではスマートフォンOpenVPNクライアントをインストールすれば使えるらしいですが、Android,iPhone標準で使えるL2TPがやはりいいと思います。

注意点として、auの場合は、回線(CDMA2000)の仕様上、通話着信があるとVPNが切断されます。

※以下は記憶を元に書いているので抜けがあるかもしれません

VPNサーバのアドレス

固定IPアドレス契約をしていればいいですが、していない場合は、IPアドレスがころころ変わっていまい、外出先からVPN接続できなくなるため、適当なDDNSサービスに登録しておきます。
(MyDNSがオススメ)

VPNを公開するためのルータの設定

ルータのポートは、UDP/400,4500,1701を開けてRaspberryPIに対してNAPTしておきます。

RaspberryPIに対する設定

まずはopenswanとxl2tpdをインストールします。
IPアドレスやID,パスワード等は、自分の環境に置き換えてください。

sudo apt-get install openswan xl2tpd ppp lsof

xl2tpdの設定を行います。

/etc/xl2tpd/xl2tpd.conf

[global]
port = 1701 ;使用ポート

[lns default]
ip range = 192.168.1.230-192.168.1.240  ; VPNクライアントに割り当てるIPアドレス
local ip = 192.168.1.20                 ; RasPI自身のIPアドレス
require chap = yes                      ; * Require CHAP auth. by peer
refuse pap = yes                        ; * Refuse PAP authentication
require authentication = yes            ; * Require peer to authenticate
name = pi                               ; * Report this as our hostname
ppp debug = yes                         ; * Turn on PPP debugging
pppoptfile = /etc/ppp/options.xl2tpd.lns; * ppp options file
length bit = yes

次にopenswanの設定を行います

/etc/ipsec.conf

version 2.0
config setup
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        oe=off
        protostack=netkey
include /etc/ipsec.d/*.conf

共有鍵の設定
同じものをスマートフォンにも入力します。
(iPhoneの場合には"シークレット"という項目,Androidの場合はIPSec事前共有鍵)

/etc/ipsec.secrets

: PSK "password"

/etc/ppp/options.xl2tpd.lns

mtu 1410
mru 1410
ms-dns 8.8.8.8
ms-dns 8.8.4.4
lcp-echo-interval 3
lcp-echo-failure 8
nodeflate
noproxyarp
netmask 255.255.255.0
lock

スマートフォンからアクセスするときのID,パスワード設定
同じものをスマートフォンに入力します。

/etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"id"      *       "password"              *

以下のリダイレクトの設定を追加

/etc/sysctl.conf

net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

自動起動の設定と、再起動

sudo sysv-rc-conf xl2tpd on
sudo sysv-rc-conf ipsec on
/etc/init.d/xl2tpd restart
/etc/init.d/xl2tpd restart

スマートフォンでの設定

AndroidもしくはiPhoneVPN接続をします。

VPNの接続方法をL2TPにして、DDNS,ID,パスワード,共有鍵を入力して接続します。
こちらは簡単なので詳細は明記しません。

うまくいかない場合は、RaspberyPIにてsudo ipsec verifyや、ログを見て不具合を解消してください。

VPNを繋いで何をしたか

スマートフォンwolアプリ入れて、VPN経由で家のPCを起動し、Webブラウザからtvrockの録画予約を行ったりしようと思いましたが、wol後、tvrockのインテリジェントが効かず、PCが起動しっぱなしになるので止めました。
(なぜかCPU使用率が100%で張り付く)

RaspberryPIにAsteriskを入れて050plusのように使えると面白いと思いましたが、auひかりはsip接続できないので試せませんでした。

以上

Ubuntu13.04(xrdp)でWindow7からリモートデスクトップ接続

Ubuntu13.04(xrdp)でWindow7からリモートデスクトップ接続しようとしたら、接続は成功したのに、Ubuntuの壁紙が一面に表示されるだけで何も操作できなかった。

ちょっと調べると、Unityはリモートデスクトップ経由では出せないらしい。

確実に忘れると思うので、解決方法のメモ。

Ubuntu13.04側の作業

sudo apt-get install xrdp gnome-session-fallback
sudo vim /etc/xrdp/startwm.sh

#!/bin/sh

if [ -r /etc/default/locale ]; then
  . /etc/default/locale
  export LANG LANGUAGE
fi

echo "gnome-session --session=gnome" > ~/.xsession ;<----追加部分
. /etc/X11/Xsession
~

自動起動と再起動

sudo sysv-rc-conf xrdp on
sudo /etc/init.d/xrdp start

その後、Windows7リモートデスクトップで接続する。


ただし、このままだと、キーボードのdを押すとDesktopが表示されてしまう問題がある。

回避方法として、ショートカットキーの設定を変更する必要がある。

ubuntu13.04の場合はgconf-editorではなく、dconf-editorを使って設定を変更する。

まずはインストール。
インストール時にdconfの'd'が打てないので、ホストOSのWindows側で以下のコマンドをコピーしておく。

sudo apt-get install dconf-tools

そして、ubuntu側の端末でペーストして実行し、インストール。

ubuntu→システムツール→dconfエディタを起動し、
org.gnome.desktop.wm.keybindingsを辿り、

show-desktop '<super>d'

ってなっているのを何か別の適当なショートカットに置き換える。

再ログインが不要で即時変更される。

これで、dキーを押してもデスクトップが表示されるような事態にはならない。

参考
Ubuntu 12.10 で xrdpを使う方法

http://btmn.jp/2012/12/02/ubuntu-12-10-xrdp/

Growl1.3の xcode 4.3でのビルド

ググったらGrowl1.3が無料で使えるとの情報があった
オープンソースだということも知らなかった)

有料になったGrowlとHardwareGrowlerをビルドして無料で使う | Macとかの雑記帳

ソース落としてきてxcodeでビルド

早速やってみたけど、ビルドエラー。(2012/05/11時点)

method possibly missing a [super dealloc] call

というエラーになる

xcode 4.3と相性が悪いみたい。

以下にパッチがあった。
Compile and Install Growl 1.3 via XCode 4.3 on Lion | clsung is studying

URL先の内容を見ればわかるけど、簡潔に言うと、

GroupController.mに[super dealloc];を追加する
GrowlMenu.hの2つの宣言を修正する

以上で解決できました。