FC2ブログ
スクウェア・エニックスノベルス『スタンプ・デッド』1~5巻&コミック版、『太陽で台風』1・2巻発売中!
ガンガンノベルズ『魔法少女アーヤ☆アミー』発売中!
徳間デュアル文庫『魔王さんちの勇者さま』1~4巻発売中!
徳間文庫『欠陥妖怪住宅』、『パラレル家族計画』発売中!
ぽにきゃんBOOKSライトノベルシリーズ『ブチ切れ勇者の世界征服』1~2巻発売中!
HJ文庫『カンスト勇者の超魔教導』1~3巻発売中!
ファンタジア文庫『お助けキャラに彼女がいるわけないじゃないですか』1~3巻発売中!
JUMP j BOOKS『ぼくたちは勉強ができない 非日常の例題集』発売中!

受賞歴:
2004年、第1回スクウェア・エニックス小説大賞『入選』
2008年、第5回トクマ・ノベルズEdge新人賞『徳間デュアル文庫特別賞』
2017年、第11回HJ文庫大賞『銀賞』
2017年、ジャンプ小説新人賞’16 Winter 小説フリー部門『銀賞』
2017年、第30回ファンタジア大賞 『金賞』

2019-09

«  | ホーム |  »

.thenを用いた非同期処理待ちの世界一シンプル(かもしれない)例

どうも、はむばねです。
昨日もチラッと書きましたが、昨日はJavaScriptで非同期な処理の結果を待ってから処理する方法についてほぼ1日悩んでました。
いやね、jQueryのDeferredを利用すればできそうっていうのは早期段階でわかったし、解説してくれてるところも山ほどあるんですけどね。
どいつもこいつも長ぇよ。
説明も! コードも!
いや、わかってる。
ちゃんと説明しようとすると、色々と書かないといけないことも。
恐らく、本来はそんなに難しいことを書いているわけではないであろうことも。
だがしかし、とにかく私はただ「非同期処理の結果を待って処理を行う」ことがしたいだけなんだ。
そしてこちとらJavaScript素人で、なんだったら括弧が増えただけで結構混乱するんだ。
というわけで、本記事ではできるだけシンプルに、「非同期処理の結果を待って処理を行う」ことだけに絞って説明したいと思います。

本記事のターゲットは、主に……。
・JavaScriptのことなんてよくわからねぇが、とにかく非同期処理のせいでデータ連携が上手くいかねぇ!
・仕様とか実装とか、細けぇことはいいんだよ! 関係するところだけ教えろくだしあ!
・ていうかC言語でいうとどういうことなんだってばよ!
という方向けです。
ターゲット層狭いな!
まぁ基本的に私が情報系の記事を書く時は、過去(調べてた時)の自分がこういう記事見つけてたら嬉しかっただろうな、というのを目標に書いてますからね。
半分備忘録も兼ねてるので、まぁ参考になる人がもしいれば嬉しいね、程度。
……いかん、シンプルにって言ってる割に前置きからして長くなってきましたね。
というわけで、実に4年ぶりのテーマ「情報系」いくよー\(^o^)/

※思ったよか説明が長くなってしまったので、ガチで実際のコードだけ見たい人は一番下の項目まで飛ばしてください。



【前提】
JavaScriptはシングルスレッドで動s細けぇことはいいんだよ!
とにかく、JavaScriptは必ずしも書いた順番通りに動くわけではない!
以上だ!


【サンプル】
じゃあ、例えばどういう時に順番通り動かないのか?
話をシンプルにするため、実際にはクソの役にも立たないサンプルを用意する!

---------------------------------
var ret = sample("after");
document.write(ret);

function sample(str) {
 var tmp = "before";
 setTimeout(function() {
  tmp = str;
 }, 200);
 return tmp;
}
---------------------------------

関数sampleは、0.2秒(200ms)待った後にtmp(初期値:"before")に引数strを代入し、tmpをreturnするだけのクソのような処理を行う!
そのsampleに対して、"after"という文字列をぶち込んで返ってきた値を表示するというクソのようなプログラムだ!
C言語ライクに考えるならば、sample内で0.2秒待った後に"after"が代入されたtmpをreturnし、無事"after"と表示されることを期待するであろう!
しかし、実際にこのプログラムを実行した結果表示されるのは"before"である!
関数内の処理が全て完了する前に表示の処理が実行された(というか変数がreturnされた)ということであろう!


【どうすればいいのか】
jQueryのDeferredオブジェクトを利用するのは、先に述べた通りである!
ではDeferredオブジェクトとは何なのか?
細かい話は省く!
今回のケースで利用するだけならば、「(非同期処理が)終わったかどうかのステータスを管理するオブジェクト」と思っておけばよろしい!
で、実際その「終わったかどうかのステータス」を保存するのが、Deferredが内包するPromiseオブジェクトだ!
Promiseオブジェクトは、作成された時点ではpending(処理中の状態)のステータスを持っている!
これを、Deferredオブジェクトを使ってresolved(成功)かrejected(失敗) かに書き換えることによって、該当処理が終わったかどうかを他の処理に通知(?)できるようにするわけだ!
先の例でいうと、sample内にDeferredオブジェクトを定義して、Deferredオブジェクトから「終わったよ」と通知が来ない限り次の処理に進まないよう呼び出し元を書き換えればよい!
これ以上の細かいことは散々他のところで解説されているのでggrks!


【で、どうすればいいの?】
ポイントは大きく分けて4つだ!
というか、先ほどの方法論の所で述べた通りである!
1.Deferredオブジェクトを生成する(関数内)
2.Promiseオブジェクトのステータスを変更する(関数内)
3.Promiseオブジェクトをreturnする(関数内)
4.返ってきたDeferred(Promise)オブジェクトの内容によって処理内容を変えるよう記載する(関数呼び出し元)


【だからどうすればいいんだよハゲ】
それぞれの書き方について、具体的に記載する!
なお、恐らくこの項目だけを見てもわかりづらいと思うので、後述するサンプルと見比べるのを推奨する!

1.Deferredオブジェクトを生成する(関数内)
------------------------------------------------------------------
var [オブジェクト名] = new $.Deferred;
------------------------------------------------------------------
これだけだ!
見ればわかると思うが、ここでは本当にただオブジェクトを生成しているだけである!
後の(関数内の)処理は、全てここで定義したDeferred型オブジェクトを利用する!

2.Promiseオブジェクトのステータスを変更する(関数内)
------------------------------------------------------------------
[オブジェクト名].resolve([引数]);
[オブジェクト名].reject([引数]);
------------------------------------------------------------------
言うまでもないと思うが、ここで言う「オブジェクト名」とは1で生成したオブジェクト名のことである!
この操作によって、Promiseオブジェクトの持つステータスが失敗か成功かへ変化する(実行中のステータスではなくなる)んだな!
成功の場合はresolveへ、失敗の場合はrejectへステータスを変化させよう!
例えば、こんな感じに書くイメージだ!
無論必ずしも両方書く必要はないので、成否関係ない場合はresolveだけ書いとけ!
-----------------------------------------------------------------
A; //非同期処理
if(成功){
 dfd.resolve("成功!");
}else{
 dfd.reject("失敗!");
}
------------------------------------------------------------------
ちなみに、ここで格納した引数は呼び出し元で使用することができるぞ!
returnする時ではなく、ステータスを更新する時に返り値を設定するので注意だ!
本当は「返り値を設定する」というと語弊がある気もするが、まぁなんか雰囲気で察しろ!

3.Promiseオブジェクトをreturnする(関数内)
------------------------------------------------------------------
return [オブジェクト名].promise();
------------------------------------------------------------------
やはりここでいう「オブジェクト名」とは1で生成した以下略!
これによって、2で格納したステータス(と返り値)を呼び出し元に送り、処理が終わったことを通知するんだな!

まとめると、関数側の流れはこんな感じだ!
-----------------------------------------------------------------
var dfd = new $.Deferred;

A; //非同期処理
if(成功){
 dfd.resolve("成功!");
}else{
 dfd.reject("失敗!");
}

return dfd.promise();
------------------------------------------------------------------



4.返ってきたPromiseオブジェクトの内容によって処理内容を変えるよう記載する(関数呼び出し元)
呼び出し元では、.thenメソッドというものを利用する!
ここでも細けぇ話は置いといて、返ってきたPromiseオブジェクトのステータスによって処理を変える(Promiseオブジェクトが返ってくるまで処理を実行しない)ようにするメソッドだと思っておけぃ!
------------------------------------------------------------------
.then(
 function([引数]) {
  //成功時の処理
 },
 function([引数]) {
  //失敗時の処理
 }
);
------------------------------------------------------------------
C言語ライク(?)に言うと、.thenはfuction型の引数2つを持つ関数みたいなもんだな!
第1引数はPromiseオブジェクトがresolevedの時に実行される関数で、第2引数はrejectedの時に実行される関数だ!
第2引数は省略可能で、その場合はresolvedの場合のみ処理が走るぞ!
無論、他で定義した関数を指定することも可能だ!
.thenを連結することで、順番に処理を実行していくことも可能だぞ!
なお、ここの[引数]で指定した変数で2で格納した返り値を受け取ることができるぞ!

まとめると、以下のような使い方ができるということだ!
------------------------------------------------------------------
sample()
.then(
 function([引数]) {
  //成功時の処理1
 },
 function([引数]) {
  //失敗時の処理1
 }
)
.then(
 function([引数]) {
  //成功時の処理2(失敗時は何もしない)
 }
)
.then( anotherFunc //成功時の処理3
);
------------------------------------------------------------------



【サンプル(修正版)】
以上を踏まえて、冒頭のクソサンプルを書き換える!
なお、本稿の目的を踏まえrejectの存在は無視しているので注意だ!
また、返り値の受け方についても書き方が変わっているので先述の説明を踏まえるように!
踏まえること多いな!

---------------------------------
var ret = sample("after");
document.write(ret);

function sample(str) {
 var tmp = "before";
 setTimeout(function() {
  tmp = str;
 }, 200);
 return tmp;
}
---------------------------------

---------------------------------
sample("after")
.then(
 function(ret) {
  document.write(ret);
 }
);

function sample(str) {
 var tmp = "before";
 var dfd = new $.Deferred;
 setTimeout(function() {
  tmp = str;
  dfd.resolve(tmp);
 }, 200);
 return dfd.promise();
}
---------------------------------

これで、想定通り"after"と出力されるクソプログラムとなったわけである!
dfd.resolve(tmp);が実行されるまでreturn dfd.promise();は実行されず、それを待ってから.then内の処理が実行されたわけだな!



【世界一シンプル(かもしれない)サンプル】
……とここまで書いて思ったが、こっちのサンプルの方がもっとシンプルだな!
関数もねぇ! 返り値もねぇ! 処理もそれほど走ってねぇ!

---------------------------------
var str = "before";

setTimeout(function() {
 str = "after";
}, 200);

//beforeと出力される
document.write(str);
---------------------------------

---------------------------------
var str = "before";
var dfd = new $.Deferred;

setTimeout(function() {
 str = "after";
 dfd.resolve(str);
}, 200);

dfd.then(
 function(ret) {
  //afterと出力される
  document.write(str);
 }
);
---------------------------------

なお、さんざん繰り返している通りDeferredはjQueryのライブラリなので当然jQueryの読み込みが必須なので注意されたし!
コールバックによる処理ならば純正JavaScriptのみでいけるはずだが、散々ディスられている上に見ただけで萎えたので今回は考慮していない!



以上だ!
間違っている点、勘違いしている点、効率の悪い点等、ツッコミをお待ちしている!
疑問も受け付けるが、答えられるかは不明だ!

勉強してないわー マジ全然勉強してないわー

どうも、はむばねです。

あなたに送る独り言byはむばね

というわけで、ITIL V3 Foundation受かってきたよー\(^o^)/
試験終了後、明らかに試験終了ボタンしか押すとこないのに、押すと「全ての試験が終わっていないのに終了しようとしています。いいですか?」的なメッセージが出て焦ったw
結局普通に「はい」押して大丈夫だったようですが何の仕様なんだよw

いやしかし、思ってたよりテストテストしたテストでしたねー。
普通に単語レベルの意味とか内容とかを聞かれる感じ。
ちゃんと勉強していったらちゃんと受かるタイプの試験ですね。

ちなみに私が勉強に用いたのは、以下の3点。


あなたに送る独り言byはむばね
ITIL入門 ITサービスマネジメントの仕組みと活用



あなたに送る独り言byはむばね
ITILの基礎 ITIL V3 ファンデーション試験 対応



無料deITIL V3 Foundation模擬試験


①は、OJT期間が始まった時に先輩からオススメされたもの。
ITIL(というかITSM)について、総合的に理解するのに役立つ本。

②は、今回の試験を受けるに当たって一応買ってみたもの。
試験対応って書かれてたのでもっと試験対策本みたいなのかと思ってたら、①と同じような内容だった。
役に立ってないとまでは言わないけど、①があれば特にいらなかったかなー。

③が、実際には試験対策としては一番有効だったと思います。
どっかで見た記載では「本試験よりはこれより複雑で難しい」的なことが書かれてた気がするのですが、個人的にはそんなに変わらなかったんじゃねーかなという感じ。
とりあえずここで満点とれるようになっとけば、本試験もそこそこいけると思います。
ただ一応大まかな流れは理解しといた方がいいと思いますので、全く何の知識もない人がここオンリーで試験に臨むのはキツいと思いますが。
一通りITILについて理解してる人なら、試験対策としてはたぶんこれだけでオッケー。
本当は試験対策に特化した、単語の説明とか含まれる範囲について書かれてる本があれば一番いい気がしますが……とりあえず私は見つけられませんでした。
普通にあってもいいと思うんですけどね、作るのそんなに難しくなさそうですし。


ともあれ、無事合格出来てやれやれってところですね。
仮にも8ヶ月業務でITSM活動やってきて、これで不合格だったら申し訳が立たないところですよ。
まぁ、ぶっちゃけ試験は単語とか概念ベースなのでそんなに関係ないっちゃない気もしますが……
かなり際まで引っ張ってしまいましたが、とりあえずこれで今期やるべきタスクは大体終了ですかね。

教えてExcel詳しい人!

どうも、はむばねです。
今日も今日とて微妙に早起きできたので、今日こそは朝のうちに更新します。
ネタとしては、昨日質問を受けたものの、結局ついぞ答えを導くことができなかった問題について。
Excelの、ハイパーリンクに関してなんですけどね。
Excelのハイパーリンクでは、他のセルへのリンクを張ることもできるじゃないですか。

あなたに送る独り言byはむばね


こんな感じに。
んで、質問してきた方はですね。
たとえば1番目のセルがB1~E5へのリンクだとすると、2番目のセルでB6~E10へ、3番目のセルはB11~E15へ、と順番にリンクを張っていきたかったらしいのですよ。
いちいち入力するのはクソめんどいので、これが自動でピピッとできればいいですよね、という話。

んで、単純に考えるとオートフィルが使えるんじゃないかなーと思うわけですよ。


あなたに送る独り言byはむばね

こんな感じで、ググッと下げてやると。



あなたに送る独り言byはむばね

こんな風にリンクが張られる、ってね。
まぁでもそこまでは質問者の方も試されたようで。




あなたに送る独り言byはむばね

実際にはこうなる(全て同じリンク先が参照される)のですね。
家でやると表示上の数値だけは変わりましたが(まぁEだけですが)、やっぱりリンク先はそのままです。


んで、これがどうにかならないんですか? という質問でした。
ぶっちゃけ知らねぇよという話なんですが、聞かれたからには全力で調べましたよ。
でも、どうも調べてみる限りお手軽にできる方法はなさそうな感じ?
ならば代替手段はないものかと調べて考えて。
最初はリンク先のセルの行番号をあらかじめ別の列に(1,6,11,16……)(5,10,15,20……)という風に保存しておいてリンクの式内で参照するという方法を考えたのですが、どうもそれは美しくない。
というわけで2時間近くに及ぶ試行錯誤の結果、私が至ったベストは下のような形でした。


あなたに送る独り言byはむばね

どうも画像の右が切れるようなので、こっちでも書いておくと、
=HYPERLINK("#Sheet2!B" & 1+(ROW()-1)*5 & ":E" & ROW()*5 )
こんな感じの式を書くことにしたわけです。
行番号を、公差5の等差数列として記述したわけですね。
これなら行ごとに勝手に数字が変わっていきますので、単純なコピペでもOKになってきます。

が、これもちょっとややこいというかめんどいですよね。
というわけで、もっと簡単に同じ機能を得ることができる方法知ってる人募集!



……まぁしかし、ていうかね。
Javaとかに関しての質問なら、それなりに答えるよ?
教科書に書いてあることくらいは基本的にマスターしたつもりですし、それ以上のことも(C言語の経験から)ある程度動作や内部仕様の予測もできる。
しかし、Excelのことまで答えられると思うなよ。
修論のデータとりには使ったけど、ホントにデータ保存してちょっとグラフ作るくらいしかしてないですからね。
ROW()関数や&での結合はおろか、ぶっちゃけハイパーリンクの存在すら昨日初めて知ったわ。
「何ができるか」もわかってない状況で「どうやるか」を考えるなんて、無茶にも程がある。

Class.forName()とnewの違い(JDBCでClass.forNameを使う理由)

どうも、はむばねです。
本日、研修はJDBCの分野に入りました。
やったことがある方はわかると思いますが、JDBCの初っ端の初っ端で出てくるのが『Class.forName("JDBCドライバの完全修飾名")』という構文なわけです。
もうね、いきなり何を言っとるんだと。
しかも大抵の場合(というか、たぶん「絶対」と言い切っていいと思いますが)、そこの説明はなしで「こういうものなのでこう書いてください」という扱いなわけです。
たぶん形式的にClassクラスのstaticメソッドなのだろうというところまでは推測できても、そこまでなわけですよ。
そこでちょっと調べてみると、ClassクラスのforNameメソッドは「引数で指定されたオブジェクトを返す」とか出てくるわけですね。
そしたら今度は、「それってnewと何が違うねん」という疑問が出てくるわけです。
そっちは調べてみても、「newとは違います」という言葉は出てきても「ロードする」だとか「Class型のオブジェクトをインスタンス化する」だとかでnewとは違うとか出てくるわけで。
もうね、だから何を言ってるんだと。
しかも結局、オブジェクトを生成するとしてそれを参照してるわけでもないどうやって使うんだと。
朝っぱらから、そこで悩みましたね。
もうね、2時間近くは悩んだ。
そしたら、お昼前にようやく理解が及びました。
それが理解できたことがあまりに嬉しかったので、調子に乗ってひっさびさにテーマ「情報系」いっくよー\(^o^)/

ちなみに私は自己流で調べて自分なりに理解した気になっているに過ぎないので、詳しい方がいらっしゃれば間違い等指摘してください。


んで。
正直、理解さえしてみれば極々簡単なお話だと思います。
調べてる最中散々出てきた説明(上記がその一部)も、なるほど確かにその通りだと思いました。
ポイントはつまるところ、Classクラスとは.classファイルをプログラム上にロードした時の型だというところです。

図にすると、こう!

あなたに送る独り言byはむばね

まず、.classファイルが最終的にはプログラム領域中にロードされるというのはOKですよね?
そうしないと、プログラムが使えませんからね。
んで、そのプログラム領域中のどっかにあるクラスを、どっかのオブジェクトがnewすることによってインスタンス化するわけです。


あなたに送る独り言byはむばね

そして、その「プログラム中のどっかにあるクラス」というのが、まさにClassクラス型でオブジェクトとして保持されているわけです。
ここまでわかりゃあ、もう簡単。
Class.forNameというのはClass型のオブジェクトを生成するものなんだから……



あなたに送る独り言byはむばね

こんな感じで、プログラム中にクラスをロードする作業を行うんだね。



      ,.ィ , - 、._     、
.      ,イ/ l/       ̄ ̄`ヽ!__
     ト/ |' {              `ヽ.            ,ヘ
    N│ ヽ. `                 ヽ         /ヽ /  ∨
   N.ヽ.ヽ、            ,        }    l\/  `′
.  ヽヽ.\         ,.ィイハ       |   _|
   ヾニー __ _ -=_彡ソノ u_\ヽ、   |  \   つまりClass.forName()とは、
.      ゙̄r=<‐モミ、ニr;==ェ;ュ<_ゞ-=7´ヽ   >  動的なクラスコンパイル(的な作業)
.       l    ̄リーh ` ー‐‐' l‐''´冫)'./ ∠__  を行うメソッドだったんだよ!
       ゙iー- イ'__ ヽ、..___ノ   トr‐'    /    
       l   `___,.、     u ./│    /_ 
.        ヽ.  }z‐r--|     /  ト,        |  ,、
           >、`ー-- '  ./  / |ヽ     l/ ヽ   ,ヘ
      _,./| ヽ`ー--‐ _´.. ‐''´   ./  \、       \/ ヽ/
-‐ '''"  ̄ /  :|   ,ゝ=<      /    | `'''‐- 、.._
     /   !./l;';';';';';';\    ./    │   _
      _,> '´|l. ミ:ゝ、;';';_/,´\  ./|._ , --、 | i´!⌒!l  r:,=i   
.     |     |:.l. /';';';';';|=  ヽ/:.| .|l⌒l lニ._ | ゙ー=':| |. L._」 ))
      l.    |:.:.l./';';';';';';'!    /:.:.| i´|.ー‐' | / |    |. !   l
.     l.   |:.:.:.!';';';';';';';'|  /:.:.:.:!.|"'|.   l'  │-==:|. ! ==l   ,. -‐;
     l   |:.:.:.:l;';';';';';';';| /:.:.:.:.:| i=!ー=;: l   |    l. |   | /   //
       l  |:.:.:.:.:l;';';';';';';'|/:.:.:.:.:.:.!│ l    l、 :|    | } _|,.{::  7 ))
        l  |:.:.:.:.:.:l;';';';';'/:.:.:.:.:.:.:.:| |__,.ヽ、__,. ヽ._」 ー=:::レ'  ::::::|;   7
.      l |:.:.:.:.:.:.l;';';'/:.:.:.:.:.:.:.:.:.|. \:::::\::::: ヽ  ::::::!′ :::|   .:/
.       l |:.:.:.:.:.:.:∨:.:.:.:.:.:.:.:.:.:.:.!   /ヽ::: `:::    ::::  ....::..../ 



      _人人人人人人人人人人人人人人人_
        >      な、なんだってー!!    <
        ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
   ∩___∩              ∩____∩
   | ノ     u ヽ            / u     u └|  ∩____∩
  / # ●   ● |           | ●   ● # .ヽ/  u    └|
  | u   ( _●_)  ミ          彡   (_●_ ) u  |●   ● # ヽ
 彡、   |∪|  、`\        /     |∪|    彡  (_●_) u   |
/ __  ヽノ /´>  )       (  く   ヽ ノ   / u   |∪|    ミ
(___)   / (_/        \_ )      (  く   ヽ ノ     ヽ



これを理解した瞬間は、マジで脳内で↑のAAが再生されましたね。
もうこれを誰かに言いたくて言いたくて、ブログを更新する気力を残すため自習(私はいつもサポーター役で残ってる)もそこそこに帰ってきたわ。

しかし正直これ、一人でやってたら割と早々に諦めて「まぁそう書けってーならそう書くわ」となってたと思います。
が、質問された時に答えられなかったら困るなーというただそれだけの理由で悩み続けましたよ。
結局そんな質問出なかったけどな!
少なくとも想定質問(自分が感じた疑問)には絶対に自分なりの答えを出すようにしているはむばね先生です。
しかし、今日ほどそうやって「先生」やってて良かったと思ったことはないですね。
これがわかった瞬間は本当に気持ちよかった。

ちなみにそんなわけなので、実際にはClass.forName()ではドライバのクラスをロードしているだけ。
DriverManagerオブジェクト(の、正確にはstatic initializerらしいですが)がそれをインスタンス化して使うわけですね。
改めて説明すると簡単なことなんですが、なかなか解説してくれてるところがないんですよね。
正直、今朝の私がこの記事に飛んでたら速攻理解できてたと思う。
というわけで、この記事が誰かの理解に役立てば幸いです。


備忘録:ネットワークのスループット測定Linux編(nuttcp、Iperfのインストール)

どうも、はむばねです。
本日2回目の更新。

死ぬほど久々の、まともな情報系ネタ。
いやまぁ書こうと思えば書くことはたくさんあるわけですが、ぶっちゃけ超めんどいんだね!
というか基本的にググってすぐ出てくるようなネタについて書いても仕方ないわけで。
というわけで今回は、ちょっと気合い入れてググればすぐ出るけど「2秒で教えろやハゲ!」という時にはちょっぴり調べるのがめんどかったネットワークのスループットの測り方だよ!
とりあえず「Linuxってなーに?」という人には塵一つとして必要のない知識なのでスルーしてね!
また、私がてきとーに調べててきとーにやった範囲での話なので、あんまり本気にせず話半分で読んでね!
これは別に今回に限ったことでもないのですが、今回は特に調べ方のにわかっぷりがハンパないですからね。
とりあえず自分が使う分だけ調べればいいや、という感じ。
そういう事情もあり、今回紹介する範囲で難しいことは特にないと思われます。
というわけでいってみよう。
ちなみにCentOSです。
バージョンは4.4、4.5、5で、マシンによって若干の差あり。

さて。
Linuxでスループット測ろうと思うと、
・ttcp / nttcp / nuttcpt
・iperf
・netperf
・SmartBits
あたりが一般的だそうです(もちろんググった先の受け売りだよ!)。
んで、SmartBitsは商業用の有償らしいので除外。
とりあえずiperf使うのが普通なのかな? という感じですが、まずはnuttcpの方から。
なぜなら、そっちの方が先にググって出てきたからな!






・nuttcpのインストール方法
まずはこのあたりからソースをダウンロード(なんか今落ちてる? 後で確認します)。
今回使用したのはnuttcp-5.5.5.rat.bz2。
以下インストール手順。

#tar xjvf nuttcp-5.5.5.tar.bz2
#cd ./nuttcp-5.5.5
#cc -O3 -o nuttcp nuttcp-5.5.5.c
#install -m 555 nuttcp /usr/local/bin/

当たり前ですが、”/usr/local/bin/”は任意で結構。
どうせ実行ファイルが生成されるだけなので(-mオプションで権限設定)。
はい、これでインストールは完了です。
ね、簡単でしょう?


次、使い方。
先程指定したフォルダ内に実行ファイルが生成されていますので、該当フォルダに行き”./nuttcp”で実行しましょう。
オプション付けないと動かないので注意だよ。
”./nuttcp”で空撃ちするとオプション表示されるので、詳しくはそれを読みやがってください。
今回は、「とりあえず1回だけスループット測定する」方法です。
対象とするのは、ホスト名”azk1”と”azk2”の間のスループット。

まず、azk2(別にazk1でもどっちでもいいけど)にログインするなり遠隔コマンドなりで
#./nuttcp -S -1
を実行します。
”-S”はサーバモードでの実行(ようは向こうから来るのを待つ状態なんだね)、”-1”は「とりあえず1回だけやりまっせ」のオプション。
成功すれば、この時点では何も表示されず終了(終了してないけど)。

続きまして、同じようにazk1にて
#./nuttcp -t azk2
と実行。
”-t”はtransmitter(送信者)として実行の意、そのあとにホスト名。
本当は最も基本的な形は”-r(receiver)”との組み合わせみたいだけど、そんなの関係ねぇ。
送信のため若干の時間がかかりますが、(たぶん)別に止まっているわけではありません。

成功すればこんな感じです(パス名に名前が含まれるため、一部加工)。

あなたに送る独り言byはむばね






んで、これでCentOS5の方は成功したのですが、ファックなことに4.台では(バージョンのせいか物理的なマシンのせいかは知りませんが)エラーが出やがったためそっちではIperfも入れてみました。


・Iperfのインストール方法
はい、まずはソースをダウンロード

# tar zxvf iperf-2.0.2.tar.gz
# cd iperf-2.0.2
# ./configure
# make
# make install

いつも通り。
余談ですが、tarのオプションが違うのは毎度違うサイトからコピペっているからです。
特にオプションを指定しなければ、/usr/下に生成されます。
ディレクトリを指定したい場合は、”./configure --prefix=”で指定してください。
これも、特に難しいことはないはず。

んで、使い方。
基本的にはnuttcpと似たようなもんです。
ホスト名もさっきと同じということで。

まずazk2にて、
#iperf -s
”-s”はサーバモードで起動。

あなたに送る独り言byはむばね

待ち状態に入ります。
”-D”オプションでデーモンとして登録もできます(解除は”-R”)。

んで、azk1にて
#iperf -c azk2
”-c”はクライアントモード。
微妙にnuttcpと異なるので、一応注意。

あなたに送る独り言byはむばね

しばらく待って、成功すればこんな画面に。
こっちならCent4.5でも動いた。
その他のオプションに関しては、今回も”-h”でhelp出すなりここなり参考にしてください。








そんなもんかな。
ちなみにこれも今回に限ったことではありませんが、基本的にテーマ”情報系”は「私が(該当の情報を知らない状態で)このページにたどり着けば、ここだけで事足りる」をコンセプトに書いています。
よって、知識レベルが(上下問わず)私と大きく離れている人にはたぶん向かないよ!
一応、心なし初心者向けには書いてるつもりですけれど。
まぁ、あんまり真面目にやってこなかった情報系の学生が見る分にはちょうどいいくらいなんじゃねーの。


ふぅ……しかし、相変わらず”情報系”は書くのに時間がかかる。
本筋とは一ミリも関係ない作業に1時間半も費やしてしまったぜ……
ゼミ前にはよくあることである。

Print Screenの使い方

どうも、はむばねです。
本日は、諸事情によりタイトルの通りプリントスクリーンの使い方だよ!
テーマは情報系にしようか通常にしようか迷いましたが、まぁ情報系には違いねーだろってことで。
他との落差が結構激しいですが、まぁいいでしょう。
スクリーンショットの撮り方を知らねぇワックなクルーどもはこれで勉強しやがってくださいクソッタレ!

さて、そんなわけで。
この画像使いたいけど、Flashだから保存できねぇ!
PCの画面を見せたいんだけど、写真に撮るしかないの!?

そんな時に活躍するイルでデフな機能が今回紹介するPrintScreenキーだYO!
何だよそれ聞いたことねぇよカスヤロウが! というマザーファッカーどもはまずお手元のキーボードを見やがってくだサノバビッチ!


あなたに送る独り言byはむばね

はい、写真の中央に移ってるのが噂のクールなヤロウ、Print Screenキーですね。



あなたに送る独り言byはむばね

ノートパソコンなら、このように他のキーと一緒になっていることもあります。
青字で「Prt Sc」と書いてあるのが確認できますね。


あなたに送る独り言byはむばね

この場合、こちらのFn(ファンクション)キーと一緒にInsertキーを押すとプリントスクリーンを押したことになるわけです。



しかし、世の中にはどこを探しても該当キーが存在しないバスタなキーボードも存在するそうです。
けどそんなPrint Screenキーがないキーボードでも大丈夫!
なぜなら、Windows環境ならばスクリーンキーボードという最高にドープな機能がついてるからなんだね!
使い方は簡単、
スタート > すべてのプログラム > アクセサリ > ユーザー補助 > スクリーン キーボード
もしくは、
スタート > ファイル名を指定して実行を選んで、「osk」 と入力
でOK。
こいつで起動するスクリーンキーボードの、「psc」ボタンを押せばOKです。

あなたに送る独り言byはむばね

画像の赤丸の部分ですね。
これならどんなド低脳でも使いこなせるだろヒャッハー!


んで、これでクリップボードという名のビッチに画面の画像が保存されたわけですね。
あとはどっかに貼り付けすればOKです。
画像編集ソフトでもワードでもパワポでもなんでもいいのですが、私がいつも使うのはペイントですね。
どんなクソッタレな環境でも、とりあえずWindowsなら入ってますからね。
Linuxでとりあえずviを使うのと同じ原理。

そんなわけでペイントを起動して貼り付けしてやると、


あなたに送る独り言byはむばね

こんな感じに保存できるようになりやがるわけですね。
あとは名前を付けて保存するなり何なり何しても抵抗しないマグロ状態ですよ。
ちなみに単にPrintScreenキーだけを押すと上のように画面全体がコピーされますが、Altキーと一緒に押すと最前面に出ているウィンドウのみがコピーされます。

さぁ、これでみんなも好き勝手画像貼り付けてファットなネット生活送りやがってください。
ただし大抵の画像はこれでどうにかなりますが、動画だけはその限りじゃないので注意だぜファック!


やる夫で学ぶサーバ構築 ~VM構築編~

どうも、はむばねです。
本日2回目の更新。

文字数制限……だと……?
というわけで、前回の続きです。
とりあえずここからが本番です。
といっても、結局基礎に入る前に今回も終わるけどな!
yumのインストールくらいまではいこうと思ってたのに、そんな気力は全く残りませんでした。

なんという無駄な労力、普通に解説するだけなら間違いなくこの三分の一もかからない。
まぁ今回は丸々序章ということで、次回からが本番だよ!
次回がいつになるかはわからないけどね!

まぁとりあえず、YOUもここまで一緒に試してみればいいじゃない!



―――――――――――― 第1章~VM構築編~ ――――――――――――


文芸部室前


      ____
    /      \ ( ;;;;(
   /  _ノ  ヽ__\) ;;;;)
 /    (─)  (─ /;;/  ここに、やらないおが紹介してくれた人がいるのかお・・・
 |       (__人__) l;;,´  
 /      ∩ ノ)━・'/
 (  \ / _ノ´.|  |
 .\  "  /__|  |
   \ /___




    |┃三ガチャッ ____
    |┃      /⌒  ⌒\
    |┃    /( ●)  (●)\   
    |┃三  /::::::⌒(__人__)⌒::::: \   
    |┃   |     |r┬-|     |   こんにちはだお!
    |┃   \      `ー'´     /
    |ミ\  /          \





               _. --- ._
.         ,..イ´:.:.:.:.:.:.:.:.:.:.:.:.:´ ̄`丶、
       /:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:\
      /:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.ヽ
.    /:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.ヽ:.:.:.:.:.:.:.:.:.:.:.ヘ
  ∠:ィ:.:/:.:.:.:.:.:.:.:.|:.:.:.:.:.:.:.:.:.:.:.:ヽ:.:.:.',:.:.:.:.:ハ:.:.:.:.:.:\
    /:./:.:.:.:.:.:.:.:.:.:!:.:.:.:.:.|:.:.:.:.:.:.:.ハ:.:.:|:.:.:.:.:.:|:.:.:.:.:.:.:トゝ
.   |:.:':.:.:.:.:.:.:.:|:.:∧:.:.:.:.:!、:.:.!.、:._」',...L:.:.:.:.:|:.:.:.:.:.N
.   l:.:l:.:.:.:|:.:.:下'ト ヽ:.:.:| x|'´\! ',:l:.:.:.:.:.:|:.:.:.:.:.|     待っていた
    V||:.:.:.V:.:.|,ィ=ミ、\!  ィイ¨'トヽ:.:.:.:.:ハ:.:トソ       やらないおから、話は聞いている
      リ、:.:.:.\|:{ ヒ,ハ     ら、j.| |:.:.:.:.,'ノ〉:|′
        ヽN:.:.:.:| ー‐'     ー-' ,!:.:.:./イ/ヾ
        l∧:.:.ヽ   '_     /:.:.// '′
           \:.|`  _,..__ .ィ ./:.:./ー、
          `rァ ´ /  l  ,./:.:/  ∧
            /′ /三ミ 、///     ヽ
         / .′ /   `y ´      ヘ.




         ___
       / ⌒  ⌒\
      / (⌒)  (⌒) \   (お、おにゃのこ! それもかわいいお!
    /   ///(__人__)/// \  さすがやらないお、粋なことしてくれるお!!!!!)
     |   u.   `Y⌒y'´    |   はじめまして、やる夫だお!
      \       ゙ー ′  ,/
      /⌒ヽ   ー‐    ィヽ
      / rー'ゝ       〆ヽ
    /,ノヾ ,>      ヾ_ノ,|
    | ヽ〆        |´ |





        /     .: / .:.:.:.:.: /.:.:.:. ;イ.:.:.: j:.:.:.:.:.:.:.:.:.:..::\.:.:.:.:.:.:.:.:\ .:.:.|.:.:.:.:.:.  |.:.:.:.:.:.:ヽ
       / /  .:.:/ .:.:.:.:.:.:.:l.:.:.: / .|.:.:.:∧:.:.:.:.:.:.:.:.:.:.:.:. l\.:.:.:.:.:.:.:.ヽ.:.|.:.:.:.:.:.  |!.:.:.:.:.:.:.:\
       ,′ l  .:.:.l  :.:.:.:.:.:.: j:.:. /  |:.:. | ヽ .:l\.:.:.:.:.:.:.| \.:.:.:.:.:.:.',:!.:.:.:.:.:.   |:l:.:.:.:.:.:. ト ヽ、
        l :/|   :.:.:|  :.:.:.:.:. /|:.:/   !:.: |.  ヽ:{  \.:.:.:.:|    \ .:.:.:.l|.:.:.:.:.:  i |.:.l:.:.:.:.:.:.| `ーゝ
        | / !   :.| l::.:.:.:.:.l V    l:.:.l    \   >┼ ── \‐:.! .:.:.:.:. i |.:.:.l.:.:.:.:.:|
        レ'  l   l l:.:.:.´丁 j ̄ ̄ `ヽ{     \´  >l _ -==r 、│.:.:.:.:. i |.:.:.:|:.∧:.l
           l   |ハ ヽ .:.:.:|〃チ不テミ、ヽ       ァ彳゚ア千.ハヾ}! :.:.:.:. i |ヽ:.:|/ V
           ヽ  .|i.: ヽ\:.:lヾハ_j::::::::ハ           | _j:::::::::} j " |.:.:.:.:.: i | }j:|
           \∧:.:l \ヽl  う、:::イi|          'う、:::::イ./  j :.:.:.:.: / レ':/リ
            ヽヽ|:.:.:. \l. _ヽ辷_リ           ゞ 辷='  l.:.:.:.:. / ∧/   私は長門有希。
            /::/ l:.:.:.:.: 小          ,           ,'.:.:.:.:./ /     早速始める。
              /::/  l:.:.:.:.:.:.lハ                       /.:.:.:.,イ ∧
        _, -、 /::/__,ム:.:.:.:.:.l::.:lゝ       -        , イ.:.:.:./ j/  }
ー-、厂 ̄了::::/:: ̄::::::::::::∧ :.:.:.:l:.:|  丶、             / /.:.:. /∨   l
  〃:::::::::::::::::::::::::::::::::::::::::::::::ヽ :.:.:l.:| ヘ {{> _        イ  ./:. /  }    |
  {{:::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ:.:.:l:| ヘヽ|l  /:`irー-r<.     /:/   /   |
  ll::::::::: /' ::::::::::::::::::::::::::::::::::::::: \八   |l  /:/ /  〉    /    /     |
- ヾ}:::::: j ::::::::::::::::::::::::::::::::::::::::::::::: ヘ:> |l // ノ   /            /       |
ー‐‐ヘ_/ー<:::::::::_二>─-、::::::::::::: {  |l //          , -‐'´        |
       /::/  ̄      `ー‐一ヘ__jレ∧  \   ,,-‐'´             |
        /::/               / ∧ ヽ   >ー'´            │





       ____
     /_ノ ' ヽ_\
   /(≡)   (≡)\
  /::::::⌒(__人__)⌒::::: \   わかったお!
  |     |r┬-|     |
  \      `ー'´     /        早速ちゅっちゅ始め……






     /.:.:.         \
      /:,:.:.:  /   ヽ    \
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
    /!:.:.|:.: l/  〃 / j } :|    ハ
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j
   ヽム:.} c;_j    c;リ ル iレヽ    
      `ヘ:ゝ    .'    小/      パソコンの前に座って。
        ヾ:{>、 _ ィ<}/|/
    _, ィr'´ヽ{ ___`} ヽ、_





      / ̄ ̄ ̄\ 
    / ─    ─ \     
   /  (●)  (●)  \.  ・・・はい。 
   |    (__人__)    |  (普通に目的忘れてたお)
   \    ` ⌒´    /    
   /              \






     /.:.:.         \
      /:,:.:.:  /   ヽ    \   Linuxの知識は皆無に近いと聞いている。
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー そこで今回、必要な環境はこちらで選定しておいた。
    /!:.:.|:.: l/  〃 / j } :|    ハ
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  VM上でのシステム構築を想定。
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   ディストリビューションはFedora9。
   ヽム:.} c;_j    c;リ ル iレヽ    今日はyumのインストールまでを目標にする。

      `ヘ:ゝ    .'    小/      
        ヾ:{>、 _ ィ<}/|/       これで問題はないはず。
    _, ィr'´ヽ{ ___`} ヽ、_




         ___
       / ⌒  ⌒\
      / (⌒)  (⌒) \   フェラ!? やる!?
    /   ///(__人__)/// \  やった、ユキちゃんもやる気満々だお!
     |   u.   `Y⌒y'´    |   
      \       ゙ー ′  ,/
      /⌒ヽ   ー‐    ィヽ
      / rー'ゝ       〆ヽ
    /,ノヾ ,>      ヾ_ノ,|
    | ヽ〆        |´ |





         _,. --─- ,_
       -''テ''´  _     ヽ
      ,r'ァ' ,r// , ,     `!    
       ´ ' /,'/_ィ,イ ! |   |  ヽ   
       l1,l ハ.、`|/| /トィ._|   |
       〃 l lュ}  ', -、.V/ / |   今の用語については後ほど説明する。
.       l| l  '   5iツ  ノ ハ|   準備を始めて。
        ヽトlヽ`   /,.-シイ″
           `¨仁'-'ユ、       
           ,r=ニ.ヽ、  l
      _,.. イ   ヽ`、 ヽ
     f-r'/|     l |   |
     | !′|    | |___{
.     {|_」 |    ,L. -¬リ






      / ̄ ̄ ̄\ 
    / ─    ─ \     
   /  (●)  (●)  \.  ・・・はい。 
   |    (__人__)    |  (てっきり、やる夫の顔が凹むAAが来るかと思ったお。
   \    ` ⌒´    /    ツッコミがないと、それはそれで寂しいお)
   /              \






      / ̄ ̄\   
    /ノ( _ノ  \
    | ⌒(( ●)(●)    だったらお望みどおりに!
    .|     (__人__) /⌒l
     |     ` ⌒´ノ |`'''|
    / ⌒ヽ     }  |  |              
   /  へ  \   }__/ /             / ̄ ̄\
 / / |      ノ   ノ           / ●)) ((●\’, ・ ここできたか
( _ ノ    |      \´       _    (   (_人_)’∴ ),  ’
       |       \_,, -‐ ''"   ̄ ゙̄''―---└'´ ̄`ヽ   て
       .|                  ______ ノ    (
       ヽ           _,, -‐ ''"  ノ       ヽ   r'" ̄
         \       , '´        し/..     | J
          \     (           /      |
            \    \         し-  '^`-J







     /.:.:.         \
      /:,:.:.:  /   ヽ    \
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
    /!:.:.|:.: l/  〃 / j } :|    ハ
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j
   ヽム:.} c;_j    c;リ ル iレヽ    
      `ヘ:ゝ    .'    小/      それではまずVMWare Playerを用意する。
        ヾ:{>、 _ ィ<}/|/
    _, ィr'´ヽ{ ___`} ヽ、_






      / ̄ ̄ ̄\ 
    / ─    ─ \     
   /  (●)  (●)  \.  ・・・はい。 
   |    (__人__)    |  (何事もなかったかのように進めるのかお)
   \    ` ⌒´    /    
   /              \







━┓
┏┛    ⌒
・    .___ ⌒  ___   ━┓
   / ―\ / ―  \  ┏┛
 /ノ  (● X  (●)  \ヽ ・.   とはいえ、VMWare Playerってどこで手に入るんだお?
| (●)  /_  (⌒  (●) /.    というかそもそも、VMって何だお?
|   (__/      ̄ヽ__) /
 \  /´    ___/
   \|        \
   /|´        |






         ,.. --- ..
       ,..-.:. ̄.:..:..:.. : : : : `丶、
      /:..:..:. ..: : : : : : : : : : : : :\
    /:ヘ=、、:._: : : : __:ヽ:_: -^,.ト、    VMとはバーチャルマシンの略。
   ノ:..:..:./:..  ̄: :7´:―― : :|‐: :´、: ヽヽ   コンピュータのCPUや記憶装置などの
  ー-/:..:.i:../:. : : ,/:..:.:イ:.ハ:.. : j:.. :}:.、ヽ:. トヽ  リソースを仮想化した上で、
    !:..:..:|:.{/:..ィ_jz≦ノ ' }:./_}_イ:. } |:.|||   その仮想化したコンピュータを実行するための
    Vl:.:.|:. Vl´「_ 、` ノ′ _ノ:ソ:イ: リ ノ  アーキテクチャまたはソフトウェア。
.      }:ハ: : l f7「::`ハ   /:::7}7イ:/}/
     ノヘーl、: :!VZツ     ヒ:ノ/:.//      VMWarePlayer はそのVM環境を構築するためのソフトウェア。
        `ィヘ:ト、 _   _   ノ:イ/       公式サイト からダウンロードが可能。
      rく、\` ヽ二コ:千:|K、′
      |:..:ヽヽ\: :Yニ|: :!:/j!:.l
      ト:..:..:.\ヽ\!r|┴=ミ!r ァ7
     |!::.:..:.ヽ\ヽ|!    /7 /
      j::.l::..:..:.⌒ーァ⌒}   / / /^}
      |::.:.\::..::.::.::>ー'―-L∠_¨´
      l::.::.:..:. ̄ ̄ト 、, --、―弋i
       ヽ::.:..:..:.::..∧/    ヽ  i _ .. -―
       ``ーニ´/ー-、   | _|
       _. -―  ̄  ト―.:「:.:l
                 ヽ:..__:L_|
                ヽ.__)ノ






         /    //  /‐───- 、   \
        /r‐─‐ァーf/    /-────-、 \\ ヽ   【解説】
         / ∨三/'¨7   /   / /      \厶 ハ ',   研究・開発には何かとLinux環境の方が
        /  \/__,/   /  ,イ l  |       il V∧ハ   都合がいいことが多いわ!
      /  _//〉‐/    /\/ |i |l | 丶    i|  l ト、 ',
      ,′ f⌒∨ /    /ハ {\! |l !{   \  i|  | トく l   けど、いちいち別でインストールするのは面倒!
      / ハ.  V    /ィfテミ、 ヽ八 ヽ    ヽ_|  l |/ |   それに、Windowsも同時に使えれば便利よね!
      l l 〈_∧   ',   ハ{_f::j:リヾ    ヽ∧>七 j  ! |_  |  
      | l   _ム _ ゝへ| V;之_        _ ヽハ ,' /  | \|   そこで出てくるのがバーチャルマシンよ!
      | l  >'´     ヽ           ィ≡气 / /  l\/!   VMWare Playerを使うことで
      | l  |   -ー―一ヘ   , 、__  ヽ    〃:/|   ∧ |   Windows上で別のOSを動かすことができるわ!
    j八 |       __}  {  `ア    ,ムイ /  ,イ__j│   WindowsとLinux、両方取りができるってわけね!
   ,r≦三ヘ   ̄    ト、 ` ー'  ,. イl│ Ⅳ  / | jlリ   
  /  /  ハ   _,  --‐〈. >‐r<  /l│ 〃  / j /   ボタン一つでOSが切り替えられる、

  // /   | ハ     , イ1  /   ヽ./ ∧/   / /'     技術の進歩って素晴らしいわね!
〆 /    い \ -<  }}/ ̄ ̄`ヽ>ーイ 、 /
〈  /     ∨ 代\   ハ、 , -―‐- 丶 //丁fヽ    
∧/       ∨   `三彡' \    __ ∨´  |│       
l |        \==彳│  \/  ` |   |│ l     
l |          `ー‐ ´ |    \    l|   |│ l






      ____
     /\  /\
   /( ●)  (●)\   なるほど、だいたいわかったお。
  / :::::⌒(__人__)⌒:::::\ さっそくVMWarePlayerをインストールしてみるお。
  |     |r┬-|       | とりあえず、この落としたファイルを開けばいいのかお?
  \     ` ー'´     /






     /.:.:.         \
      /:,:.:.:  /   ヽ    \
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
    /!:.:.|:.: l/  〃 / j } :|    ハ  ここまでは普通のソフトウェアのインストール。
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   『次へ』を押していけば構わない。
   ヽム:.} c;_j    c;リ ル iレヽ    最後の『インストール』をクリックで完了する。
      `ヘ:ゝ    .'    小/      
        ヾ:{>、 _ ィ<}/|/   
    _, ィr'´ヽ{ ___`} ヽ、_






       ____
     /⌒  ⌒\
   /( >)  (<)\   再起動して……
  /::::::⌒(__人__)⌒::::: \  やった! インストール完了だお!
  |    /| | | | |     |  楽勝だお! きっとやる夫には才能があるお!
  \  (、`ー―'´,    /
       ̄ ̄ ̄





     /.:.:.         \
      /:,:.:.:  /   ヽ    \
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー 次にVMWareでOSをインストールする。
    /!:.:.|:.: l/  〃 / j } :|    ハ  ディストリビューションはさっきの通りFedora9。
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  

  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   
   ヽム:.} c;_j    c;リ ル iレヽ    
      `ヘ:ゝ    .'    小/      
        ヾ:{>、 _ ィ<}/|/   
    _, ィr'´ヽ{ ___`} ヽ、_




         ____
      /::::::─三三─\    ディストリビュー・・・ション・・・?
    /:::::::: ( ○)三(○)\   
    |::::::::::::::::::::(__人__)::::  | 
     \:::::::::   |r┬-|   ,/ 
    ノ::::::::::::  `ー'´   \






     .  -‐-
    〃.     ヾ   Linuxディストリビューションとは、
.    ! |ノiノハ从ハヽゝ  Linuxを、一般利用者がインストールしたり、
    i (| |┰ ┰iイ  利用できる形にまとめ上げたもの(頒布形態)。
     'ハリ、 - ノリ 
.     ⊂}:|{H}l:iつ  Debian系、RedHat系などが存在し、
.      くソ_i_li;ゝ   それぞれに特徴を持っている。
       (__i_)    





            __ __ _
.        _ , '"´  ,. _ ___`丶、     【解説】
       / ` /  /´-‐ァー-ヽ \     ようはディストリビューションっていうのは、
.      / /下7 ..///.:.::/ .:.:ト、 ヽ   Linuxの種類みたいなもんだと思っておけばいいわ。
      / └イ_j/ .://;へ、/!.:.::/:.}ヽ ',  
     ,'  ///!l .::j.:lイ仔くヽ/,.イ,.ム:.', l  今回は、ウチの大学で使ってるRedHat系列。
    ,   '〈/f`| l ::l`' ゞゾ '´ rャjノ::.l:. |  最新はFedora10だけど、
    |  l:l :!:{、| l ::|        マソハ: |:: |   今回は諸々の事情上Fedora9を使用するわ。
    |  l:l::i个| l ::l!     _  ′} .:}:.l:: l  
    |  lハ:l::{::', ::::{、        /.:/::.l:: l  
    l !:|:::',::',::ヽ:::ヽ\._    /.:/::::/l::;!   
.     ',::{:{、:::ヽ\:\;ゝ `「:フ´!::::/;:::/ 〃   
.     ヾハj>''´ ヽ ト、_..上くイ::::{ {::{/    
    /⌒ヽ、\ ` \-ー ̄\ヾ     





     /.:.:.         \
      /:,:.:.:  /   ヽ    \
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー 先ほどインストールした
    /!:.:.|:.: l/  〃 / j } :|    ハ  VMWare Playerを起動する。
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   
   ヽム:.} c;_j    c;リ ル iレヽ    
      `ヘ:ゝ    .'    小/      
        ヾ:{>、 _ ィ<}/|/   
    _, ィr'´ヽ{ ___`} ヽ、_






       ____
     /_ノ  ヽ、_\   ポチッとな!
   o゚((●)) ((●))゚o
  /::::::⌒(__人__)⌒::::: \
  |     |r┬-|     |    (⌒)
  |     | |  |     |   ノ ~.レ-r┐、
  |     | |  |     |  ノ__  | .| | |
  \      `ー'´     /〈 ̄   `-Lλ_レレ
                  ̄`ー‐---‐‐´





あなたに送る独り言byはむばね




      / ̄ ̄ ̄\ 
    / ─    ─ \    こんな画面が出てきたお。
   /  (●)  (●)  \.  
   |    (__人__)    |  
   \    ` ⌒´    /    
   /              \





     /.:.:.         \
      /:,:.:.:  /   ヽ    \   まずは仮想マシンのイメージを手に入れる
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー 
    /!:.:.|:.: l/  〃 / j } :|    ハ  『ダウンロード』をクリックすれば
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  仮想アプライアンスのダウンロード画面に進める。
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   
   ヽム:.} c;_j    c;リ ル iレヽ    検索バーに『Fedora』と入力し、Fedora9を選択。
      `ヘ:ゝ    .'    小/      『Download this Appliance』『web dawnload』
        ヾ:{>、 _ ィ<}/|/       『Fedora9』の順で選択すればいい。     
    _, ィr'´ヽ{ ___`} ヽ、_




         -‐―-  ―- 、
        /: : : : : : : : : : : : : : : \    【解説】
    /:./´ 二二_`\`::.:.:.:.:.:.:.:.ヽ   ようは、VMで使える形式でOSを落としてくるわけね。
    /:.:./.ヤ丁:.:.:.:.:. `\ヘ:.ヽ:.:ヽ:.:.:.:.:.  本当はisoイメージあたりから自分で作った方が便利なんだけど、
  /:/:/:.:{:.:.l:.:.:.:.:ヽ:.\:.:.:l:.:..マ¨}\:.:.:.',   今回は面倒なのでこちらを利用するわ。
 /7:.:l:.:∧:.ト:.:.ヽ:.:.}:.:.:ハ_.l:.:.:.:Yヽ_/:.:.:.:!  初心者には難しいと思うしね。
,'ヽl :.:i:.!\ヽ \∧>jム|:.:.:.:.!=く:.:.:.:.:.l
i:.ijハ:.:ハヘ処ミ 丶` イf::圷 |:.:.:.:.|`ヽヽ:.:|   その方法については、また今度ってことで。
|:.| l !:.:.:ハ ゞ'    `ー' l:.:.:.:.|_ノlヽ〉 :|
|:.Ljヘ ..:八 '_        ,':.:.:.:.:l:.}_j :.:.:.:.l   代わりに今回は、初心者用にわざわざSS付きで解説してあげわ。
l:.!ヽ:ヽ .:.: \ `     ./ .: /:/:.:.:ノ:l:.:.:l:l   感謝しなさいよね!
ヾ 丶\ヾ:.个ー-イ´///イ:.:.:/:.:〃:.:リ





あなたに送る独り言byはむばね






あなたに送る独り言byはむばね






あなたに送る独り言byはむばね






あなたに送る独り言byはむばね





あなたに送る独り言byはむばね



       ____
     /⌒  ⌒\
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \   ダウンロード完了したお!
  |     |r┬-|     |
  \      `ー'´     /






     /.:.:.         \
      /:,:.:.:  /   ヽ    \
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー 
    /!:.:.|:.: l/  〃 / j } :|    ハ  次はVMWare Playerの『開く』で
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  今ダウンロードしたファイルを選択する。
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   
   ヽム:.} c;_j    c;リ ル iレヽ    あらかじめ解凍しておくのを忘れずに。
      `ヘ:ゝ    .'    小/     .vmxファイルを選択して。
        ヾ:{>、 _ ィ<}/|/   
    _, ィr'´ヽ{ ___`} ヽ、_





あなたに送る独り言byはむばね





      ___    ━┓
    / ―\   ┏┛
  /ノ  (●)\  ・   なんか聞かれてるお?
. | (●)   ⌒)\
. |   (__ノ ̄  |
  \        /
    \     _ノ
    /´     `\
     |       |
     |       |





     /.:.:.         \
      /:,:.:.:  /   ヽ    \
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー 
    /!:.:.|:.: l/  〃 / j } :|    ハ  『コピー』を選択で構わない。
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  あまり気にしないでいい。
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   
   ヽム:.} c;_j    c;リ ル iレヽ   
      `ヘ:ゝ    .'    小/    
        ヾ:{>、 _ ィ<}/|/   
    _, ィr'´ヽ{ ___`} ヽ、_




       ____
     /_ノ   ヽ_\
   /( >)  (<)\    了解だお!
  /::::::⌒(__人__)⌒::::: \  それじゃあ早速さっきのファイルを指定するお!
  |     |r┬-/      |
  \     ` ̄'´     /






あなたに送る独り言byはむばね




           ____
       /::::::::::::::::\  な、なんか怒られてるお?
      /::::::─三三─\
    /:::::::: ( ○)三(○)\
    |::::::::::::::::::::(__人__)::::  |  ________
     \:::::::::   |r┬-|   ,/ .| |          |
    ノ::::::::::::  `ー'´   \ | |          |
  /:::::::::::::::::::::             | |          |
 |::::::::::::::::: l               | |          |




     /.:.:.         \
      /:,:.:.:  /   ヽ    \   恐らくはUSBデバイスの認識中に
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー 文字化けが発生したのが原因。
    /!:.:.|:.: l/  〃 / j } :|    ハ  
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  .vmxファイルを開いて。
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j  

    ヽム:.} c;_j    c;リ ル iレヽ    
      `ヘ:ゝ    .'    小/     その中の『usb.present = "TRUE"』を
        ヾ:{>、 _ ィ<}/|/   『usb.present = "FALSE"』に書き換えれば解決する。
    _, ィr'´ヽ{ ___`} ヽ、_  










      /    / // /       ヽ\    【解説】
     /    // // l/         ヽ丶  .vmxファイルっていうのは、
    / l / r―/ l  | ハ l ヽ   ト、}  設定ファイルのようなものだと思っておけばいいわ。

      l  l'   レ7l l  ハ !_ ヽ.ト、 |ハ、 l ノ  TeraPadとかににドラッグすれば開けるはずよ。

    l  l  / ハl l  { l/ `ヽ! ヽf,r、l  !   『プログラムから開く』からメモ帳を選択すれば確実かしら。
  /  l / 〃,くl !   レf示r'    lリ/ ! |    
  / // ∨lハ (_! l  ハト辷リ   、´l   l   ちなみにさっきのエラーで強制終了された場合、
/ // l   l \l |ノ〃ノ r'フ   _ ノ/ /   VMWareのプロセス自体は残ってるから。
|/ l  l   ヽ l | ||Y 〈__´/ ′/    プロセスマネージャで”VMWare-vmx.exe”を終了させるか、
| /{  ト、   ヽヽヽ、     `ヽ, ノ     OSを再起動させないと、設定を書き換えても
l/ ', ト,l\  ト.}⌒ ̄`ヽ、_,   r′    何度も同じエラーが出るから注意することね。





      / ̄ ̄ ̄\
    / ─    ─ \    
   /  (●)  (●)  \.  
   |    (__人__) し  |  よくわからないけど、とりあえず書き換えたお。
   \    ` ⌒´    /
   /              \





           _,.--- .
          ,.'´: : : : : : : : : :`ヽ、
    ___,ノ: : : : : : : : : : : : : : : : \
    `ーァ: : : : : : /: : : : : /: : : : : : : \._
     /:/: : : : :.リ: : : : :|/: : :/:イ: : : |ー'´   それではもう一度先ほどのステップを。
      l/{: : : : :.ム|:.l: : :斤ァ</|/:./:}:.|      
      い: : { 6|:.l: :.|テfミ  /:_/:/,ィ|     ここから先は普通のOSインストールと同じ。
        V: :.>リ:.l: :.| ヒソ /ィf':/:/ リ     基本的に指示通りに進めていけばいい。
.          |人{ |:.l: :.|   rタイ:人
       ,f¨¨ヽ Ⅵ:.リ  ‐ イ|: :「        『Create User』では自分の好きなユーザ名と
       ノ     \|:[_¨´ ||.:/  ,z-.、    パスワードを設定。
      /===ヽ  辷ト、_/リ´  イt:::ノ    
      //´⌒ヽ\ Ⅵ| 寸  r'T[_7     『Date and Time』ではとりあえず東京のゾーンを選んでおけばいい。
      〈: : : : : : : :\\Ⅵ 》<´ ̄了     『Time Zone』タブを選択して、Tokyo Japanを選択。
     |:.( : : : : : :}:.:.\.|| /: : ヽ_ノ      ntpサーバの選択はここでは省略する。
     |: :.\ : : :〈: rrr、|/: : : : : 〉      機会があればまた別途記述する。
     fヘ: : : :`: .;}:リ儿/: : : : : ;h      
     | ∧: : : : : >イ: : : : :/:.く     『HardWare Profile』を送信するかどうかは個人の判断に任せる。
     | | ∧ : : : /: : : : : : : /: : : : 〉    ここでは送信しないを選択する。
     | | |_∧ : ,': : : : : : : 人: : : /     
     | |__ヽ: : : : :,ィ´.| | トr'’     
     └r――‐`ー'―┴┤| |:.|
       |: : : : : : /: : : :.:.:.|| | |:.|       
     /|: : : : : /: : : : : :.:.||_|_|:.|
.    /: |: : : :./: : : : : :.:.:.:|  |:.:|






     ____
   /      \
  /  ─    ─\  
/    (●)  (●) \ えーと次は・・・
|       (__人__)    | どうするんだったかお?
/     ∩ノ ⊃  /  一旦Windowsに戻るお
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /






            ___
       /      \
      /ノ  \   u. \ ・・・!?
    / (●)  (●)    \
    |   (__人__)    u.   | VMWare Playerの画面から脱出できないお!?
     \ u.` ⌒´      /
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))







       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \  やるおは一生この画面の中で過ごさなきゃいけないのかお・・・?
  |     (__人__)    |
  \     ` ⌒´     /






     /.:.:.         \
      /:,:.:.:  /   ヽ    \   
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー 
    /!:.:.|:.: l/  〃 / j } :|    ハ  
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  落ち着いて。
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   Alt + Ctrlで戻ることが可能。
   ヽム:.} c;_j    c;リ ル iレヽ    
      `ヘ:ゝ    .'    小/     
        ヾ:{>、 _ ィ<}/|/   
    _, ィr'´ヽ{ ___`} ヽ、_  



      / ̄ ̄ ̄\ 
    / ─    ─ \    
   /  (●)  (●)  \.  よく見たら普通に書いてあったお
   |    (__人__)    |  
   \    ` ⌒´    /   
   /              \







       ____
     /      \
   /  _ノ  ヽ、_  \
  / o゚((●)) ((●))゚o \  しばらく経って
  |     (__人__)    |
  \     ` ⌒´     /
  / / ̄ ̄12 ̄ ̄\\
  / /    |     \\
 | | 9   ○    3 | |
 | |    /      ||
  \\   6     //







      ____
     /\  /\    終わったお。
   /( ●)  (●)\   意外とサクサク進んだお。
  / :::::⌒(__人__)⌒:::::\
  |     |r┬-|       |
  \     ` ー'´     /







         , '´ ̄ ̄` ー-、
       /   〃" `ヽ、 \        【補足】
      / /  ハ/     \ハヘ  人   実は筆者自身Fedora9のインストールは初めてなんだけど、
      |i │ l |リ\    /}_}ハ `Y´   設定項目の少なさに驚いているにょろ!
       |i | 从 ●    ●l小N      実はどこか間違っているかって不安があるから、
      |i (| ⊂⊃ 、_,、_, ⊂li|ノ キリッ   いつかここらへんはまたやり直すかもしれないよっ!
      |  l   (_丿、 __, イ l(/丿 
      |  lくミ//::::ヘ三l:::::ノl //
      |  l( ⌒ )..::::V::/( ⌒ )
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|









     /.:.:.         \
      /:,:.:.:  /   ヽ    \   
    /.:.l:.:.:/:/   :/  ', :l   ヾ`ー 
    /!:.:.|:.: l/  〃 / j } :|    ハ  
  /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  
  N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j   これでOSのインストールは終了。
   ヽム:.} c;_j    c;リ ル iレヽ    基礎環境が出来上がった
      `ヘ:ゝ    .'    小/     
        ヾ:{>、 _ ィ<}/|/  
    _, ィr'´ヽ{ ___`} ヽ、_  



       ____
     /      \
   /  _ノ  ヽ、_  \   よ、ようやくかお・・・
  /  o゚⌒   ⌒゚o  \  すぐ終わったはずなのに、
  |     (__人__)    |  なんだか一晩やってたような気がするお・・・
  \     ` ⌒´     /








             _____  
   r⌒ヽ、   .  / ー  ー\
  / \  \. / ( ●) ( ●)  
 _/ / ヽ   /     (__人__) \  
〈__/  . |  |       ` ⌒´   | それじゃあユキちゃん、お世話になったお!
     /  .\     i⌒\   /    この恩は一生忘れないお!
    ./   / ⌒ヽ, _.ヽ  .\/
__   r  /     |/ー、\   \ 
"ヽ |  i,        ノ   .\^   i
  .| ヽ./ ヽ、_../   /     .  ヽ、__ノ
  .i /  //  ./   
  .ヽ、_./ ./  /    
      ./ /      
    .ノ.^/   ダッ
    |_/  




   /:::/::::/::::::::::::l::::::::|:::::::l:::::::::l:::::::::::::::::::::ヽ:::::::::::::::::::::i::::::
  /::;イ::::i::::::::::::::| ::::::l|;::::::li;::::::::|、;::::::::::::::::::::l:::::::::::::::::::::l:::::
  .l::/ l:::::|::::::::::::/!::::::| li::::::lヽ::::::l. ヽ;:::::::::::::::::l::::::::::::::::::::l::::::
  |::l | ::::|::::::::-i-L;;_l .|!i:::::l ヽ::::l  ヽ、__;;;;::::| :::::::::::::::::l::::
  |:! .|::::::l::__;;;|_ l:::l`ヽヽ;:::l ヾ;レ‐'''゙゙´\ :::::| ::::::::::::::::l:::::
  l!  .|:::/ ___ノ,ィ'ト|''=ミ、 ヾ!  ,r-=fニミ;;弍;;| :::::::::::::::l~゙'i    待って。
    l/ ,/ト、::l゙__゙ヾ::ii::|ヽ  ,/  .|:::illi:::゙ii/ |:::::::::::::::j¨゙ l
   /⌒ヾ、|/`fト l ゙K);j .l'⌒''h.   K);;;;ッリ l:::::::::::::/ .ノ 
  /‐-、 `iノ /'ヽ|、   ノ    ヾ、     ,/  |:::::::::::/=7゙
 ./ 、. ヽ |゙V,_  l:::i、 ̄ 丶    ゙''ー-‐''  ,l::::::::::/|:;/
 i  '゙ヽ_j-'   .|::::|.\   ‐-        ,,イ::::::::/ ,l/
 ヽ    ヽ   jl:::::l.   ヽ、      , ''゙ /:::::::/゙`ヽ、
  ヽ、.     /ヽ::::|    ,,`=ー '''i´    /:;/レ'〉;:;:;:;:,.,\
   /    /.  ヽ:| ,,r''゙,.;:;:;r''゙~ノ   /イ  /;:;:;:;:;:;:;:;:;:;







      / ̄ ̄ ̄\
    / ─    ─ \    な、なんだお?
   /  (●)  (●)  \.  まだ何かあるのかお?

   |    (__人__) し  |  もしかして、告白・・・
   \    ` ⌒´    /
   /              \






     .  -‐-
    〃.     ヾ
.    ! |ノiノハ从ハヽゝ  ここまでで環境の構築は完了。
    i (|r|┰H┰i |   これより、Linux講習の本番に入る。
     'ハリ、 - ノリ 
      Ol⌒ll⌒D
.      くソ_i_li;ゝ
       (__i_)



       ____
     /⌒三 ⌒\    
   /( ○)三(○)\   やっぱりやるのかお・・・
  /::::::⌒(__人__)⌒::::: \
  |     |r┬-|     |
  \      `ー'´     /



続くはず!




やる夫で学ぶサーバ構築 ~立志編~

どうも、はむばねです。

結局、こんなもん作ってたら夜が明けてたよ!


というわけで、本日はサーバ構築の基礎、というかLinuxの基礎について少し触れたいと思います。
普通に書いてもいいのですが、せっかくなので俺はやる夫を選択するぜ!
なお、私はハルヒは原作一巻のみ購読、アニメは未視聴です。
よって口調や性格等に齟齬が生じる可能性がありますが、そこは本題じゃないんだからスルーしとけよハルヒオタども。
ついでにやる夫その他の口調も適当だけどそこもスルーしとけよVIPPERども。



―――――――――――― プロローグ~立志編~ ――――――――――――


とある研究室にて・・・

         ____
       /      \        
      /  ─    ─\    
    /    (●)  (●) \   さて、そろそろ卒業研究も考えなきゃいけない時期だお
    |       (__人__)    |  
     \      ` ⌒´   /





 

 

━┓
┏┛    ⌒
・    .___ ⌒  ___   ━┓
   / ―\ / ―  \  ┏┛
 /ノ  (● X  (●)  \ヽ ・.
| (●)  /_  (⌒  (●) /.    とはいえ、研究って何をやればいいのかお?
|   (__/      ̄ヽ__) /
 \  /´    ___/
   \|        \
   /|´        |







 

        / ̄ ̄ ̄ \  ホジホジ
      / ―   ― \     ま、適当にやってりゃなんとかなるだろうお
     /   (●)  (●)  \   一応、3年間授業受けてきたんだし
     |     (__人__)      |
     \   mj |⌒´     /
        〈__ノ
       ノ   ノ






 

                ____
              /     \
            / ⌒   ⌒ \
           /   (●)  (●)  \  とりあえず研究室を覗いてみるお
         _|__    (__人__)      |
       /   \    `ー'´     /
 /⌒⌒⌒/ ..:::::::::::.. ヽ ピトッ
 |  |  | { .::::::●:::::  }
 |  |  |  \ ::::::::::::::/
 ヽ ヽ ヽ   `ー一'´






 


    |┃三 ガラッ
    |┃  ____
    |┃/⌒  ⌒\
    |┃(●)  (●) \
――‐.|┃:⌒(__人__)⌒:::::\  えへへっ
    |┃  |r┬-|     |⌒)遊びに来たお!
    |┃   `ー'ォ     //
    (⌒ヽ・    ・ ̄ /
    |┃ノ       /
    |┃   つ   <
    |┃  (::)(::)   ヽ
    |┃/    >  )
    |┃     (__)







 

何    シェルスクリプトで             ヒソヒソ・・・      ・・・だからデーモン化しとけって
て          Xenのオーバーヘッドが   yumで
奴   Debianの方が                    マジ? Python?   
           本当に大した奴だよ・・・お前は                
 コソコソ・・・                                  そろそろペタ・・・
        今時Fedora6て・・・       逸      C.C.
                               材               
 ・・・sshで                      ザワ・・・       
               え、Windows?^^;      / ̄ ̄ ̄\        
     vimなら                    ./ ─    ─ \ /etc直下に
                             /  <○>  <○>  \  
   ロン                       |    (__人__)    |
ザワザワ・・・・      ガヤガヤ・・・        \    ` ⌒´    /
      写輪眼でも見切れない・・・     /              \      configureでエラーが・・・






 

 

            ___
       /      \
      /ノ  \   u. \ !?
    / (●)  (●)    \
    |   (__人__)    u.   |
     \ u.` ⌒´      /
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


         ____
       /      \!??
      /  u   ノ  \
    /      u (●)  \
    |         (__人__)|
     \    u   .` ⌒/
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


         ____
       /      \
      /  ─    ─\
    /    (●)  (●) \   何のことを言っているのかさっぱりわからないお
    |       (__人__)    |
     \      ` ⌒´   /
    ノ           \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))







 

 

 

 




 

というわけで、教えてほしいお / ̄ ̄\    
      ____       /       \   
    /      \ ( ;;;;(  |::::::        |  いきなりすぎるだろ、常識的に考えて
   /  _ノ  ヽ__\) ;;;;)  |:::::::::::     |  
 /    (─)  (─ /;;/   |::::::::::::::    |          ....,:::´, .
 |       (__人__) l;;,´    |::::::::::::::    }          ....:::,,  ..
 /      ∩ ノ)━・'/    ヽ::::::::::::::    }         ,):::::::ノ .
 (  \ / _ノ´.|  |      ヽ::::::::::  ノ        (:::::ソ: .
. \  "  /__|  |       /:::::::::::: く         ,ふ´..
――\ /___ ノ―――――|:::::::::::::::: \ -―,――ノ::ノ――

 

 




       __________
      /      \
   /  _ノ  ヽ、_  \
  / o゚((●)) ((●))゚o \  研究っていっても何をやればいいのかわからないお・・・
  |     (__人__)'    |
  \     `⌒´     /




       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \  ついでに研究室の人が何を言ってるのかもわからないお・・・
  |     (__人__)    |
  \     ` ⌒´     /

 

 


   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__)   まぁ、研究ってのは
  |     ` ⌒´ノ   これまで授業で使ってきたのとはまた違う知識が必要だからな
.  |         }     (ていうか自分の研究室の人に聞けよ常考・・・)
.  ヽ        }
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \

 

 






   / ̄ ̄\
 /   _ノ  \  とりあえずやる夫
 |    ( ●)(●) 
. |     (__人__)  お前が今思う、自分の理解度ってのはどの程度だ?
  |     ` ⌒´ノ  
.  |         }  
. ヽ        } 
   ヽ     ノ    
   /    く       
   |     `ー一⌒)  
    |    i´ ̄ ̄ ̄

 


.       ____
      / \  /\  キリッ
.    / (ー)  (ー)\    任せるお!
   /   ⌒(__人__)⌒ \   必修科目は全部完璧にとってるお。
   |      |r┬-|    |    
    \__ `ー'´__/    今期も、2教科までなら落としても進級できるお。
   /    ヾ、 //  \. ヽフ 既に過去問は入手済みだお。
   ヽ_⌒)ハ //   | レつ||)  
  i⌒l ミ゚Д゚,,彡⌒)  ヽ_ノ  ̄  C言語もできるお
  |  | ヽ__"" ヽ_ノ|  |     配列だって完璧に使いこなせるお!
  ヽ  ̄ ̄ ̄/ ヽ ヽ_ノ
    ̄ ̄ ̄ /  /ヽ__)
       (__ノ

 

     / ̄ ̄\
   / ._ノ  ヽ、\
   |  (●)(●) |
   |  (__人__)  |   ・・・。
.   |   ` ⌒´  }    そういえばそうだったな。
    |         }    (プログラミングの課題は俺が代わりにやってたんだったな
    ヽ      /             こいつ、未だにポインタも使えないだろ常考)
    __ヽ    ノ__   
  /         .ヽ 
  ||        || .
  ||        ||  

 







 

   / ̄ ̄\
 /   _ノ  \   まぁそれはいい。
 |    ( ●)(●) 
. |     (__人__)   さっきも言った通り、
  |     ` ⌒´ノ  これまでの授業と研究はある種別物だからな。
.  |         }   もちろん、授業をおろそかにしていいってわけじゃないぞ?
. ヽ        } 
   ヽ     ノ    とりあえずやる夫、
   /    く       Linuxについての知識はどのくらいある?
   |     `ー一⌒) 
    |    i´ ̄

 


     ____
   /      \
  /  ─    ─\
/    (●)  (●) \  Linux?
|       (__人__)    |  って、演習とか実験の時に使ってたやつだお?
/     ∩ノ ⊃  /
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /

 







       / \  /\ キリッ
.     / (ー)  (ー)\  なら完璧だお!
    /   ⌒(__人__)⌒ \  EmacsにGNOME、もうほとんど忘れたけど
    |      |r┬-|    | きっと使ってるうちに思い出すお!
     \     `ー'´   /
    ノ            \

 

 


        / ̄ ̄\
      /       \
      |::::::        |      なるほど・・・
     . |:::::::::::     |     ほぼ知識はなしか・・・
       |::::::::::::::    |          ....,:::´, .
     .  |::::::::::::::    }          ....:::,,  ..
     .  ヽ::::::::::::::    }         ,):::::::ノ .
        ヽ::::::::::  ノ        (:::::ソ: .
        /:::::::::::: く         ,ふ´..
-―――――|:::::::::::::::: \ -―,――ノ::ノ――
         |:::::::::::::::|ヽ、二⌒)━~~

 






 

         / ̄ ̄\ 
       /  ⌒ ⌒\   わかった
       |  (●) (●)|   お前にある人を紹介してやろう。
.       |   (__人__) .|   その人について、Linuxの基礎を学ぶといい。
        |   ` ⌒´  |
.        |        }   必ずしも必須ってわけじゃないが、
.        ヽ       .}   Linuxの知識は重要だからな。
         ヽ     ノ   
         /     }    研究を進める上で、知っておいて損はないだろう。
         |      | 
          |      |

 


            ___
       /      \
      /ノ  \   u. \  
    / (●)  (●)    \  やらないおが教えてくれるんじゃないのかお?
    |   (__人__)    u.   | 
     \ u.` ⌒´      /

 





        / ̄ ̄\
      /       \
      |::::::        |   あぁ・・・
     . |:::::::::::     |  俺じゃAAのバリエーションが少なすぎて扱いづらいからな・・・
       |::::::::::::::    |          ....,:::´, .
     .  |::::::::::::::    }          ....:::,,  ..
     .  ヽ::::::::::::::    }         ,):::::::ノ .
        ヽ::::::::::  ノ        (:::::ソ: .
        /:::::::::::: く         ,ふ´..
-―――――|:::::::::::::::: \ -―,――ノ::ノ――
         |:::::::::::::::|ヽ、二⌒)━~~

 



      / ̄ ̄ ̄\ 
    / ─    ─ \     
   /  (●)  (●)  \.   
   |    (__人__)    |  そういう事情なら仕方ないお
   \    ` ⌒´    /    
   /              \

 




続け!



MPICH2インストール・設定

どうも、はむばねです。
さて先日のNAS Parallel Benchmark設定ではmpichインストール済みであること前提で書きましたので、今回はそのmpochのインストール・設定方法について書いてみようと思います。

書いてみますというか、2年くらい前にまとめたやつをちょっと改変しているだけです。

なので、今現在もこれで正しいのかは保証できないよ!



今回はMPICH2 をソースからコンパイルする場合を考えます。


・ダウンロード・解凍
まずはソースをダウンロード。
ここ から最新のソースをダウンロードしてきてください。

今なら、

#wget http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/1.0.8/mpich2-1.0.8.tar.gz

で最新版ダウンロード。

なのですが、いちいち改変するのが面倒なので以下は(2年前の)mpich2-1.0.4p1のままでいきます。

随時補完してください。


#tar xvzf mpich2-1.0.4p1.tar.gz
で展開。




・インストール
今回は全て/opt/mpich2/にインストールするものとします。


#mkidir /opt/mpich2
でディレクトリを作成。

#cd ~/mpich2-1.0.4p1
でconfigure が存在するディレクトリに移動。

#./configure -prefix=/opt/mpich2/
でMakefile が作成されるので
#make && make install
でコンパイル、 同時にインストールが開始されます。

お察しの通り、"-prefix="の後のパスが実際にmpichがインストールされる場所となります。



・PATHを通す
いちいちパスを指定しながら実行しなくてもいいようにPATH を通します。

記述場所は~/.bashrc
このファイルの末尾に、以下の一文を追加。
export PATH=/opt/mpich2/bin:$PATH


こんな感じ。

#vim ~/.bashrc
 export PATH=/opt/mpich2/bin:$PATH /*追加*/



・設定ファイルを作成
/etc/mpd.conf に以下の内容を記述
MPD_SECRETWORD=mr45-j9z
ここで,、右辺はアルファベットと数値の適当な値を設定します(本当に適当でいいです)。
ただし、その値は導入するノード間で共通したものでなければなりません。

つまり、一緒にクラスタとして動かしたいマシンには全て同じ値を記述しなければなりません。


こんな感じ。

#touch /etc/mpd.conf
#vim /etc/mpd.conf
 MPD_SECRETWORD=mr45-j9z /*追加*/

・MPICHを導入するホストを記述
~/mpd.hosts に記述。
記述内容は,MPICH を導入する全てのホストのIP アドレスです。
自分のIP アドレスも記述しなければなりません。


こんな感じ。

#vim ~/mpd.hosts
 192.168.100.101/*追加*/
 192.168.100.102/*追加*/




・IPアドレスに対するホスト名を記述する
/etc/hosts に記述。
記述内容は、
IP アドレスホスト名

何気にこいつが記述されてないと動きません。


こんな感じ。

#vim /etc/hosts
 192.168.100.101 tbt/*追加*/
 192.168.100.102 tbt2/*追加*/




・mpdboot のプログラムをrsh に変更する
/opt/mpich2/bin/mpdboot の71 行目あたりを変更。
rshCmd = ’ssh’ → rshCmd = ’rsh’
その後、設定を反映させるためにOSを再起動します。


こんな感じ。

#vim /opt/mpich2/bin/mpdboot
 rshCmd = ’ssh’
 ↓
 rshCmd = ’rsh’ /*変更*/
#reboot



※rsh系の設定ができていない場合は、その設定も行わなければなりません。

以下その作業。

既にインストール・設定がなされている場合この作業は必要ありません。


・xinetd の導入
mpich の通信ではrsh を使用します。
そして、r系コマンドを制御するスーパーサーバがxinetd です。
つまり、rsh を使用するためにはxinetd をインストールしなければならなりません。


・インストール
#yum -y install xinetd

でインストール。


・設定
/etc/xinetd.d/rsh
/etc/xinetd.d/rlogin
の内容を書き変えます。
具体的には,、どちらのファイルもdisable の項目をyes → no に変更。

・rsh、rlogin のインストール
入っていなければrsh とrsh-server もインストール。
共に

#yum -y install

でインストールできるはずです。


・r 系ログイン設定
初期設定ではrsh でのログインは許されていないため、以下の設定が必要です。


・設定項目
以下基本的にホストのIP アドレスを記述する場合、今回mpichを導入する全計算機ノードと自分のIP アドレスを記述しなければなりません。
また、 これらの設定を有効にするためにはOS の再起動が人必要です。
・/etc/securetty
ルートログイン可能なコマンドを指定
rsh とrlogin を追加する
・ /root/.rhosts
ルート実行可能なホストを指定
記述内容はIP アドレス
・/etc/hosts.equiv
r 系における鍵なしログインを許すホストを設定
記述内容はIP アドレス
・/etc/hosts.allow
ログインを許すホストを記述
・kerveros のrsh を変更
kerberos のrsh が先に認識されるとエラーが表示されるため必要。
具体的には以下のコマンドを実行
#mv /usr/kerberos/bin/rsh /usr/kerberos/bin/rsh.old
#ln -s /usr/bin/rsh/ /usr/kerberos/bin/rsh
一行目でkerberos の元々のrsh の名前を変更し、二行目でkerberos のrsh と/usr/bin/rsh をリンクさせています。



以上の一連の流れ、実際はこんな感じ。


#yum -y install xinetd
#yum -y install rsh
#yum -y install rsh-server


#vim /etc/xinetd.d/rsh
disable = yes

disable = no /*変更*/

#vim /etc/xinetd.d/rlogin
disable = yes

disable = no /*変更*/

#vim /etc/securetty
rsh /*追加*/
rlogin /*追加*/

#vim /etc/securetty
ALL:ALL /*変更(全てのホストを許可)*/


#vim /etc/hosts.equiv
192.168.100.101 /*追加*/
192.168.100.102 /*追加*/

#vim /root/.rhosts
192.168.100.101 /*追加*/
192.168.100.102 /*追加*/
#mv /usr/kerberos/bin/rsh /usr/kerberos/bin/rsh.old
#ln -s /usr/bin/rsh /usr/kerberos/bin/rsh


・確認
ここまでで設定は終了です。
正しく設定されていれば,、これで動くはず。

以下、確認作業。


・PATHが通っているか
#which mpd
などと打ち込んで,”/opt/mpich2/bin/mpd” などと(実際にそのコマンドがある場所が返ってくれば)PATH は正
しく通っています。


・動作確認
#mpdboot -n 2 -f mpd.hosts
と打ち込んで、エラーが出れば設定が間違っています。
ただし、成功していた場合でも, 特にメッセージは表示されません。


#mpdtrace
と打ち込んで、望んだノードのホスト名が表示されていれば成功です。


こんな感じ。

#mpdtrace
 tbt
 tbt2




以下、トラブルシューティング的なもの。


・configure が失敗する
C コンパイラ、 もしくはC++コンパイラが入っていない可能性があります。
#yum -y install gcc
#yum -y install gcc-c++
を実行した後にもう一度試すとできるかも。



・MPICHが動かない
MPICH 関連の設定ファイルは

/etc/mpd.conf

/etc/hosts

~/mpd.hosts

/opt/mpich2/bin/mpdboot

の4つです。
つまり他の設定が正しいならば、これらのどれかの設定が間違っているということになります。
特に、IP アドレスを書く設定ファイルに自分のIP アドレスを書くのを忘れていないか、相手の設定ファイルに自
分のIP アドレスが書いてるか、MPD SECRETWORD の内容がホスト間で共通しているか、などを確認してみる
といいかもしれません。
逆に、 これらの設定ファイルが合っているのに動かないならば他の設定が間違っている可能性が高いです。
まずはrsh が正しく動いているかを確認した方がいいかも、
設定ファイル変更後の再起動を忘れているかもしれないので、とりあえず再起動してみるのも手です。


・rsh が動かない
rsh 関連の設定ファイルは

/etc/xinetd.d/rsh

/etc/xinetd.d/rlogin

/etc/securetty

/root/.hosts

/etc/hosts.equiv

/etc/hosts.allow
の6 つです。
IP アドレスを書く設定ファイルに自分のIP アドレスを書くのを忘れていないか、相手の設定ファイルに自分の
IP アドレスが書いてるか、などを確認してみるといいかも。
また、nmap で開いているポートを確認。

513、514 が開いていなければrsh-server が入っていないかxinetd が動作していませんのでその周りの確認を。
もしくは権限の問題の場合もあります。

ls -la で設定ファイルの権限を調べ、それが現在のユーザになっていなければ権限を変更しなければなりません。



備忘録:NAS Parallel Benchmarks(NPB)設定~チューニング編~

どうも、はむばねです。

前回 に引き続きチューニング編やるよー\(^o^)/

まぁ、チューニングっつってもmakeの引数変えるだけだけどな!

前回以上に無意味な解説になること請け合いだよ!



さて、NPBにおけるmakeの基本形は

make <benchmark-name> NPROCS=<number> CLASS=<class>

です。

本当は

make <benchmark-name> NPROCS=<number> CLASS=<class> \
[SUBTYPE=<type>] [VERSION=VEC]

だけど、後ろ二つは今回は扱わないよ!

どうしても知りたい人はダウンロードしたファイルに入っている(はずの)README.installを見てね!

え? そういうところをこそ解説すべきだろうって?

うん、それはわかってるんだけどお察しの通り私もその辺あんまり読んでないんです。

というわけで、今回は基本の3パラメータについてだけ説明するよ!


・benchmark-name

対象問題の選択。

"bt", "cg", "dt", "ep", "ft", "is", "lu", "mg", or "sp"。

それぞれについては前回同様この辺 を参考にしてください、と丸投げ。

正直、EPがほとんど通信発生しないらしいということくらいしかわからない。

今後必要に迫られればそれぞれの特徴について調べたいと思いますが、そんな事態には陥らないと信じたい。


・number

そのまんま、プログラムを実行する台数。

たぶんその台数に最適化される(実際、ここで1を指定したプログラムを4台で実行してもほとんど速くならない、こともある)

ただし、

ct, ft, mg, lu, is のプロセス数は2の乗数(2^*: 1, 2, 4, 8・・・ )
sp, bt のプロセス数はnの2乗(n^*: 1, 4, 9, ・・・)

である必要あり。


・class

計算規模を設定。

"S(ample)", "W(orkstation)", "A", "B", "C", "D", or "E"の7つから指定。

→の方ほど規模大。

例えばBTだと、S(12×12×12 繰り返し60)、A(64×64×64 繰り返し200)、C(162×162×162 繰り返し200)。

ただし、

DTにはC, D, Eが存在せず、ISにはEが存在しない。


つまり基本的に、9つの問題から選び、台数を指定して、7つ(-α)のクラスを選択すればいいってことだね!

簡単だね!

こんな解説必要ないよね!


とりあえず1、2、4、8台に対して全通りをコンパイルできる(はずの)suite.defを書いたので、使う人はコピペってみればちょっとくらい手間が省けるんじゃないかな!

成功すれば208ファイル分(9×4×7 - 2×2×7(sp, btには台数2.8が存在しない) - 3×4(DTにC,D,が存在しない) - 4(ISにEが存在しない) = 208)がコンパイルされるはず。

まぁ、私の設定だと156しかコンパイル成功してなかったけどね!(ほとんどD、Eクラスでのエラー)。

使い方はいつも通りこの辺 参照。



#================================================================

# config/suite.def
# This file is used to build several benchmarks with a single command.
# Typing "make suite" in the main directory will build all the benchmarks
# specified in this file.
# Each line of this file contains a benchmark name, class, and number
# of nodes. The name is one of "cg", "is", "ep", mg", "ft", "sp", "bt",
# "lu", and "dt".
# The class is one of "S", "W", "A", "B", "C", "D", and "E"
# (except that no classes C, D and E for DT, and no class E for IS).
# The number of nodes must be a legal number for a particular
# benchmark. The utility which parses this file is primitive, so
# formatting is inflexible. Separate name/class/number by tabs.
# Comments start with "#" as the first character on a line.
# No blank lines.
# The following example builds 1 processor sample sizes of all benchmarks.
ft S 1
mg S 1
sp S 1
lu S 1
bt S 1
is S 1
ep S 1
cg S 1
dt S 1
ft W 1
mg W 1
sp W 1
lu W 1
bt W 1
is W 1
ep W 1
cg W 1
dt W 1
ft A 1
mg A 1
sp A 1
lu A 1
bt A 1
is A 1
ep A 1
cg A 1
dt A 1
ft B 1
mg B 1
sp B 1
lu B 1
bt B 1
is B 1
ep B 1
cg B 1
dt B 1
ft C 1
mg C 1
sp C 1
lu C 1
bt C 1
is C 1
ep C 1
cg C 1
ft D 1
mg D 1
sp D 1
lu D 1
bt D 1
is D 1
ep D 1
cg D 1
ft E 1
mg E 1
sp E 1
lu E 1
bt E 1
ep E 1
cg E 1
ft S 2
mg S 2
lu S 2
is S 2
ep S 2
cg S 2
dt S 2
ft W 2
mg W 2
lu W 2
is W 2
ep W 2
cg W 2
dt W 2
ft A 2
mg A 2
lu A 2
is A 2
ep A 2
cg A 2
dt A 2
ft B 2
mg B 2
lu B 2
is B 2
ep B 2
cg B 2
dt B 2
ft C 2
mg C 2
lu C 2
is C 2
ep C 2
cg C 2
ft D 2
mg D 2
lu D 2
is D 2
ep D 2
cg D 2
ft E 2
mg E 2
lu E 2
ep E 2
cg E 2
ft S 4
mg S 4
sp S 4
lu S 4
bt S 4
is S 4
ep S 4
cg S 4
dt S 4
ft W 4
mg W 4
sp W 4
lu W 4
bt W 4
is W 4
ep W 4
cg W 4
dt W 4
ft A 4
mg A 4
sp A 4
lu A 4
bt A 4
is A 4
ep A 4
cg A 4
dt A 4
ft B 4
mg B 4
sp B 4
lu B 4
bt B 4
is B 4
ep B 4
cg B 4
dt B 4
ft C 4
mg C 4
sp C 4
lu C 4
bt C 4
is C 4
ep C 4
cg C 4
ft D 4
mg D 4
sp D 4
lu D 4
bt D 4
is D 4
ep D 4
cg D 4
ft E 4
mg E 4
sp E 4
lu E 4
bt E 4
ep E 4
cg E 4
ft S 8
mg S 8
lu S 8
is S 8
ep S 8
cg S 8
dt S 8
ft W 8
mg W 8
lu W 8
is W 8
ep W 8
cg W 8
dt W 8
ft A 8
mg A 8
lu A 8
is A 8
ep A 8
cg A 8
dt A 8
ft B 8
mg B 8
lu B 8
is B 8
ep B 8
cg B 8
dt B 8
ft C 8
mg C 8
lu C 8
is C 8
ep C 8
cg C 8
ft D 8
mg D 8
lu D 8
is D 8
ep D 8
cg D 8
ft E 8
mg E 8
lu E 8
ep E 8
cg E 8



«  | ホーム |  »

プロフィール

hamubane

Author:hamubane

たぶんライトノベル作家的なもの


Twitter

既刊情報

最新コメント

最新記事

カレンダー

08 | 2019/09 | 10
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -

月別アーカイブ

カテゴリ

ジャンルランキング

[ジャンルランキング]
日記
377位
ジャンルランキングを見る>>

[サブジャンルランキング]
その他
146位
サブジャンルランキングを見る>>

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR