Quantcast
Channel: IT忘備録・メモ書きと日記
Viewing all 146 articles
Browse latest View live

vi,vimエディタ

$
0
0

linux環境のコマンドラインの簡易エディタviエディタ。


最初は多少とっつきにくかったが直ぐに慣れる。そして、慣れれば便利に感じる。


以降、コマンドのメモ書き。


コマンドキーワードがうるおぼえの場合、:help キーワードが便利


:%d ファイル内を全てからにする。
yy:1行コピー
3yy:3行コピー
p:貼り付け

u:undo

Ctrl+r:redo

ggVG:すべて選択



○移動系

refs:vimの使い方 - 忘備録(チラシの裏

l カーソルを右に一文字移動
h カーソルを左に一文字移動
j カーソルを下に一文字移動
k カーソルを上に一文字移動
gg カーソルをファイルの先頭に移動
0 カーソルを行頭に移動

^ カーソルを行の先頭へ

:$ カーソルをファイルの終了行へ

$ カーソルを行末に移動
H カーソルを画面一番上の行に移動
M カーソルを画面中央の行に移動
L カーソルを画面一番下の行に移動
+ 次行の先頭へ移動
- 前行の先頭へ移動
% 対応する括弧へ移動
W 次の単語へ移動
w 次の単語へ移動
e 次の単語(末尾)へ移動
b 前の単語へ移動
B 前の単語へ移動
Ctrl+f 1画面分下に移動
Ctrl+b 1画面分上に移動
Ctrl+d 半画面分下に移動
Ctrl+u 半画面分上に移動

J 行末の改行を削除


?G:?行目にジャンプ

gg:先頭行にジャンプ

G:最終行にジャンプ

:??? : ???行目にジャンプ

: set number : 行番号を表示

%:カッコ"(",")"カーソルたっている場合、対応するカッコにジャンプする。

f(文字):文字までジャンプ。続けて";"で次の文字までジャンプする。(同一行限定?)

*:カーソルがあたっている単語を下方向に検索する。

#:カーソルがあたっている単語を上方向に検索する。


○行末から次の行の先頭、行頭から前の行の行末へ

初期設定だとh,lでこの移動ができなかった。「:set whichwrap=b,s,h,l,<,>,[,],~」を実行したらできるようになった。面倒なので、$HOME/.vimrcに書いておく。

refs:vimrcのwhichwrapおぷしょんについて

 


○検索
n:次の検索

N:前の検索


デフォで大文字小文字を区別している。区別したくない場合、検索文字の後に¥cをつける。もしくは:set icを実行。元に戻すときは:set noic。icはignorecase


refs:linuxでviで大文字小文字を区別しないで・・・


○すべて削除

1G d G


%HOME/.viminfo:viの利用履歴が出力されるファイル。

vimtutorコマンドでvimのマニュアルが見れる。


コマンドモードにしてファイル名を開く。

:e ファイル名


置換。

:s/abc/ABC:abcをABCに一つ置換する。(対象行はカーソルがあたっている行のみ)

:s/abc/ABC/g:対象行のabcは全てABCに置換する。

:sa


v:ビジュアルモードになる。ビジュアルモードである範囲を選択してyでコピーでpで貼り付け。

Ctrl+V:矩形選択する。

Shift;V:行選択する。

(合わせ技:ggで先頭に移動し、Shift+Vで行選択し、Gで最終行まで移動すると全選択になる。

vi,vimビジュアルモー


 ○.vimrc

$HOME/.vimrcファイルを作成し、そこにvimの初期設定を設定できる。

refs:おすすめのvim設定


○レコーディング機能

csvファイルの項目の入れ替えとか

refs:recording機能で単純作業を自動化する


○タブ

:tabnew tabname:新規タブを開く

:gt : タブの移動

:[number]gt

:tabclose[number]:タブを閉じる

:tabonly:可憐とタブ以外を閉じる


refs:vimのタブページ機能を使ってみたのでメモ

 


○コマンド、シェル

vim実行中に:!コマンドで一時的にシェルを実行できる。例えば「:! pwd」。また、「:sh」でシェルを呼び出し、vimの編集に戻りたくなったらctrl + Zを押せばいい。これはvimをバックグラウンドの状態にしてシェルを一時的に呼び出している。

「:r!date」:dateコマンドの結果をファイルに書き込む

「:w !ls -l」:ls -lの結果をvim上で出力する


refs:vim外部コマンドの実行


○ヤンクとクリックボード

macの場合したのrefsを参考にやった

refs:[mac]vimでyankでクリップボードにコピーする


○その他

q: コマンド履歴を見る。で、実行したいコマンドにフォーカスをあててCtrl + Cでコマンド実行できる

q?:なんかよくわからん一覧

refs:履歴を表示、実行する


vi・vim講座

viエディタ上に行番号表示

viコマンド(vimコマンド)一覧(検索・置換)

viキー操作メモ

・vimエディタの使い方



ubuntuめも

$
0
0

ubuntuのメモ書き

■システム一覧
ubuntuはdebian系で、デフォではchkconfig,yumが入っていない。chkconfigの代わりにsysv-rc-confがある。apt-get install sysv-rc-confで、sysv-rc-confをインストール。
(apt-get update, apt-get upgradeしないとsysv-rc-confはインストールできなかった)

$ sudo sysv-rc-conf --list

refs:chkconfigとsysv-rc-conf

AWS2

$
0
0

refs:aws

■Amazon VPC(Virtual Private Cloud)
仮想サーバや各種サービスをプライベートなネットワークで接続
refs:
Amazon Virtual Private Cloud (VPC) ドキュメント | アマゾン ウェブ サービス(AWS 日本語
senario for amazon vpc
メジャーな4パターンある

○ネットワークACL(Access control list)はサブネットのinbound,outboundトラフィックを制御するフィイアウォールとして動作するセキュリティのオプションレイヤ
refs:ネットワークACL

○VPCのセキュリティについて。security groupとnetwork ACLの違い
refs : vpcのセキュリティ
セキュリティグループとnetwork aclの違いについて。また、最後の図がvpc,virtual private gateway,internet gateway,router,routing table,network ACL,subnet,security group,instanceの関係性をシンプルに表していて解りやすい。
AWS Identity and Access Managementを使用すると、組織内の誰がsecurity groupやnetwork ACLを作成管理できるようにするかをコントロールできる。例えば、ネットワーク管理者だけにその権限を与え、インスタンスの起動のみが必要な作業員には付与しないようにするとか

○route tableは、ネットワークの経路を判断する際に使用されるルートと呼ばれる一連のルールが含まれる。vpcの各さぶねっとをルートテーブルに関連づける必要がある。サブネットのルーティングはこのテーブルによってコントロールされる。・・・
ref:ルートテーブル

○internet gateway
refs
・vpcとインターネットゲートウェイをセットアップする
・インターネットゲートウェイをvpcに追加する
・インターネットからvpc上にec2接続

■slideshare
refs : 20120803 Amazon VPCを極める
・SPOF(Single point of failure)単一障害点:
・heartbeat:ネットワーク上で、PCやネットワーク機器自身が正常に動作している事を外部に知らせるための信号
・ENI(Elastice network interface):サブネット間の通信は禁止。ウェブIPアドレスとMACアドレスを持つNICそのもの。サブネット間にまたがってインスタンスを配置できる。

refs:Amazon VPCトレーニング-VPCの説明

refs : マイスターシリーズ、amazon VPC VPN & Direct connect
・VPN通信プロトコルをBGPかStaticから選択

refs : [AWSマイスターシリーズ] Amazon Virtual Private Cloud (VPC)
・Classic EC2/Default VPC/通常のVPCの違い
・各subnetはroute tableを持っている。設定を変更する事でデータの流れを制御可能。public subnetのroute table,private subnetのroute tableの例が書いてある。public subnetの方はIGWへのルーティングがあるのでインターネットへアクセス可能。
・private  subnetから外部のインターネットへアクセスしたい場合、NATが必要。NAT Instanceを使う事でGlobal IPを設定する事なく外部へのアクセスが可能。AWSにNAT用のEC2 AMIがある。private subnetのroute tableにNAT  Instanceの設定行を追加する必要がある。
・EC2 Seruciry GropuとVPN Security GroupとNetwork ACL。Instanceレベルとsubnetレベルのin/outのアクセス制御が可能。これら3つのイメージがしやすい図
・Elastic Network Interface。VPC上の仮想ネットワークインターフェース。ENIはprivate IP,MACアドレス,Elastice IP,security groupと紐付け可能。
・VPN,VPN Gateway,Customer Gateway。VPN Connectionを作成後、Configurationファイルをダウンロードし、オンプレのVPN routerの設定を実施する
・VPCを使ったときに料金について
・Direct Connetについても書いてある

refs : Amazon Virtual Private Cloud (VPC) by Default
・vpc for everyone
・default VPNについて。常にVPCに属する、消さなければ。という意味でvpc for everyone。これがない場合、かつ、何もVPCを作らないとClasic EC2になる
・VPCに出来てec2-classicには出来ない事色々
・default VPCやdefault subnetを削除した場合、再作成は要カスタマサポート
・新APIは、VPC内のDB security groupを取り扱わない

■inbound,outbound,destination,source
vpcのsecurity group,network ACLでは、inbount,outboundを設定する。inboundはsource,outboundはdestination。inboundは外から入ってくる、outboundは外へ出て行く。

■IAM(AWS Identity and Access Management)
AWS Identity and Access Managementを使用すると、組織内の誰がsecurity groupやnetwork ACLを作成管理できるようにするかをコントロールできる。例えば、ネットワーク管理者だけにその権限を与え、インスタンスの起動のみが必要な作業員には 付与しないようにするとか 。詳細は「amazon vpcのリソースに対するアクセスの制御

refs:IAM


■用語
・ENIs(Elastic Network Interfaces):VPC上で実現する仮想ネットワークインタフェースを複数持てる機能。インスタンスによって、割り当てられる数が異なる
・NACL(Network Access Control):個々のsubnetごとにアクセス制御が可能。Inbound,Outboundに対して設定が可能。

■本(実装ガイド)
・EBSのマウンド場所は、linuxなら/dev/sdfから/dev/sdp/

■EBSディスクの増設
・rootボリューム一つのとき
[root@ip-172-255-255-203 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.3G  6.6G  17% /
tmpfs           298M     0  298M   0% /dev/shm
[root@ip-172-255-255-203 ~]# fdisk -l

ディスク /dev/xvda1: 8589 MB, 8589934592 バイト
ヘッド 255, セクタ 63, シリンダ 1044
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

[root@ip-172-255-255-255 ~]# ls -l /dev/sd*
lrwxrwxrwx 1 root root 5  2月  8 04:57 2014 /dev/sda1 -> xvda1
[root@ip-172-255-255-255 ~]#

・consoleからEBSを新規作成する。このとき、Availability zoneはマウントするec2と同じ場所にする。snapshotはno snapshotoにしてみた。できたら、ec2に/dev/sdfにマウントする。再度sshで接続して確認

[root@ip-172-255-255-203 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.3G  6.6G  17% /
tmpfs           298M     0  298M   0% /dev/shm
[root@ip-172-255-255-203 ~]# fdisk -l

ディスク /dev/xvda1: 8589 MB, 8589934592 バイト
ヘッド 255, セクタ 63, シリンダ 1044
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000


ディスク /dev/xvdf: 5368 MB, 5368709120 バイト
ヘッド 255, セクタ 63, シリンダ 652
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

[root@ip-172-255-255-203 ~]# ls -l /dev/sd*
lrwxrwxrwx 1 root root 5  2月  8 05:06 2014 /dev/sda1 -> xvda1
lrwxrwxrwx 1 root root 4  2月  8 05:06 2014 /dev/sdf -> xvdf
[root@ip-172-255-255-203 ~]#

fdisk,lsでは追加ディスクは見えるけど、dfではまた。マウントする必要がある。

まずはファイルシステムの作成。mkfsを実行すると、ディスクの内容は全て失われるから注意
# sudo mkfs -t ext4 /dev/sdf
  mke2fs 1.42.3 (14-May-2012)
  Filesystem label=
 
マウント
# sudo mkdir /ebs1
# sudo mount /dev/sdf /ebs1/

確認。おっけ
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.3G  6.6G  17% /
tmpfs           298M     0  298M   0% /dev/shm
/dev/xvdf       5.0G  138M  4.6G   3% /ebs1

■ディスク容量の増量
増量したいebsのスナップショットを作成する。スナップショットから増量したebsを作成。使用中のebsをデタッチ。増量したebsをアタッチ。ec2を起動。最後にsshで接続して増量した未フォーマット部分の容量を使えるようにresuze2fsでファイルシステムを再構築する必要がある。

$sudo resize2fs /dev/sda1

再構築できたかどうかは前後でdfコマンドを実行し確認できる。

■DNS,route53の設定
DNS変更後はすぐに更新が反映されない。一日待ってちょっと設定が間違っていたとか非効率な結果にならないために、正しく設定されたかどうかをnslookupで確認できる。

○お名前ドットコムのDNS,nslookup,dig
例えば、hoge.infoというドメインを取得していてwww.hoge.infoというサブドメインは設定済み。新規にhoge.hoge.infoサブドメインを追加したい。お名前どっとこむを使っている場合、Aレコードでaiueo.hoge.infoをIPで追加する。「転送用のネームサーバー(01.dnsv.jp / 02.dnsv.jp / 03.dnsv.jp / 04.dnsv.jp)に変更する」にチェックを入れて、設定を更新する。これで完了した訳だけど、aiueo.hoge.infoが本当にただしいかどうかは反映されるまではわからない。なのでnslookupで確認する。もしくはdig

$nslookup
> aiueo.hoge.info
Server:        192.168.13.1
Address:    192.168.13.1#53

** server can't find aiueo.hoge.info: NXDOMAIN

アクセス先のネームサーバを変更する。01.dnsv.jpはおなまえドットコムのネームサーバ。
> server 01.dnsv.jp
Default server: 01.dnsv.jp
Address: 157.7.32.53#53

もう一回
> aiueo.hoge.info
Server:        01.dnsv.jp
Address:    157.7.32.53#53

Name:    aiueo.hoge.info
Address: ***.***.***.31

今度は成功してIPアドレスがかえってきた

○dig
nslookupはdnsからの応答を整形して表示するが、digはなるべくそのまま表示してくれる。なので、nslookupより詳細な情報を表示してくれるから解る事が多い。

$ dig aiueo.hoge.info
$ dig hoge.info #サブドメインなし

refs : digコマンドとnslookupコマンドの違いとは?
 
○route53を使う。
上ではおなまえドットコムのDNSを使ったけど、route53のdnsも使用できる。route53でcreate Hosted Zoneを押し、Domain nameにhoge.infoを入力しcreateする。これでhoge.infoのドメインの行が一行でき、delegation setが4つ表示される。これがroute53のネームサーバ。これについてはまた後で。追加されたhoge.infoにチェックを入れ、Go to record setをおす。TypeがNSのレコードが4つ(さっきのdelegation set。name serverの略でしょう)、SOAがhoge.infoの行がある。create Record setを押し、Aレコードを追加してみる。サブドメインとIPアドレスを入力してcreateを押せばAレコードができる。これでroute53の設定を終了したけど、この段階ではルートDNSから辿れないから設定がインタネット側で見れない。なので、route53のDNSサーバ群をルートDNSサーバから辿れるように構成する。route53のサーバ群は前に話したdelegation setの4つ。これらをレジストラに申請すればルートDNSサーバから辿れるようになる。おなまえドットコムの場合、ネームサーバの変更画面で「他のネームサーバを利用」をチェックし、プライマリネームサーバとセカンダリネームサーバ、3、4に入力して適用する。これでおけ。すぐには反映されないので、しっかりとnslookupで確認しておく事。
ちなみにroute53のネームサーバを他のネームサーバを利用から登録すると、おなまえドットコムで設定しているDNSレコードの設定は書いていても全て無効になるので注意・・・


■s3とのでーたのやりとり
s3とは標準的なHTTPで通信。それに対してec2は通信プロトコルに制限はない。write proxyパターンは直接s3にアップロードする訳でなく、ec2を経由してs3に転送する。ec2からs3はhttpだけど高速な専用線で通信できる。
クライアントとec2間はftp,scp,httpなどがあるけど、udpを使うと高速かできる。そのためのテクノロジーはasperaやtsunami UPDなどがある。tsunami udpはunix系のソフト

■security groupのssh
ec2のsshのsecurity groupのsourceを0.0.0.0/0と全て開いておくのが心配な場合、今使用している自分のグローバルIPを調べて、グローバルIP/32(Custom TCP rule)にすればいい

■ec2起動時にinitializeで止まる。起動エラーが出る。
root ebsからsnapshotを作成、そのsnapshotからamiを作成、そのamiからlaunchでec2を作成。このec2作成後、start時にinitilize状態で停止し、sshで接続しようとしてもできない状況が発生した。ec2のgey system logを見ると、下のkernel panicが発生している・・・
XT3-fs: sda1: couldn't mount because of unsupported optional features (240).:
EXT2-fs: sda1: couldn't mount because of unsupported optional features (240).
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)

availabitiy zoneの指定などもあっているはず・・・調べてみたら、ebs volumeのsnapshotからami imageを作成する時にkernel IDをUse defaultではなく何か指定する必要があるらしい。
refs:ebs snapshot copyしたものを使ってamiを作成、起動してみる

■ec2のkeypair変更
aws console画面からkeypairを変更しようとしてもできなかったので(自分が知らないだけでもしかしたらできるかも)、ec2のkeypair変更方法について(自己責任でお願いします)。他のec2を変更したいkeypairで作成する。このec2インスタンスの$HOME/.ssh/authorized_keysファイルを元の同じファイルに上書きすればいい。ただ、今これを試してみてaws console画面で見ると、key pair nameは変更前のkey pairのまま…時間が経ってかわってくれるといいんだけど、変わらないなら一人で使うインスタンス以外はやらないほうがいい。

macにmysqlをインストール

$
0
0

macにmysqlをインストール。下のrefs参考にした。インストーラ使っている割には少し面倒・・・インストール後、mysqlコマンドだけでログインできる。パスなし、ユーザは何でも(anonymouseでも)ログインできてしまう・・・

refs : mysql5.6のインストール 。mac os x 10.8

インストールした状態では、mysqlコマンドは使えるけどmysqladminコマンドとかは使えない。なので環境変数PATHにmysqlのパスを追加する。~/.bash_profileファイルに下の一行を追加してsourceコマンドを実行する。

export PATH=$PATH:/usr/local/mysql/bin

これでmysqladminコマンドが実行できるようになったので、とりあえずrootのパスを設定する

mysqladmin -u root password 'パスワード文字列'

refs:mac osへのmysqlインストール方法

これでrootはパスありでないとログインできなくなったけど、他のユーザというかユーザなし(anonymous)でもフリーパス状態。

[追記]
どうやら
mysql_secure_installationを実行する事により、上の問題が解決できる。対話方式で初期設定をしたり、rootパスを決めたり、anonymousの認証を不可にしたりとか。
本当はmysqlのインストール直後にする事を想定しているんだろう。
refs
mysqlのインストール
ぷちwiki mysql_secure_instalation

■macのmysqlの状態確認、停止、起動とか

refs:mac os Xに・・・

mysqladmin,mysql,起動のためのmysqld_safeなどのコマンドは、/usr/local/mysql/binにある

$ which mysql
/usr/local/bin/mysql
bin $ which mysqladmin
/usr/local/mysql/bin/mysqladmin
bin $ which mysqld
/usr/local/mysql/bin/mysqld
bin $ which mysqld_safe
/usr/local/mysql/bin/mysqld_safe

bc、2,10,16進 ネットワークについて,クラスA~C,サブネット,CIDR,NAT,IP

$
0
0

bcコマンドについて

はじめに。2の8乗、16乗、24乗、32乗
$ irb
irb(main):001:0> 2 ** 8
=> 256
irb(main):002:0> 2 ** 16
=> 65,536
irb(main):003:0> 2 ** 24
=> 16,777,216
irb(main):004:0> 2 ** 32
=> 4,294,967,296
irb(main):005:0>

ibaseは入力となる進数の設定、obaseは出力となる進数の設定。初期設定は両方とも10進数
下は2進数から10進数の例。

aws $ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
ibase=2
11111111
255
00000001
1
01000000
64
01111111
127
10000000
128
10111111
191
11000000
192
11011111
223
Daws $

あとechoの結果をbcに渡す事で変換も出来る
 $ echo "obase=10; ibase=2; 11011111" | bc
223

refs
bcコマンド変換
bcコマンド変換2

ICANNがIPアドレスを割り当てるのにクラスA,B,Cとある。第1オクテットはそれぞれ、クラスAは0から始まり、クラスBは10から始まり、クラ スCは110から始まる。下のbcコマンドの結果より、クラスAは1~127、Bは128~191、Cは192~223だと言う事がわかる。
すべて0はネットワークアドレス、全て1はブロードキャスト。クラスによりネットワーク番号を示す部分のビット数が違う
ネットワーク/ホスト部のビット数は、クラスAが8/24、Bが16/16、Cが24/8。なので、ネットワーク数と保有できるホスト数については、

クラスA
第1オクテット:「1~127」(10)「00000001~01111110」(2) 0から始まるルール。01111111は、ループバックアドレスで自己診断用のアドレス
ネットワーク数:127 (2 ** 7)
ホスト数:16777214(2 ** 24 -2)

クラスB
第1オクテット:「128~191」(10)「10000000~10111111」(2)10から始まるルール
第2オクテット:「0~255」
ネットワーク数:16384 (2 ** 12 )
ホスト数:65534 (2 ** 14 -2)

クラスC
第1オクテット:「192~223」(10)「11000000~11011111」(2)110から始まるルール
第2オクテット:「0~255」
第3オクテット:「0~255」
ネットワーク数:2097152(2 ** 21)
ホスト数:254(2 ** 8 -2)

○サブネット
IPアドレスを効率的に活用するためにサブネットがある。
IPアドレスはネットワーク番号とホスト番号から成り立っているが、これをサブネットに分割するため、ホスト番号のビットをさらにわけて、サブネット番号とホスト番号にする。それにより「○番ネットワーク内、▲番ネットワークの☆番ホスト」という形にする。例えば、172.16.0.0のクラスBのネットワークがあり、これの干すと番号16bitをさらにサブネット6bit、ホスト10bitにする。この状態でサブネット1番、1番ホストのIPアドレスは172.16.4.1、2進数は下のようになる
10101100 00010000 00000100 00000001

また、クラスCのネットワークを考えた場合、ホスト部は8bitなので、これをサブネットとホストで共有できる。結果、サブネット数は0から256の8パターン、それと反比例してホストの数は254台から0台になる。

○サブネットマスク
例えば第1オクテットが10から始まっていた場合、これはクラスBでネットワーク部が16bit,ホスト部が16bitとは決められない。上にも書いた通り、サブネットがあるわけだから。このため、IPアドレスを見て、ネットワークとホスト部を一目で理解するために必要なのがサブネットマスク。
先ほどの例「172.16.0.0のクラスBのネットワークがあり、これの干すと番号16bitをさらにサブネット6bit、ホスト10bitにする。」の場合、サブネットは255.255.252.0となる。ネットワーク部、サブネット部分のビットをすべて1でマスクする。

10101100 00010000 00000100 00000001
11111111 11111111 11111100 00000000 (サブネット2進数)
255           255           252           0              (サブネット10進数)

よく見るこんな書き方をする。CIDR。従来のクラスフルアドレッシング(クラスA~C)に比べて、クラスレスアドレッシングという。1bit単位でネットワーク部/ホスト部を分けられる。サブネットはIPアドレスを書くときは必ずお供として書き加える。
172.16.4.1/20

CIDR,サブネットについては珍しくwikiがわかりやすい。refs:CIDR(wiki)

○覚える
各サブネットマスクに対応する2進数
00000000 = 0
10000000 = 128, 11000000 = 192, 11100000 = 224, 11110000 = 240,
11111000 = 248, 11111100 = 252, 11111110 = 254, 11111111 = 255

○例
例えば、192.168.1.のクラスCのネットワークを/27でサブネット化する場合,2**3 = 8のサブネットが作れる
ネットワーク部  サブネット  ホスト部  ネットワークアドレス   ホストアドレス範囲                             ブロードキャストアドレス
192.168.1.        000           00000    192.168.1.0/27         192.168.1.1/27~192.168.1.30/27      192.168.1.31/27
192.168.1.        001           00000    192.168.1.32/27       192.168.1.33/27~192.168.1.62/27    192.168.1.63/27
192.168.1.        010           00000    192.168.1.64/27       192.168.1.65/27~192.168.1.94/27    192.168.1.95/27
192.168.1.        011           00000    192.168.1.96/27       192.168.1.97/27~192.168.1.126/27  192.168.1.127/27
192.168.1.        100           00000    192.168.1.128/27     192.168.1.129/27~192.168.1.158/27 192.168.1.159/27
192.168.1.        101           00000    192.168.1.160/27     192.168.1.161/27~192.168.1.190/27  192.168.1.191/27
192.168.1.        110           00000    192.168.1.192/27     192.168.1.193/27~192.168.1.222/27  192.168.1.223/27
192.168.1.        111           00000    192.168.1.224/27     192.168.1.225/27~192.168.1.254/27  192.168.1.255/27

○デフォルトゲートウェイ
・ルータ、ファイアウォール、プロキシサーバなどがデフォルトゲートウェイの役割をする事がある。

○AS(autonomous system),自律システム、ルーティングプロトコル
ASは1つの管理団体によって管理される一つのネットワークの集合体。ASはルーティングでは1つの範囲として扱われる。AS内に複数のネットワークがある。AS間の内部と外部でネットワークがあるから、AS内部とAS外部のルーティングがある。外部がEGP、内部がiGP。EGPではBGPがスタンダード

○NAT,プライベートIP,グローバルIP
NATもIPアドレスを効率的に使うための技術。ネットワークアドレス変換。プライベートIPとグローバルIPを変換する。プライベートIPでは、ネットワークに接続できない。グローバルIPはネットワークに接続できる、不足気味。
ネットに繋がないなら、IPはユニーク性を維持しなければならないというルールに従う必要はない。ICANNはそんなネットワークのために、自由に使っていいアドレスを用意している。これがプライベートIP。ICANNに管理されないIPアドレスはクラスAが一つ、クラスBが16、クラスCが255個のネットワーク数。

・クラスAのプライベートIP
IPアドレス 10.0.0.0 ~ 10.255.255.255
00001010 ******** ******** ********

・クラスBのプライベートIP
IPアドレス 172.16.0.0 ~ 172.31.255.255
10101010 0001**** ******** ******** (0001****の部分がネットワーク部なので****は自由)

・クラスCのプライベートIP
IPアドレス 192.168.0.0 ~ 192.168.255.255
11000000 10101000 ******** ******** (第3オクテットの********がネットワーク部)

外に繋がないプライベートIPなら完全に自由に決めていいのでは?と思うんだけど、なぜ上のようなルールがあるのだろうか・・・?

NATはプライベートIPとグローバルIPの変換表があるNATテーブルを持つ。NATの弱点は保有するグローバルIPアドレス数以上のホストは、同時に接続できない。なので、自由にインターネットに接続詞、さらにグローバルIPアドレスを消費しないようにするための別の手だてが必要。それがNATを発展させたNAPT、IPマスカレードと呼ばれる。NAT機能はルータ、ゲートウェイなどにある。

○NAPT、IP masquerade(マスカレードは仮装舞踏会、仮装する)、静的NAPT
NATはIPアドレスの変換だけだったが、NAPT(Network address port translation)はそれプラスポート番号も変換する。NAPTはそのポート番号変換の動きをするので、その動作のおかげでセキュリティ面でも利点がある。変換されていないポート番号宛にデータがきても変換されないから内部に入れない。
そのセキュリテぃがNAPTの欠点になっている事もある。それは、LAN内部に外部に公開したいサーバがある場合。例えばLAN内外部に公開するウェブサーバがある場合、外部からは80番ポート宛にパケットが届く。NAPTテーブルに記憶されていないポート番号は変換されず、LAN内部に入らない。解決策はNAPTテーブルに手動で変換を入力する。これを静的NAPT,静的マスカレードという。
もう一つの弱点はFTP。FTPはデータ部分に送信元のIPアドレスとポート番号が記述され、それを使ってFTP通信を行うから。これがIPアドレスのままだとおかしい。よって、FTPでのデータ転送は不可能。FTPみたいにデータ部分に送信元のIPアドレスとポート番号が記述されるようなアプリケーションはすべからくダメ、という事になる。これはNAPTだけではどうしようもない。個別にルータが対応しているの実情。

○ルーティング
デフォルトルートは、他に一致するエントリがないパケットが送信されるルート。0.0.0.0/0。宛先ネットワークが0.0.0.0ですべて、ネットマスクが0で全くチェックを行わない。これがあると破棄されるパケットがなくなる。インターネットとのゲートウェイになる。また、192.168.1.0/24のルーティング情報がルーティングテーブルにある場合、192.168.1.15宛のパケットはそのルーティングとデフォルトルーティングの両方に該当する。が、ロンゲストマッチ(最長マッチ)のルールにより、192.168.1.0/24の方にマッチしデータが送信される

○パケットフィルタリング、ファイアウォール、不正侵入検知装置、ACL
196,197
パケットフィルタリングはセキュリティの基本機能の一つ。多くのルータで実装。文字通りパケットをフィルタ(選別)する。本格的なセキュリテぃ対策危機にはファイアウォール、不正侵入検知装置(IDS)がある。IDS(Intrusion Detection System)。こういう本格的な機器ではなくルールにもフィルタリングは実装されている。
ファイアウォールが不正なパケットを遮断するのに対して、IDSは不正な目的に使用されるトラフィックも遮断する事が可能。なにが違うんだ・・
シスコでは、ルータ等のパケットフィルタリング機能をACL(Access Control List)と呼ぶ。

○ネットワーク図、Fa0/1,Fa0/24、ネットワーク機器、ボックス型、シャーシ型
209
FaはFastethernet(ファーストイーサネット)。0/1の0はモジュール番号(スロット番号)、1はインタフェース番号。ネットワーク機器にはボックス型とシャーシ型がある。ボックス型が本体に固定で備わっている、シャーシ型は本体に装着するためのスロットがある。ボックス型のモジュール番号は0になる、1個しかないから。ファーストイーサネットは主にUTPを使う。ケーブルはカテゴリ5以上。

○ラック、インチ、1U
217
19インチラック、ネットワーク機器を入れる。1インチは25.4ミリ、19インチはラックの横幅で483ミリ。1Uは44.45ミリ。ネットワーク機器であれば1U~2Uの高さで収まる機器が一般的、ラックの横幅は19インチで一定、高さは6uから42uのものまでニーズに合わせて高さを選べる
refs:19インチラック(wiki)

○DHCPサーバ
DHCPサーバはその機能をルータが内蔵している事はよくある。

○macでCUIで自分のLANのルータ、DNSのIPを調べる場合
$ ipconfig getpacket en3
en3は例


・参考本

3分間 ネットワーク 基礎講座/技術評論社
¥1,869
Amazon.co.jp
[改訂新版] 3分間ネットワーク基礎講座/技術評論社
¥1,869
Amazon.co.jp
1週間でCCNAの基礎が学べる本/インプレスジャパン
¥2,520
Amazon.co.jp

gs(postscript)コマンド,epsをpngに変換

$
0
0

eps形式のアイコンをimgタグのsrcで使用したら表示できなかったので、eps形式をpng形式のファイルに変換したときのメモ。

gsコマンドを使用した。macの場合、brewでインストール。色々な依存ライブラリがインストールされて、結構時間がかかった。

$ brew install gs
Warning: It appears you have MacPorts or Fink installed.
Software installed with other package managers causes known problems for
Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again.
==> Installing dependencies for ghostscript: jpeg, libtiff, jbig2dec, little-cms2, libpng
==> Installing ghostscript dependency: jpeg
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/jpeg-8d.mavericks.bottle.2.tar.
######################################################################## 100.0%
==> Pouring jpeg-8d.mavericks.bottle.2.tar.gz
  /usr/local/Cellar/jpeg/8d: 18 files, 780K
==> Installing ghostscript dependency: libtiff
==> Downloading ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.3.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/libtiff/4.0.3 --without-x --disable-lzma --with-jpeg-incl
==> make install
  /usr/local/Cellar/libtiff/4.0.3: 254 files, 3.8M, built in 26 seconds
==> Installing ghostscript dependency: jbig2dec
==> Downloading http://downloads.sourceforge.net/project/jbig2dec/jbig2dec/0.11/jbig2dec-0.11.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/jbig2dec/0.11
==> make install
  /usr/local/Cellar/jbig2dec/0.11: 10 files, 268K, built in 9 seconds
==> Installing ghostscript dependency: little-cms2
==> Downloading http://downloads.sourceforge.net/project/lcms/lcms/2.5/lcms2-2.5.tar.gz
######################################################################## 100.0%
tar: copyfile unpack (lcms2-2.5/Projects/mac/LittleCMS/.DS_Store) failed: File exists
tar: copyfile unpack (lcms2-2.5/Projects/mac/.DS_Store) failed: File exists
==> ./configure --prefix=/usr/local/Cellar/little-cms2/2.5
==> make install
  /usr/local/Cellar/little-cms2/2.5: 16 files, 1.0M, built in 55 seconds
==> Installing ghostscript dependency: libpng
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/libpng-1.5.17.mavericks.bottle.
######################################################################## 100.0%
==> Pouring libpng-1.5.17.mavericks.bottle.1.tar.gz
  /usr/local/Cellar/libpng/1.5.17: 15 files, 1.0M
==> Installing ghostscript
==> Downloading http://downloads.ghostscript.com/public/ghostscript-9.07.tar.gz
######################################################################## 100.0%
tar: copyfile unpack (ghostscript-9.07/lcms2/Projects/mac/.DS_Store) failed: File exists
==> Patching
patching file base/unix-dll.mak
==> ./configure --prefix=/usr/local/Cellar/ghostscript/9.07 --disable-cups --disable-compile-inits -
==> make install
==> make install-so
==> Downloading http://downloads.sourceforge.net/project/gs-fonts/gs-fonts/8.11%20%28base%2035%2C%20
######################################################################## 100.0%
  /usr/local/Cellar/ghostscript/9.07: 707 files, 49M, built in 10.0 minutes

次に、こちらのサイトを参考にしてスクリプト作成

$ cat eps_to_png
#!/bin/bash -f

INFILE=${1?}
OUTFILE=${INFILE//eps/png}

GS="gs -dBATCH -dNOPAUSE -dEPSCrop -r600 -sDEVICE=png16m -sOutputFile=${OUTFILE}"

${GS} -f ${INFILE}
database $

実行権限を与えて実行する

chmod a+x eps_to_png
./eps_to_png hoge.eps

scp,sftp,rsync~ファイル転送、リモート端末上のコマンド実行

$
0
0

■ssh,scpでファイル転送
sshを使用したファイル転送scpコマンドについて。テスト台としてawsのec2にsshのポートだけ空けておく。また、鍵を~/.ssh/DefaultAWSKey.pemにおいておく。

ローカルのhoge.txtファイルを99.199.○○.○○のec2-userの$HOMEに転送する。鍵はhogeKey.pem
$ scp -i ~/.ssh/hogeKey.pem hoge.txt ec2-user@99.199.○○.○○:

ローカルのhogedirディレクトリを99.199.○○.○○のec2-userの$HOME/testdir/に転送する。
$ scp -i ~/.ssh/hogeKey.pem -rp hogedir/ ec2-user@99.199.○○.○○:testdir/

ただ、間違ったコマンドを実行したときにプロンプトにエラーメッセージも何も表示しなかった・・・

一方、リモートからローカルにファイルを取得する場合。

リモート99.199.○○.○○の$HOME/iii.txtファイルを取得(見づらいけど最後に. ドットがある)
scp -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○:~/iii.txt .

リモート99.199.○○.○○の$HOME/testdirディレクトリを、ローカルの$HOME/tmpディレクトリ下に取得
scp -i ~/.ssh/hogeKey.pem -rp ec2-user@99.199.○○.○○1:~/testdir ~/tmp/

■sshでリモート端末でコマンド実行

リモートのファイル一覧表示
$ scp -i ~/.ssh/hogeKey.pem -rp ec2-user@99.199.○○.○○ ls -l


リモートにファイル作成

$ ssh -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ touch hoge.txt

リモートにある$HOME/work/test_shシェルを実行する

$ ssh -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ ./work/test_sh


シェルスクリプトファイルをscp,sftpなどで転送し、そのスクリプトを実行する事も出来る。シェウスクリプと内でsudoでroot権限で実行する場合、-tオプションが必要。
$ ssh -t -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ ./work/test_sh

■sftpでファイル転送
いんたらくてぃぶに頻繁にファイルをやりとりするなら、sshよりsftpの方が楽。ec2とのやりとりを下に書く(鍵はconfigに設定してある。ホスト名はdefault-ec2にしてある)

・セッション開始
$ sftp ec2-user@default-ec2
Connected to default-ec2.
sftp>

ファイル一覧
sftp> ls -l
移動
sftp> cd hogedir
ファイル取得
sftp> get hoge.tx
ローカルファイル一覧
sftp> lls
ローカルファイルのアップロード
sftp> put aiueo.txt

sftpの他の内部コマンド
ヘルプ
sftp>?
ローカル移動、lcd
ファイル名変更、rename ord new
ファイル削除、rm
パーミッション変更、chmod
めんどくせぇ
lpwd,pwd,mkdir,rmdir

sftpの大きな弱点はディレクトリごと転送できない。大量のファイルを一度に転送する場合、sryncを使う

■rsyncでファイル転送
rsyncは転送元と転送先のファイルを比較し差分を送信する事で、ネットワーク転送料を最小に抑える。従量課金のaws向き
rsync+sshの組み合わせがでふぉ。古いバージョンのrsyncでOpenSSHを使った転送するためには、クライアント側の環境変数RSYNC_RSHをsshにする。具体的には2.6.6以降のバージョンならデフォでsshを使うようになっているから、環境変数を指定する必要はない。
#bash
export RSYNC_RSH=ssh

前提として鍵は設定済み。configでリモートホスト名はdefault-ec2してある。

リモートの$HOME/work/remote.txtを取得
$ rsync ec2-user@default-ec2:work/remote.txt .
リモートの$HOME/work/remote.txtを取得して、ローカルのtodirに保存
$ rsync ec2-user@default-ec2:work/remote.txt todir/
リモートの$HOME/work/test_remote_dirディレクトリを取得して、ローカルのtodirディレクトリに保存する。-rはリカーシブル、-aはアーカイブモード
$ rsync -a -r ec2-user@default-ec2:work/test_remote_dir todir/

リモートの$HOME/workディレクトリをローカルのworkディレクトリと同期させる。
$ rsync -a ec2-user@default-ec2:work/ work/
-aはディレクトリの再帰的な転送を可能にするもので、同時にパーミッションや更新日時、シンボリックリンクも正しく複製する。これがアーカイブモード?

ちなみに、-uは更新モード。より新しいファイルが転送先にある場合、そのファイルを転送しない。-bはバックアップモード。転送先のファイルを上書きする場合、古いファイルのバックアップを作成する。

今度はローカル環境からの転送。

ローカル環境のlocal.txtをリモートのworkディレクトリ下に転送
$ rsync local.txt ec2-user@default-ec2:work
ローカル環境のtestdirディレクトリをリモートのworkディレクトリ下に転送
$ rsync -a testdir ec2-user@default-ec2:work

-vは冗長モード、-zは圧縮をしよう、-e "コマンド"は、sshの代わりに実行するコマンドを指定する

mac os xの再インストール、rbenv、home brewの設定

$
0
0

macのスリープ復帰時に音が聞こえなくなる症状を直すために、osの再インストールしたんだけど、rbenv,home brew,MacPortsの環境が完全にぶっ壊れたのでそのときのメモ。あとmysqlを使えなくなってて再インストールした。
(過去にrbenvをインストールして使っていたんだけど、mac os xを再インストールしたら、rbenvを使えなくなった。)

refs:mavericksをアンインストールしたら、rbenvが消えた件

$ rbenv
-bash: rbenv: command not found

で、消えたのかと思い、brewで再度インストールしたら既にインストールされているというメッセージが・・・
$ brew install rbenv ruby-build
Warning: rbenv-0.4.0 already installed
Error: ruby-build-20140110.1 already installed
To install this version, first `brew unlink ruby-build'
Warning: It appears you have MacPorts or Fink installed.
Software installed with other package managers causes known problems for
Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again.

たしかに残ってはいるようだ・・・
$ brew list rbenv
/usr/local/Cellar/rbenv/0.4.0/bin/ruby-local-exec
/usr/local/Cellar/rbenv/0.4.0/bin/rbenv
/usr/local/Cellar/rbenv/0.4.0/completions/ (2 files)
/usr/local/Cellar/rbenv/0.4.0/libexec/ (25 files)

brew doctorは・・・
$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

    /opt/local/bin/apr-1-config
    /opt/local/bin/apu-1-config
    /opt/local/bin/freetype-config
    /opt/local/bin/gpg-error-config
    /opt/local/bin/krb5-config
    /opt/local/bin/libgcrypt-config
    /opt/local/bin/libpng-config
    /opt/local/bin/libpng16-config
    /opt/local/bin/Magick++-config
    /opt/local/bin/Magick-config
    /opt/local/bin/MagickCore-config
    /opt/local/bin/MagickWand-config
    /opt/local/bin/ncurses5-config
    /opt/local/bin/ncursesw5-config
    /opt/local/bin/pcap-config
    /opt/local/bin/pcre-config
    /opt/local/bin/pkg-config
    /opt/local/bin/python2.7-config
    /opt/local/bin/Wand-config
    /opt/local/bin/xml2-config
    /opt/local/bin/xslt-config

Warning: You have MacPorts or Fink installed:
  /opt/local/bin/port

This can cause trouble. You don't have to uninstall them, but you may want to
temporarily move them out of the way, e.g.

  sudo mv /opt/local ~/macports

Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:

    mysql

Warning: Some installed formula are missing dependencies.
You should `brew install` the missing dependencies:

    brew install freetype

Run `brew missing` for more details.

Warning: You have a non-Homebrew 'pkg-config' in your PATH:
  /opt/local/bin/pkg-config

`./configure` may have problems finding brew-installed packages using
this other pkg-config.


メッセージ通りにgreetypeをインストール
$ brew install freetype

これでもまだ、brew doctroを実行しても色々とメッセージが出る

brew listでインストール済みリストを確認
$ brew list
apple-gcc42        gnupg            libpng            mysql-connector-c    rbenv
autoconf        jbig2dec        libtiff            nkf            rbenv-gem-rehash
cmake            jpeg            little-cms2        node            rbenv-gemset
freetype        jq            memcached        openssl            readline
ghostscript        libevent        mysql            pkg-config        ruby-build
$ brew list
apple-gcc42        gnupg            libpng            mysql-connector-c    rbenv
autoconf        jbig2dec        libtiff            nkf            rbenv-gem-rehash
cmake            jpeg            little-cms2        node            rbenv-gemset
freetype        jq            memcached        openssl            readline
ghostscript        libevent        mysql            pkg-config        ruby-build

rbenvが半端な状態で残っているので、アンインストールしてから再度インストール
$ brew install rbenv
Warning: rbenv-0.4.0 already installed
$ brew uninstall rbenv
Uninstalling /usr/local/Cellar/rbenv/0.4.0...

$ brew install rbenv
==> Downloading https://github.com/sstephenson/rbenv/archive/v0.4.0.tar.gz
######################################################################## 100.0%
==> Caveats
To use Homebrew's directories rather than ~/.rbenv add to your profile:
  export RBENV_ROOT=/usr/local/var/rbenv

To enable shims and autocompletion add to your profile:
  if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
==> Summary
  /usr/local/Cellar/rbenv/0.4.0: 31 files, 152K, built in 3 seconds
$ which rbenv
/usr/local/bin/rbenv
$ rbenv versions
  system
* 2.0.0-p353 (set by /Users/shin/.rbenv/version)

一応直ったか・・・

まだ、rbenv installがない
~ $ rbenv install --list
rbenv: no such command `install'

どうやら、rbenv installを実行するには、rbenv-buildが必要らしい。rbenv listで見るとあるんだけどね・・・これもuninstallしてからinsltallする。

で、rbenvを使っている適当なrubyのwebアプリを実行しようとしたら、mysql2/mysq2がloadできないとかいうエラーが出た。で、gemのmysql,mysql2をアンインストールしてインストールし直そうとしたら、これもできない。

つか、brewのインストール済みのツールが全て使えなくなっていた・・・
~ $  brew list
apple-gcc42        jpeg            mysql            rbenv-gem-rehash
autoconf        jq            mysql-connector-c    rbenv-gemset
cmake            libevent        nkf            readline
freetype        libpng            node            ruby-build
ghostscript        libtiff            openssl
gnupg            little-cms2        pkg-config
jbig2dec        memcached        rbenv
~ $

で、こいつらを1個ずつuninstallしてinstallし直した。当然だけど時間がかかった。。。
その後に、gemでmysql,mysql2をインストールしてみたらできた。rubyのアプリの問題も解決。
apple-gcc42あたりが怪しかった。

あと、macportsも入れ直した。


home brew,mac portsについて

$
0
0

macのパッケージ管理ツールbrewとmac portsについて。

refs:marvericksをアップデートしたら、rbenvが消えた件

HomeBrewはMacPortsに比べて、依存関係でインストールされるソフトが少ないため、パッケージ管理ソフトで人気が高まっています。
参照
パッケージ管理システムHomeBrew ~ MacPortsとの違いについて

確かに、portの方がインストール時間が凄く長い。最初はbrew、ダメならportにした方が良さそう。

■HomeBrew
brewはinstall時のログを見て解る通り、ソースからビルドしているらしい。./configure,makeとかをしている

brewのインストール済みリストはbrew listで見れる
$ brew list
apple-gcc42        gnupg            libpng            mysql-connector-c    rbenv
autoconf        jbig2dec        libtiff            nkf            rbenv-gem-rehash
cmake            jpeg            little-cms2        node            rbenv-gemset
freetype        jq            memcached        openssl            readline
ghostscript        libevent        mysql            pkg-config        ruby-build

アンインストール
$ brew uninstall jq
インストール
$ brew install jq

検索
 $ brew search  rbenv
rbenv             rbenv-bundler      rbenv-default-gems   rbenv-readline        rbenv-whatis
rbenv-aliases         rbenv-communal-gems  rbenv-gem-rehash     rbenv-use
rbenv-binstubs         rbenv-ctags      rbenv-gemset           rbenv-vars

へるぷ。あとはdoctor,updateあたりを使った
~ $ brew help
Example usage:
  brew [info | home | options ] [FORMULA...]
  brew install FORMULA...
  brew uninstall FORMULA...
  brew search [foo]
  brew list [FORMULA...]
  brew update
  brew upgrade [FORMULA...]
  brew pin/unpin [FORMULA...]

Troubleshooting:
  brew doctor
  brew install -vd FORMULA
  brew [--env | config]

Brewing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  open https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook

Further help:
  man brew
  brew home
~ $

パッケージの有効化、無効化
$brew link mysql
$brew unlink mysql

brewの設定一覧
$ brew config
HOMEBREW_VERSION: 0.9.5
~

■MacPorts

refs
MacPortsのインストール方法
Macportの使い方

ssh,git,ユーザ管理,log

$
0
0

主にssh,git関連のメモ。環境はec2のamazon linux。

refs
gitにsshで接続(ポートと秘密鍵を指定)
sshのポート番号を変更
AWS EC2インスタンスにssh接続するまで その1
ユーザの追加と削除。adduser/deluser
Linuxでssh接続。公開鍵認証やパスワード認証とか
sshdのログファイル確認

まず、configに書かないで、sshを使ってgit cloneする場合。hoge.gitはリモートのbareリポジトリ。ローカル環境にlocalhoge.gitでcloneする。
$ git clone ssh://ec2-user@***.***.***.***:22/home/ec2-user/hoge.git localhoge.git
22番ポートなら省略可能。もしかしたら、事前にssh-add で秘密鍵をssh agentに登録する必要があるかも。

ssh接続したとき(失敗も成功も)、ログアウトした時、su,sudoコマンドをしたとき、sshでgit clone,git pushでリモートと通信したときのログは/var/log/secureに出力される。接続元のIP、指定ユーザ名、接続の成否などが記録される重要なログ。ただ、gitで通信した場合、IPは出力されるけど、gitのログ、誰か?操作は何か?は出力されない。おそらくgitの独自のログを見る必要がありそう。それがどこにあるかはまだ調べてない、不明。あと、secureログの解析、統計ツールみたいな物が何かあるはず。

・sshのポート番号を変更する
/etc/ssh/sshd_configファイルのPort 22を変更し、再起動する。service sshd restart

55555に変更。ポート番号を指定する
$ git clone ssh://ec2-user@***.***.***.***:55555/home/ec2-user/hoge.git localhoge.git
ssh接続の場合
$ ssh -i ~/.ssh/hoge_key.pem ec2-user@***.***.***.*** -p 55555
configファイルに書くのなら、Port属性も追加する。

・新規ユーザを作成し、ssh接続、git通信ができるようにする
前提としてec2-userと同じ公開鍵を使う

まずはrootになってadduserコマンドで新規ユーザssh-userを追加。
$ adduser ssh-user
パスワード設定
$ passwd ssh-user
$HOMEの下に.sshディレクトリ作成

$ mkdir .ssh
ec2-userの公開鍵認証の情報ファイルauthorized_keysをコピー。このファイルには、複数の公開鍵が記載されているので、許可しない鍵などがあれば削除したりする事。
$ cp /home/ec2-user/.ssh/authorized_keys /home/ssh-user/.ssh/
認証ファイルのオーナーを自分に変更
$ chown ssh-user:ssh-user /home/ssh-user.ssh/authorized_keys
.sshディレクトリを700,認証ファイルを600へ権限変更
$ chmod 700 .ssh/
$ chmod 600 authorized_keys
これでssh-userでssh接続ができるようになる。

また、設定にもよるが、新規ユーザはsudo権限は与えられていない。sudoを実行できるようにするには、root権限になり、/etc/sudoersファイルに下を追加する必要がある。
ssh-user ALL=(ALL) ALL

*あと、sshの公開鍵認証ではなく、パスワード認証にしたい場合は、sshd_confを編集する。このあたりの情報はぐぐればいくらでも出てくる。パスワード認証だと、鍵を指定しないでsshできる。ただ、セキュリティ的にやめたほうがいい。
$ ssh ec2-user@***.***.***.***

・新規ユーザssh-userでもgitでssh接続する
ec2-userのgitリポジトリを丸ごとコピー
# cp -ar /home/ec2-user/hoge.git /home/ssh-user/
所有者、所有グループを変更。-Rでサブディレクトリ内も全て。
# chown -R ssh-user:ssh-user /home/ssh-user/hoge.git
これでクライアントから新規ユーザssh-userでもgit ssh接続ができるようになる。おそらく、
remote.origin.urlの変更が必要になるはず。git-serverはconfigのHost設定
remote.origin.url=ssh://ssh-user@git-server/home/ssh-user/hoge.git

・ec2-userでssh接続をできないようにするには、/home/ec2-user/.ssh/authorized_keysから該当する公開鍵を削除すればいい。ファイル毎削除してもいいが、他の公開鍵の設定している場合は注意する

sudo,su

$
0
0

sudo,suについて

■mac
macだと"sudo bash"でパスワードを入力すれば、永続的にrootになれる。「$ sudo - 」「$ su - 」「$ su」「$ su root」はダメだった。
vagrantのcentosは、「$sudo bash」「$sudo -i」もしくはパスワードvagrantで「$ su - 」「$ su」「$ su root」でrootになれた。「$ sudo - 」はダメだった。
vagrantのdebianは、「$sudo bash」$sudo -i」パスなしでrootになれた。「$ sudo - 」「$ su - 」「$ su」「$ su root」はダメだった。
awsのcentos(rootのパスワード設定済み)は、「$ su - 」「$ su」「$ su root」にパスワード入力でrootになれた。「$sudo bash」「$ sudo - 」ではダメだった。
awsのamazonlinux(rootのパスワードなし)は、「$sudo bash」「$sudo -i」でログインできた。「$ su - 」「$ su」「$ su root」はだめだった。

linuxのパフォーマンス調査コマンド

$
0
0
対象 コマンド
システム vmstat
システム ps
システム users
システム uptime
メモリ vmstat
メモリ /proc/stat
ネットワーク /proc/net/dev
ページファイル /proc/swaps
ディスク /proc/partisions
ディスク vmstat
ディスク /proc/diskstats
プロセス ps
プロセッサ vmstat
論理ディスク df

tropicocoで、話題の新フィットネスを無料体験: PR

$
0
0
ココナッツウォーター「トロピココ」でヨガやボルダリング等が楽しめるイベント開催中

du,df,lsコマンド(ディレクトリ内のファイル容量を表示する)

$
0
0

■du

・du指定したディレクトリの容量を確認するためのコマンド。オプションをつけないとサブディレクトリすべてが対象になる

○duで/homeディレクトリ内の各ディレクトリのディスク容量を出力

[root@localhost ~]# du -s /home/*

16    /home/hogeuser

296    /home/vagrant

52    /home/veewee


○さらにsortで容量の大きい順にソート

[root@localhost ~]# du -s /home/* | sort -nr

296    /home/vagrant

52    /home/veewee

16    /home/hogeuser

#du -k apache2

12 apache2/lib/pkgconfig
7232 apache2/lib
3024 apache2/bin
268 apache2/build
1272 apache2/include
23608 apache2/modules

・apache2ディレクトリ内の容量をディレクトリ毎に表示。

# du -ks apache2
64628 apache2

・カレントディレクトリにあるディレクトリすべての容量を表示。-hはhuman readable、-sはsummarize、display only a total for each argument
>du -hs *

・カレントディレクトリの容量を表示
>du -hs .

・hogedirの容量を表示
>du -hs hogedir
1.4G    hogedir

・hogedirディレクトリのサブディレクトリ毎の容量を表示
>du -hs hogedir/*

・apache2ディレクトリの容量を表示。

$ sudo du -sm *

・一つ下のディレクトリが対象
$ sudo du -d 1 -h

・わからないとき
$ man du
$ info du

■ls

#ls -lht
hオプションでメガ単位

■df
#df -h
ディスク容量を使用量を表示

refs:dfコマンド
refs:ディレクトリ以下の容量を調べるduコマンド


ymobile(emobile) lteの通信量制限

$
0
0

昨日からymobile(旧イーモバ)の速度が急激に遅くなった。今月はかなり使用していたから、何か制限にひっかかったかなと感じ、ネットで調べたけど、それよりもサポートに聞いた方が確信に迫れると思い電話した。そのときのメモ。

まず、事前情報(my ymobileで確認できる)
・端末はpocket wifiのGL06P。
・プランはLTEのバリューセット。データ通信タイプはフラットの月定額。
・今月の通信量は約27GB。2億2700万パケット。

そして、サポートと話した結果
・2014年5月以降から開始された月10GBの制限にかかったらしい。実際は約27GBまでは快適だったので、あくまで10GBというのは目安だろう。個人差とか、その他色々な条件もあるだろうから参考までに。
・制限がかかった後の速度は128kbps。昔のisdn並みだね、はっきり言って使い物にならん。isdnが高速だと言われてた時期を思い出した。
・で、解決策だけど、この制限は月の制限だから来月までどうにもならないらしい。
・例えばプランを4gに下した場合、定額の月の制限が7Gになる。そして、追加料金二千円強を払えばプラス2GB。さらに2千円強払えばプラス2千円というループ。今回の通信量を考えたら料金がとんでもないことになりそうだから無理。

現状はスマホxperiaのデザリングで凌いでいる(キャリアはdocomoで3g)。ただ、調子がいいときでも2Mbps程度で少しきつい。しかも、ぶちぶち切れたりする。結局質が悪い。このままだと、今後のモバイルネット環境が不自由になりそうなので、wimaxも視野に入れるために調べてみようと思う。けど。なにか一つで全てをの条件を満たすような物は難しそう…


bc、2,10,16進 ネットワークについて,クラスA~C,サブネット,CIDR,NAT,IP

$
0
0

bcコマンドについて。はじめに。2の階上
$ irb
irb(main):001:0> 2 ** 8
=> 256
irb(main):002:0> 2 ** 10
=> 1024
irb(main):002:0> 2 ** 16
=> 65,536
irb(main):004:0> 2 ** 20
=> 1048576
irb(main):003:0> 2 ** 24
=> 16,777,216
irb(main):005:0> 2 ** 30
=> 1073741824
irb(main):004:0> 2 ** 32
=> 4,294,967,296

*bashでも計算できる
virtual_os_iso $ echo $((2**8))
256
virtual_os_iso $ echo $((2**10))
1024

ibaseは入力となる進数の設定、obaseは出力となる進数の設定。初期設定は両方とも10進数
下は2進数から10進数の例。

aws $ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
ibase=2
11111111
255
00000001
1
11000000
192
11011111
223
Daws $

あとechoの結果をbcに渡す事で変換も出来る
 $ echo "obase=10; ibase=2; 11011111" | bc
223

refs
bcコマンド変換
bcコマンド変換2

ICANN(The Internet Corporation for Assigned Name and Number)が組織にネットワークアドレス、IPアドレスを割り振る際にクラスと呼ばれる分類をベースに割り当てている。クラスにはA,B,Cがある。第1オクテットについて、クラスAは0で始まり、クラスBは10で始まり、クラ スCは110で始まる。つまり、10進数で言うと、第1オクテットはそれぞれ、クラスAが1~127、Bが128~191、Cが192~223である。
また、ホスト部がすべて0の場合はネットワークアドレス、全て1の場合はブロードキャスト。クラスによりネットワーク番号を示す部分のビット数が異なる。
ネットワーク/ホスト部のビット数は、クラスAが8/24、Bが16/16、Cが24/8。なので、ネットワーク数と保有できるホスト数は次のようになる。

・クラスA
第1オクテット:「1~126」(00000001~01111110)0から始まるルール。01111111は、ループバックアドレスで自己診断用のアドレス
ネットワーク数:126 
ホスト数:16777214(2 ** 24 -2)

・クラスB
第1オクテット:「128~191」(10000000~10111111)10から始まるルール。
第2オクテット:「0~255」
ネットワーク数:16384 (2 ** 14 )
ホスト数:65534 (2 ** 14 -2)

・クラスC
第1オクテット:「192~223」(11000000~11011111)110から始まるルール
第2オクテット:「0~255」
第3オクテット:「0~255」
ネットワーク数:2097152(2 ** 21)
ホスト数:254(2 ** 8 -2)

refs:ネットワークとホスト部の境界。クラスフルとクラスレス

また、マルチキャスト用に予約されたクラスDがある。クラスDは1110から始まる。224.0.0.0~239.0.0.0

○サブネット
サブネットはIPアドレスを効率的に活用するためにある。
IPアドレスはネットワーク部とホスト部から成り立っている。これをサブネットに分割する場合、ホスト番号のビットをさらに分割し、サブネット部とホスト部にする。それにより「○番ネットワーク内、▲番ネットワークの☆番ホスト」となる。例えば、クラスBの172.16.0.0のネットワークがあり、ホスト部16bitをサブネット部6bit、ホスト部10bitにする。この状態でサブネット1番、1番ホストのIPアドレスは172.16.4.1となり、2進数はいかになる。
10101100 00010000 00000100 00000001

$ ipcalc 172.16.4.1
Address:   172.16.4.1           10101100.00010000.00000100. 00000001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   172.16.4.0/24        10101100.00010000.00000100. 00000000
HostMin:   172.16.4.1           10101100.00010000.00000100. 00000001
HostMax:   172.16.4.254         10101100.00010000.00000100. 11111110
Broadcast: 172.16.4.255         10101100.00010000.00000100. 11111111
Hosts/Net: 254                   Class B, Private Internet

また、クラスCのネットワークを考えた場合、ホスト部の8bitをサブネットとホストに分割できる。結果、サブネット数は0から256の8パターン、それと反比例してホストの数は254台から0台になる。

○サブネットマスク
例えば第1オクテットが10から始まる場合、クラスフルでは、これはクラスBでネットワーク部が16bit、ホスト部が16bitとなるが、クラスレスの場合はそう決められない。このため、IPアドレスを見て、ネットワークとホスト部を一目で理解するために必要なのがサブネットマスク。先ほどの例「クラスBの172.16.0.0のネットワークがあり、ホスト部16bitをさらにサブネット6bit、ホスト10bitに分割する」の場合、サブネットは255.255.252.0となる。ネットワーク部、サブネット部分のビットをすべて1でマスクする。

10101100 00010000 00000100 00000001
11111111 11111111 11111100 00000000 (サブネット2進数)
255           255           252           0              (サブネット10進数)

$ ipcalc 172.16.0.0/22
Address:   172.16.0.0           10101100.00010000.000000 00.00000000
Netmask:   255.255.252.0 = 22   11111111.11111111.111111 00.00000000
Wildcard:  0.0.3.255            00000000.00000000.000000 11.11111111
=>
Network:   172.16.0.0/22        10101100.00010000.000000 00.00000000
HostMin:   172.16.0.1           10101100.00010000.000000 00.00000001
HostMax:   172.16.3.254         10101100.00010000.000000 11.11111110
Broadcast: 172.16.3.255         10101100.00010000.000000 11.11111111
Hosts/Net: 1022                  Class B, Private Internet

これをCIDR形式という。従来のクラスフルアドレッシング(クラスA~C)に比べて、クラスレスアドレッシングという。1bit単位でネットワーク部/ホスト部を分けられる。サブネットはIPアドレスを書くときは必ずお供として書き加える。
172.16.4.1/20

CIDR,サブネットについては珍しくwikiがわかりやすい。refs:CIDR(wiki)

○覚える
各サブネットマスクに対応する2進数
00000000 = 0
10000000 = 128, 11000000 = 192, 11100000 = 224, 11110000 = 240,
11111000 = 248, 11111100 = 252, 11111110 = 254, 11111111 = 255

例えば、クラスCの192.168.1.0/24のネットワークを/27でマスクする場合、2**3 = 8のサブネットが作れる
ネットワーク部  サブネット  ホスト部  ネットワークアドレス   ホストアドレス範囲                             ブロードキャストアドレス
192.168.1.        000           00000    192.168.1.0/27         192.168.1.1/27~192.168.1.30/27      192.168.1.31/27
192.168.1.        001           00000    192.168.1.32/27       192.168.1.33/27~192.168.1.62/27    192.168.1.63/27
192.168.1.        010           00000    192.168.1.64/27       192.168.1.65/27~192.168.1.94/27    192.168.1.95/27
192.168.1.        011           00000    192.168.1.96/27       192.168.1.97/27~192.168.1.126/27  192.168.1.127/27
192.168.1.        100           00000    192.168.1.128/27     192.168.1.129/27~192.168.1.158/27 192.168.1.159/27
192.168.1.        101           00000    192.168.1.160/27     192.168.1.161/27~192.168.1.190/27  192.168.1.191/27
192.168.1.        110           00000    192.168.1.192/27     192.168.1.193/27~192.168.1.222/27  192.168.1.223/27
192.168.1.        111           00000    192.168.1.224/27     192.168.1.225/27~192.168.1.254/27  192.168.1.255/27

○デフォルトゲートウェイ
・ルータ、ファイアウォール、プロキシサーバなどがデフォルトゲートウェイの役割をする事がある。

○AS(autonomous system),自律システム、ルーティングプロトコル
ASは1つの管理団体によって管理される一つのネットワークの集合体。ASはルーティングでは1つの範囲として扱われる。AS内に複数のネットワークがある。AS間の内部と外部でネットワークがあるから、AS内部とAS外部のルーティングがある。外部がEGP、内部がiGP。EGPではBGPがスタンダード

○NAT,プライベートIP,グローバルIP
NATもIPアドレスを効率的に使うための技術。ネットワークアドレス変換。プライベートIPとグローバルIPを変換する。プライベートIPでは、ネットワークに接続できない。グローバルIPはネットワークに接続できる、不足気味。
ネットに繋がないなら、IPはユニーク性を維持しなければならないというルールに従う必要はない。ICANNはそんなネットワークのために、自由に使っていいアドレスを用意している。これがプライベートIP。ICANNに管理されないIPアドレスはクラスAが一つ、クラスBが16、クラスCが255個のネットワーク数。

・クラスAのプライベートIP
IPアドレス 10.0.0.0 ~ 10.255.255.255
00001010 ******** ******** ********

・クラスBのプライベートIP
IPアドレス 172.16.0.0 ~ 172.31.255.255
10101010 0001**** ******** ******** (0001****の部分がネットワーク部なので****は自由)

・クラスCのプライベートIP
IPアドレス 192.168.0.0 ~ 192.168.255.255
11000000 10101000 ******** ******** (第3オクテットの********がネットワーク部)

外に繋がないプライベートIPなら完全に自由に決めていいのでは?と思うんだけど、なぜ上のようなルールがあるのだろうか・・・?
実際、awsを使った場合、vpc cidrが上でなくても(例えば、54.207.58.0/24とか)作れた。private ipは54.207.58.13とかになる。このipはhost,whoisとかで調べるとvendorのグローバルipだし、ipcalcだとClass A。結局、cidrは自由に設計し、private ipもそれに合わせて払い出せばいいように思える。

NATはプライベートIPとグローバルIPの変換表があるNATテーブルを持つ。NATの弱点は保有するグローバルIPアドレス数以上のホストは、同時に接続できない。なので、自由にインターネットに接続詞、さらにグローバルIPアドレスを消費しないようにするための別の手だてが必要。それがNATを発展させたNAPT、IPマスカレードと呼ばれる。NAT機能はルータ、ゲートウェイなどにある。

○NAPT、IP masquerade(マスカレードは仮装舞踏会、仮装する)、静的NAPT
NATはIPアドレスの変換だけだったが、NAPT(Network address port translation)はそれプラスポート番号も変換する。NAPTはそのポート番号変換の動きをするので、その動作のおかげでセキュリティ面でも利点がある。変換されていないポート番号宛にデータがきても変換されないから内部に入れない。
そのセキュリテぃがNAPTの欠点になっている事もある。それは、LAN内部に外部に公開したいサーバがある場合。例えばLAN内外部に公開するウェブサーバがある場合、外部からは80番ポート宛にパケットが届く。NAPTテーブルに記憶されていないポート番号は変換されず、LAN内部に入らない。解決策はNAPTテーブルに手動で変換を入力する。これを静的NAPT,静的マスカレードという。
もう一つの弱点はFTP。FTPはデータ部分に送信元のIPアドレスとポート番号が記述され、それを使ってFTP通信を行うから。これがIPアドレスのままだとおかしい。よって、FTPでのデータ転送は不可能。FTPみたいにデータ部分に送信元のIPアドレスとポート番号が記述されるようなアプリケーションはすべからくダメ、という事になる。これはNAPTだけではどうしようもない。個別にルータが対応しているの実情。

○ルーティング
デフォルトルートは、他に一致するエントリがないパケットが送信されるルート。0.0.0.0/0。宛先ネットワークが0.0.0.0ですべて、ネットマスクが0で全くチェックを行わない。これがあると破棄されるパケットがなくなる。インターネットとのゲートウェイになる。また、192.168.1.0/24のルーティング情報がルーティングテーブルにある場合、192.168.1.15宛のパケットはそのルーティングとデフォルトルーティングの両方に該当する。が、ロンゲストマッチ(最長マッチ)のルールにより、192.168.1.0/24の方にマッチしデータが送信される

○パケットフィルタリング、ファイアウォール、不正侵入検知装置、ACL
196,197
パケットフィルタリングはセキュリティの基本機能の一つ。多くのルータで実装。文字通りパケットをフィルタ(選別)する。本格的なセキュリテぃ対策危機にはファイアウォール、不正侵入検知装置(IDS)がある。IDS(Intrusion Detection System)。こういう本格的な機器ではなくルールにもフィルタリングは実装されている。
ファイアウォールが不正なパケットを遮断するのに対して、IDSは不正な目的に使用されるトラフィックも遮断する事が可能。なにが違うんだ・・
シスコでは、ルータ等のパケットフィルタリング機能をACL(Access Control List)と呼ぶ。

○ネットワーク図、Fa0/1,Fa0/24、ネットワーク機器、ボックス型、シャーシ型
209
FaはFastethernet(ファーストイーサネット)。0/1の0はモジュール番号(スロット番号)、1はインタフェース番号。ネットワーク機器にはボックス型とシャーシ型がある。ボックス型が本体に固定で備わっている、シャーシ型は本体に装着するためのスロットがある。ボックス型のモジュール番号は0になる、1個しかないから。ファーストイーサネットは主にUTPを使う。ケーブルはカテゴリ5以上。

○ラック、インチ、1U
217
19インチラック、ネットワーク機器を入れる。1インチは25.4ミリ、19インチはラックの横幅で483ミリ。1Uは44.45ミリ。ネットワーク機器であれば1U~2Uの高さで収まる機器が一般的、ラックの横幅は19インチで一定、高さは6uから42uのものまでニーズに合わせて高さを選べる
refs:19インチラック(wiki)

○DHCPサーバ
DHCPサーバはその機能をルータが内蔵している事はよくある。

○macでCUIで自分のLANのルータ、DNSのIPを調べる場合
$ ipconfig getpacket en3
en3は例

○ipcalcコマンド
util $ ipcalc 192.168.1.0/24
Address:   192.168.1.0          11000000.10101000.00000001. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.1.0/24       11000000.10101000.00000001. 00000000
HostMin:   192.168.1.1          11000000.10101000.00000001. 00000001
HostMax:   192.168.1.254        11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255        11000000.10101000.00000001. 11111111
Hosts/Net: 254                   Class C, Private Internet

・参考本

3分間 ネットワーク 基礎講座/技術評論社
¥1,869
Amazon.co.jp
[改訂新版] 3分間ネットワーク基礎講座/技術評論社
¥1,869
Amazon.co.jp
1週間でCCNAの基礎が学べる本/インプレスジャパン
¥2,520
Amazon.co.jp

scp,sftp,rsync~ファイル転送、リモート端末上のコマンド実行

$
0
0
■refs
scpとsftpの違い。軽快なscpか高機能なsftp,sshに向いているのは?

■ssh,scpでファイル転送
sshを使用したファイル転送scpコマンドについて。テスト台としてawsのec2にsshのポートだけ空けておく。また、鍵を~/.ssh/DefaultAWSKey.pemにおいておく。

ローカルのhoge.txtファイルを99.199.○○.○○のec2-userの$HOMEに転送する。鍵はhogeKey.pem
$ scp -i ~/.ssh/hogeKey.pem hoge.txt ec2-user@99.199.○○.○○:

ローカルのhogedirディレクトリを99.199.○○.○○のec2-userの$HOME/testdir/に転送する。
$ scp -i ~/.ssh/hogeKey.pem -rp hogedir/ ec2-user@99.199.○○.○○:testdir/

ただ、間違ったコマンドを実行したときにプロンプトにエラーメッセージも何も表示しなかった・・・

一方、リモートからローカルにファイルを取得する場合。

リモート99.199.○○.○○の$HOME/iii.txtファイルを取得(見づらいけど最後に. ドットがある)
scp -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○:~/iii.txt .

リモート99.199.○○.○○の$HOME/testdirディレクトリを、ローカルの$HOME/tmpディレクトリ下に取得
scp -i ~/.ssh/hogeKey.pem -rp ec2-user@99.199.○○.○○1:~/testdir ~/tmp/

■sshでリモート端末でコマンド実行

リモートのファイル一覧表示
$ scp -i ~/.ssh/hogeKey.pem -rp ec2-user@99.199.○○.○○ ls -l


リモートにファイル作成

$ ssh -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ touch hoge.txt

リモートにある$HOME/work/test_shシェルを実行する

$ ssh -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ ./work/test_sh


シェルスクリプトファイルをscp,sftpなどで転送し、そのスクリプトを実行する事も出来る。シェウスクリプと内でsudoでroot権限で実行する場合、-tオプションが必要。
$ ssh -t -i ~/.ssh/hogeKey.pem ec2-user@99.199.○○.○○ ./work/test_sh

■sftpでファイル転送
いんたらくてぃぶに頻繁にファイルをやりとりするなら、sshよりsftpの方が楽。ec2とのやりとりを下に書く(鍵はconfigに設定してある。ホスト名はdefault-ec2にしてある)

・セッション開始
$ sftp ec2-user@default-ec2
Connected to default-ec2.
sftp>

ファイル一覧
sftp> ls -l
移動
sftp> cd hogedir
ファイル取得
sftp> get hoge.tx
ローカルファイル一覧
sftp> lls
ローカルファイルのアップロード
sftp> put aiueo.txt

sftpの他の内部コマンド
ヘルプ
sftp>?
ローカル移動、lcd
ファイル名変更、rename ord new
ファイル削除、rm
パーミッション変更、chmod
めんどくせぇ
lpwd,pwd,mkdir,rmdir

sftpの大きな弱点はディレクトリごと転送できない。大量のファイルを一度に転送する場合、sryncを使う

■rsyncでファイル転送
rsyncは転送元と転送先のファイルを比較し差分を送信する事で、ネットワーク転送料を最小に抑える。従量課金のaws向き
rsync+sshの組み合わせがでふぉ。古いバージョンのrsyncでOpenSSHを使った転送するためには、クライアント側の環境変数RSYNC_RSHをsshにする。具体的には2.6.6以降のバージョンならデフォでsshを使うようになっているから、環境変数を指定する必要はない。
#bash
export RSYNC_RSH=ssh

前提として鍵は設定済み。configでリモートホスト名はdefault-ec2してある。

リモートの$HOME/work/remote.txtを取得
$ rsync ec2-user@default-ec2:work/remote.txt .
リモートの$HOME/work/remote.txtを取得して、ローカルのtodirに保存
$ rsync ec2-user@default-ec2:work/remote.txt todir/
リモートの$HOME/work/test_remote_dirディレクトリを取得して、ローカルのtodirディレクトリに保存する。-rはリカーシブル、-aはアーカイブモード
$ rsync -a -r ec2-user@default-ec2:work/test_remote_dir todir/

リモートの$HOME/workディレクトリをローカルのworkディレクトリと同期させる。
$ rsync -a ec2-user@default-ec2:work/ work/
-aはディレクトリの再帰的な転送を可能にするもので、同時にパーミッションや更新日時、シンボリックリンクも正しく複製する。これがアーカイブモード?

ちなみに、-uは更新モード。より新しいファイルが転送先にある場合、そのファイルを転送しない。-bはバックアップモード。転送先のファイルを上書きする場合、古いファイルのバックアップを作成する。

今度はローカル環境からの転送。

ローカル環境のlocal.txtをリモートのworkディレクトリ下に転送
$ rsync local.txt ec2-user@default-ec2:work
ローカル環境のtestdirディレクトリをリモートのworkディレクトリ下に転送
$ rsync -a testdir ec2-user@default-ec2:work

-vは冗長モード、-zは圧縮をしよう、-e "コマンド"は、sshの代わりに実行するコマンドを指定する

ssl/tls,ssl,sshめも

$
0
0
■ssh接続
gitやec2などのホストに接続する場合に使う。例えばec2の場合。

ssh -i ~/.ssh/hogeKey.pem ec2-user@54.177.○.○

このhogeKey.pemの鍵指定や接続先をIPではなくホスト名にしたい場合、~/.ssh/configに設定を追記しておく必要がある。

$ ssh ec2-user@hogehoge

$ cat ~/.ssh/config
Host hogehoge
User ec2-user
HostName 54.177.○.○
PreferredAuthentications publickey
identityfile ~/.ssh/hogeKey.pem

■sshクライアント、サーバの~/.ssh/の中
クライアント側の~/.ssh/には秘密鍵ir_rdsとかが必要。あと、configファイルとかもある。このconfigファイルはsftp,rsyncでも有効。
サーバ側の~/.ssh/にはauthorized_keysファイルが必要。もちろん、クライアントにもなりうるなら鍵とかも必要。authorized_keysには公開鍵の内容を追記する。行単位で複数設定できる。

■sshのワンラインのコマンド実行
こんなかんじ
$ ssh ec2-user@hogehoge ls -l

■sshのエスケープシーケンス機能

~で始まる。~.が接続の切断とか。~?でへるぷを表示できる

■sshを使ったファイル転送
scpやsftpとか。それぞれrcpやftpを模倣したもの。また、rsync + opensshを併用する方法もある

refs:scp,sftp,rsyncの例

■SSL(Secure Socket Layer)について。

refs book

できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応.../インプレスジャパン
¥2,625
Amazon.co.jp




sslの新しいバージョンはTLS(Transport layer security)という名前で標準化されたため、SSL/TLSといわれる事もある。単にSSLといえば、SSL/TLSの事を指す。

■機能
相互認証。CA(Certificate Authoriy 認証局)を介す。相互認証だけど、サーバ側だけ証明する事が多い。
完全性。改ざんされていないか?電子署名。暗号化で盗聴防止。


OpenSSL。SSLを利用するための必要なソフトウェア。
mod_ssl。OpenSSLを使ってApacheをSSLに対応させるモジュール。

mod_sslは、OpenSSLによりApacheでhttpsを使えるようにするモジュール。mod_sslを使う事でOpenSSLとApacheを連携させることができる。

■CA認証のしくみ

SSL対応のサイトにするときに証明書をCAに発行してもらう。利用者がサイトにアクセスしたら、サイトは証明書をブラウザに返す。ブラウザは自身が持っているCAの情報をもとに、送られた情報が正しいかどうかを確認する。初めてのリクエストでブラウザに登録されていないCAが発行した証明書の場合、ユーザにその証明書を信用するかどうかの確認ダイアログを出す。

このため、まずはCAに自分のサイトを登録し、本物のサイトである事を証明してもらう必要がある。

webサイトの鍵を自分で証明する自己署名という方法がある、自己署名でテスト用の小名称を作れば、CAへの登録をせずにSSL対応のサイトが作れる。が、自己署名ではサーバの認証ができないため、本格運用のときはCAへの登録が必要。

*ってことは、例えば社内で使うようなサイトで暗号化だけが目的なサイトなら自己署名のssl,httpsで十分?


■本格運用

信頼できるサイトにするためにCAに有料で証明書を発行してもらう。主なCAは、ベリサイン、グローバルサイン、サイバートラスト。他にも色々あるけど、違いはただ値段。あとは対応しているブラウザ。マイナーのブラウザには対応していないCaもある。

手順としては、CSR(certificate signing request)ファイルをcaに送る。webサイトの鍵は自己署名で使ったテスト用の鍵でもおっけ。証明書が送られてくる。apacheの場合、この証明書をcsrファイルと同じディレクトリにおき、ssl.confのSSLCertificateFileという項目に証明書のファイル名を設定する。


■自己署名

自己署名を自分のmacでやってみた。結論から言うと、試してみたけどできなかった・・・

apache2 $ pwd
/etc/apache2
apache2 $ ls
extra        magic        original    users
httpd.conf    mime.types    other

・webサーバの鍵を作る
apache2 $ sudo openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
....++++++
..................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
apache2 $

server.keyファイルができた。

apache2 $ ls
extra        magic        original    server.key
httpd.conf    mime.types    other        users

・証明書をつくる。国、location、ホストとかは適当に入力。

apache2 $ sudo openssl req -new -days 3000 -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:tokyo-dayo
Locality Name (eg, city) []:shibuya-dayo
Organization Name (eg, company) [Internet Widgits Pty Ltd]:hoge company
Organizational Unit Name (eg, section) []:hogehoge unit selection
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:hoge@hoge.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

・server.csrができた。

apache2 $ ls
extra        magic        original    server.csr    users
httpd.conf    mime.types    other        server.key
apache2 $

・テスト用に自己署名する

apache2 $ sudo openssl x509 -req -signkey server.key -days 3000 -in server.csr -out server.crt
Signature ok
subject=/C=JP/ST=tokyo-dayo/L=shibuya-dayo/O=hoge company/OU=hogehoge unit selection/CN=www.example.com/emailAddress=hoge@hoge.com
Getting Private key
Enter pass phrase for server.key:

・このままだとapacheを起動するとパスフレーズを要求されるので、鍵のパスフレーズを解除する。

apache2 $ sudo openssl rsa -in server.key.bak -out server.key
Enter pass phrase for server.key.bak:
writing RSA key
apache2 $ ls


・これでapacheを再起動すれば、httpsでリクエストできるはずなのに、今まで通りhttpでしかアクセスできなかった。なぜだ・・・/etc/apache2/extra/httpd-ssl.conf ファイルの中身をみてもデフォルトのままでいけるはずなのに。ここでギブ


refs
鍵交換方式によりssl接続

■sslとsshの違い
refs:sshやらsslやら

mac os xの再インストール、rbenv、home brewの設定

$
0
0
macのスリープ復帰時に音が聞こえなくなる症状を直すために、osの再インストールしたんだけど、rbenv,home brew,MacPortsの環境が完全にぶっ壊れたのでそのときのメモ。あとmysqlを使えなくなってて再インストールした。
(過去にrbenvをインストールして使っていたんだけど、mac os xを再インストールしたら、rbenvを使えなくなった。)

refs:mavericksをアンインストールしたら、rbenvが消えた件

$ rbenv
-bash: rbenv: command not found

で、消えたのかと思い、brewで再度インストールしたら既にインストールされているというメッセージが・・・
$ brew install rbenv ruby-build
Warning: rbenv-0.4.0 already installed
Error: ruby-build-20140110.1 already installed
To install this version, first `brew unlink ruby-build'
Warning: It appears you have MacPorts or Fink installed.
Software installed with other package managers causes known problems for
Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again.

たしかに残ってはいるようだ・・・
$ brew list rbenv
/usr/local/Cellar/rbenv/0.4.0/bin/ruby-local-exec
/usr/local/Cellar/rbenv/0.4.0/bin/rbenv
/usr/local/Cellar/rbenv/0.4.0/completions/ (2 files)
/usr/local/Cellar/rbenv/0.4.0/libexec/ (25 files)

brew doctorは・・・
$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

    /opt/local/bin/apr-1-config
    /opt/local/bin/apu-1-config
    /opt/local/bin/freetype-config
    /opt/local/bin/gpg-error-config
    /opt/local/bin/krb5-config
    /opt/local/bin/libgcrypt-config
    /opt/local/bin/libpng-config
    /opt/local/bin/libpng16-config
    /opt/local/bin/Magick++-config
    /opt/local/bin/Magick-config
    /opt/local/bin/MagickCore-config
    /opt/local/bin/MagickWand-config
    /opt/local/bin/ncurses5-config
    /opt/local/bin/ncursesw5-config
    /opt/local/bin/pcap-config
    /opt/local/bin/pcre-config
    /opt/local/bin/pkg-config
    /opt/local/bin/python2.7-config
    /opt/local/bin/Wand-config
    /opt/local/bin/xml2-config
    /opt/local/bin/xslt-config

Warning: You have MacPorts or Fink installed:
  /opt/local/bin/port

This can cause trouble. You don't have to uninstall them, but you may want to
temporarily move them out of the way, e.g.

  sudo mv /opt/local ~/macports

Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:

    mysql

Warning: Some installed formula are missing dependencies.
You should `brew install` the missing dependencies:

    brew install freetype

Run `brew missing` for more details.

Warning: You have a non-Homebrew 'pkg-config' in your PATH:
  /opt/local/bin/pkg-config

`./configure` may have problems finding brew-installed packages using
this other pkg-config.


メッセージ通りにgreetypeをインストール
$ brew install freetype

これでもまだ、brew doctroを実行しても色々とメッセージが出る

brew listでインストール済みリストを確認
$ brew list
apple-gcc42        gnupg            libpng            mysql-connector-c    rbenv
autoconf        jbig2dec        libtiff            nkf            rbenv-gem-rehash
cmake            jpeg            little-cms2        node            rbenv-gemset
freetype        jq            memcached        openssl            readline
ghostscript        libevent        mysql            pkg-config        ruby-build
$ brew list
apple-gcc42        gnupg            libpng            mysql-connector-c    rbenv
autoconf        jbig2dec        libtiff            nkf            rbenv-gem-rehash
cmake            jpeg            little-cms2        node            rbenv-gemset
freetype        jq            memcached        openssl            readline
ghostscript        libevent        mysql            pkg-config        ruby-build

rbenvが半端な状態で残っているので、アンインストールしてから再度インストール
$ brew install rbenv
Warning: rbenv-0.4.0 already installed
$ brew uninstall rbenv
Uninstalling /usr/local/Cellar/rbenv/0.4.0...

$ brew install rbenv
==> Downloading https://github.com/sstephenson/rbenv/archive/v0.4.0.tar.gz
######################################################################## 100.0%
==> Caveats
To use Homebrew's directories rather than ~/.rbenv add to your profile:
  export RBENV_ROOT=/usr/local/var/rbenv

To enable shims and autocompletion add to your profile:
  if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
==> Summary
🍺  /usr/local/Cellar/rbenv/0.4.0: 31 files, 152K, built in 3 seconds
$ which rbenv
/usr/local/bin/rbenv
$ rbenv versions
  system
* 2.0.0-p353 (set by /Users/shin/.rbenv/version)

一応直ったか・・・

まだ、rbenv installがない
~ $ rbenv install --list
rbenv: no such command `install'

どうやら、rbenv installを実行するには、rbenv-buildが必要らしい。rbenv listで見るとあるんだけどね・・・これもuninstallしてからinsltallする。

で、rbenvを使っている適当なrubyのwebアプリを実行しようとしたら、mysql2/mysq2がloadできないとかいうエラーが出た。で、gemのmysql,mysql2をアンインストールしてインストールし直そうとしたら、これもできない。

つか、brewのインストール済みのツールが全て使えなくなっていた・・・
~ $  brew list
apple-gcc42        jpeg            mysql            rbenv-gem-rehash
autoconf        jq            mysql-connector-c    rbenv-gemset
cmake            libevent        nkf            readline
freetype        libpng            node            ruby-build
ghostscript        libtiff            openssl
gnupg            little-cms2        pkg-config
jbig2dec        memcached        rbenv
~ $

で、こいつらを1個ずつuninstallしてinstallし直した。当然だけど時間がかかった。。。
その後に、gemでmysql,mysql2をインストールしてみたらできた。rubyのアプリの問題も解決。
apple-gcc42あたりが怪しかった。

あと、macportsも入れ直した。

home brew,mac portsについて

$
0
0
macのパッケージ管理ツールbrewとmac portsについて。

refs:marvericksをアップデートしたら、rbenvが消えた件

HomeBrewはMacPortsに比べて、依存関係でインストールされるソフトが少ないため、パッケージ管理ソフトで人気が高まっています。
参照
パッケージ管理システムHomeBrew ~ MacPortsとの違いについて

確かに、portの方がインストール時間が凄く長い。最初はbrew、ダメならportにした方が良さそう。

■HomeBrew
brewはinstall時のログを見て解る通り、ソースからビルドしているらしい。./configure,makeとかをしている

brewのインストール済みリストはbrew listで見れる
$ brew list
apple-gcc42        gnupg            libpng            mysql-connector-c    rbenv
autoconf        jbig2dec        libtiff            nkf            rbenv-gem-rehash
cmake            jpeg            little-cms2        node            rbenv-gemset
freetype        jq            memcached        openssl            readline
ghostscript        libevent        mysql            pkg-config        ruby-build

アンインストール
$ brew uninstall jq
インストール
$ brew install jq

検索
 $ brew search  rbenv
rbenv             rbenv-bundler      rbenv-default-gems   rbenv-readline        rbenv-whatis
rbenv-aliases         rbenv-communal-gems  rbenv-gem-rehash     rbenv-use
rbenv-binstubs         rbenv-ctags      rbenv-gemset           rbenv-vars

へるぷ。あとはdoctor,updateあたりを使った
~ $ brew help
Example usage:
  brew [info | home | options ] [FORMULA...]
  brew install FORMULA...
  brew uninstall FORMULA...
  brew search [foo]
  brew list [FORMULA...]
  brew update
  brew upgrade [FORMULA...]
  brew pin/unpin [FORMULA...]

Troubleshooting:
  brew doctor
  brew install -vd FORMULA
  brew [--env | config]

Brewing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  open https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook

Further help:
  man brew
  brew home
~ $

パッケージの有効化、無効化
$brew link mysql
$brew unlink mysql

brewの設定一覧
$ brew config
HOMEBREW_VERSION: 0.9.5
~

■MacPorts

refs
MacPortsのインストール方法
Macportの使い方
Viewing all 146 articles
Browse latest View live