githubはじめました

新年、一発目の記事なのでいまさら感満載ですが、明けましておめでとうございます。

「情報系のくせにgithubアカウントももってないの?」というようなことを何人かに言われて、「実はあるんですけど一個もリポジトリ作ってないんですよね、あははは〜」と言って逃れて早数年・・・。

いい加減始めよう!って意気込んで使い始めました。

ユーザー名は「shu65」で作りました。

右も左もわからない状態でいきなりすごいものを!なんてことはせず、githubのHelpを見ながら、「HalloWorld」というリポジトリを作り、これじゃなにもしてないのと同じなので、文字列処理の基本のHamming Distanceを計算するプログラムを組みました。

これからはちょくちょく上げても問題ないものについては上げて行こうと思います。

SAMtoolsをコンパイルするときのメモ

Mappingのツールだと何かとお世話になるSAMtoolsをコンパイルしよとしたら意外に一発でコンパイルできなかったのでメモを残しておきます。

環境

Ubuntu 11.10
SAMtools 0.1.18

準備

Ubuntuに最初から入ってないものを幾つか使うようなのでそれのために予め以下のようにパッケージをインストールしました。

sudo apt-get install zlib1g*
sudo apt-get install libncurses5-dev libncurses5-dbg

すでにしばらく使ったUbuntuなので、標準で入ってなかったけどすでに入れていたため、今回はいれなくても大丈夫だったものがいくつかあるかもしれませんが、その時は適宜入れてください。

コンパイル

足りてないものがなければ以下のようにすればコンパイル完了です。

make

EclipseのEGitで既存のSSHのprivate keyが使えないときの解決策

EclipseのEGitでSSHを使ってリポジトリのクローンを作ろうとしたら、OpenSSHで作ったprivate keyのパスフレーズが通らなくて困ったときのメモ。

環境

OS:Ubuntu 11.10
OpenSSH 5.8
Eclipse 3.7

解決方法

どうやらEclipseのSSH2でAES暗号が使えないらしい。なのでEclipse用にAES以外を使ったprivate keyを作る必要がある。

下のWebページを参考にした作り方。

cd ~/.ssh
openssl rsa -in id_rsa -out id_rsa-eclipse -des3

private keyを作ったらEclipseの上のタブでWindow→Preerencesをクリックして
Network Connection→SSH2を選択し、以下のようにprivate keysに先ほど指定したprivate keyを設定する。


これで、SSHを使ってEGitが使えるようになります。

CUDAのカーネル関数でprintfを使う

カーネル関数でもprintf()が使えるようになったのに全然使ってこなかったので、
折角なのでためそうとCUDAプログラミングガイドのソースをそのまま持ってきてコンパイルしたら・・・

error: calling a host function from a __device__/__global__ function is not allowed

って言われたorz
バージョンもnvcc3.2でprintf()が使えるって書いてある。
GPUもFermiを使ってるのになんで?ってなった時のメモです。

環境

  • SUSE Linux Enterprise Server 11 SP1
  • Tesla M2050
  • nvcc 3.2

解決策

ためしに参考資料のCUDAプログラミングガイドの中のB.14 Formatted Outputの部分にあるサンプルをそのままコンパイルしているのにダメだったのでなんでかなぁと参考資料のあたりを読んでいると、どうやらコンパイルするときに
nvccのオプションに-arch=sm_20か -arch=sm_21をつけないとダメなそうな。
実際に付けてみるとコンパイルは通りました。

cuda-gdbもあるし昔と違って大分カーネル関数の部分のデバグが楽になったなぁ

memoryをインクルードしたコードをnvccでコンパイルしたらエラーが出たorz

CUDAのコードの中(カーネル関数じゃないよ)でshared_ptrを使うためにmemoryをインクルードしたらエラーが出てコンパイルできなかった・・・。

環境

エラーメッセージと、とりあえずの解決法

コンパイル時に出てきたエラーはこんなの

/usr/include/c++/4.3/tr1/type_traits(240): error: invalid alignment value specified by attribute

どうしたものかと思ったが、参考資料をもとに下のようにしました。

#define __aligned__ ignored
#include
#undef __aligned__

これでとりあえずはエラーは出ないしちゃんと動いてるっぽいけどこれでホントにいいのやら・・・

xinitdでGit deamonを使う

参考にしたのはここ↓
http://yoshimov.com/?page=Git%2Fgit%A5%D7%A5%ED%A5%C8%A5%B3%A5%EB%A4%C7%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA%A4%F2%B6%A6%CD%AD
http://d.hatena.ne.jp/tarurut/20101213/1292228704
http://d.hatena.ne.jp/tarurut/20101213

CentOSにgitとgit daemonを入れる

まずCentOSにgitを入れます

# sudo yum install git
# sudo yum install git-daemon

xinitdを使ってgit-daemonを起動

git-daemonはパスが通ってないのでので探す

# find / -name git-daemon

今回は以下のとろこにありました

/usr/libexec/git-core/git-daemon


次にxinitdを使ってgit-daemonを起動させます。
/etc/xinetd.d/ 内に git というファイル名で以下の内容を保存

# default: off
# description: The git daemon allows git repositories to be exported using # the git:// protocol.

service git
{
disable = no

# git is in /etc/services only on RHEL5+
type = UNLISTED
port = 9418

socket_type = stream
wait = no
user = nobody
server = /usr/libexec/git-core/git-daemon
server_args = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose
log_on_failure += USERID
# xinetd does not enable IPv6 by default
# flags = IPv6
}

変更点は

  • disable =yes

  →disable = no

  • #type = UNLISTED

  →type = UNLISTED

  • #port = 9418

  →port = 9418

xinitdをリスタートします

#sudo /etc/init.d/xinetd restart
xinetd を停止中: [ OK ]
xinetd を起動中: [ OK ]

起動したかを確認

# chkconfig --list | grep git
git: on

ポートの確認
Gitために開放したポートは9418/tcpなのでそれがあるか確認

# netstat -anp | grep 9418
tcp 0 0 0.0.0.0:9418 0.0.0.0:* LISTEN 28251/xinetd

使ってみる

あとは/var/lib/gitの下に公開用のリポジトリ(今回はtstrepos.git)をつくってクローンが使えるかチェックします。

# git clone git://localhost/tstrepos.git ./tstrepos.git
Cloning into ./tstrepos.git...

なんかうまくいかなかったら再度パッケージを入れ直すところから初めて見てください。
自分も2回目でうまくいきました。