ランレベルを理解した

Filed in Linux | サーバ構築 Leave a comment

ぴこぴこプログラムを打つまではなんとかなるけど、箱だの線だのは全く理解ができない、自分の分野にだけロックインしてるダメグラマーをやっております。
なので基礎的なことも知らないまま生きてるわけです。
ランレベルとは結局なんなのか。
某日、チャットルームの会話を抜粋。登場人物は、HP-UXが得意なサーバやさん、Oracleが主戦場のDBやさん、そしてあたし。

DB屋: 自動起動の為に# chkconfig –level 35 portmap on
を打てば良いっぽいんだが、35の意味を調べないとなのだ
鯖屋: ランレベルのことだな。ランレベル3と5で起動してねってことさ
DB屋: ランレベルなのか。しかし35の間にスペースはいらんの?
鯖屋: いらん。ランレベル35ってないからね。6でおわり
DB屋: あれか。0:off 1:off とかズラズラ出て来るところの3と5をonにしろってやつか!
鯖屋: んだ。いまの状態をみたいなら、
chkconfig –list | grep portmap
とかやればでてくる
DB屋: 見てみる。0~6まで全部OFFだったわ。
鯖屋: んじゃぁ、3と5をonかな
鯖屋: 2で上げてもいいけど、意味ないな。
鯖屋:

0がしゃっとだうん
1がしんぐる
2がネットワークなしのマルチ
3がマルチ
4が未使用。HP-UXは使うけどな。
5がGUI
6がリブート

DB屋: これコピーするw
鯖屋: http://www.atmarkit.co.jp/flinux/rensai/linuxtips/156whatrunlv.html
鯖屋: 綺麗に書かれてまっせ・・・
あたし: それ見ていつも不思議に思うわ うっかり6とか指定すると、永久に再起動し続けるゴミができるんだろ?
鯖屋: うん
あたし: 何に使うんだ。。。
鯖屋: システム起動したとたんに init 0で停止とかな。
あたし: あ、とちゅうで止める方法あるにはあるのか
鯖屋: 止められないなw
鯖屋: ソフトウェアが使うんだよ。 不正な状態で固まりかけたら、最後の断末魔で6発動www おまえら死ねやあああああwwww みたいな
あたし: もしかしてなにかね、たとえば
あたし: shutodown -h なうwww とかやってる中身は
あたし: ランレベルを変更している、みたいな話なの
鯖屋: そうですな。
あたし: ははー ラップされてたのかあれは
鯖屋: うらでは、init ってコマンドが動いてる。
あたし: すごく納得した。。。
鯖屋: init ランレベル番号指定で、ランレベル変わるのだ。
あたし: さっそくやってみる
あたし: wwwwwwwwwwwwwwwwww
あたし: なにもおきねえじゃんwww
あたし: とおもたら
あたし: 確かに再起動したwwwwwwwwww
鯖屋: 現在のランレベルみたいなら who -rかな
あたし: いままでshutdown -h なうwとかやってたのアホじゃんか
あたし: init 0でサーバ落とせたんだな
鯖屋: まぁ^^;
あたし: でもそうしないってことは行儀悪いんだな
鯖屋: メッセでないんだよねー なうw のほうがいいよ。
あたし: えーと、とあるサーバに二人(AさんBさん)つないでます
あたし: Aさんがinit0やっておとしたら、Bさんからは急に死んだように見えるが、
あたし: なうwってやると、おとすよーしぬよーってメッセージが両者に届くという話?

# shutdown -h now
Broadcast message from root@localhost
        (/dev/pts/0) at 11:37 ...
The system is going down for halt NOW!

鯖屋: まぁw そういう感じw なうwは、waitつけられるのだ
鯖屋: 60secでしんじゃいますーとか
あたし: おおーなるほど、あれ全員に届いてるメッセージなんだ
鯖屋: システムおちますよは、全員に届くけど死ぬ寸前の断末魔なのだ。
鯖屋: なので、init系だといきなり死ぬ寸前にメッセでておいおいってなる
鯖屋: なうw だと、あとxx秒でおちるよー とかメッセおくれるのね。ログインユーザ全員に。 そういった意味では親切コマンドではある

ストンとハラに落ちた。

自宅サーバでルータがAtermの場合+Nginx

Filed in Nginx | サーバ構築 Leave a comment

DDNSなんかでドメイン振っててもFQDNでアクセスできませんよね。自宅からだと。
これ知ってたら買わなかったわ。ほんとうに不便。

外から見たい場合はDDNSでドメイン引き回してあるので見られるんですが、たとえば自宅Wifiから見ようっていうと、ドメイン名打ってもだめなのね。iPhoneとかそういうのが即アウト。
自宅鯖の中には開発中や絶賛放置中の有象無象やp2やphpmyadminなんかが転がってるんですが、これらはLAN内から見に行く場合、192.168.0.15:8000ならアプリA、192.168.0.15:8001ならアプリB、みたいにしてやりくりしてました。Apacheでのやりかたはいろんなトコに書いてあると思う。

で、自宅鯖のApacheを消して、ふとした拍子にNginxに変えてみました。
さいきんおねーさんは何やるにしてもNginxです。すごいお気に入り。
設定楽だし軽いしね。
php?
>php-cgi -b 127.0.0.1:9000
解決するじゃないかきみーもんだいないよー
Pylonsさんとかのおかげで、この方式で立てておくというのがしっくりくるようになってた。成長だわー

いままでは、apacheのports.confにこんな書き方してました。
(IPアドレスやポート番号とかはサンプルなのでてきとうです)

NameVirtualHost *:80
Listen 192.168.0.15:80
Listen 192.168.0.15:8000
Listen 192.168.0.15:8001

こんなふう。
で、sites-avaiablesだかの中の各種vhostsに

<VirtualHost *:8000>(略)</VirtualHost>

こんなん。ほかにもなんかやってたかも知れないけどもう覚えてない。
で、これをNginxでも何とかしたい。

    server {
        listen 8000;
        listen 80;
以下略

余裕だった。正しいのかはいまいちわかんないけど間違ってはいないだろう。
自宅からはIPアドレス:ポート番号(この場合8000番)で見に行く。これは従来どおり。
外からは名前解決できるのでドメイン+80番で見に来ると。
listen 80のほうを消したりコメントすれば、外からは見にこれない。
自宅からしかいじらないphpMyAdminなんかはlisten 80は書かない設定にしています。

あ、うちは外からポート8000で飛び込んできても蹴ってるからというだけですけどね。80番のみ通す格好にしています。これはルータのお仕事。

みたいな話。

さくらVPSでubuntuセットアップ

Filed in Nginx | サーバ構築 | さくらのVPS Leave a comment

全部とは言わないけどかなりいろいろ自分で入れるはめに。
デフォルトのCentOSだとここまでは必要なかった。とくにaptitudeで入れてるあたり。

自分が欲しいのは以下

  • Nginx
  • Emacs
  • MongoDB
  • Python
  • php
  • Erlang
  • RabbitMQ

いれなきゃいけなさそうなアレコレ
apacheは外します

aptitude remove httpd -y
aptitude install gcc -y
aptitude install curl-devel -y
aptitude install glibc -y
aptitude install zlib-devel -y
aptitude install libjpeg-devel -y
aptitude install sqlite-devel -y
aptitude install ncurses-devel -y
aptitude install readline-devel -y
aptitude install php -y
aptitude install bzip2-devel -y
aptitude install libxml2-devel -y
aptitude install mercurial -y
aptitude install vim -y
aptitude install libpcre++-dev -y
aptitude install rabbitmq-server -y
# ちょっとこのへん自信ない。どれかはいるんだけど。
# EmacsやNginxのインストールでコケた際にいろいろ追加したもの。
aptitude install libpcap-dev  -y
aptitude install libsoci-core-gcc-dev -y
aptitude install pcre-devel -y
aptitude install lib32gcc1
aptitude install zlibc -y
aptitude install zlib1g-dev -y
aptitude install libssl-dev  -y
# require emacs 
aptitude install libncursesw5-dev -y
aptitude install libncurses5-dev
aptitude install libtool -y

Nginxのconfigure

./configure \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_stub_status_module \
  --with-http_ssl_module \
  --with-http_gzip_static_module \
  --with-http_realip_module \
  --with-http_dav_module \
  --http-log-path=/var/log/nginx/access.log \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --with-debug

/etc/init.d/nginxの中身
11/22編集:
http://wata-jp.ldblog.jp/archives/1674163.html
こちらを参考にNginxのinitスクリプトを書き換え。

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# pidfile:     /var/run/nginx/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest|-t|t)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

/etc/init.d/nginxとか初めて書いたわ!

RabbitMQはaptitudeから入れたところ、Erlangも勝手に引っ張ってくれてたみたい。
そもそも、CentOSのときにRabbitMQのインストールでこけまして、それでubuntuをいれたという経緯がございます。

今気づいたけどsendmailも入ってない。まいったなさすがに敷居高い。
さんざんやっといてアレだけどCentOSに戻そうかな(-_-;
こういうのをサラサラやってるサーバ屋さんとかほんとすごいと思います。

実際はpythonとかもソースから入れてるんだけど割愛。

raid1まとめ

Filed in サーバ構築 Leave a comment

お便利さんとこは神
mdadmコマンドによるRAIDデバイスの構築
http://www.obenri.com/_raid_create/create_mdadm.html
RAID メモメモ Linux
http://keiotu.blog9.fc2.com/blog-category-8.html

パーティーションの一覧を見る
cat /proc/partitions

raidの状態を見る
mdadm –detail /dev/md0
mdadm -D –scan
cat /proc/mdstat

mdadmの設定はココ
/etc/mdadm/mdadm.conf

mod_wsgiをコンパイルする

Filed in Apache | Python | サーバ構築 Leave a comment

コレを書いているのは2010/11/05です。その当時のメモです。一応。
aptitudeとかでいれても、2.6.5向けのコンパイルだから云々ってapacheのログに出るわけです。

[warn] mod_wsgi: Compiled for Python/2.6.5.
[warn] mod_wsgi: Runtime using Python/2.6.6.

きもいので解消するの巻。
mod_wsgi-3.3.tar.gzを拾ってきます。
いつもどおりtar zxfvで開いて
./configure –with-python=/usr/bin/python2.6
apxs云々いわれたらapache-devだかそのへんのを入れよう。多分はいってる。
ついでにpython-devもいれよう。
ほんでmake
make installとかそんなんだ。

[notice] Apache/2.2.16 (Ubuntu) 
PHP/5.3.3-1ubuntu9.1 with Suhosin-Patch 
mod_wsgi/3.2 Python/2.6.6 configured 
-- resuming normal operations

ログ見たらコレで出なくなってた。なーんでかpython2.7ではこの手順がうまく行かなかったのが無念。なんでだろ。

modのリコンパイルとかしたあとはreloadじゃだめで、restartでちゃんと動いた気がする。気がするだけですが。

新鯖構築メモ(5)

Filed in NDI | サーバ構築 1 Comment

なんかさー
新居の回線が200Mなんで、ルータ買い換えたのね。NECのやつに。

ルータはもちろんサーバもセットアップ終わって、外からはうちのページ見に来れるんだよね。ケータイとかさ。
家の中からはIP直打ちだろうがFQDNだろうがみにこれないの。なんなの。

こんなページを発見
Aterm WARPSTARシリーズでのサーバー公開設定
これだこれだ。

基本的にAterm WARPSTARシリーズはポートマッピングだけでサーバー公開が可能となっています。

うん。

LAN内からは外部へサーバーの公開が無事できたかを確認できないので、友人に試してもらうなどで確認してもらってください。

!?
「友人に試してもらうなどで」っておーい!
どーもこれがNECのポリシーらしいです。これぞまさに盲点。
自宅にいるのにe-mobileとかで動作確認するのかこれ。意味が分からない。

IP直打ちだと何が何でも通さないのかねコレ。ぇー。
apacheの設定でなんとかなるであろうか。なんないな。前のルータつなぐしかない罠。
いちまんえんしたのにー

新鯖構築メモ(4)

Filed in NDI | サーバ構築 Leave a comment

swatもいれて、samba順調に稼動中。
んでpythonいじんのに必要なsetuptools、じゃなくてdistribute(setuptoolsの代替。なんかメンテ止まってるらしくてこういう代替ツールが台頭してますね)をいんすとろーる。
ubuntu10.10はpython2.6が入っておるので、/usr/bin/pythonが2.6向いてます。こっちも2.7にリンク張りかえ。2.6使うばあいはそのままで当然おk

説明はこっち(Distribute’s documentation)
Pypiのぺーじはこっち。いまのとこdistribute 0.6.14が最新。導入方法はいつもどおりで、
wgetして、

tar xfzv distribute-0.6.14.tar.gz
(中略)
#cd distribute-0.6.14
# python setup.py install

こう。おわり。

# easy_install mysql-python
ry
EnvironmentError: mysql_config not found

なんだよーヽ(`Д´)ノ
virtualenvははいったの。なんかが足りないとかなのであろうということでskip。

そんなことよりapacheの設定ふっとばしたことにさっき気づいた。やばい。

新鯖構築メモ(3)

Filed in NDI | サーバ構築 Leave a comment

いいかげん覚えよう。
特集 RAIDの基礎知識 1.よく利用されるRAIDレベル
さっき0でやってたからraidしたディスクが1TBになるのは確定的にry

mdadm --create --verbose --assume-clean /dev/md0 --level=1 --raid-devices=2 /dev/sda  /dev/sdb
mdadm: /dev/sda appears to contain an ext2fs file system
    size=976772864K  mtime=Sun Oct 31 13:41:20 2010
mdadm: /dev/sda appears to be part of a raid array:
    level=raid1 devices=2 ctime=Sun Jan 10 13:44:10 2010
mdadm: /dev/sdb appears to be part of a raid array:
    level=raid1 devices=2 ctime=Sun Jan 10 13:44:28 2010
mdadm: size set to 488386496K
Continue creating array? y
mdadm: array /dev/md0 started.

sudo mdadm -D /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Sun Oct 31 14:04:55 2010
     Raid Level : raid1
     Array Size : 488386496 (465.76 GiB 500.11 GB)
  Used Dev Size : 488386496 (465.76 GiB 500.11 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sun Oct 31 14:04:55 2010
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 0547eb39:8425cf46:fc948a0e:7534460e (local to host mezquita)
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb

やれやれ。なんだかいつの間にか、500GBのディスクがsdaとsdbになってる。
なんかすごくこわい。

構築メモの(1)を見直す。

ls -la /dev | grep sd
lrwxrwxrwx  1 root root           4 2010-10-31 10:56 root -> sdc1
brw-rw----  1 root disk      8,   0 2010-10-31 10:56 sda
brw-rw----  1 root disk      8,   1 2010-10-31 10:56 sda1
brw-rw----  1 root disk      8,  16 2010-10-31 10:56 sdb
brw-rw----  1 root disk      8,  17 2010-10-31 10:56 sdb1
brw-rw----  1 root disk      8,  32 2010-10-31 10:56 sdc
brw-rw----  1 root disk      8,  33 2010-10-31 10:56 sdc1
brw-rw----  1 root disk      8,  34 2010-10-31 10:56 sdc2
brw-rw----  1 root disk      8,  37 2010-10-31 10:56 sdc5
brw-rw----  1 root disk      8,  48 2010-10-31 10:56 sdd

これだ。他のディスクをつなぐ前は、OSの入ってるディスクがsdaだったのに、raid用のディスク突っ込んだ時点で変わってたんだ。
変わってたのに気づかず、sdcなんでbusyなんだよーとか意味不明なことをくりかえしていたのだな。
なんかやらかしてないといいけど、先に進むことにする。

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : inactive md0[1](S)
      488386432 blocks

md0 : active raid1 sdb[1] sda[0]
      488386496 blocks [2/2] [UU]

unused devices: <none>

新鯖構築メモ(2)

Filed in NDI | サーバ構築 Leave a comment

前のサーバでは、いつのまにかミラーリングが外れたRaid用ディスクが互いに差分を持っているという恐ろしい事態が悩みの種だった。
訳わかんないで使ったり適当なコマンドぐぐって打ってるから、こうなる。

とりあえず取り急ぎ、やったこと羅列。作業中だから(-_-;
raid対象のディスクに対して何しても「Device or resource busy 」っていわれてイライラする問題に関しては、fdiskコマンドで対象のディスクのパーティション全消しwriteでなんとかなったみたい。

ほんで

mdadm --create --verbose --assume-clean /dev/md0 --level=0 --raid-devices=2 /dev/md_d0 /dev/md_d1
mdadm: chunk size defaults to 64K
mdadm: /dev/md_d0 appears to contain an ext2fs file system
    size=488386496K  mtime=Sun Oct 31 12:42:16 2010
mdadm: /dev/md_d1 appears to contain an ext2fs file system
    size=488386496K  mtime=Sun Oct 31 13:09:46 2010
Continue creating array? y
mdadm: array /dev/md0 started.

なんでうまくいくんだ?

sudo mdadm -D /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Sun Oct 31 13:26:02 2010
     Raid Level : raid0
     Array Size : 976772864 (931.52 GiB 1000.22 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sun Oct 31 13:26:02 2010
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 64K

           UUID : baf2f9b6:78fb0d48:fc948a0e:7534460e (local to host mezquita)
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0     254        0        0      active sync   /dev/block/254:0
       1     254       64        1      active sync   /dev/block/254:64

このあと何かをやらかしたようで、500GのHDD二個がくっついて1000Gになってしまったので、もっかい手戻りして作業にもどる。
mountしたあとmkfsしたんだったような。ううむ。

ubuntu 文字化け

Filed in NDI | サーバ構築 Leave a comment

そういえばなんだかubuntu(サーバ)インストールした直後に化けるわけですよね文字が。
ぐぐればいっぱい出てくるんだけど、rootの.bashrcを編集し損ねて文字化けが直らないとパニるのはかっこ悪いから気をつけたほうがいい。

case $TERM in
  linux) LANG=C ;;
  *) LANG=ja_JP,UTF-8 ;;
esac

以上自分宛。また近い未来にやるであろうから。

TOP