2012年10月30日火曜日

[FreeBSD] システムコールトレース

linux でシステムコールをトレースするには、straceを用いるけど

FreeBSD では、trussを用いるらしい。

truss COMMAND

2012年10月29日月曜日

[FreeBSD] ログについて

サーバーを構築したらすることそれは証拠を残す事。
今回は、カーネルからのログを例にまとめてみる。

まずは、何のログをどういう重要度のログを記録するか?
[1] kernelのログで重要度notice以上のログを取る (syslogの設定)
まず、ログファイルを作成しておく。(勿論以下は、rootで)
    touch /var/log/kernel.log
次に/etc/syslog.confに以下を追加
    kernel.notice                                   /var/log/kernel.log
noticeの後は、タブでセパレートするのがポイント。設定を反映させるために下記コマンドを実行。
   /etc/rc.d/syslogd

[2] ログローテーション
Linuxの場合は、logrotateだけど FreeBSDの場合は、newsyslog
設定ファイルは、「/etc/newsyslog.conf」書き方の詳しい説明は「man newsyslog.conf」に載っている。ここでは、以下を追加。
/var/log/kernel.log                     644  5     100  *     JC

この意味は、ログファイルPATH Permission ローテーション回数 100K Byteになったらローテートする。JCは、Jがbzip2で圧縮。 Cは、ファイルが無い場合は作成、を意味する。

そして、設定を反映させるために
newsyslogを実行

[おまけ] apacheのログをローテート
「/etc/newsyslog.conf」に以下を追加

/var/log/httpd-access.log               644  4     *    $W5D18 JC /va/run/httpd.pid
/var/log/httpd-error.log                644  4     *    $W5D18 JC /va/run/httpd.pid
「*    $W5D18」*の意味は、ログファイルのサイズを指定しないという意味。$5D18の意味は、毎週金曜日の18:00にローテートするという意味。
この設定の場合1ヶ月でログファイルが消えていく事になる。

[dialog] FreeBSD 9.0 のインストーラで使われてるのを試してみた

FreeBSD 9.0 のインストーラに採用されている。Dialogコマンドを試してみた。





dialog --title 'Hello Title' --msgbox 'Hello World' 5 20






ここで、5,20はそれぞれ、ダイアログボックスの縦と横のサイズ。
dialog --infobox 'Please wait' 10 30;sleep 4
sleep無しだとすぐプロンプトに戻る。
次は、シェルスクリプト(c shell)で

set NAME=`dialog --stdout --inputbox 'Enter your name:' 8 40`
echo "your inpted name is $NAME"

入力値の出力先を標準出力に変更しています(デフォルトは、標準エラー出力)。
次は、yes/no の選択

  1 dialog --title "title" --yesno "Are you ready?" 6 25
  2 switch($status)
  3         case '0':
  4           echo "Let's go !!"
  5           breaksw
  6         case '1':
  7           echo "Hurry up !!"
  8           breaksw
  9         default:
 10           echo "Invalid return val."
 11           breaksw
 12 endsw

次は、先ほどのシェルスクリプトを閲覧する
dialog --textbox main.csh 10 60

スクロールも可能になっている。j/kのvimのキーバインドでもスクロールできる。
次は、複数のリストから一つを選択。

  1 set COLOR=`dialog --menu --stdout "Choose one:" 10 30 2 1 red 2 green 3 blue    ` # 10-> ボックスの高さ 30-> ボックスの幅 2 -> メニューの高さ
  2 switch ($COLOR)
  3         case 1:
  4           echo "You choosed red"
  5           breaksw
  6         case 2:
  7           echo "You choosed green"
  8           breaksw
  9         case 3:
 10           echo "You choosed blue"
 11           breaksw
 12 endsw


項目数よりメニューの高さが小さいとスクロールできるようになります。
次は、portsのコンパイルでおなじみ複数の項目を選択する。checklist スペースで項目の選択/非選択をスイッチします。

  1 set LIST=`dialog --stdout --separate-output --checklist "test" 10 40 3 \
  2         1 first item \
  3         2 secound item \
  4         3 third item`
  5 foreach i ($LIST)
  6         echo "Proccessing for $i"
  7 end



次は、複数の項目から1つの項目を選択する。RadioBox

  1 set ITEM=`dialog --stdout --backtitle "Your OS" --radiolist "Select your OS.    " 10 40 4 1 Windows off 2 Mac on 3 Linux off 4 FreeBSD off`
  2 echo "Your OS is $ITEM"



参考サイト: http://www.linuxjournal.com/article/2807?page=0,0





2012年10月22日月曜日

[mediawiki] インストール

freebsd + apache + php5 + mySQL

に mediawikiをインストールした。

mediawiki 本家サイトから本体をDLそして、展開

wget http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz
tar xvf mediawiki-1.19.2.tar.gz

そして、apacheの公開ディレクトリに適当に配置して所有権をapacheを走らせるユーザーに変える。その後、http://your-host/mediawiki/mw-config/index.php
にアクセス。

Fatal error: Call to undefined function xml_parser_create() in/usr/local/www/apache22/data/wiki/includes/installer/PhpBugTests.php on line 37



と言われた。「php-xml」モジュールが入っていなかったためで、portsで「php5-xml」をインストール。

次に、データベースと、mediawiki用DBユーザーの作成。(password等は適宜変更)


reate database wikidb;
 grant create, select, insert, update, delete, alter, lock tables, index on wikidb.* to 'wikiuser'@'localhost' identified by 'password';
 flush privileges;


あとは、mediawiki の質問にいくつか答えれば、インストール完了。

2012年10月14日日曜日

[gdb] main関数内ステップ実行

gdb ./a.out

break main

step


なお、ブレークポイントの情報表示

info break

2012年10月13日土曜日

[redmine] INSTALL on FreeBSD

Ubuntu にインストールしようとしてweb Serverとしてapacheを使う当たりで断念したredmine FreeBSDでインストールを試みた所成功したみたいなのでメモ

当方環境:FreeBSD 9.0-RELEASE
portsでインストールされたredmine : 1.3.1.stable

インストールは主に下記ステップで行っていく。
[1] redmine のインストール
[2] DBの用意と接続設定  (MySQL)
[3]DB テーブル等作成
[4]軽量サーバーでテスト
[5] apache上で稼働させる

それでは、スタート
[1] redmine のインストール

cd /usr/ports/www/redmine
make config-recursive

configでは、以下を有効にした
use animation progree bar
LDAP

そして、
make install

これでうまく行けば、/usr/local/www/redmine/ にインストールされている。

cd /usr/local/www/redmine/

[2] DBの用意と接続設定  (MySQL)
以下でDB とredmine用のアカウントを作成する。パスワードは適宜変更する。

create database redmine character set utf8;
create user 'redmine'@'localhost' identified by 'my_password';
grant all privileges on redmine.* to 'redmine'@'localhost';

そして、BD接続用の設定。サンプルファイルをコピーする。
cd config
cp database.yml.example database.yml

そして、先ほど作成したDBとアカウントの情報に適宜変更する。password は#で伏せてます。


production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: ######
  encoding: utf8

development:
  adapter: mysql
  database: redmine_development
  host: localhost
  username: redmine
  password: ######
  encoding: utf8


[3]DB テーブル等作成
セッションの暗号化の為に下記コマンドを実行

rake generate_session_store

[redmine install directory]/app に移動して初期テーブルおよびレコードを作成のために下記コマンドを実行
 cd app

RAILS_ENV=production rake db:migrate


RAILS_ENV=production rake redmine:load_default_data


[4]軽量サーバーでテスト
ここで、本家wikiでは、一時ディレクトリ等の作成を行っているが、FreeBSDインストールの場合インストール時に作成されているのでスキップして軽量サーバーでここまでがうまく行っているかどうかテスト。

ruby script/server webrick -e production

そして、サーバーの3000番ポートにアクセスして表示されればおk。

[5] apache上で稼働させる
passengerを試用してRuby on Rails アプリケーションをapache上で稼働させます。
まず、passengerのインストール
gem install passenger

そして、モジュールのコンパイル。この段階の最後の方でapacheの設定追加事項のサンプルが表示されるので適宜コピーしておきたい。

passenger-install-apache2-module

無事完了したら、apacheの設定ファイル。/usr/local/etc/apache22/httpd.conf と同/extra/http-vhosts.conf にそれぞれ以下を追加する。
-/usr/local/etc/apache22/httpd.conf -

## passenger cofiguration
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.17
PassengerRuby /usr/local/bin/ruby18
PassengerDefaultUser www
RailsBaseURI /redmine

-/usr/local/etc/apache22/extra/http-vhosts.conf-

<VirtualHost*:80>
  PassengerAppRoot /usr/local/www/redmine
  RailsBaseURI /redmine
  RailsEnv production
</VirtualHost>

そして、apacheの公開ディレクトリからredmineのpublicディレクトリにシンボリックリンクを張る
cd /usr/local/www/apache22/data/
ln -s /usr/local/www/redmine/public/ redmine

最後に設定を反映させるためにapacheの再起動
/usr/local/etc/rc.d/apache22 restart

そして、http://server-address/redmine にアクセスして表示されれば無事終了!


[参考サイト]
本家redmine wiki http://www.redmine.org/projects/redmine/wiki/RedmineInstall



2012年10月2日火曜日

bzip2 と xz

この両者の圧縮形式について既出のサイトもあるけど自ら確かめるという意味で

を圧縮->伸長してみた。。。
結果から言うとbzip2は、比較的圧縮が速く、伸長が比較的遅い。xzはその逆。
両者ともtimeコマンドの結果。
[圧縮]
zip2 : 0.015u 0.001s 0:00.01 100.0% 0+0k 2+6io 21pf+0w
xz    : 0.027u 0.006s 0:00.03 66.6% 0+0k 0+0io 0pf+0w

[伸長]
bzip2 : 0.007u 0.002s 0:00.01 0.0% 0+0k 0+9io 9pf+0w
xz      : 0.001u 0.001s 0:00.00 0.0% 0+0k 1+4io 2pf+0w

あとは、メモ マニュアリーにtarで丸めてxzで圧縮。

tar cvf - testData | xz > testData.txz

マニュアリーに伸長してtar戻す
xzcat testData.txz | tar xvf -

[Mac] gitとp4mergeのインストール

 port search git
で検索

 sudo port git-core

これでgitのインストール完了。
p4mergeのインストール

http://www.perforce.com/downloads/complete_list

より自分の環境のバイナリをDL

Macの場合は、dmgファイルをDLしてマウント。
p4.merg.appを/Applications/に入れる。

そして、gitから起動用のシェルスクリプトを2つ作成。
[p4merge]

#!/bin/sh

P4MERGE=/Applications/p4merge.app/Contents/MacOS/p4merge

${P4MERGE} $*

[p4diff]

#!/bin/sh

P4MERGE=/Applications/p4merge.app/Contents/MacOS/p4merge

[$# -eq 7 ]&& ${P4MERGE} "$2" "$5"

実行権限を与えてPATHを通したディレクトリに置いておく。

そして、.gitconfigでmergtoolの設定。
[~/.gitconfig]

merge]
  keepBackup = false;
  tool = p4merge
[mergetool "p4merge"]
  cmd = p4merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
  keepTemporaries = false
  trustExitCode = false
  keppBackup = false
[diff]
 external = p4diff

以上でgitを使った快適環境の完成