Home > Linux
Linux Archive
CentOS5インストール時にソフトウェアRAID1構築
絵描きすぎでこっちがお留守に。
先日Atom 330マザーで1台組んだことは書きましたが、気軽に自宅サーバにエントリーしやすい、ACアダプタなど静音なベアボーンとかキューブはHDD2台積めない(電源も少ないし)。ってコトで、PCIスロット1基搭載で、拡張カード次第で多少何とかなるD945GCLF2を使って構築。(よーするにShuttle X27の不満点を何とかしたかったワケだ、特にCPUと耐障害性)
当初の予定ではRAIDカード差して、とやるつもりだったんですが(SATAポートが2つなので、光学ドライブ積むとポートが足りなくなるから)、前からソフトウェアRAIDを試したかったし、安いRAIDカード使うのって信頼性的に結局どうなの?というコトで、とりあえず不満が出たらRAIDカードを買うことにして、ソフトウェアRAID採用。mdadmでRAIDを組みます。
ここでSATA光学ドライブを使うとポートが足りないのですが、IDEもちゃんとあるので、あえて光学ドライブをIDE、HDDをSATAに接続。
今回は組むところからだったので、インストール時のAnacondaでのRAID1構築になります。
SSがないのでアレですが、OSインストール先ドライブ選択画面で、「パーティション割り当て詳細を表示(細かい文句は忘れた)」にチェックしておくと、自動で割り当てられたパーティションの状態が表示されます。が、ここではRAID用に構築しなおすので、リセットを押して一旦クリア。手動でパーティションを作っていきます。
基本的には
- 必要なパーティションを片方のディスクに作る
- 同じ容量や構成でもう一方にも作る
- 「RAID」ボタンでミラーするパーティションの対応づけを行う
という感じになります。とりあえず、今回は必要最小限のものだけ作るので、/boot と swap と / 領域だけ作成することにします。bootは100MB、swapは物理メモリの倍とる、残りをすべて/という基本構成で。ディスクはSATAなので、sda、sdbとします。
- まず「新規」でパーティションを作成します。各パーティションの役割はRAIDボリュームが出来てから決めていくので、マウントポイントは空欄のまま、ファイルシステムタイプでsoftware RAIDを選択します。
使用可能なドライブではsdaだけにチェックを入れます。
最初の領域を/bootにするので、ここでは容量を100MB、容量オプションで固定容量を選択。「プライマリパーティションにする」チェックを忘れないでください。OKで元の画面に戻ると領域が作成されています。 - 同様に新規→software RAID→sdaのみを選択→搭載メモリの倍の容量(1GBなら2048と入力)を入力、固定容量を選択。
ここはswap領域なので、「プライマリパーティションにする」のチェックは外しておいてください。 - 同様に新規→software RAID→sdaのみを選択→容量を飛ばし、容量オプションで「最大許容量まで使用」を選択→「プライマリパーティションにする」は外す。これで、残りの領域がすべて/に割り当てられ、sda側の設定が終了します。
- 1~3と同じことを、「使用可能なドライブ」のチェックをsdaでなくsdbに読み替えて行います(つまりsdbにもsdaとまったく同じパーティション構成をつくる)。
- 最後にRAIDボタンをクリックし、「RAIDデバイスを作成」を選択。ここで、パーティション同士のミラーボリュームを組んでいきます。
ここでマウントポイントに/boot、ファイルシステムはお好きなの…普通はext3を選択。RAIDデバイスでmd0を選択、RAIDレベル1を選択。
sda1とsdb1が、それぞれboot用に確保された容量100MBの領域になっているハズですので、この二つにチェックを入れます。スペア数は0のままで。OKを押すとRAIDボリュームが作成されます。 - これを、swap、/でも行っていきます。
マウントポイントやファイルシステムは作成する環境によって変わってきますが、5でやったのと同様に設定し、パーティションが1つ増えるごとにRAIDデバイスをmd1、md2と増やしていきます(これがOSが認識する実際のデバイス名になります)。もっと細かくパーティションを区切っている場合でも、基本的に作業は同じことを繰り返していく形になります。
後は通常のインストールと変わりません。インストールが終了したら再起動します。
この後、OS起動後、ミラーボリュームがビルドされるまで、暫くmdadmのシンク作業が続きます(topなどで見ると激しく動いています)。どのくらい時間が掛かるかはマシンパワーや容量によりますが、ミラーボリュームの構築が終わるまではしばらく負荷の掛かった状態が続きます。
ちなみにAtom330、メモリ1GBでやった自分の場合では、Load Averageが1.5程度の状態が続いていた感じです(ずっと見ていたワケではないですが)。構築が終了すると、Load Averageは通常に戻ります。インストール後、すぐヘビーに使い倒せるワケではないのでご注意を。
CPUとSATAの性質上、アクセスや負荷が高めの場合は結構IO時にCPUパワーを食うので、余裕を持って運用したい方には、省電力CPU+ソフトウェアRAID(しかもSATA)は正直オススメできませんのでご注意を。自分の場合はそんなに負荷がかかる用途もなかったので…。Atom 220とかだと若干キツイかも?しれないですね。
ちなみに思いついただけでやってはいませんが、eSATAカードを挿すなりなんなりして、スマートなAtomベアボーンの外にハードディスクケースに入れたHDD(電源容量によってはACアダプタがほしいところ)をつないでおいてソフトウェアRAIDを組んでしまう、というのも手軽かな、と。静かな上に手軽だし。
あーあと、パーツ探し中に、ACアダプタ180W出力、2系統接続して360Wまで対応できる製品がありました。静音にACアダプタ電源はかなりオススメ(Shuttle X27で経験済み)なのですが、電源容量に不満がある人でもこれだけ容量があれば、ACアダプタという選択肢が広がるのはイイですね。
- Comments: 0
- Trackbacks: 0
外部アクセス可能なSVNをsubversionで
会社にゃもうリポジトリあるからね、なかなか新規に立てんのは体験できないよね、自分でやらないと。まあ移行実験でtrac入れたことはあるんだけれども、ローカル用だからSSLとかナシだったし。
とりあえず認証、暗号化、EclipseのSVNプラグインからコミット・更新確認。良きかな。
参考にしたのはSORENARI-WIKIさんですね。今回は外部のサーバにやったので、opensslとかApacheのSVN用コンパイルオプションとか、subversionの設定とかまで一通り説明があったのでやりやすかったです。外部にSVNが必要な方にはオススメかと。
あと、今回使ったサーバー、CentOSだけど最小構成でyumが無かったんですが、依存関係でパッケージ入れるのには便利だけど、ぶっちゃけ用途的にはほとんど要らなかったです。yum入れるのも割と面倒臭いので、必要なパッケージはCentOSのページ行ってパッケージ落としてきたらいいと思う。(どうしてもyumがないと…という方はnotizblock+さんが素敵)
rpmとかyumとか便利なんだけど、結局基本的な用途以外ではソースコンパイルが必要になってくるし、あまり依存しすぎるのもアレですね。
- Comments: 0
- Trackbacks: 0
オブジェクト指向・MVC習得向き言語とフレームワークはどれだろう?
…あ、Objective-Cはやりますよ?やるけどこっちは趣味だから。
自分は今んとこサーバーとかネットワーク周りの仕事がほとんどなので、たまぁにプログラム書いてもPerlで簡単なスクリプト書いてcronで回すとかそんなもんですが、時々ちゃんとMVCとかオブジェクト指向を今のウチに習得しとかんと、年くったら吸収悪くなんぞ?という危機感はあります。
Perlで先に進むのも一つの選択肢ですが、悲しいかなOOPやWebアプリケーション開発という時流を汲んで開発(または拡張)された後続言語からすれば、Perlの実装は特殊すぎて他に使い回せねぇじゃねーか、と思うところはなくもない。こないだ少し大きめの社内用アプリをWebベースで書いてたらキレそうになった。まあ、packageの使い方がダメダメだとか能力的なものはあるけど、少なくとも素人が書いたらどうしようもなくなる言語は、そこそこの人が書いても規模が大きくなったときにほころびがより出やすいんじゃないだろうか。
もちろん、mixiなどもmod_perlで書かれてますし、キチンとコーディングルールを作った上でpackageやライブラリ化などを適切に使えるならそれでもOKなのでしょうが、それが出来ないレベルの素人(=自分)にはしんどいです、正直。フレームワークも…なぁ。
んなワケで。会社で使ってるから?という理由で同じ言語やフレームワークを使ってもイイのですが、OOPに向いてる言語、可能だけど不向きな言語とかはよく聞きますよね。ruby on railsはものすごく賞賛されていますが、概念自体はいろんな言語に取り入れられたけど、rubyで開発された大規模なシステムって(あるんだろうけど)そういえば聞かない。実行速度やソース行数(記述)などを考えると、かなり大規模なシステムでは、むしろPython使ったりとかいうケースが多いらしい。
JAVAはよくオブジェクト指向という言葉と同時に出てきたりしますが、周囲にJAVA使いがまったくいないし、故にTomcatをわざわざ入れることもないので使いません(ちょっとだけ書いてみたことはある…触りだけね)。Webアプリ+フレームワークで気軽に覚えられることを考えると、やはりLAMPでフレームワークをどうするか、って感じが一番ラクなのかねぇ(基本的に概念を掴むことが目的なので、資料が豊富な言語であればいいし)。
じゃ、フレームワークは?会社で使ってるヤツは、特性と目的が決まってて選んでるだけなので、世間的にはマイナーで資料もホントに少ない。Zend Frameworkとか、cakePHPとか、Symfonyは本屋でよく見ますね。そのへんはホント素人なのでPHPプロを見てみると、…。どうなんだろう。symfony、自動生成部分が多いということは、少なくとも初心者があまり考えずに書いても、ViewにActionほとんど書いてしまったり、ということは少ないんじゃないか、と思うのだが…。実行速度で劣るようだが、書きやすさや安定性を重視した結果そうなっているのなら、実務は知らんが学習にはいいんじゃなかろうか…。
以前、symfonyのデモ動画を見たら、WebアプリケーションのクセにデスクトップのIDE並みにサクサクブログとかを実装してて驚いた記憶があります。んー、ちーと入れてみたりするかなぁ。
- Comments: 0
- Trackbacks: 0
MySQL5.0.xのレプリケーション
とりあえず通常のMySQL動作環境の構築まで終了してると仮定しまして。
◆レプリケーション用ユーザー追加
普通のユーザーでやってしまうと、コケたときにレプリケーションが原因なのか、そうでないのか切り分けにくくなります。また、レプリケーションのみのユーザー権限もあります。このあたりは適宜用途に応じて作成してください。
◆DBを停止
MySQLでスナップショットをとるには商用ソリューションが必要になるし割と複雑なようです。今回は停止するほうで。現在まで稼動していたマスタを停止、スレーブのほうも止めておきます。
これは、次のコピー作業が「双方の内容を同一にする」ために行うものなのですが、コピー中に変更があると内容に食い違いが生じるためです。
◆DBの内容をコピー
rsyncなどで、マスタDBのMySQLデータベースをまるごとコピーします(標準なら/var/lib/mysql以下ですな)。DBまるごとレプリケーションする場合は、一旦スレーブ側をカラにしてから
# rsync -a /path/to/dbm /path/to/dbs
でOK。
◆レプリケーション設定
各サーバのmy.confにレプリケーション設定を追加します。マスタ側で必要なのは
log-bin
server-id=100
の2行。上がバイナリログを吐く設定、下がサーバーidです。idはDBサーバー毎にユニークでないといけないので、スレーブ側ではここと被らないように注意。
スレーブ側で必要なのは
server-id=101
slave-skip-errors=1062
skip-slave-start
あたりですかね。
idは前述のとおり、レプリケーションしている他のサーバーと違う番号を振ります。
2行目は「指定した番号のエラーが発生してもスキップしてレプリケーションを続ける」という指定です。通常、エラーが発生するとレプリケーションは停止します。しかし、エラーの内容によっては、システムによっては問題のないものであったり、MySQLのバグであったりします(エラーナンバーのうち幾つかは将来回避される予定だそうですし)。
この場合は公式をそのまま引用すると、
Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)
Message: ‘%s’ は key %d において重複しています
環境によって異なるので、どれをスキップするかはご自分の環境で検証してください。allも指定可能です。
3行目は、再起動時にレプリケーションを自動的に開始するな、という指定で、これは公式に推奨されているオプションです。DBにエラーが発生・再起動時は、正常にレプリケーションが行われていない可能性があるので、データの食い違いや破損による二次障害が発生しかねないためです。停止した場合はログなどから原因を突き止めた上で問題がなければ手動で再開しましょう…。
◆起動、の前に…
レプリケーション開始設定のためにMySQLサーバの起動が必要なのですが、プログラムやcronなど、DBを更新する可能性のあるものはすべて停止してください。起動後に更新が発生すると、内容が食い違ってしまって再度コピーからやり直しになってしまいます。
確認ができたら、まずマスタのMySQLサーバを再起動し、mysqlコマンドで接続します。ここで
> show master status;
と入力すると、テーブルが表示されて、File、Positionなどが表示されますが、この2つをメモしておいてください。Fileは同期するバイナリログ、Positionはそのログのどこから同期するかの位置を指定するものですので、これが間違っていると失敗する重要なところです。ちなみに更新されるとPositionは変化していくので、上のコマンドを何度か叩いて変化があるようなら、DBを更新するようなプログラムなどが動いてしまっているということになります。その場合はファイルコピーからやり直しになります。
さて、特に問題なければスレーブ側で最後の設定を行います。ここでは上で調べた同期開始位置をスレーブ側にも教えてあげて、レプリケーションを実行します。
> CHANGE MASTER TO MASTER_HOST=’マスタのIPアドレス’, MASTER_USER =’レプリケーション用ユーザ名’, MASTER_PASSWORD=’パスワード’,MASTER_LOG_FILE=’上で調べたファイル名’, MASTER_LOG_POS=上で調べた位置;
この後、
> slave start;
で同期が開始されます。
◆レプリケーションの確認
特にエラーなどが起きなければ、そのままスレーブで
> show slave status\G
と入力し、レプリケーション状況を確認します。エラーなどがなければ同期ができているはずですので、データベースやテーブル、レコードをマスタ側で追加してスレーブ側で確認するなどしてみましょう。また、データが更新されていけば、上記コマンドで確認できる、バイナリログの位置が徐々に変わっていくのが確認できるはずです。
設定だけなら、結構簡単ですね。運用するとなるとまた別ですが…。
とりあえずMRTGやcactiやNagiosなどでリソース監視はしておきましょう。
- Comments: 0
- Trackbacks: 0
組み込み用BeagleBoardが魅力的で今後が楽しみ
Beagle Boardに注目中。

いわゆる組み込み製品用のボードですが、そこそこのスペックがある上に、画像処理に使われる浮動小数点演算能力が非常に高く、IOインターフェースも多いので(変換ケーブルなどはいるけど)、この大きさなのにフルスペックのPCとして使えます(よく知りませんが、組み込みでこのサイズ・性能で149ドルも破格らしい)。
HDDはありませんが、SDカードを差すことができるのと、Beagle Boardで稼働するLinuxも出ているし(ARMなのでWindowsは無理っぽい)、当然完全ファンレスなので、サーバー用にはどうなのかな…、と、ブログの性質上自然と考えてしまいますよね。キャパシティはなさそうですけど、アクセス少ないとか実験用途とかであれば…。プロセッサはハイエンドモバイル機器に載ってるクラスだそうです。HTML吐くだけならそこそこいけるかな?
尚、今注文するとRev.B7か8くらいのボードになるそうですが、2009年1Qの終わり頃に、USB OTGの致命的なバグ、プロセッサのバグのフィックスと、幾つかのスペックアップが行われた、Rev.Cが出るようなので、フルに使い込みたいならしばらく待つほうがいいかも知れません。
ちなみに検索してた感じでは、クリアケースを扱ってるところもあったなぁ(クリアケースに各種変換ケーブルなども取り付けたモデルもあった。「BeagleBoard ケース」あたりで検索してもらえば多分でるかと。
ちなみに日経Linux3月号でBeagleBoardを使ったマシンをくむという特集をやってますので、興味ある方は是非。僕は買いました、これを知った日の昼休みに。
- Comments: 5
- Trackbacks: 0
iptablesを覚えたいなぁ…とりあえず基本スクリプト。
最近、すでに自宅サーバーブログじゃなくてふつーのブログになってるな。まあ、個人ブログだからどっちゃでもえーんですが。ああ、そういえばMacOS XはFree BSDベースですが、iPhoneもJailbrakeすればSSH接続できるらしいですよ(保証対象外)(でも自分はやらない)(だってベンダーデフォルト派なんだもん)(っていうか本題逸れてるよ)。ちなみに、Windows Mobile5で、CE用のHTTPD使ってハンドヘルドWebサーバーならやったことがあります(意味ねー)。
とりあえず、ずっとiptablesを勉強したいと思っておるのですが、Web検索した範囲ではなかなか基礎から説明されているサイトはみつからないのですが、とりあえずシェルスクリプトのサンプルをおいとくから各自の環境に合わせて設定してくれ、というところはいくつかありました。実際に自分が設定する際も、イチイチ毎回手動設定をするワケにはいかないので、基本的にはスクリプトとしてまとめておくことになると思います。
ITサイトの連載でもあったのですが、より優秀なスクリプトを紹介されている、有名なこちらで:CentOSで自宅サーバー構築。こちらを必要に応じて改造したものを使います。
#!/bin/bash
#---------------------------------------#
# 設定開始 #
#---------------------------------------#
# インタフェース名定義
LAN=eth0
#---------------------------------------#
# 設定終了 #
#---------------------------------------#
# 内部ネットワークのネットマスク取得
LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
# 内部ネットワークアドレス取得
LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '`
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
# ファイアウォール停止(すべてのルールをクリア)
/etc/rc.d/init.d/iptables stop
# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
iptables -P INPUT DROP # 受信はすべて破棄
iptables -P OUTPUT ACCEPT # 送信はすべて許可
iptables -P FORWARD DROP # 通過はすべて破棄
# 自ホストからのアクセスをすべて許可
iptables -A INPUT -i lo -j ACCEPT
# 内部からのアクセスをすべて許可
iptables -A INPUT -s $LOCALNET -j ACCEPT
# 内部から行ったアクセスに対する外部からの返答アクセスを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SYN Cookiesを有効にする
# ※TCP SYN Flood攻撃対策
sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf
# ブロードキャストアドレス宛pingには応答しない
# ※Smurf攻撃対策
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf
# ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done
# Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done
# フラグメント化されたパケットはログを記録して破棄
iptables -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
iptables -A INPUT -f -j DROP
# 外部とのNetBIOS関連のアクセスはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT -s ! $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A INPUT -s ! $LOCALNET -p udp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -d ! $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -d ! $LOCALNET -p udp -m multiport --sports 135,137,138,139,445 -j DROP
# 1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
iptables -N LOG_PINGDEATH
iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : '
iptables -A LOG_PINGDEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH
# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP
# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから) #
#----------------------------------------------------------#
# 外部からのTCP22番ポート(SSH)へのアクセスを許可
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 外部からのTCP443番ポート(HTTPS)へのアクセスを許可
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 外部からのTCP21番ポート(FTP)へのアクセスを許可
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# 外部からのPASV用ポート(FTP-DATA)へのアクセスを許可
# ※PASV用ポート60000:60030は当サイトの設定例
iptables -A INPUT -p tcp --dport 60000:60030 -j ACCEPT
#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここまで) #
#----------------------------------------------------------#
# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
# (/root/deny_ipがなければなにもしない)
if [ -s /root/deny_ip ]; then
for ip in `cat /root/deny_ip`
do
iptables -I INPUT -s $ip -j DROP
done
fi
# 上記のルールにマッチしなかったアクセスはログを記録して破棄
iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
iptables -A INPUT -j DROP
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
iptables -A FORWARD -j DROP
# サーバー再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save
# ファイアウォール起動
/etc/rc.d/init.d/iptables start
長くなるので、汎用的な部分のみに削ってます。メールサーバーとかDNSサーバーとか、サーバーの用途に応じた設定は、他の行を参考にポートなどを適宜変えて行を追加していけば問題ないと思います。
また、参考にさせていただいた元ページでは、国外からの接続制限などをされていますが、汎用性を優先してそういった設定は外しています。
とりあえずifconfigで表示されるNICを最初のインタフェース名定義のところに書きます。ローカルホストは自動的に拾って許可してくれるようになっているので、あとはサーバーの用途に応じて、各種サービスを公開する場合の設定を追加・削除していけば良いと思います。あと、外部からの攻撃対策が幾つかありますが、必要に応じて調整はしてください(ただのWebサーバー、とかならそのままでも特に問題ありませんが…)。
あとは、この例ではSSH、FTPのポートはとりあえず通過できるようにしただけなので、当然TCP Wrapperやxinetd.d/で接続ホスト制限などを行ってください(そのままだとSSHにバカみたいにアタックに晒されるので)。公開鍵認証方式にもすると素敵。あとは25番など、メール関係の設定は踏み台にされる恐れがあるので慎重に行ってください(こちらもかなり来ます)。
- Comments: 0
- Trackbacks: 0
Apacheを止めずに更新を反映 – apachectl graceful
あーっと。ネタがびみょんなので、良く使うコマンドでも紹介します。
考えてみれば「止められないシステム」では当然のように使ってますが、自宅サーバーでは必要に迫られにくいので、割と知らない人もあるかも。色々設定を変えたりして、Apacheを何度も再起動する場合などにオススメです。
# apachectl graceful
serviceコマンドや /etc/init.d/rc.d/httpd restart だと急激(強制的)にリスタートが掛かりますが、このコマンドの場合、現在リクエストを受け取って(実行して)いるプロセスは、リクエストの実行が終了してからプロセスを終了するため、現在接続しているユーザーに影響が出にくいのです。
- Comments: 0
- Trackbacks: 0
ASUS P5B-VM+CentOS5 環境にNICドライバ(Realtek)をインストール
Shuttle X27にNICドライバをインストールしたときもそうですが、NICって確実に必要な割に、標準のドライバじゃ認識してくれないことが結構ありますよね。ということで、今度は少し古いマザーボード ASUS P5B-VMですが、最近CentOSの検証機に使ったときに、また若干いじらんと正常にインストールできないというケースがあったので、メモ書き・同じNIC使ってる人向けに書いておきます。
参考にしたのはほとんどこちら:パソコンいろいろ:ASUS P5B-VMのNIC(r1000)ドライバのlinux用インストールについて。
症状としては、READMEでは公式サイトから落としてきた(またはドライバCDの)Linux用NICドライバをmakeするのですが、コンパイルエラーが出てmakeできない、というものです。環境はCentOS5、パッケージはX無しで開発関係と開発ライブラリなど最低限のものが入っている程度なので、一般的な環境であれば大抵問題ないと思います。
1.本家からNICの最新ドライバをマウントできるデバイスにDLしておく
2.マウントして適当な場所に置いて解凍
3.解凍したディレクトリ内の src/r1000_n.c をエディタで開く
4.MODULE_PARMを先頭から検索し、MODULE_PARM_DESCに書き換える
5.あとはREADME通りに make clean modules → make install → depmod -a して再起動
6.NICが認識されているのを確認したら、必要なネットワーク設定を。
あとAtom機のNICでも起きてるみたいですが、カーネルいじる系のNICドライバは、yumなどで新しいカーネルにアップデートされるとインストール前の状態に戻ってしまうことがあります(だっていじってないカーネルに変わったわけだし)。そういう場合はカーネルを入れ替える度にインストールが必要になる場合があります。
基本ですが、こういう場合(でなくてもmake removeとかmake uninstallする場合などに必要だけど)に備えて、インストールが終わった後のファイルは消さずにそのまま置いておきましょう。/homeや/tmp以下にディレクトリを作ってもいいですが、自分は先輩に倣ってなんとなく/usr/local/src以下にインストールソースを置いておくようにしています。
- Comments: 0
- Trackbacks: 0
CentOS 5 + Xenによる仮想化
Akismetプラグイン(SPAMコメントをキャッチしてくれる)のアップデート後挙動がおかしいので、とりあえず無効化しつつ、一部承認制にしてあります。コメントやTBがすぐに表示されないかも知れませんが、ご了承ください。
さて、余ってたPCがもったいないのでXenによる仮想化の検証環境に。
環境:
ASUS P5B-VM(※標準でCentOS5ではNIC認識してくれなかったので要ドライバ)
Intel Core 2 Duo E6300
RAM 2GB(DDR2 800 Dual-Channel)
HDD 250GB HDD * 2 (7200rpm)
OS(ホスト、ゲスト共)CentOS5.2
Xen3.3
・Intel VTかAMD-V対応CPUでないと動作しません。
・ホストOSは、CentOS4.5以降が今回の手順をサポートしているようです。
CentOS4.5より前のバージョンでは、別途ZopeInterface、Twisted、TwistedWebのインストールが必要など、手順が異なります。
◆ホストOSインストール
CentOSを通常インストールします。パッケージは開発ツールのみ選択して、他はすべてチェックを外してOK。
インストールが完了したら、yum update でパッケージ類を最新に。ついでにリソースの無駄になる不要なサービスを停止しておきます。「Linux 不要 サービス 停止」などで検索すると、参考になるサイトがたくさん出てきます。
◆ホストOS設定
必要なパッケージをインストール。
# yum groupinstall Virtualization
Xenカーネルを読み込むように一部設定を変更。
# vi /etc/modprobe.conf
(中略)
alias scsi_hostadapter xenblk ←この行を追加
# vi /etc/sysconfig/kernel
#DEFAULTKERNEL=kernel ←この行をコメントアウトか消して…
DEFAULTKERNEL=kernel-xen ←この行を追加
# vi /boot/grub/menu.lst
#default=1 ←この行をコメントアウトか消して…
default=0 ←読み込むカーネルを指定。ここまで手順通りにしていれば0かと
再起動して有効化。
# shutdown -r now
起動したら、
# uname -r
でカーネルにxenがついていればXenカーネルが読み込まれています。また、
# xm list
でDomain-0(ホストOS)がリスティングされているのを確認できます。
これらの結果がうまくいかない場合は設定の見直しを。
以降、ゲストOSの管理や複製、状況確認など、多くの操作をxmコマンドで行っていくことになります。
◆ゲストOSインストール
# virt-install
で対話式にゲストOSの設定等を聞かれます。聞かれる順番は、
ゲストOS名→最高割り当てメモリ(MB単位)→ゲストOSイメージ保存場所指定→ゲストOSのディスク容量(GB)→グラフィカルインストールするか(noで)→インストールイメージの場所
となっています。
めんどくさければ
# virt-install -n guestosname -r 512 -f /xen/test -s 16 –nographics -l ftp://ftp.riken.go.jp/Linux/centos/5/os/i386
と一気に引数で指定も可。
ちなみにインストールイメージの場所ですが、ツリー以下に images/xen/initrd.img と images/xen/vmlinux がないと正常にインストールが進行しません(つまり、これらがないOSも今回の手順ではインストールできません)。移動されている場合などもあるので、指定先にファイルがあるかどうか、先にブラウザなどで確認しておくといいかと思います。
後はターミナル上で通常のCentOSテキストインストール画面と同様の画面が出ますので、手順どおりインストールしていけばOKです。起動やコンソールの切替えはxmコマンドで行います(長くなるので今回は割愛します…)。ちなみにホストOSに戻るときは Ctrl+] です。
- Comments: 0
- Trackbacks: 0
Shuttle X27+CentOS5にNICドライバをインストール
ひとつ前で書きましたように、Shuttle X27にCentOS 5.1をインストールしただけではNICを認識してくれなかったので、自分でドライバを導入する必要があります。参考にさせて頂いたのはMarvell Yukon 88E8056にCentOSを入れる際の注意点。
1.とりあえずはネットにつながっているマシンで、Marvellのサイトからドライバを落としてくる。
http://www.marvell.com/drivers/search.do
2.で、USBメモリなり、ドライブを積んでいる場合はCD-Rなどに焼くなりして、X27でマウント。尚、自分は開発系ライブラリなどをインストールしていたので特に何もしませんでしたが、上記サイトによるとkernel-develとkernel-headersが必要とのこと。入れていない場合はこれらも落としておいて、一緒にコピーしておきましょう。
3.解凍後(入れていなかった場合は先にkernel-xxxを入れてから)、解凍先ディレクトリにinstall.shが入っているので、実行すれば自動的にドライバを組み込んでくれます。選択肢が出ます…が、忘れました。どっちでも問題なかった気が。
4.あとはコマンドラインで echo “alias eth0 sky98lin” >> /etc/modprobe.conf (eth0は対応するほう…まあ普通にインストールしていればこのままでOKですが)としてモジュールを登録。
5.再起動すれば認識されてます。ネットワーク設定をしてとっとと接続しちゃいましょう。
ちなみに、yumなどで新しいカーネルになると再設定する必要があります。このあとネットワークに接続できればyum updateする人が多いかと思いますが、というか自分も2回やる羽目に。
- Comments: 1
- Trackbacks: 0
ホーム > Linux
