新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2011-05-19

[Linux]CentOS5.5にText::MeCabを入れるときのコツ

原因

mecabとmecab-ipadicを入れてるのに、
/root/.cpanm/work/1294395897.25225/Text-MeCab-0.20011/assertlibeiKR8srG: error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory
/root/.cpanm/work/1294395897.25225/Text-MeCab-0.20011/assertlibEejMJieF: error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory
wrong result: 'mecab', 'mecab'
とか言われてしまうことがあります。

これについてはこちらの記事にわかりやすく書いてありますが、CentOSは初期設定だと/usr/local/libをライブラリの置き場所として認識していないためです。

対処

以下のコマンドを実行後、cpanmでText::MeCabを入れるといいです。
 # echo '/usr/local/lib' >> /etc/ld.so.conf
 # ldconfig

2011-05-17

[Linux]JS/Linuxでcronを動かす

巷で話題のJS/Linuxですが、そのままではcrondが動いてないから、cronエントリを書いてもまともに動きません。

だから、
# crond -b
などとしてcrondを動かしてやり、
# crontab -e 
でcronエントリを追加すると、正常に動作します。

2011-04-28

[Linux]ユーザ権限でsvscanbootを立ち上げて色々exportする手間を省く

何が嬉しいか

僕がやっている限りですが、perlbrew環境でもdaemontoolsのrunファイルで色々exportしなくても意図した通りにアプリケーションが動作してくれる、という点が挙げられます。

設定

例えば$HOME/service/myappとかつくって、PSGI-appをdaemontoolsで常駐させたい場合。

$HOME/.bashrcに1個exportを追記する

以下の行を追記しておく。
export PATH=$HOME/bin:$PATH
書いたら、一旦ログインし直す。

$HOME/以下に必要なディレクトリを用意する

~$ mkdir -p ~/service ~/bin ~/myapp/log

ユーザ用のsvscanbootを作る


$HOME/bin/svscanboot

#!/bin/sh

svscan $HOME/service 2>&1 | \
  readproctitle $HOME/service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................ 

runファイルを作る


$HOME/service/myapp/run

#!/bin/sh
exec 2>&1
start_server --port=6000 -- plackup -L Shotgun -s Starlet ~/psgi/myapp/myapp.psgi

$HOME/service/myapp/log/run

#!/bin/sh
exec 2>&1
exec multilog t ~/myapp/log

サービスをdaemontoolsに登録する

~$ mv ~/myapp ~/service/ -v

svscanbootを起動する

~$ svscanboot &
[1] 13787
プロセス番号(ここでは13787)を控えておき、これをdisownする。
~$ disown 13787

ps axfhでプロセスを見ると、大体こんな感じになってると思います。

~$ ps axfh
  :
  :
 省略
  :
  :
13787 ?        S      0:00 /bin/sh /home/ytnobody/bin/svscanboot
13788 ?        S      0:00  \_ svscan /home/ytnobody/service
17896 ?        S      0:00  |   \_ supervise api
19351 ?        S      0:00  |   |   \_ /bin/sh ./run
19352 ?        S      0:00  |   |       \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/start_server --port=6000 -- plackup -L Shotgun -s Starl
19353 ?        S      0:00  |   |           \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/myapp
19354 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19355 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19356 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19357 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19358 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19359 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19360 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19361 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19362 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
19363 ?        S      0:00  |   |               \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my
17897 ?        S      0:00  |   \_ supervise log
17900 ?        S      0:00  |       \_ multilog t /home/ytnobody/myapp/log
/home/ytnobody/src/mongodb/data/db --nohttpinterface
  :
  :
 省略
  :
  :

2011-04-27

[Nginx]フォワードプロキシを構築する

ここを参考に、俗に言う串をNginxで構築しました。

nginx.conf

http {

    ### google DNS
    resolver 8.8.8.8;

    server {
        listen 80;
        server_name proxy.mydomain.net;
        location / {
            proxy_pass $scheme://$http_host$request_uri;
        }
    }

}

schemeとhttp_host,requet_uriを使いまわすのがポイントですね。

2011/5/16 追記
httpsについては、このフォワードプロキシを通すことで、まともにアクセスできなくなる可能性があります。

2011-04-19

[Linux]Titanium Mobile 1.2.2をUbuntu10.10-i386に入れた

基本的な手順としては、こちらのサイトの通りに進めました。
しかし、Titanium Developerの起動時の手順で問題が発生。以下の様な手順で問題を回避しました。

Titanium Developerのディレクトリのリネーム

これをやらないと、まともに起動できません。
~$ mv Titanium\ Developer-1.2.2/ ~/.titanium

runtime以下に各種同梱ライブラリ群を移動

次に、ライブラリ群を$HOME/.titanium/runtime/linux/1.0.0/ から $HOME/.titanium/runtime/ へと移動させてしまいます。
~$ mv ~/.titanium/runtime/linux/1.0.0/* ~/.titanium/runtime/

ちなみにこれでもまだ
~$ ~/.titanium/Titanium\ Developer 
/home/ytnobody/.titanium/Titanium Developer: symbol lookup error: /usr/lib/libgtk-x11-2.0.so.0: undefined symbol: g_malloc_n

といわれ、起動できません。Titanium + Ubuntuのマリアージュまでの道のりは、なかなか険しいですな。

衝突している同梱ライブラリを削除する

前述のエラーでググれば情報が出てくるのですが、要するに$HOME/.titanium/runtime/配下にあるライブラリのうち、
  • libgobject2.0
  • libglib2.0
  • libgio2.0
  • libgthread2.0
この4種のライブラリが衝突しているから起動できないのだそうです。コイツらを削除してやることで、無事にTitanium Developerを起動する事ができました。
~$ rm ~/.titanium/runtime/libgobject-2.0.* -f
~$ rm ~/.titanium/runtime/libglib-2.0.* -f
~$ rm ~/.titanium/runtime/libgio-2.0.* -f
~$ rm ~/.titanium/runtime/libgthread-2.0.* -f
~$ ~/.titanium/Titanium\ Developer 

ちなみに起動時に
icedteanp plugin error: Failed to run /etc/alternatives/../../bin/java. For more detail rerun "firefox -g" in a terminal window.
といわれます。今のところ正常に動作しているようなのであまり気にしていないのですが、これは大丈夫なのでしょうかねえ。。。

追記

android-sdkのパスを指定してもエラーが出てプロジェクトが作れない時の対処

いざ、新規プロジェクトを立ち上げようとして、プロジェクト種別「Mobile」を選択した際、「android-sdkの場所を教えてくんな」と言ってきます。この時、正常なandroid-sdkのパスを指定しても
Couldn't find adb or android in your SDK's "tools" directory. You may need to install a newer version of the SDK tools.
とか言われてしまいました。そんな時は、
~$ ln -s ~/android-sdk-linux_x86/platform-tools/adb ./android-sdk-linux_x86/tools/
とすればOKでした。

2011-04-14

[Linux]さくらVPSにてMongoDBを一般ユーザ権限で動かす

MongoDBにすこし興味が出たので、このページを参考に、さくらVPS(CentOS 5.5)で動かしてみました。root無くても動かせそうだったので、ユーザ権限で動かすことにしました。

ユーザ権限で動かすので、その用意。

$HOMEにいろいろどっ散らかるのはイヤなので、$HOME/srcを作って、そこにMongoDBを置くことにしました。
~ $ mkdir ~/src

MongoDBの入手

こちらのサイトにLinux 64-bit向けのtarボールがあるので、おすすめ(recommended)と書かれてるバージョンのをwgetで引っ張ってきます。
~ $ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.1.tgz

インストール

$HOME/srcにtarボールを移動して、そこで解凍します。
~ $ mv mongodb-linux-x86_64-1.8.1.tgz ~/src/
~ $ cd ~/src
~/src $ tar zxvf mongodb-linux-x86_64-1.8.1.tgz
~/src $ ln -s ~/src/mongodb-linux-x86_64-1.8.1.tgz ./mongodb
以上でインストール自体は完了です。なまら簡単だべ?

データストアの置き場所を用意する

MongoDBでは、デーモンプログラム"mongod"の起動オプション"--dbpath"で、データストアのパスを設定できます。
今回は、$HOME/src/mongodb/data/db をデータストアにします。
~ $ mkdir ~/src/mongodb/data/db -p
これだけです。

mongodを起こす

ではmongodを起こします。
~ $ ~/src/mongodb/bin/mongod --dbpath ~/src/mongodb/data/db
フォアグラウンドで起き上がってきて、ログをだくだく吐き出したら、無事に起動できています。止めるときはCtrl+Cすれば止まります。

mongod起こした状態でweb管理インターフェースを見てみる

mongodを起こすと、ログの中に
Thu Apr 14 11:14:40 [websvr] web admin interface listening on port 28017
のような記述が見受けられます。見ての通り、「Web管理インターフェースがポート28017で待ち受けている」ということです。試しにブラウザでVPSの28017番ポートにアクセスしてみると、以下のようなページを見ることが出来ます。
セキュリティ的にはこんなのを外部から見れるようにしておきたくないので、mongod起動時のオプション"--nohttpinterface"を付加して、この機能を止めておきましょう。
あとはdaemontools経由で起こすなりしてやれば良いというわけですね。

2011-03-24

[Linux]nginxをさくらVPSのCentOS5.5に入れてみた

最近借りた「さくらのVPS(CentOS5.5)」にnginx-0.8.54をインストールしてみました。

nginxとは

nginx - Wikipedia

ダウンロード

http://wiki.nginx.org/InstallJaからダウンロードできます。
CentOSにはrpmforge含めyumパッケージが無いので、ソースからインストールします。
今回は「安定版」とされている0.8系を選択しました。

インストール

僕が試した限り、以下のyumパッケージを予めインストールしておく必要がありました。
  • pcre-devel
  • openssl-devel
その後はtarballを復元し、configure, make, make installの順に実行してあげればOKでした。
コマンドをまとめると、以下の様になるはずです。
# yum -y install pcre-devel openssl-devel
 # tar zxvf ./nginx-0.8.54.tar.gz
 # cd ./nginx-0.8.54
 # ./configure && make && make install
/usr/local/nginxにいろいろ入っていればインストール成功です。

nginxを起動する

では、httpサーバとしてnginxを起動してみます。
# /usr/local/nginx/sbin/nginx
これだけです。

nginxを停止する

停止する場合は
# /usr/local/nginx/sbin/nginx -s stop
と実行するだけです。

ネームバーチャルを設定する

ドメイン毎にドキュメントルートを変えたりしたかったので、ネームバーチャルを設定しました。
設定ファイルは /usr/local/nginx/conf/nginx.conf です。
server {
        listen 80;
        server_name alpha.ytnobody.net;
        location / {
            root vhosts/alpha;
            index index.html;
        }
    }

    server {
        listen 80;
        server_name beta.ytnobody.net;
        location / {
            root vhosts/beta;
            index index.html;
        }
    }
こんな感じの記述を http { ... } の中に書いてやります。

プロキシとして動作させる

バックエンドでstarmanとか動かしたいので、プロキシとして動作させてみました。
nginx.confに以下のようなネームバーチャルを追加し、ネームバーチャルをまるごとプロキシとしました。
server {
        listen 80;
        server_name lab.ytnobody.net;
        location / {
            proxy_pass http://127.0.0.1:5000;
        }
    }

で、急ごしらえの動確用PSGIアプリを
sub {
    [ 200, 
      [ 'Content-Type' => 'text/html' ], 
      [ '<html><head><title>PLACK</title></head><body>PLACK!</body></html>' ] 
    ];
};
こんな感じででっち上げて、plackupで起こしてやります。
$ plackup ./hoge.pl
これで、lab.ytnobody.netにアクセスすると、PSGIアプリにリクエストが流れます。

ロードバランシングさせる

さきほどのlab.ytnobody.netを改造して、ロードバランサとして設定してみます。
upstream mybalancer {
        server www.google.com:80;
        server www.cpan.org:80;
        server www.yahoo.co.jp:80;
    }

    server {
        listen 80;
        server_name lab.ytnobody.net;
        location / {
            proxy_pass http://mybalancer;
        }
    }
これだけで、upstreamのserver達にリクエストがバランシングされます。

フォアグラウンドで走らせて、daemontoolsに食わせやすくする

nginxをフォアグラウンドで動かすには、
# /usr/local/nginx/sbin/nginx -g 'daemon off;'
のように、グローバル指定子"daemon off;"を指定する必要があります。
しかし、これだけだとログがローテートされません。放っておくと、アホみたいなサイズになってしまいます。
これもdaemontoolsに任せてしまいたいので、どうにかログを標準出力に吐いておきたいところ。
そこで、/dev/stdoutにログを吐いてやるように設定したところ、期待通りの動作となりました。
server {
        listen 80;
        server_name lab.ytnobody.net;
        access_log /dev/stdout;
        location / {
            proxy_pass http://mybalancer;
        }
    }

さいごに

いままでnginx使ってなかった理由がわからない!!!!というほど、簡単に導入できました!!
さようならapache!もう君には(よほどの事がない限り)世話にならないだろう!

2011-02-14

[daemontools]dtinstallというのを用意しました

わざわざ大仰に言うほどのものじゃないんですけど。

かなり前に書いた記事で、daemontoolsのインストールをするスクリプトをこさえました。
もうあれから1年半ほど経過したわけですが、僕自身が未だにこのスクリプトに助けられています。
で、いっそのことネットからもっと取りやすい位置に置いておけばいいんじゃないかと思い、gist + URL短縮でサクッと取得しやすいURLにしてみました。

gist: 825704 - daemontools installer script- GitHub

入手はこちら→http://xrl.us/dtinstall

こちらが最新版です。 http://is.gd/dtinstall

$ curl -L http://is.gd/dtinstall | sh

とすれば、daemontoolsのインストールが始まります。

※2014/01/03 記事を一部修正しました。

2011-02-01

2010-12-24

[Linux]コマンド名からrpmを探す

メモ。

あるプログラムが含まれているRPMパッケージを探すには

たとえば which を探す場合。
# whereis which
which: /usr/bin/which /usr/share/man/man1/which.1.gz
# rpm -qf /usr/bin/which
which-2.16-7

とすれば見つかる。

2010-09-27

[Linux]vimで文字化けする場合の対処

~/.vimrcに以下の記述を加えると良いそうで。
set encoding=utf8
set fileencodings=iso-2022-jp,sjis,utf8

2010-08-24

[Linux]Apacheがセマフォテーブルを食いつぶしたときの対処方法

さっき突然Apacheが寝ちゃって、その上error_logに
[emerg]: (28)No space left on device
などという血文字を残していた。

とりあえずググってみると、
httpdが起動しない! - 専用サーバーならプラスアルファレンタルサーバーの専用サーバー
というページを発見。

vi /etc/httpd/logs/error_logで (ここで最後の50行表示して確認)

○エラー: No space left on device: mod_rewrite: could not create rewrite_log_lock
○エラー: No space left on device: Cannot create SSLMutex Configuration Failed

このようなログが残っていたら以下のコマンドでセマフォテーブルをクリアする。↓

# ipcs -s | grep apache | perl -e 'while () { @a=split(/\s+/); print `ipcrm sem $a[1]`}'

2010-08-02

[Linux]TokyoTyrantの相互レプリケーション

今更なタイトルですが、忘れっぽいオイラ自身のためのメモですので、「出遅れすぎ」とかいうツッコミは全力スルーさせていただきますw

要するに、ttserverのオプションに -ulog、-mhost、-mport、-sid を渡してあげれば良いんです。

ノード1(192.168.1.1)

# mkdir /var/ttserver/ulog
# ttserver -port 1978 -sid 1 -mhost 192.168.1.2 -mport 1978 -ulog /var/ttserver/ulog casket-1.tch

ノード2(192.168.1.2)

# mkdir /var/ttserver/ulog
# ttserver -port 1978 -sid 2 -mhost 192.168.1.1 -mport 1978 -ulog /var/ttserver/ulog casket-1.tch

これだけで、相互レプリケーションなKVSをセットアップ出来ちゃうんですねー。素晴らしいです。

2010-8-27 追記
Xen環境だと、以下のエラーが出ました。
そもそもレプリケーション出来ない模様です。
do_repl: tculrdnew failed

2010-05-03

[Linux]request_module: runaway loop modprobe binfmt-464c

request_module: runaway loop modprobe binfmt-464cって言われた。

  • 64bitカーネルを動かすべきところで32bitカーネルを動かした場合


に出るらしい。

[Linux]MEPIS Linux 8.5 LiveCDでGUIが起動しなくて困ったとき

ゴールデンウィーク真っ只中に、自宅サーバのUbuntuがすっ飛んじゃって涙目のytnobodyです。みなさん、楽しいゴールデンウィークをお過ごしでしょうか?オイラはサーバの中身が空っぽになっちゃって、ちょっぴりブルーです><

さて、そんなブルーなオイラにぴったりのブルーなディストリ「MEPIS Linux 8.5」を、自宅サーバの新しいOSに選定しました。しかし、こういう状況の時こそ更なる試練は待ち構えているものです。インストールをするためにMEPIS LinuxのLive-CDをブートしてみたものの、Xorgが立ち上がってこない・・・><

そんな時!このページDoes not boot to graphical login (kdm)という項目を確認してみましょう。。。

* Boot using the Safeboot option on the opening menu (GRUB)
* Reboot, highlight the kernel you want to use (usually the most recent), and add at the bottom where the cursor is blinking vga=normal and xdrvr=vesa
* Try adding at the bottom acpi=force or acpi=off
* If you continue to have problems, use the MEPIS X Windows Assistant (Section 5.3.4) to copy a working configuration to your computer.


つまり、起動オプションを与えてやれば、うまくXorgが起き上がる望みがあるわけです!
諦めるな!デキルデキル!!!

2010-04-15

[OpenVZ]centos-5-x86_64-default なVEコンテナでttservctl走らせる時の注意

TokyoTyrantをインストールすると、/usr/local/sbin/ttservctlと/usr/local/bin/ttserverができます。
普通だと

# ttservctl start
Starting the server of Tokyo Tyrant
Executing: ttserver -port 1978 -dmn -pid /var/ttserver/pid
Done

となるところ、centos-5-x86_64-default なVEコンテナでは

# ttservctl start
Starting the server of Tokyo Tyrant
Executing: ttserver -port 1978 -dmn -pid /var/ttserver/pid
/usr/local/sbin/ttservctl: line 72: ttserver: command not found
The server could not started

となってしまい、起動できません。
これは/usr/local/binにパスが通っていないのが原因なので、ここにパスを通すか、

# ln -s /usr/local/bin/ttserver /usr/bin/

とすれば、詮なく起動できるようになります。

[TokyoCabinet]CentOS5へのインストールメモ

しょっちゅう忘れるのでメモ。

・TCのconfigureにはlibbz.hが必須。

だから

# yum -y install zlib2-devel

と言う風にしなさい、なんですよ。

2009-11-18

[Linux]transmit timed out

オイラが管理するサーバが夜中に突然、PINGすら通らなくなった。
/var/log/mesaagesを見ると、

NETDEV WATCHDOG: eth0: transmit timed out


なんていう血文字が。こいつを頼りに調べると、先人の知恵ミラクルな解説に助けられた。

どうも、ネットワークの負荷が高い状況下において、TCP Segmentation
Offload(=TSO)が有効になっている場合、一部のハードウェアでネットワーク処理性能が低下するようだ。

そんな時には、TSOをオフにすると良いんだそうで。
# /sbin/ethtool -K eth0 tso off


2009-11-20 追記
TSOの有効状況を確認するには、下記のようにする。

# ethtool -k eth0
Offload parameters for eth0:
Cannot get device udp large send offload settings: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off

2009-07-08

[Linux]postfix2.6 + cyrus-sasl2 で、コンパイル時の注意

Postfix で SMTP Auth(LDAP編)を参照。


ログとその対処方法

構築時に遭遇したログとその対処方法
"-DUSE_CYRUS_SASL" の付け忘れ
ログの内容
/var/log/syslog に

postfix/smtpd[14421]: [ID 947731 mail.warning] warning: unsupported SASL server implementation: cyrus
postfix/smtpd[14421]: [ID 947731 mail.crit] fatal: SASL per-process initialization failed
postfix/master[14405]: [ID 947731 mail.warning] warning: process /usr/libexec/postfix/smtpd pid 14421 exit status 1
postfix/master[14405]: [ID 947731 mail.warning] warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

原因
Postfix 2.3.* から "-DUSE_CYRUS_SASL" も指定する必要がある。
対処方法
CCARGS に "-DUSE_CYRUS_SASL" も付けて make する。

2009-06-12

[Linux]Linux Software Searchは生きていた!

[Linux]やっぱりlss.eternity.ne.jpにアクセスできないあたりで、LSSへのアクセスができないと書きましたが、どうやらhttp://linux.softwaresearch.jp/へ移行したみたいですね。

何より、貴重なサイトが存続されていることに感謝です。