Git セットアップ

Rubyを勉強するにあたって大抵の人はgitを使用しているので 今更ですが使って行こうと思います。ちなみに超初心者です。

gitの本買った事あるんですけど、今回はRubyと併用してなので飽きないでいけそうですw

おおざっぱに設定した箇所だけ書きます user.nameとかuser.emailとか当たり前の事は省きます

gitのコミットメッセージを入力するときに使用するエディタを設定しました

$ git config --global core.editor "subl -w"

sublime textでsublなんだけど MacVimの場合は"mvim -f"

そのあとrailsアプリのリポジトリを作成して

.DS_Storeなどうざいので管理対象から除外 他にもスワップファイルなど .gitignoreファイルに追加

# Ignore other unneeded files.
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret

こんなんでブログにしていいのかって感じだけど今日眠いのでこんくらいにします Git書籍で無料ですばらしいリソースがあったので
ぜひ
「Pro Git」

ターミナルからSublime text

rubyの環境作ってるときにそういえば設定していなかったので、
設定してしまいます。

↓これ公式ドキュメント
OS X Command Line – Sublime Text 2 Documentation

公式では

ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" ~/bin/subl

自分のはsublime text2ではなく3を入れているので
Sublime Text 2.appをSublime Text.appに変更

あとhomeディレクトリ下にbinがなかったので

mkdir bin

シンボリックリンク作成

ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" ~/bin/subl

PATHを追加

~/.bash_profileで追加する

PATH=$PATH:~/bin
export PATH

これで完了

subl .

こーすると今いるディレクトリ下がプロジェクトとして開かれる

まとめ
シンボリックリンクが作れて subl . がcommand not foundになってしまう場合は
ターミナルを再起動すればOK

Ruby 続き 超初級 環境構築

以前は主に Rubyのインストール、Ruby on railsのインストール、node.jsのインストールを行いました。

今回はサンプルwebアプリ作成まで。

まずホームディレクトリの下にRails用ディレクトリを作りました

$ cd ~  
$ mkdir rails_app  
$ cd rails_app  

rails new でアプリケーション名をsample_appにしてアプリケーションを作成していきます。   rails new はrailsコマンドで最低限必要なフォルダやファイルを自動的に作成してくれます。 mysqlを使うのでオプションにmysqlを指定します。

$ rails new sample_app -d mysql  
$ cd sample_app  
$ rails s  

Rails sはrails serverの略?まぁ一緒の意味でrailsの起動ですね

これがでたら正解

=> Booting WEBrick  
=> Rails 4.0.1 application starting in development on http://0.0.0.0:3000  
=> Run `rails server -h` for more startup options  
=> Ctrl-C to shutdown server  
[2013-12-05 21:12:48] INFO WEBrick 1.3.1  
[2013-12-05 21:12:48] INFO ruby 1.9.3 (2013-11-22) [x86_64-darwin13.0.0]  
[2013-12-05 21:12:48] INFO WEBrick::HTTPServer#start: pid=3831 port=3000  

ちなみにWEBrickというのはサーバーです 失敗したらエラーメッセージが出るみたいです。 失敗してないからわかりません。。

ここまできたらctrl + cで一旦railsを終了

ここでmysqlを起動して テスト用DBを作りました!

mysql> create database sample_app_development;

再度rails起動

rails s

あと補足でちょっと調べたら rails開発をしている時ずっとrailsサーバーを動かしているんだけどこのコマンド使うと便利!

rails server -d

これは、サーバー起動をバックエンドでやってくれるというもの。

ブラウザを起動して http://localhost:3000 と入力すると

「Welcome aboard」と出力されたら完了

僕の場合

f:id:issey1022:20140518234230p:plain

rootのパスワード設定していたので
railsのDB設定ファイルconfig/database.ymlにパスワードを追加

 12   default:&default  
 13   adapter:mysql2  
 14   encoding:utf8  
 15   pool:5  
 16   username:root  
 17   password:  
 18   socket:/tmp/mysql.sock   

rails server -dで自動化してしまったので

$ ps x | grep ruby  
$ kill -INT 番号

プロセス殺して

再度 

rails s

f:id:issey1022:20140518235519p:plain

おおーw

まとめ これからはrailsでばんばん開発できるわけだww

ネットワーク基礎的な事 ICMP編 & 初markdown記法w

今回はICMPについて書きまーす あとブログを全然書いた事がなかったのでmarkdown記法という書き方を初めて知りました!

設定をmarkdownモードに変えて書いてみます

ICMPとは

IP通信のエラーを通知したり、 あて先の機器と通信できるかなどを調べるために使われるプロトコル

略さず言うと (internet control message protocol)こうなる

pingコマンドでip通信できているかどうか調べると思いますが その時に実装されているプロトコルICMPです YMCAじゃないよ!

つまりIP通信をするソフトには必ずICMPが実装されている。

裏をかえすとIPを実装するときはICMPも必ず実装しなければいけない。

そういうことだそうです。

流れでいうと経路にあるルーターがIPパケットを受け取って次の送り先に転送できなかった場合、
そのパケットを廃棄してICMPメッセージを入れたパケットを送り先に届ける。
そのICMPメッセージが入ったパケットを見て送信先を変えたり、データサイズを変更するなどの対処するという流れになってます。

ここでエラーを返すのは主にルータに実装されているICMPです。

ICMPを実装した代表的なコマンド

これが有名なpingコマンドですね
pingコマンドの役割は
「エコー要求」「エコー応答」です。

例えば目的のサーバーにpingコマンドを打つこれがエコー要求ですね。 正常に通信している場合応答メッセージが返ってくる。これがエコー応答です。

iMac:~issei$ping google.ne.jp
PING google.ne.jp (173.194.38.127): 56 data bytes
64 bytes from 173.194.38.127: icmp_seq=1 ttl=56 time=3.697 ms
64 bytes from 173.194.38.127: icmp_seq=2 ttl=56 time=3.422 ms
64 bytes from 173.194.38.127: icmp_seq=3 ttl=56 time=3.144 ms
64 bytes from 173.194.38.127: icmp_seq=4 ttl=56 time=3.631 ms

あとはtracerouteコマンド このコマンドはあて先までの経路(通過するルーター)を調べるためのコマンドですね。

実行するときはpingと一緒でtracerouteの後にipアドレスかホスト名を記入する

実行すると指定したサーバーに対してエコー要求メッセージを TTLを1増やしながら送り続ける。 相手に届いた時点で応答メッセージが返ってくるのでその間ずっと送る。

iMac:~ issei$ traceroute www.google.ne.jp
traceroute: Warning: www.google.ne.jp has multiple addresses; using 173.194.117.159
traceroute to www.google.ne.jp (173.194.117.159), 64 hops max, 52 byte packets
1 192.168.11.1 (192.168.11.1) 0.650 ms 0.305 ms 0.248 ms
2 softbank219188194209.bbtec.net (219.188.194.209) 2.309 ms 15.743 ms 5.226 ms
3 softbank219188194222.bbtec.net (219.188.194.222) 2.336 ms 2.064 ms 2.251 ms
4 softbank219188194181.bbtec.net (219.188.194.181) 2.534 ms 2.601 ms 2.275 ms
5 * * * 6 softbank221111163162.bbtec.net (221.111.163.162) 3.254 ms 3.059 ms 5.173 ms
7 209.85.241.90 (209.85.241.90) 4.745 ms 3.434 ms 3.954 ms
8 72.14.233.219 (72.14.233.219) 4.061 ms 4.525 ms 4.389 ms
9 nrt04s09-in-f31.1e100.net (173.194.117.159) 3.708 ms 3.824 ms 3.870 ms

TTLとはパケットの有効期間を表す数値でルーターを1回経由する毎に1減少する。 0になった時点で次に転送されずそのパケットは廃棄される。

パケットが廃棄されると時間超過メッセージが返ってくるので、 PC側は超過メッセージを送ってきたIPアドレスとかかった時間を順次表示してくれる。

悪用編

ICMPの危険性について見てみます

pingコマンドの説明をしましたがサーバーに対してpingコマンドで大量のパケットを送りつけて、 サービスを停止してしまうというのが実際に起こっている。 macだとデフォで13回かな?winだと4回 macの場合GUIで設定しなくても送信回数を決めて送信できるらしい

この攻撃はpingフラッドまたはpingストームなどと呼ばれる。

さらに悪意があると踏み台サーバーを使い身元を隠して攻撃するみたい 不正操作するときによくあるはなしだね。

smurfアタックっていうらしい

この場合送信元のPCから踏み台に向けてpingを打つみたい 送るパケットの送信元ipアドレスを攻撃対象のipアドレスに書き換える そうすると応答がすべて攻撃対象のpcへ返される。

ただファイアーフォールの設定で送信元ipをフィルタリングすれば回避できる手段もある。

サービス不能になることを考えるとICMPを無効にする場合もある。

まとめ ぜんぜん使ってないけどww

名前 使い勝手 評価
markdown記法 めっちゃいい ★★★★★

初めてのデータセンター

昨日会社の人に行きたいです!っていって

代官山にあるデータセンター初めて行ってきました

 

業務に全く関係ないけど社会科見学状態w

よく画像で載っているまんまでした

 

昨日行ったとこはセキュリティーはそこまで厳しくなかったんだけど

場所によっては入場するときと退場するときに体重が増えていたら出してもらえないとこもあるらしい

 

昨日はサーバー構築はしなかったんだけど

 

IPMIのIPアドレスサブネットマスクの設定

レイド1の設定

をさせてもらいました

 

IPMIのIPアドレスサブネットマスクの設定はVIOSから行いました。

AdvancedIPMI Configuration Set LAN Configuration を選択し、IPMI 専用ポー トの IP アドレス、サブネットマスクを設定しました。

あとoptionをstaticに変更。

 

レイドの設定はIPアドレスの設定が終わったらctrl + Alt + Delで終了した後

 

MegaRAIDのユーティリティを起動するためctrl + h で起動して設定しました。

 

設定メニューの

Configuration wizard から Clear configuration ですべての論理ドライブの構成情報を削除した後に

new configuration で物理ドライブのすべてのデータを削除しました。

 

top画面戻って今回追加したHDDが表示されました。

 

まとめ

ほんとは画像載っけたかったけど載せていいかわからず断念

また機会があれば行こうと思います!

ネットワーク基礎的な事 MACアドレス編

今回はコピペはやめます 笑

 

まずMACアドレスとは

ネットワークでやりとりするデータに書かれている情報です。

う〜んしっくりこない

どの端末からどの端末に送るという情報を示している。

 

IPアドレスと何が違うかというと

IPアドレスとの違いを簡単にわかりやすく書くと

LAN内だとMACアドレスで識別してインターネットだとIPアドレスで識別する。

 

つまりデータをPC AからPC Bに送りたい場合PC A側のルーターがPC BのIPアドレスの情報を見ながらデータが転送されてPC Bのルーターを探す。

ルーターにたどり着いたらそこからはLANの通信なのでPC BのMACアドレスを探して届けるという流れっす。

 

MACアドレス確認方法

mac marvericksの場合

左上のアップルマーク→このmacについて→詳しい情報→システムレポート→左メニューから「ネットワーク」を選択、右側を「AirMac」にし、その下に表示されている「MACアドレス」がWi-Fi(Wireless)のMACアドレスです

 

windowsは知らないのでググって下さい(笑)

 

MACアドレスを見てもらうとわかるのですが8ビット毎にハイフンやコロンなどで区切ってある16進数で表記されています。

 

変換して表記してあるだけで正体は48ビットの数字列です。

 

最初のビットはI/Gビット

通信方法を表しています。

ちなみにI/Gビットは先頭から数えて8ビット目にあたる

なぜかというと

イーサネットの通信で最後の最下位ビットから最上位ビットに向けて読んでくからです。

 

2番目に読み込まれるのがG/Lビット

ここはあまり大切ではなさそうなので割愛します。

 

また前半の24ビットの事をOUIと呼びます

OUIは製品を提供するベンダーごとにIEEEが割り当てます。

申請するのにだいたい16万くらいかかります。

 

そんでベンダーが後半の24ビットを製品ごとに割り当てていくことで

ユニーク性が保たれているみたいです。

 

OUIを一つ取得すると、後半の24ビット分である1677万7216個という数の製品に個別のMACアドレスを割り振れることになります。

これを使い切ってるのは米ゼロックスや米シスコシステムズなどみたいですね。。

 

自分のPCでOUIを検索

OUI検索

リンク先の「Search for:」にOUIを入力すればベンダーが出ます

自分のPCのMACアドレスを検索してみたら

あたりまえだけどAPPLEでしたw

 

あとMACアドレスは起動時に設定するので書き換えも可能

ただトラブルの元なので書き換えないのが望ましいみたいです。

 

まとめ

つまりMACアドレスは端末を特定するための情報ですね

ただ注意することもあるが。。

 

 

 

ネットワーク基礎的な事 TCP編

 

昨日IPの事を書いたので

今日はTCPの事書きま〜す

 

まずTCPとは

「接続と切断」、「通信制御」、「アプリケーションとの仲介」という三つの機能に分かれています。

ネットワーク層のIPとセッション層以上のプロトコル( 例:HTTP、FTPTelnet ) の橋渡しをするかたちで動作してます。

簡単に説明するとIPネットワークを介して確実にデータをやりとりするためのプロトコルです。

 

IPネットワークの仕事は、パケットを通信相手に届けること。ただ通信相手にパケットが抜けなく正しい順番で届くことまでは保証していない。

状況によってはネットワークが混雑して、送り出したパケットの一部が届かなかったりする。また、転送経路が変わってしまうこともあるので、送り出した順番通りにデータが届くとは限らないです。

 

TCPはWebブラウザとWebサーバーの間、メーラーとメール・サーバーの間など、IPネットワークを介してアプリケーション同士がきちんとデータをやりとりする必要がある場面で利用されている。

データにTCPヘッダーを付けてTCPパケットを作り、それをIPパケットに収めて相手に送っている。

 

接続と切断とは

通信相手を呼び出して相手と1対1で通信できる仮想的な通信路を確保すること。通信路は「コネクション」と呼ばれ、ほかの通信にじゃまされずに相手との間で、データを確実にキャッチボールできるようにする。このコネクションを確立する手順が「3WAY(スリーウェイ)ハンドシェーク」である。。

 

返事が無ければ再送する

パケットが失われた場合、パケットが失われたことを見つけ出して、失われたパケットを再送する必要がある。そこでTCPスタックは、送信相手からTCPパケットが届いたという確認を送り返してもらう送ったのに返事が来なければ届いていないとみなして、TCPパケットを送り直す。

 

通信制

受信側から転送ペースを調節する

TCPスタックは、受け取ったデータをいったん受信バッファに溜めて届け先となるアプリケーションに引き取ってもらう。際限なくデータが転送されてくると、受信バッファからデータがあふれてしまう。

 そこでTCPでは、連続して受信できるデータ量を「ウインドウ・サイズ」というバイト単位の値でお互いに通知し合うことになっている。一挙に大量のデータが届いたり、送信先のアプリケーションが受信バッファからデータを引き取るのが遅れると、受信バッファの空きが小さくなる。通知するウインドウ・サイズを空きに応じて変更することで、データを受信しきれなくなることを防ぐわけだ。

 

受信側から再送を要求する

まずは「高速再転送」から。パケットの抜けに気付いた受信側が、抜けたデータの前のパケットの確認応答を、正規のものを含め合計3回以上連続して送る。送信側が確認応答を連続して受信したら、再送要求だと判断して、ただちにパケットを再送する。

 

TCPスタックが高速再転送で再送を要求したときに、万一相手が高速再転送に対応していなくいと、相手はわからずに時間切れを待って再送する。効率は上がらないが不具合も起こらない。

 

もう一つのSACK(サック)は、途中のパケットが抜けている場合、受信側が送信側に抜けたパケットを通知する方法だ。飛び飛びに受信したデータを通知することによって、抜けているデータがわかるようになっている。送信側はその内容を見て、抜けている部分だけを送り直す。SACKと高速再転送を併用すれば、受信側が抜けたデータだけ直ちに再送してもらえる。

SACKを使用するときは、TCPコネクションの確立時に双方のTCPスタックの間でSACKを使うかどうかをあらかじめ確認しておく。受信したデータを正確を伝える情報は、TCPヘッダーのオプション部分に書き込む。

SACKはすべてのTCPスタックで使えるわけではない。ただし、Windows 2000以降のWindowsで使えるなど、一般化しつつある。

 

アプリケーションとの仲介

 適切なアプリケーションをポート番号で見分ける 

TCPは、受け取ったデータをどのアプリケーションへ渡せばいいかを判断するために、TCPヘッダーに書かれた「ポート番号」を使う。ちなみにTCPヘッダーにはあて先と送信元のポート番号が書かれている。

TCPはこのあて先ポート番号を見て、受信データをどのアプリケーションに渡すかを判断します。

例えば、あて先ポート番号が「80番」ならWebサーバー、25番だったら電子メールの送信に使うSMTPサーバー、23番ならTelnetサーバー

 

アプリケーションが番号を宣言

ここで誤解しやすいのは、アプリケーションやサーバー・ソフトとポート番号の関係です。ポート番号とアプリケーションの関係はあらかじめ決まっているわけではなく、アプリケーションが起動時などに自分で使うポート番号をTCPに登録します。

 したがって、80番ポートあてに届いたデータでも、80番ポートにWebサーバー・ソフトが登録されていなければ、TCPはWebサーバー・ソフトにこのデータを渡さない。80番ポートを利用するアプリケーションがない場合は、「到達不可能」というメッセージをクライアントへ返すだけである。逆にWebサーバー・ソフトを8080番ポートに割り当てて稼働させれば、TCPは8080番ポートあてに届いたデータをWebサーバー・ソフトに渡す。

 つまり、そのコンピュータあてに80番ポートを指定したTCPセグメントが届いたとき、そのセグメントのデータをWebサーバー・ソフトがほしいなら、Webサーバー・ソフトはTCPに対してあらかじめ80番ポートを使いたいと宣言しておかなければなりません。

 ただ、Webサーバーのような重要なサーバー・ソフトは、世界中で共通のポート番号を使わないと大きな混乱が生じてしまう。Webブラウザなどのクライアント・ソフトが、決まったポート番号(通常は80番)を想定してTCPコネクションをつなぎにいってしますから。そこで、TCP/IPの世界では、0~65535番までのポート番号のうち、1023番までをサーバー・ソフト専用の予約領域として、サーバー・ソフトの種類別に割り当てている。

 

仲介役の実体は「ソケット」

アプリケーションは、TCPで相手と通信したいとき、まずsocket(ソケット)というプログラムを呼び出してソケットを生成する。そして、このソケットに対して、サーバー・ソフトならbind(バインド)という命令を使って自分が待ち受け用として使いたいポート番号を指定する。Webサーバー・ソフトなら、ここで80番ポートを指定することになる。

一方、クライアント・ソフトはconnect(コネクト)という命令を呼び出し、通信相手のIPアドレスとポート番号を指定して、TCPコネクションを確立させる。すると、ソケットがTCP/IPソフトに指定された通信相手とのTCPコネクションを確立するように要求し、実際に確立される。TCPコネクションが確立したあとは、アプリケーションはソケットに対してデータを送れば、通信相手にデータが届き、ソケットから受信データを受けとる。

 

まとめ

TCPは難しいですね

あと最近まったく技術ブログというよりはコピペしてまとめたブログになっているので

気をつけます>_<