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

2011年9月1日木曜日

PBS (torque) の導入

バッチジョブを投入することが増えてきたので PBS を Ubuntu 11 に入れた。
まとめて投入した複数のバッチを順番に1本づつ実行させたい。投入ノードと計算ノードが同一かつ計算ノードが1つのみという単純構成。パッケージで入れたこともありすんなり出来たがメモしておく。
まずは pbs_server, pbs_scheduler, pbs_mom をインストール
apt-get install torque-server
apt-get install torque-mom
apt-get install torque-client
サーバノードの指定は vi /etc/torque/server_name (/var/spool/torque/server_priv/server_name)
ホスト名
計算ノードの指定は vi /var/spool/torque/server_priv/nodes
ホスト名 np=2
np=2 はこの計算ノードの最大同時実行数。
もし pbs_server が起動していなければ手動で pbs_server -t create を実行後に qmgr コマンドを実行し、以下を設定する
c q キュー名 queue_type=e
s s default_queue=キュー名
s s scheduling = t
s s acl_hosts = ホスト名

s q キュー名 started=t
s q キュー名 enabled=t
s q キュー名 max_running=1
pbs_server, pbs_sched, pbs_mom が動いていたら一旦全部 kill して、手動で起動してみる。
/etc/init.d/torque_server start
/etc/init.d/torque_sched start
/etc/init.d/torque_mom start

pbs_server, pbs_sched, pbs_mom が起動したのでジョブ投入してみる。

$ echo sleep 60 | qsub
1.ホスト名
qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
1.ホスト名                   STDIN            JC                 0 R キュー名
$ echo sleep 60 | qsub
2.ホスト名
$ qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
1.ホスト名                   STDIN            JC                 0 R キュー名
2.ホスト名                   STDIN            JC                 0 Q キュー名

このキューの max_running は 1 なので 2 本投入したうち 1 本だけが R (Run) で後から投入したジョブは実行待ちで Q (Queued) になっている。一人で使う分にはこれで申し分ない。


<2011/12/19 追記>

Syslog に pbs_server のエラーが大量に出ていた:

Dec 19 04:51:02 huge_host pbs_server: LOG_ERROR::is_request, bad attempt to connect from 10.0.2.15:1023 (address not trusted - check entry in server_priv/nodes)

/var/spool/torque/server_priv/nodes というファイルを新規に作って以下一行記述
hoge_host np=2 headnode

Daemon 再起動した。

2011年8月15日月曜日

時刻合わせ

VirtualBox のホストOS (Windows 7) で時刻が合っていれば、ゲスト OS (Ubuntu) では時刻合わせの必要ないと思っていた。

でも Windows の時刻合わせを確認すると、タイムアウトの連続で全く機能していなかった。1分程平気でずれている始末。そんな訳でゲストの Ubuntu も1分程度ずれていた。さらに、ゲスト OSは起動時に時刻合わせをすると思うので、1週間ぐらい立ち上げっぱなしにするとそれなりにずれても不思議はない。

ホスト側は単に時刻合わせのサーバを ntp.nict.jp に変更することで解決した。ゲスト側は apt-get install ntp をして、/etc/ntp.conf はダンコさんのこちらの記事そのままに設定した。

server ntp.nict.jp iburst maxpoll 9
server 0.jp.pool.ntp.org iburst maxpoll 9
server 1.jp.pool.ntp.org iburst maxpoll 9
server 2.jp.pool.ntp.org iburst maxpoll 9

ubuntu 11 だと upstart に移行したのかと思ったけど、 ntpd は /etc/init.d/ntp で起動・停止だった。

2011年6月20日月曜日

Process.su と upstart

ruby で su (のようなことを)するメソッドを作った。

実際行うのは UID,EUID,GID,EGID の変更で、Process クラスメソッドとして追加

process_su.rb
def Process.su(file)
  fstat = File::Stat.new file
  if fstat.uid != uid
    self.gid = self.egid = fstat.gid
    self.uid = self.euid = fstat.uid
  end
end

この Process.su メソッドは引数としてファイル名を受け取る。やることは引数に与えられたファイルの uid を調べ、もしプロセスの uid と一致していなければプロセスの uid,euid,gid,egid をファイルのものにそろえる。

あるユーザが以下の ruby スクリプトファイルを普通に作成し実行した場合、ファイルのオーナーとプロセスのオーナーが同じなのでそのユーザーのプロセスが起動するだけである。

sleep.rb
require 'process_su'
Process.su __FILE__
sleep

次に root でこのスクリプトを実行すると root ではなく、スクリプトファイルオーナーのプロセスとして起動する。このスクリプトを upstart からキックすると好きなユーザーをオーナーにした sleep だけを行うデーモンを立てることができる。

この仕組みを使って Redmine を upstart で起動するようにしてみた。

/etc/init/redmine.conf
start on started postgres
stop on  stopping postgres

exec /usr/local/ruby-1.8.7/bin/ruby /home/shingo/Redmine/script/server -e production 2>> /home/shingo/Redmine/log/production.log

Ubuntu11 で初めて upstart を触ったが man 5 init を読むと便利な仕組みであることがわかった。上のように /etc/init/redmine.conf を書いておけば、postgres が起動したら redmine を上げるように、また postgres が止まる前に redmine をとめるようになどの指定ができる。.conf の拡張子をつけた設定ファイルを /etc/init/以下にファイルを入れておくだけでinit が読み込んでくれる。ファイルの変更も監視され適宜 init が新しい情報に基づいてプロセスの上げ下げをしてくれるようだ(二重起動もチェックしてくれる)。

もちろんこれだけでは駄目でRedmine の script/server の先頭に以下の2行を加える。
require 'process_su'
Process.su __FILE__

これで mongrel が自分のユーザー権限で動くようになる。加えて PostgreSQL の起動設定も必要(自分のところではソースからビルドしている)。以下のように /etc/init/postgres.conf を作る。 postgres.conf というファイル名にするとupstart 上の名前がpostgres になり、上記の redmine.conf にあるstart on started postgres が意味を持つようになる。

start on filesystem
stop on runlevel [016]

exec /usr/local/ruby-1.9.2/bin/ruby /home/shingo/PostgresData/postgres_startup

そして、これでキックしている postgres_startup も Process.su を使っている:
require 'process_su'

Process.su __FILE__

system '/usr/local/pgsql/bin/postgres -D /home/shingo/PostgresData > /dev/null 2>> /home/shingo/PostgresData/postgres.log'

sleep

最後に自分自身の為に備忘しておくと、redmine(rails) も postgres もdaemonize は upstart ( initctl )にお任せすること。これによって二重起動や停止、再起動などをすべて initctl 管理のもとで行うことができるようなにる。例えば
initctl stop postgres
とすれば redmine(rails) が止まったのち postgres が SIGINT で正常に終わってくれるし、もう一度
intctl start postgres
すればpostgres が上げてから redmnine を起動してくれる。

upstart 気に入ってしまった。

2011年6月15日水曜日

pulseaudio

Ubuntu11 で音を出すため、PulseAudio の設定をした。

監視プログラムが音を出せるようにしたい。aplay というコマンドで Wav ファイルを再生できるようだ。でも default の設定そのままでは鳴らなかった。色々試したので必要がないこともやっている可能性があるがやった事をメモしておく。

グループへの参加。シェルスクリプトが音を出す為にはそのスクリプトのユーザーを pulse-access というグループに追加する必要があるようだ(pulseaudio デーモンが system mode で動いている場合)。
usermod -G sudo,pulse-access shingo
ここではユーザー shingo を sudo と pulse-access というグループに加えている。

pulseaudio デーモンを system mode で起動させる設定。 /etc/default/pulseaudio
PULSEAUDIO_SYSTEM_START=1
DISALLOW_MODULE_LOADING=0
これで aplay で wav ファイルを再生できるようななった。
aplay /usr/share/sounds/alsa/Noise.wav

また、 ogg という形式も開けるように
sudo apt-get install vorbis-tools
で ogg123 を入れて、ogg も再生:
ogg123 -q /usr/share/sounds/ubuntu/stereo/dialog-warginng.ogg

2011年6月9日木曜日

Redmine 導入作業3

それにしても Redmine 遅すぎる。がっかりしてインストした ruby-1.8.7 一式削除する一歩手前までいった。でもいくら Rails 重いといってもタイムアウトするんじゃないかという重たさは他に理由があるはず。で、実際名前解決がボトルネックになっていた...。

Redmine は VirtualBox 内のゲスト OS (Ubuntu 11) で動いていて、10.0.2.15 というアドレスがアサインされている。ホスト OS の Windows 7 からは NAT越しでポートドワードしてアクセスするように設定している。Redmine からみると外部ネットワークからのアクセスはゲートウェイ 10.0.2.2 からくるように見える。このアドレスを名前解決しようとして時間がかかっていたようだ。 /etc/hosts に 10.0.2.2 に名前を以下を追記したところ期待していた速度になった

10.0.2.2      pirate

さて、続きの設定をするとしよう。 といってもあとは git の設定だけ。一人で使うので Rails も PostgreSQL もホームの中に置き、自分のユーザー権限で動かしている。そんな訳で git の大本のレポジトリも自分のホーム内に置く。試しに hoge というプロジェクト用にレポジトリを作る。
mkdir -p /home/shingo/Gits/hoge
cd /home/shingo/Gits/hoge
git --bare init

次に ~/hoge がプロジェクトのディレクトリだったとする。まずこのディレクトリに git の設定ファイルを置く。
cd ~/hoge
git init

この時点で .git というディレクトリがひとつできる。ディレクトリ ~/hoge にはいくつかファイルがあったとして、さしあたり hoge.rb というファイルだけをバージョン管理下におきたいとする。その場合
cd ~/hoge
git add hoge.rb
git commit -m 'initial hoge.rb'
これで hoge.rb は手元の ~/hoge レポジトリに登録された。これを大本のレポジトリ /home/shingo/Gits/hoge に反映させたい。まず大本のレポジトリが /home/shingo/Gits/hoge にあること、そしてそれを redmine と呼ぶ事を宣言する。 (~/hoge の中でやる)。
cd ~/hoge
git remote add redmine /home/shingo/Gits/hoge
あとは手元のレポジトリ (master) を大本のレポジトリ (redmine) に push すればよい。
git push redmine master

Redmine の管理画面で新規プロジェクトを作り、レポジトリとして git を選び、大本のレポジトリのパスを指定すればバージョン管理下にあるファイルを Web で参照できるようになる。

ちなみに私の環境ではさくさく動いている。すばらしい。さあ開発するぞ。

2011年6月4日土曜日

Ubuntu11 への ssh アクセスと gdm の停止

Ubuntu11 に sshdのインストールをして gdm を止めた。

sshd のインストール:
sudo apt-get install openssh-server

VirtualBox のホストからゲストの Ubuntu に ssh したいのでポートフォワードの設定が必要。これは VirtualBox の GUI で行うことができた。
TCP ホスト 192.168.56.1:22 を ゲスト 10.0.2.15:22 へ転送とかそんな感じ。

gdm の停止:
/etc/inittab で runlevel 3 に設定しようとしたら inittab がなかった。代わりに /etc/init という見慣れないディレクトリがあり tty1.conf など inittab の中身をファイルに分解したようなファイルがいくつも入っている。その中に gdm.conf というファイルがあり、起動・停止に関わる設定が以下のように記述されている:
start on (filesystem
          and started dbus
          and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
               or stopped udev-fallback-graphics))
stop on runlevel [016]

これをコメントアウトして:
#start on (filesystem
#          and started dbus
#          and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
#               or stopped udev-fallback-graphics))
#stop on runlevel [016]

再起動すると gdm や X が起動しなくなった。 Ctrl-Alt-F1 でコンソールを tty1 に切り替え、試しに
sudo initctl start gdm
とすると手動で gdm をあげることができた。

最後に以下のようなショートカットを作り
"C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "Ubuntu"
スタートアップに放り込んだ。(どす窓は手で最小にする必要があるが...)