Home > Linux
Linux Archive
Shuttle X27(Intel Atom 230搭載ベアボーン)サーバー化
静音サーバー構築を検討中…で、静かな実家でしばらく過ごし、帰ってきたらサーバーがうるさく感じて寝られなくなったので、一時的にXREAにコンテンツを退避した…と書きましたが、思ったより早く自宅サーバー環境に戻すことができました(最近XREA重い?しかもこないだ落ちてたし)。
今の部屋は基本的にワンルーム。入り口と洗面所にドアはありますが、洗面所にサーバーなんぞ置けるワケもないし、玄関にタワーサーバーは邪魔すぎる。色々とATXサイズ用静音パーツや小型ファンレスPCサーバーを調べてみましたが、ATXタワーをひととおり自作するのはコストがかかるし、小型ファンレスPCも結構出てるけど、価格の割に性能がイマイチなものが多かったり。そもそも、小型PCって小型を追求しすぎて放熱が犠牲になってるものが結構多い。小型マザーをそこそこ余裕のあるキューブとかに積んでくれればいいんだけどなぁ…
と思ってたところでAtom機のShuttle X27を見つけました。販売価格は2万前後、2.5インチHDDとDDR2メモリだけ買えばとりあえず動作。ホントはノートPCなど向けのスリムドライブが積めるんだけど、スリムドライブは本体並みに高い。放熱の妨げにもなるので、稼働中のPCから電源供給されてるドライブのSATAケーブルだけ抜いてOSインストールに使いました。
同等の大きさだとVIAのマザーを積んだものが多いですが、ATOM230はHT搭載で、1.6GHzのデュアルコア認識。しかもTDPは4W。まあ一世代前のRAMしか積めないけど、他の小型PCサーバーと比較すればかなり高性能かつ低温。小型なくせにVGAとDVI両方がついてるので、最近のディスプレイを接続して気軽にインストール作業ができます。
もったいない点としては、せっかくCPUが低放熱なのに、チップセットが熱い。ヒートシンクもチップセット用のほうがデカイ上に、チップセットに4cmファン付。しかもこれが結構うるさい…。ケース両サイドがメッシュ上になっているので音はモロに漏れます(その代わり1ファンでチップとCPU両方を効率的に冷やしてくれますが…)。
あと、ケースが小型だから仕方ないのですが、HDDの振動が結構モロに響いてしまう。SSDも積めるようですが(未確認)、やはりこの値段のマシンに積むのはちょっとなぁ…(ケース自体のつくりもまあ、値段相応って感じで甘めです。あまり開け閉めするとゆがみそう…)。
そこで、とりあえずケーブルの取り回しだけ工夫して、マシンを玄関の棚の上に設置。タワーじゃでかすぎて出来ません。ファンがうるさいといっても所詮4cm一機、ドアを閉めれば聞こえないレベル。これで長期稼動に問題がなければ、かなりいいんじゃないかなーと思います。
CentOS5インストール時、初期設定ではNICを認識してくれないのでドライバのインストール(付属CDにはWin用しかない)が必要なのですが、長くなるのでまた次回。
- Comments: 0
- Trackbacks: 0
rsyncでディスク容量を節約しながら擬似的にフルバックアップをとる
基本的にバックアップはDARで取っていますが、とあるサーバーで、個々のファイルサイズは小さいが、ディレクトリ・ファイル数がかなり多く、全体の容量もかなりあるものをDARで圧縮すると、ファイルサイズが倍以上に増えてしまう・時間が異常に掛かるので、cronでファイルをフェッチするまでにアーカイブが終わらないという問題が。
仕方ないのでrsyncでそのまま転送することにしましたが、さすがに毎回すべてを転送していては容量の無駄。そこで、実際は更新されたファイルだけ転送し、変更のないファイルはハードリンクにすることで、擬似フルバックアップをとることに。
まず初回は普通にrsyncで対象データをすべて転送、2度目以降は以下のコマンドを実行。
# rsync -az –delete –link-dest=../fullbackupdir root@192.168.x.x:/datadir /path/to/incrementalbackupdir
-a ファイル情報を保持
-z データを圧縮して転送
–delete 削除されているファイルを転送先でも削除する
–link-dest 変更のないファイルは指定ディレクトリ内データのハードリンクに置き換える
古いrsyncでは–link-destオプションがなかったので、代わりにcp -alでハードリンクを作成後に同期を行う方法がとられていたようですが、このオプションができたおかげで1コマンドで処理できるようになったとのこと。
注意事項としては、–link-destで指定するフルバックアップのパスは、新規転送先ディレクトリからの相対パスでなければいけないらしい(フルパスがダメかどうか自信なし)。また、/があるとディレクトリ以下のファイルすべてを転送しますが、/なしの場合はディレクトリごと転送するという違いがあるので、指定する際には気をつける必要があります。
転送終了後、新規差分ディレクトリ内の変更のないファイルがあるディレクトリでls -liを実行してiノード数が増えていたら、ちゃんとハードリンクになっています。同じファイルなのにiノードの指しているブロックが異なっていた
ら、更新されたファイルか、そうでなければパス指定が間違っていると思われますので確認を。
※尚、当然ながらディレクトリはハードリンクされません。
- Comments: 0
- Trackbacks: 0
Cobbler+PXEブートで遠隔OSインストールサーバー構築
自宅サーバーでは普通使わないと思いますけど、覚え書き的なノリで。
マシンによって違いますが、BIOSでファーストブートデバイスをLANやNetworkにする・BIOSポスト画面でF12を押すなどでPXE Network Bootに入れるのですが、はじめてやったときはあまりの簡単さに拍子抜けしたものです。仕組みとしては、DHCPでIP割り当て要求をして通信可能状態にして、TFTPで起動に必要なものを拾ってきてブートするだけです。大手でクライアントPCの台数が多い場合とか、サーバー台数が自動化しないと管理しきれない規模だと普通に使われているのかとは思いますが。
で、肝心のサーバー側ですが、通常はHTTP・DHCP・TFTPなどを個別に設定する必要があったものを、Cobblerはこれらの設定を連携させたり、ブートイメージの作成を自動で行ってくれるなど、何かと便利です。細かい解説は、自分もStray Penguinを参考にさせてもらったし、分かりやすいのでそちらに譲ります。
設定時の注意として、
- NICが複数差しの場合、一番最初のデバイスが同じネットワークに接続されている必要がある
- マシンによってPXEの仕様が色々あり、自端末用のプロファイル(およびdefault)がなければブート可能なOS一覧が出るもの、PXE上でmenuコマンドを使うことでそれが表示されるもの、とまってしまうもの、次のブートデバイスに行ってしまうものなど色々あるようです。ひとつしかインストールするOSがない場合はdefaultを作成しておくか、複数ある場合はきちんとMACアドレスを指定しておいてあげる必要があります(具体的なやり方は上記サイトで)
それから、Stray Penguinにはインストールまでしか載っていないので、一応運営する際に必要なことを。基本的にサーバーにOSを追加していっても、解説にあるように
# cobbler system add –name= –profile=<プロファイル名>
でOKなのですが、OSのバージョンUPやマシンを別用途に使うのでOSを変える場合などもあるかと思います。そんな場合には
# cobbler system edit –name= –profile=<新しいプロファイル名>
とやることで、別のシステムに書き換えることができます。また、必要無くなった設定が蓄積していくと管理が大変なので、
# cobbler system remove –name=
で必要なくなった設定を消すことが可能です。これらの実行後、忘れずに
# cobbler sync
して、DHCPサーバを再起動させれば、新しい設定が反映されます。
一旦サーバーを構築してしまえば、あとはこのあたりのコマンドを知っておけば基本的な運用はOKそう。
- Comments: 0
- Trackbacks: 0
Webminが意外と使えるようになっていた
FirefoxにしてからGoogleツールバーを使ってなかったので気づいてなかったのですが、いつの間にかGoogle PageRankが2になっていた模様。投稿数でブログポータルとかからの被リンクふえた?とりあえず嬉しいですが、PageRank2くらいって割と個人で簡単にとれちゃうんですよね。何であがったのかはちょっと気になるところですが、とりあえず良い意味であまり気にせず更新していこうかなぁと。
閑話休題。
すごーく昔、自分で空いてるPCにLinuxを入れて遊んでいた頃には「…ダサいし大味で使いにくいな」と思っていたWebmin。今も仕事柄、基本的なことはすべてシェルでやってしまうのですが、社内教育用サーバーにWebminを入れてみたところ、なんだかすごくパワーアップしていた。…うーん。設定が苦手なものもあるから、最低限の設定はコレでやってしまって、細かい部分だけ書き換えるのも楽そうだな…内部向けサーバーなんかでは。(と、いいつつすでにシェルに慣れてGUI設定に戻れない)
正直、(ぺーぺーの自分が言うのもナニですが)サーバーについてあれこれ覚えるにはWebminは使わないほうがいいと思います。サーバーのどこに何があるのかとか、実際にどのコマンドが使われているのかとかが全部ブラックボックスになっちゃうので。分かっていないところを自動でやっちゃうと、色々覚える機会が減るのはもちろん、穴があっても気づけないし、トラブルがあっても原因がわからなくなると思うので。でも、最低限分かってる上でなら、複数サーバーを一箇所のWebminから管理できる機能なんかもついてきているようなので、手間の軽減に使うのはいいかもしんない。
色んな人がモジュールを開発して機能が追加されていくOSSならではだなぁ、としみじみ。
- Comments: 0
- Trackbacks: 0
CPANモジュールインストールがコケたときの対策
昨日書いたCPANモジュールのインストールがやたらコケる件ですが。
基本的にmake testでコケてることがほとんど(依存関係で足りないモノがある場合は入れればいいだけですが)。実際に個々のモジュールをmakeした後testせずにmake installしてしまうとアッサリインストール出来ることがほとんどのようです。また、cpanコマンドからinstallしてコケた場合、/作業ユーザのホームディレクトリ/.cpan/build/ 以下に、モジュールを落としてきてビルドしようとしたところまでのファイルが残っています。というワケで、個々のモジュールのディレクトリに入って、大抵は
# perl Makefile.PL
# make
# make install
してしまえば(make testを飛ばせば)、大抵ちゃんとインストールできてしまいます。依存関係にあるモジュールが足りない場合も、そのままcpanコマンドからインストールして通ればよし、コケてもそこにまたモジュールのディレクトリができるので、そのまま先にインストールしてしまうもよし。コレであっさり必要なモジュールが揃ってしまいました。
ま、どのみちCatalystなんかは膨大なモジュール群なので、相互の依存関係でループしまくるし、ログがざーっと流れちゃってどのモジュールが足りていないのかも分かりにくいし、インストールできそうではあるものの、そこまで必要性にも迫られていないのであんまりやろうという気になりません…。それよりもっとコード書いてたほうがタメになるだろうしなぁ。
- Comments: 2
- Trackbacks: 0
Perl(CPAN)、Catalyst…なんであんなにコケるんだ orz
Yahoo! APIで遊んでたときの参考サイト。主にPerl。
Geekなぺーじ:Yahoo!APIでプログラミング
さて、会社はPHPメインなのですが自分はPerl書き、かつプログラマでもないのですが、上司に「やっぱPerlよりPHP書けたほうが何かと便利ですかね?」と聞いたら「Perlでおk」だった。まあ、無理にゼロに戻らんでも得意な方面伸ばして補完してやれということでしょうね。まあ、そもそもサーバー屋なんだからPHPよりはPerl書けたほうがよっぽど役に立つんだケド。
まあでも、ちょっとしたスクリプト書きとかはするのですが、個人で大規模開発なんかするわきゃないので、一度MVCフレームワークとか使っておきたいよねー的好奇心で、自鯖にCatalystを入れようとゴリゴリやってたワケなのですが、マジで勘弁してほしい程エラーが出ます。CPANからなんか入れようとすると結構エラー吐いて失敗することが多いです。今日はなんか無限ループしてたし。(Aが足りないから入れるよ?→失敗した→Bが足りないから入れるよ?失敗した→Aが(略)
上でちょこっと書いたYahoo! APIのXMLをパースするのにXML::Simple入れようとしたらそれだけでエラーて。色々ワケがわからないエラーが多いんだぁなぁ、PerlっていうかCPANモジュール…。較べても意味ないですが、仕事でサーバー環境構築してるときにEthnaとかPEARはサクッと入るだけに、結構凹みます。
とりあえず詰まってんのにあんまり意味ないですが、なんとなくCPANモジュールが古い場合の更新ネタを。ガリガリやってる間に見つけておいたProject MultiBurstさん:古いCPANモジュール(Perlモジュール)のアップデート方法。
インスコされているモジュールの中で、現行リリースより古いものを洗い出すのがこちら。
# perl -MCPAN -e ‘CPAN::Shell->r’
で、これらをアップデートする場合はこちら。
# perl -MCPAN -e ‘CPAN::Shell->install(CPAN::Shell->r)’
凄くラクでいいんだけど案の定すんなりコケてくれやがるとこらへんがもうマジ勘弁してくださいって感じです。あーもうサーバー内のPerl周り環境グダグダになってそうだけど大丈夫だろか…。
- Comments: 0
- Trackbacks: 1
サーバ/インフラを支える技術…
ふはー。色々ゴタゴタしてたら今度は身体壊したりしてて全然更新できてませんでした。幸いしがない個人ブログなので、どーということはないと思うのですが…やっぱり自宅のサーバーでやってんだから放置しとくのは勿体無い。
というワケで最近特別ナニという新しいネタもなかったのですが(これ以上事故米問題とか書くとサーバーネタ密度が…)、とりあえずコレはいんじゃね?という本をご紹介しときます。
![[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESSプラスシリーズ)](http://ecx.images-amazon.com/images/I/51uK4ACymiL._SL160_.jpg)
[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESSプラスシリーズ)
著:安井 真伸 , 他
参考価格:2,919
価格:2,919
OFF : ()
↑最近知人がハマっているので、なんとなくAmazonアソシエイトをはってみた。
内容は実際にはてなの伊藤氏とかKLabとか、その道では有名どころの人たちが、まさにそこでどうやって運用してきたのか、という経緯やノウハウを惜しげもなく公開してたりしまして、正直、タイトルとか表紙で気を引きさえすれば、もっと売れるんじゃね?wとか余計な心配をしてしまうほど、業界の人は「あー」って言っちゃったり、自分みたいなぺーぺーには勉強になったりします。
はてななんかはネットをそれなりに使っていて知らない人はいないと思いますが、小規模から利用者がガンガン増えてきて、スケールアウトにも限界が!台数が増えて管理が!etc、事業を拡大していく中で絶対にあるよなぁという山を乗り越えてこられた軌跡なんかが載ってます。たとえばオープンソース系で有名な技術…memcacheはまあmixiとかニコニコ動画とか有名どころも使っているのでまだアレですが、NagiosとかPuppetとか、工夫して使えば商用の何百万というソリューションがなくても何とかなってしまうような機能を秘めているんだけど、聞いたことないとみんな「やっぱりこれ以上は金かけてロードバランサとか管理ソリューションとか買わないとダメなのか…」とかなっちゃう。
まーミッションクリティカルな分野だとそうじゃないとダメなんでしょうけど、そうでないならばこういう方法もあったんだなぁ、と思わされてしまうことが結構たくさん書かれています。自分は大企業に入ったことがないのでわかりませんが、やはり大手にいた先輩に聞くと「あーそういうときはとりあえず金だして解決ってなっちゃう」ケースが多いみたいですね。
企業がでっかくなっていくにつれて、単純な役割ごとのサーバーだけという構成から、スレーブへの負荷分散していったりするんだけども、やはりそれだけだと限界がある。サーバー倍に増やしたら、倍のアクセスをさばけるワケではまったくないし、やっぱりどこかで何かやり方を変えないといけない。そこでキャッシュサーバを挟んだり、LVSで負荷分散させたりなどなどといったことをしていく必要が絶対に出てくるんですね、どこの成功した企業の歴史を見てても。そういうトコで技術に貪欲になって糸口を見つけたところが成功してるんだろうなあ、やっぱり。ン千万のロードバランサ買ったけどペイできませんでした…じゃ笑えないですしね。
※んと、言うまでもないことですが、あくまで組み合わせでこういう解決の方法もあるよ、といってるだけであって、保守なり安定性なり付加機能なりを持ったロードバランサーとか、商用製品を否定する意図は一切ありません。ミッションクリティカルな分野ではそうでないと困りますし、ウチの会社だって商用Linux使ったりしてますしね。ただ、はてなやmixiがそういうもので構成されていたら実現できたかというと…いろんな選択肢を適材適所に使うことが大事ってことですよね。そうでなければ生まれなかったものってネット上にたくさんあるでしょうし。
- Comments: 0
- Trackbacks: 0
typo矯正(っていうかほとんどジョーク)SLコマンド
有名どこですが、slコマンド。
lsはしょっちゅう叩くコマンドのひとつですが、急いでるとコレをslと入力してしまったりします。普通はここでcommand not found.とかいうそっけない返事が返ってくるところですが、AAで出来たSLがマジで走り去っていくというおバカコマンド(いやちゃんと意義と目的はあるということなのだが…w)、それがSL(豊田正史とslコマンド)。
▲こんなの。
まちがって一旦叩いてしまうと、ご丁寧に強制終了もできません。別窓を開くか、終わるまで待つか…。しかし、本家バージョンだけでは甘かった。本家は走り去っていって脱力して終わるのですが、有志(?)の方によるSL改造計画によって、本家へのパッチまで作成されています。
- 踏切の遮断機
- 乱数でスピードが変わる機能
- 乱数で客車数が変わる機能
- 乱数で往復するかどうか変わる機能
…など激しくパワーアップしており、ターミナルを占有する時間も(乱数によりますが)ひどいと1分以上待たされたりします。本家はまあ、「あっ まちがった…」と走り去るSLを眺めつつtypo強制に努めればいいだけなのですが、こいつは遮断機が下りるところから始まるわ、長いわ、往復もしてきたりするわで本気で脱力すること間違いなし。短いコマンドだけに、集中してガリガリタイプしてるときに限ってミスるので、仕事中に不意打ちのようにSLが走ってきて脱力したことが2回ほどあります。
※設置方法は、本家はmakeしてバイナリを/usr/binにでも入れとくだけ、パッチ版はpatchインストールを丁寧に説明されているので問題ないかと。環境依存で起こるトラブルも結構ありますが、全部追えないので検索してみてください。
んなワケで、自宅サーバーくらいなら入れてみてもいいんじゃないでしょうか。ちなみにCentOS 5.2、RedHat Linux Enterprise ES 4.5ではさっくり問題なくコンパイルできました(コケたときもあるので当然環境次第ですが)。
まあとりあえず、軽いし顧客から見えないとはいえ、本番系システムとか仕事で重要なシステムに入れるのは当たり前ですがやめましょうw 実際怒られた人、結構いるみたいですし。特に急いでるときにパッチ版なんかが動くと最悪ですしね…。ウチの開発部隊はこういうのが大好きなので、テスト環境には入ってます。自分もテストサーバーを立てるときなんかはこっそり仕込んだりします。サーバー屋が自分なので、なかなかひっかかってくれる人はいませんが…w
- Comments: 0
- Trackbacks: 0
MySQL5.1を試してみたいところ
会社のヒトから技術評論社のWeb+DB Press Vol.46をお借りしたのですが、MySQL5.1特集が気になるところです。前バージョンとの性能比較結果はWeb上で公開されています。
簡単なテストですが、今までは(InnoDB使ったときに)ユーザー数とスループットとかリソース消費が理論値どおりじゃなかったのが、大幅に理論値に近くなったよー、てとこでしょうか。MySQLでトランザクションが必要な場合にInnoDBを使ってるトコも多そうなので、なかなか素敵な改善だなぁ。ちなみに5.0系でもマイナーバージョンアップ(どれか忘れた…5.04aくらいだったか)でInnoDBのバグフィックスがされてた記憶があります。5系の中でもちょっと前のバージョンを使ってるのであれば、より大きな性能向上が期待できるかも知れません。
あと、今回のバージョンアップの目玉のひとつで、DBエンジンをプラグインに、というのがあります。まー後発でどんなのが出てくんのかなぁ~というのはありますが、間接的にDBエンジンの高速化がどっと進められたり、また必要であれば他のDBとの互換性が確保しやすくなったりするかも知れませんなぁ(妄想)。
まーそんなワケで会社のDBに入れられたらなぁ、とか思ったりしなくはないですが、やはり稼動しとるシステムに簡単にそんなもん入れられるかい、という話ですし、ここの自宅サーバーに入れたところで、体感できるような差はまず確実にないと思われるので、まあしばらくお預け、という感じになっちゃうのかなぁ。とりあえずは情報蓄積待ちといったところ。
- Comments: 0
- Trackbacks: 0
バックアップアーカイブをNASへ転送
tarとDAR、DARのよくあるエラーと対処法でも触れたバックアップの話題ですが、実際にできたアーカイブを外部のストレージなりメディアなりに保存しないと意味がありません。今回はマウントする類の話ではなく、NASやストレージサーバーに転送する話。
よく使われるのがscpやsftpだと思いますので、今回はscpを使います。scpは基本的にSSHベースなので、既にSSHでクライアントから操作している場合は、特に何の設定もなく利用することができるのが利点でしょうか。個人的にはGB単位のデータを転送してみたりしましたが、ローカルネットワークを使うならば特に遅いなどとは感じませんでしたので、余程ファイルサイズが巨大といったことがなければscpを利用するのが良いかと思います。ちなみにscpとはSecure CoPyの略。
んではまずscpをシェルで利用する場合。基本的な使い方をする分にはcpと似たようなもんなのでさほど困ることはないかと思います。
# scp report.tex username@hostname.com:filename
ハイ。scp コピーするファイル コピー先 と、cpと変わりません。これがリモートサーバからローカルへ、という場合は引数の順序が逆になるだけです。ディレクトリをコピーする場合は、scp -r としてやればOK。簡単ですね。
ではスクリプトに埋め込む場合ですが、以前も書いたように、セキュリティの観点からは、シェルスクリプトでexpectを使うのは良い方法とは言えません(ローカルからしか参照できない・しない、とかなら別ですが)。いろいろ方法はあると思いますが(パスワードなし鍵認証にするとか)、自分の場合はPerlモジュールにあるNet::SCPやNet::SCP::Expectを用います。Net::SCPは鍵認証用で対話機能がないので、ユーザー名・パスワードを利用して認証をしている場合の対話処理はNet::SCP::Expectを用います。とりあえずこれらが入っていない場合は
# perl -MCPAN -e shell ←初回起動の場合は設定に入ります。標準的な構成であれば、基本的にEnter(デフォルト)で問題ありません
↓ こうなるので
cpan> install Net::SCP ←install 必要なモジュール名 を。
…とやると、簡単にCPANからモジュールがインストールできます。(※ちなみに先ほどCentOS5.2でやったら、perl -MCPAN -e shellではなくcpanだけでも起動しました…んー?)
サーバーにあわせて必要なモジュールをどっちかまたは両方導入したら、Perlスクリプトで use Net::SCP::Expectなど利用するモジュールを書いときます。んで簡単なスクリプトとしましては
#!/usr/bin/perl
$usr = ‘root’;
$pwd = ‘xxxxxxxx’;use Net::SCP::Expect
my $scpe = Net::SCP::Expect->new(user=>”$usr”,password=>”$pwd”);
$scpe->scp(’192.168.0.2:/dir/filename’,”/dir/filename”);
これがリモートサーバーからローカルサーバーに落とす場合です。詳しい記述法は各モジュールの配布元などをごらんください。
ちなみにファイル単位ではなく、ディレクトリごと落としたい場合はコレだとエラーになるので、上の「my $scpe =…」の行を
my $scpe = Net::SCP::Expect->new(user=>”$usr”,password=>”$pwd”,recursive=>’1′);
とrecursiveオプションを追加して1にします。
- Comments: 0
- Trackbacks: 0
ホーム > Linux

