ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2014年9月21日日曜日

MongoDBのreplicationを利用してfailoverを検証する

mongodの4インスタンスでレプリケーションを構成し、各インスタンスで障害が発生した場合、どのようにフェイルオーバーするかの動作検証を行います。
votesやpriorityの値を変更して、可用性向上(Primaryインスタンスを選出できるか)を試みています。

OS: amazon-linux-ami/2014.03 (64-bit)
MongoDB: 2.6.4


■システム構成概要図


■方針
mongod0/mongo1はアプリケーションと対面するインスタンス。
mongod2はバックアップ用のインスタンス。Priorityの値を0に設定しPrimaryに昇格させない。バックアップ時の計画停止を想定。
mongod3はArbiter固定のインスタンス。
mongo-a/mongo-b/mongo-cの3台のサーバの内、1台に障害が発生してもアプリケーションに対してDBサービス提供が継続できることを目標とする。
さらに、mongod2を計画停止中に他のインスタンスに障害が発生してもPrimaryを選出してサービスが継続できることを目標とする。


■起動用設定ファイル準備
## mongo-aサーバ
[ec2-user@mongo-a ~]$ mkdir /data/mongo_rs/mongod0
[ec2-user@mongo-a ~]$ cat /data/mongo_rs/conf/mongod0.conf
bind_ip=mongo-a
port=30000
dbpath=/data/mongo_rs/mongod0
pidfilepath=/var/run/mongodb/mongod0.pid
logpath=/var/log/mongodb/mongod0.log
logappend=true
fork=true
replSet=rep1
httpinterface=true
[ec2-user@mongo-a ~]$

## mongo-bサーバ
[ec2-user@mongo-b ~]$ mkdir /data/mongo_rs/mongod1
[ec2-user@mongo-b ~]$ cat /data/mongo_rs/conf/mongod1.conf
bind_ip=mongo-b
port=30001
dbpath=/data/mongo_rs/mongod1
pidfilepath=/var/run/mongodb/mongod1.pid
logpath=/var/log/mongodb/mongod1.log
logappend=true
fork=true
replSet=rep1
[ec2-user@mongo-b ~]$
サーバが異なるインスタンスについてはポート番号を変える必要はないが、管理しやすさを考慮してインスタンス番号と合わせてみた。

## mongo-cサーバ
[ec2-user@mongo-c ~]$ mkdir /data/mongo_rs/mongod2
[ec2-user@mongo-c ~]$ mkdir /data/mongo_rs/mongod3
[ec2-user@mongo-c ~]$ cat /data/mongo_rs/conf/mongod2.conf
bind_ip=mongo-c
port=30002
dbpath=/data/mongo_rs/mongod2
pidfilepath=/var/run/mongodb/mongod2.pid
logpath=/var/log/mongodb/mongod2.log
logappend=true
fork=true
replSet=rep1
[ec2-user@mongo-c ~]$ cat /data/mongo_rs/conf/mongod3.conf
bind_ip=mongo-c
port=30003
dbpath=/data/mongo_rs/mongod3
pidfilepath=/var/run/mongodb/mongod3.pid
logpath=/var/log/mongodb/mongod3.log
logappend=true
fork=true
replSet=rep1
[ec2-user@mongo-c ~]$


■起動/停止/ステータス確認スクリプト準備
## 起動用
[ec2-user@mongo-a ~]$ vi start-mongod0.sh
[ec2-user@mongo-a ~]$ cat start-mongod0.sh
sudo mongod --config /data/mongo_rs/conf/mongod0.conf
[ec2-user@mongo-a ~]$ chmod 755 start-mongod0.sh
[ec2-user@mongo-a ~]$
※オフィシャルサイトでは起動前に"ulimit -n 64000"を推奨しているようだが、EC2がしょぼいので今回はパス。

## 停止用
[ec2-user@mongo-a ~]$ vi stop-mongod0.sh
[ec2-user@mongo-a ~]$ cat stop-mongod0.sh
sudo kill -9 `ps -ef | grep mongod0.conf | grep -v grep | awk '{print $2}'`
[ec2-user@mongo-a ~]$ chmod 755 stop-mongod0.sh
[ec2-user@mongo-a ~]$

## 確認用
[ec2-user@mongo-a ~]$ vi mongod-status.sh
[ec2-user@mongo-a ~]$ cat mongod-status.sh
mongo mongo-a:30000 --eval "printjson(rs.status())" | egrep "name|stateStr"
echo ""
mongo mongo-a:30000 --eval "printjson(rs.conf())" | egrep "host|votes|priority|arbiter"
[ec2-user@mongo-a ~]$ chmod 755 mongod-status.sh
[ec2-user@mongo-a ~]$
各サーバに同様のスクリプトを準備。


■mongod起動
[ec2-user@mongo-a ~]$ ./start-mongod0.sh
about to fork child process, waiting until server is ready for connections.
forked process: 1871
child process started successfully, parent exiting
[ec2-user@mongo-a ~]$
同様に各サーバのmongodも起動。


■replication設定
## ReplicaSetの初期化
[ec2-user@mongo-a ~]$ mongo mongo-a:30000
MongoDB shell version: 2.6.4
connecting to: mongo-a:30000/test
> rs.initiate();
{
        "info2" : "no configuration explicitly specified -- making one",
        "me" : "mongo-a:30000",
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}
> rs.conf();
{
        "_id" : "rep1",
        "version" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo-a:30000"
                }
        ]
}
rep1:PRIMARY>

## SecondaryとArbiter追加
rep1:PRIMARY> rs.add( { _id: 1, host: "mongo-b:30001" } )
{ "ok" : 1 }
rep1:PRIMARY> rs.add( { _id: 2, host: "mongo-c:30002", priority: 0, votes: 0 } )
{ "ok" : 1 }
rep1:PRIMARY> rs.add( { _id: 3, host: "mongo-c:30003", arbiterOnly: true } )
{ "ok" : 1 }
rep1:PRIMARY>

## 設定確認
rep1:PRIMARY> rs.conf();
{
        "_id" : "rep1",
        "version" : 4,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo-a:30000"
                },
                {
                        "_id" : 1,
                        "host" : "mongo-b:30001"
                },
                {
                        "_id" : 2,
                        "host" : "mongo-c:30002",
                        "votes" : 0,
                        "priority" : 0
                },
                {
                        "_id" : 3,
                        "host" : "mongo-c:30003",
                        "arbiterOnly" : true
                }
        ]
}
rep1:PRIMARY> rs.status();
{
        "set" : "rep1",
        "date" : ISODate("2014-09-17T07:13:20Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "mongo-a:30000",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 592,
                        "optime" : Timestamp(1410937918, 1),
                        "optimeDate" : ISODate("2014-09-17T07:11:58Z"),
                        "electionTime" : Timestamp(1410937614, 1),
                        "electionDate" : ISODate("2014-09-17T07:06:54Z"),
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "mongo-b:30001",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 103,
                        "optime" : Timestamp(1410937918, 1),
                        "optimeDate" : ISODate("2014-09-17T07:11:58Z"),
                        "lastHeartbeat" : ISODate("2014-09-17T07:13:19Z"),
                        "lastHeartbeatRecv" : ISODate("2014-09-17T07:13:20Z"),
                        "pingMs" : 0,
                        "syncingTo" : "mongo-a:30000"
                },
                {
                        "_id" : 2,
                        "name" : "mongo-c:30002",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 91,
                        "optime" : Timestamp(1410937918, 1),
                        "optimeDate" : ISODate("2014-09-17T07:11:58Z"),
                        "lastHeartbeat" : ISODate("2014-09-17T07:13:19Z"),
                        "lastHeartbeatRecv" : ISODate("2014-09-17T07:13:19Z"),
                        "pingMs" : 2,
                        "syncingTo" : "mongo-a:30000"
                },
                {
                        "_id" : 3,
                        "name" : "mongo-c:30003",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 82,
                        "lastHeartbeat" : ISODate("2014-09-17T07:13:18Z"),
                        "lastHeartbeatRecv" : ISODate("2014-09-17T07:13:18Z"),
                        "pingMs" : 2
                }
        ],
        "ok" : 1
}
rep1:PRIMARY>
votesとpriorityのdefault値は"1"となる。
default値の場合はrs.conf();のOutputとして表示されない。

## 上記設定の目論見:
mongod2のvotesの値を0にすることで、votesの初期合計値は3となる。
mongod2を含む2インスタンスが停止しても、残りインスタンスのvotesの合計値が2となり、過半数を超える(= 2/3)ため、Primaryが選出される。


◆参考: votesの値を変更
rep1:PRIMARY> cfg = rs.conf();
{
        "_id" : "rep1",
        "version" : 4,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo-a:30000"
                },
                {
                        "_id" : 1,
                        "host" : "mongo-b:30001"
                },
(以下略)
rep1:PRIMARY> cfg.members[1].votes = 0;
0
rep1:PRIMARY>
rep1:PRIMARY> rs.reconfig(cfg);
2014-09-17T16:23:13.386+0900 DBClientCursor::init call() failed
2014-09-17T16:23:13.388+0900 trying reconnect to mongo-a:30000 (10.54.10.90) failed
2014-09-17T16:23:13.388+0900 reconnect mongo-a:30000 (10.54.10.90) ok
reconnected to server after rs command (which is normal)

rep1:SECONDARY> rs.conf();
{
        "_id" : "rep1",
        "version" : 5,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo-a:30000"
                },
                {
                        "_id" : 1,
                        "host" : "mongo-b:30001",
                        "votes" : 0
                },
(以下略)
※エラーメッセージの調査はですね、、、後回し。


◆参考: Replicasetから除外
あらかじめ除外対象のmongod(今回はmongod2とする)を停止しておく
[ec2-user@mongo-c ~]$ ./stop-mongod2.sh
[ec2-user@mongo-c ~]$
rep1:PRIMARY> rs.remove("mongo-c:30002");
2014-09-17T16:29:42.296+0900 DBClientCursor::init call() failed
2014-09-17T16:29:42.297+0900 Error: error doing query: failed at src/mongo/shell/query.js:81
2014-09-17T16:29:42.298+0900 trying reconnect to mongo-a:30000 (10.54.10.90) failed
2014-09-17T16:29:42.298+0900 reconnect mongo-a:30000 (10.54.10.90) ok
rep1:PRIMARY>
[ec2-user@mongo-a ~]$ ./mongod-status.sh
                        "name" : "mongo-a:30000",
                        "stateStr" : "PRIMARY",
                        "name" : "mongo-b:30001",
                        "stateStr" : "SECONDARY",
                        "name" : "mongo-c:30003",
                        "stateStr" : "ARBITER",

                        "host" : "mongo-a:30000"
                        "host" : "mongo-b:30001"
                        "host" : "mongo-c:30003",
                        "arbiterOnly" : true
[ec2-user@mongo-a ~]$

## 再び追加
[ec2-user@mongo-c ~]$ ./start-mongod2.sh
about to fork child process, waiting until server is ready for connections.
forked process: 2723
child process started successfully, parent exiting
[ec2-user@mongo-c ~]$
[ec2-user@mongo-a ~]$ mongo mongo-a:30000
MongoDB shell version: 2.6.4
connecting to: mongo-a:30000/test
rep1:PRIMARY> rs.add( { _id: 2, host: "mongo-c:30002", priority: 0, votes: 0 } )
{ "ok" : 1 }
rep1:PRIMARY>


◆rs関連コマンド
rep1:PRIMARY> rs.help();
        rs.status()                     { replSetGetStatus : 1 } checks repl set status
        rs.initiate()                   { replSetInitiate : null } initiates set with default settings
        rs.initiate(cfg)                { replSetInitiate : cfg } initiates set with configuration cfg
        rs.conf()                       get the current configuration object from local.system.replset
        rs.reconfig(cfg)                updates the configuration of a running replica set with cfg (disconnects)
        rs.add(hostportstr)             add a new member to the set with default attributes (disconnects)
        rs.add(membercfgobj)            add a new member to the set with extra attributes (disconnects)
        rs.addArb(hostportstr)          add a new member which is arbiterOnly:true (disconnects)
        rs.stepDown([secs])             step down as primary (momentarily) (disconnects)
        rs.syncFrom(hostportstr)        make a secondary to sync from the given member
        rs.freeze(secs)                 make a node ineligible to become primary for the time specified
        rs.remove(hostportstr)          remove a host from the replica set (disconnects)
        rs.slaveOk()                    shorthand for db.getMongo().setSlaveOk()

        rs.printReplicationInfo()       check oplog size and time range
        rs.printSlaveReplicationInfo()  check replica set members and replication lag
        db.isMaster()                   check who is primary

        reconfiguration helpers disconnect from the database so the shell will display
        an error, even if the command succeeds.
        see also http://:28017/_replSet for additional diagnostic info
rep1:PRIMARY>


■障害シミュレーション
## 正常時
[ec2-user@mongo-a ~]$ ./mongod-status.sh
                        "name" : "mongo-a:30000",
                        "stateStr" : "PRIMARY",
                        "name" : "mongo-b:30001",
                        "stateStr" : "SECONDARY",
                        "name" : "mongo-c:30002",
                        "stateStr" : "SECONDARY",
                        "name" : "mongo-c:30003",
                        "stateStr" : "ARBITER",


## mongo-aサーバ停止
[ec2-user@mongo-c ~]$ ./mongod-status.sh
                        "name" : "mongo-a:30000",
                        "stateStr" : "(not reachable/healthy)",
                        "name" : "mongo-b:30001",
                        "stateStr" : "PRIMARY",
                        "name" : "mongo-c:30002",
                        "stateStr" : "SECONDARY",
                        "name" : "mongo-c:30003",
                        "stateStr" : "ARBITER",

mongo-bサーバのmongod1インスタンスがPRIMARYに選出される。mongod2インスタンスが選出されないのはpriorityの値を"0"に設定しているから。

## mongo-bサーバ停止
[ec2-user@mongo-a ~]$ ./mongod-status.sh
                        "name" : "mongo-a:30000",
                        "stateStr" : "PRIMARY",
                        "name" : "mongo-b:30001",
                        "stateStr" : "(not reachable/healthy)",
                        "name" : "mongo-c:30002",
                        "stateStr" : "SECONDARY",
                        "name" : "mongo-c:30003",
                        "stateStr" : "ARBITER",


## mongo-cサーバ停止
[ec2-user@mongo-a ~]$ ./mongod-status.sh
                        "name" : "mongo-a:30000",
                        "stateStr" : "PRIMARY",
                        "name" : "mongo-b:30001",
                        "stateStr" : "SECONDARY",
                        "name" : "mongo-c:30002",
                        "stateStr" : "(not reachable/healthy)",
                        "name" : "mongo-c:30003",
                        "stateStr" : "(not reachable/healthy)",

Default設定のままだと生きているインスタンスが両方とも"SECONDARY"となってしまうが、votesの設定が功を奏し"PRIMARY"を保持できている。

## mongo-cのSecondaryを停止中にmongo-aサーバ停止
[ec2-user@mongo-c ~]$ ./mongod-status.sh
                        "name" : "mongo-a:30000",
                        "stateStr" : "(not reachable/healthy)",
                        "name" : "mongo-b:30001",
                        "stateStr" : "PRIMARY",
                        "name" : "mongo-c:30002",
                        "stateStr" : "(not reachable/healthy)",
                        "name" : "mongo-c:30003",
                        "stateStr" : "ARBITER",

バックアップ用インスタンスであるmongod2を停止中に、運悪く他のインスタンスが落ちても1つなら大丈夫。
以上、全パターン想定どおりとなりました。


■まとめ
## 3インスタンス構成
votes/priority
設定なし(default)
mongod0
votes:1 priority:1
mongod1
votes:1 priority:1
mongod2
votes:1 priority:1
Initial State PRIMARY SECONDARY ARBITER
Failure mongod0 × PRIMARY ARBITER
mongod1 PRIMARY × ARBITER
mongod2 PRIMARY SECONDARY ×

## 4インスタンス構成(1)
votes/priority
設定なし(default)
mongod0
votes:1 priority:1
mongod1
votes:1 priority:1
mongod2
votes:1 priority:1
mongod3
votes:1 ArbiterOnly
Initial State PRIMARY SECONDARY SECONDARY ARBITER
Failure mongod0 × PRIMARY
(SECONDARY)
SECONDARY
(PRIMARY)
ARBITER
mongod1 PRIMARY × SECONDARY ARBITER
mongod2 PRIMARY SECONDARY × ARBITER
mongod3 PRIMARY SECONDARY SECONDARY ×
mongod0,1 × × SECONDARY ARBITER
mongod0,2 × SECONDARY × ARBITER
mongod0,3 × SECONDARY SECONDARY ×
mongod1,2 SECONDARY × × ARBITER
mongod1,3 × × SECONDARY ARBITER
mongod2,3 SECONDARY SECONDARY × ×
votes/priorityがdefault値の場合、同時に2つのインスタンスに障害が発生した場合アウト!!
つまり、mongod2,mongod3が同居しているmongo-cサーバに障害が発生した時点でPrimaryを保持できなくなりサービスを継続できない。

## 4インスタンス構成(2)
votes/priority
カスタマイズ設定
mongod0
votes:1 priority:1
mongod1
votes:1 priority:1
mongod2
votes:0 priority:0
mongod3
votes:1 ArbiterOnly
Initial State PRIMARY SECONDARY SECONDARY ARBITER
Failure mongod0 × PRIMARY SECONDARY ARBITER
mongod1 PRIMARY × SECONDARY ARBITER
mongod2 PRIMARY SECONDARY × ARBITER
mongod3 PRIMARY SECONDARY SECONDARY ×
mongod0,1 × × SECONDARY ARBITER
mongod0,2 × PRIMARY × ARBITER
mongod0,3 × SECONDARY SECONDARY ×
mongod1,2 PRIMARY × × ARBITER
mongod1,3 × × SECONDARY ARBITER
mongod2,3 PRIMARY SECONDARY × ×
mongod2を計画停止中に他のmongodに障害が発生しても、Primaryを選出できるのでサービス継続可能。


こちらの情報が何かのお役に立てましたら幸いです。
今回はかなり頑張って記載したので、ご利用、転記する場合はコメントいただけるとありがたいです。m(_ _)m

2014年9月7日日曜日

AWS上に実践的なMongoDBのレプリケーション構成を構築

AWS上に実践的なMongoDBのレプリケーション構成を構築する手順をまとめます。
前回MongoDBインストール後に作成したAMIから、異なるAvailability ZoneにEC2を作成します。
ホスト名(mongo1、mongo2)を定義して、なるべくec2-userで操作します。
今回はReplicationの設定が中心です。Shardingの設定は別の機会に…。

OS: amazon-linux-ami/2014.03 (64-bit)
MongoDB: 2.6.4


■システム構成概要図と方針

mongo1サーバ(10.54.10.90) → port=30001:Primary(初期)
mongo2サーバ(10.54.30.152) → port=30002:Secondary(初期)、port=30003:Arbiter
ReplicaSet Name: psa ←名前は適当です。 Primary/Secondary/Arbiterの頭文字。
MongoDBを利用するアプリの都合ではりますが、フェイルオーバー時の差分更新を考慮して、Priorityは設定せず、PrimaryとSecondaryは随時入れ替わることを想定してディレクトリ構成はできるだけ同一とします。
まず、MongoDBをインストールしたAMIを作成し、先にSecondary/Arbiter側から設定します。次にPrimary側でreplication設定すると作業の流れがスムーズです。


******* Secondary/Arbiter *******

前回作成したAMIからmongo2サーバを作成。mongo1サーバとは別のAZを利用する。
replication設定は後ほどPrimaryを想定しているmongo1サーバで実施するため、Secondary/Arbiterの設定を先に進める。


■EC2概要
Instance: i-bb41xxx2 (mongo2)
Private IP: 10.54.30.152
Availability zone: ap-northeast-1c
OS: amazon-linux-ami/2014.03 (64-bit)


■ホスト名変更
[ec2-user@ip-10-54-30-152 ~]$ sudo cp -p /etc/sysconfig/network /etc/sysconfig/network.org
[ec2-user@ip-10-54-30-152 ~]$ sudo vi /etc/sysconfig/network
[ec2-user@ip-10-54-30-152 ~]$ diff /etc/sysconfig/network /etc/sysconfig/network.org
2c2
< HOSTNAME=mongo2
---
> HOSTNAME=localhost.localdomain
[ec2-user@ip-10-54-30-152 ~]$ sudo reboot


■hostsファイルの設定
[ec2-user@mongo2 ~]$ sudo vi /etc/hosts
[ec2-user@mongo2 ~]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain

10.54.10.90   mongo1
10.54.30.152  mongo2
[ec2-user@mongo2 ~]$


■設定ファイル作成(初期SecondaryおよびArbiter)
※Arbiterは固定だが、Primary/Secondaryは入れ替わることを想定しているので、secondary.confのようなファイル名にはしない。
[ec2-user@mongo2 ~]$ vi /data/mongo_rs/conf/mongod.conf
[ec2-user@mongo2 ~]$ cat /data/mongo_rs/conf/mongod.conf
bind_ip=mongo2
port=30002
dbpath=/data/mongo_rs/db
pidfilepath=/var/run/mongodb/mongod.pid
logpath=/var/log/mongodb/mongod.log
logappend=true
fork=true
replSet=psa
[ec2-user@mongo2 ~]$ mkdir /data/mongo_rs/arb
[ec2-user@mongo2 ~]$ vi /data/mongo_rs/conf/arbiter.conf
[ec2-user@mongo2 ~]$ cat /data/mongo_rs/conf/arbiter.conf
bind_ip=mongo2
port=30003
dbpath=/data/mongo_rs/arb
pidfilepath=/var/run/mongodb/arbiter.pid
logpath=/var/log/mongodb/arbiter.log
logappend=true
fork=true
replSet=psa
[ec2-user@mongo2 ~]$


◆参考:ファイルディスクリプタ数上限値拡張
デフォルトの1024→2048に変更。
[ec2-user@mongo2 ~]$ ulimit -a | grep open; ulimit -n 2048; ulimit -a | grep open
open files                      (-n) 1024
open files                      (-n) 2048
[ec2-user@mongo2 ~]$
システムの規模に応じて上限値を拡張する。
MongoDBのオフィシャルサイトでは"64000"を推奨しているようですが、EC2インスタンスがしょぼいので今回は2048に設定してみます。
この値はログインしているシェルで保持されているため、恒久的な設定でないことに注意!


■mongod起動
## Secondary
[ec2-user@mongo2 ~]$ ulimit -n 2048; sudo mongod --config /data/mongo_rs/conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1732
child process started successfully, parent exiting
[ec2-user@mongo2 ~]$
※ec2-userをmongodグループに所属させたり、pidファイルやlogファイルの権限を変えてみたが、ec2-userで起動すると失敗する。
mongodはrootで起動することを想定している??

## Arbiter
[ec2-user@mongo2 ~]$ ulimit -n 2048; sudo mongod --config /data/mongo_rs/conf/arbiter.conf
about to fork child process, waiting until server is ready for connections.
forked process: 17768
child process started successfully, parent exiting
[ec2-user@mongo2 ~]$

## 起動確認
[ec2-user@mongo2 ~]$ /etc/init.d/mongod status
mongod (pid 17768 1732) is running...
[ec2-user@mongo2 ~]$ ps aux | head -1; ps aux | grep mongod
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1732  0.1  3.1 725500 32024 ?        Sl   15:27   0:00 mongod --config /data/mongo_rs/conf/mongod.conf
root     17768  0.1  3.1 717308 32076 ?        Sl   15:32   0:00 mongod --config /data/mongo_rs/conf/arbiter.conf
ec2-user 17862  0.0  0.0 110280   840 pts/0    S+   15:36   0:00 grep mongod
[ec2-user@mongo2 ~]$

## 停止させる場合
mongod stopコマンドだとSecondary/Arbiterのどちらかしか停止できない。
完全に停止させるにはkillコマンドを使用する。


■データベース接続確認
[ec2-user@mongo2 ~]$ mongo mongo2:30002
MongoDB shell version: 2.6.4
connecting to: mongo2:30002/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
> show dbs
admin  (empty)
local  0.078GB
> exit
bye
[ec2-user@mongo2 ~]$ mongo mongo2:30003
MongoDB shell version: 2.6.4
connecting to: mongo2:30003/test
> show dbs
admin  (empty)
local  0.078GB
> exit
bye
[ec2-user@mongo2 ~]$
Secondary/Arbiterの準備はこれで完了です。次はPrimaryの設定になります。


◆参考:MongoDBインスタンスの設定値の確認
[ec2-user@mongo2 ~]$ cat /proc/1732/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             7772                 7772                 processes
Max open files            2048                 2048                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7772                 7772                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
[ec2-user@mongo2 ~]$
※1732はSecondaryのPIDです。


◆参考:MongoDBモニタリングツール
[ec2-user@mongo2 ~]$ mongostat -h mongo2 --port 30002
connected to: mongo2:30002
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn repl       time
    *0      1     *0     *0       0     1|0       0    80m   709m    31m      0 local:0.0%          0       0|0     0|0    62b     3k     1  REC   15:41:44
    *0      1     *0     *0       0     1|0       0    80m   709m    31m      0 local:0.0%          0       0|0     0|0    62b     3k     1  REC   15:41:45
    *0      1     *0     *0       0     1|0       0    80m   709m    31m      0 local:0.0%          0       0|0     0|0    62b     3k     1  REC   15:41:46
    *0      1     *0     *0       0     1|0       0    80m   709m    31m      0 local:0.0%          0       0|0     0|0    62b     3k     1  REC   15:41:47
    *0      1     *0     *0       0     1|0       0    80m   709m    31m      0 local:0.0%          0       0|0     0|0    62b     3k     1  REC   15:41:48
^C
[ec2-user@mongo2 ~]$



******* Primary *******

■EC2概要
Instance: i-eca4xxx5 (mongo1)
Private IP: 10.54.10.90
Availability zone: ap-northeast-1a
OS: amazon-linux-ami/2014.03 (64-bit)


■ホスト名変更
[ec2-user@ip-10-54-10-90 ~]$ sudo cp -p /etc/sysconfig/network /etc/sysconfig/network.org
[ec2-user@ip-10-54-10-90 ~]$ sudo vi /etc/sysconfig/network
[ec2-user@ip-10-54-10-90 ~]$ diff /etc/sysconfig/network /etc/sysconfig/network.org
2c2
< HOSTNAME=mongo1
---
> HOSTNAME=localhost.localdomain
[ec2-user@ip-10-54-10-90 ~]$ sudo reboot


■hostsファイルの設定
[ec2-user@mongo1 ~]$ sudo vi /etc/hosts
[ec2-user@mongo1 ~]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain

10.54.10.90   mongo1
10.54.30.152  mongo2
[ec2-user@mongo1 ~]$
※AWSの場合、SecurityGroupでmongo2サーバとの通信を許可しておいてください。


■設定ファイル作成(初期Primary)
[ec2-user@mongo1 ~]$ vi /data/mongo_rs/conf/mongod.conf
[ec2-user@mongo1 ~]$ cat /data/mongo_rs/conf/mongod.conf
bind_ip=mongo1
port=30001
dbpath=/data/mongo_rs/db
pidfilepath=/var/run/mongodb/mongod.pid
logpath=/var/log/mongodb/mongod.log
logappend=true
fork=true
replSet=psa
[ec2-user@mongo1 ~]$


■mongod起動
[ec2-user@mongo1 ~]$ ulimit -n 2048; sudo mongod --config /data/mongo_rs/conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1615
child process started successfully, parent exiting
[ec2-user@mongo1 ~]$
この時点ではまだreplicationされていませんのでご注意を。


■replication設定
いよいよrepricationの設定です。rs.initiate()実行後にコマンドプロンプトが
"ReplicaSet名:PRIMARY>"に変更されます。

## ReplicaSetの初期化
[ec2-user@mongo1 ~]$ mongo mongo1:30001
MongoDB shell version: 2.6.4
connecting to: mongo1:30001/test
> rs.initiate()
{
        "info2" : "no configuration explicitly specified -- making one",
        "me" : "mongo1:30001",
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}
>
psa:PRIMARY> rs.conf()
{
        "_id" : "psa",
        "version" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo1:30001"
                }
        ]
}
psa:PRIMARY>

## SecandaryとArbiter追加
psa:PRIMARY> rs.add("mongo2:30002")
{ "ok" : 1 }
psa:PRIMARY> rs.addArb("mongo2:30003")
{ "ok" : 1 }
psa:PRIMARY>

## 設定の確認
psa:PRIMARY> rs.conf()
{
        "_id" : "psa",
        "version" : 3,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo1:30001"
                },
                {
                        "_id" : 1,
                        "host" : "mongo2:30002"
                },
                {
                        "_id" : 2,
                        "host" : "mongo2:30003",
                        "arbiterOnly" : true
                }
        ]
}
psa:PRIMARY> rs.status()
{
        "set" : "psa",
        "date" : ISODate("2014-09-04T07:13:39Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "mongo1:30001",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 461,
                        "optime" : Timestamp(1409814782, 1),
                        "optimeDate" : ISODate("2014-09-04T07:13:02Z"),
                        "electionTime" : Timestamp(1409814552, 2),
                        "electionDate" : ISODate("2014-09-04T07:09:12Z"),
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "mongo2:30002",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 53,
                        "optime" : Timestamp(1409814782, 1),
                        "optimeDate" : ISODate("2014-09-04T07:13:02Z"),
                        "lastHeartbeat" : ISODate("2014-09-04T07:13:38Z"),
                        "lastHeartbeatRecv" : ISODate("2014-09-04T07:13:38Z"),
                        "pingMs" : 2,
                        "syncingTo" : "mongo1:30001"
                },
                {
                        "_id" : 2,
                        "name" : "mongo2:30003",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 37,
                        "lastHeartbeat" : ISODate("2014-09-04T07:13:38Z"),
                        "lastHeartbeatRecv" : ISODate("2014-09-04T07:13:39Z"),
                        "pingMs" : 2
                }
        ],
        "ok" : 1
}
psa:PRIMARY>

## 念のためSecondary側でも確認
[ec2-user@mongo1 ~]$ mongo mongo2:30002
MongoDB shell version: 2.6.4
connecting to: mongo2:30002/test
psa:SECONDARY> rs.conf()
{
        "_id" : "psa",
        "version" : 3,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo1:30001"
                },
                {
                        "_id" : 1,
                        "host" : "mongo2:30002"
                },
                {
                        "_id" : 2,
                        "host" : "mongo2:30003",
                        "arbiterOnly" : true
                }
        ]
}
psa:SECONDARY>


◆参考:replicationの動作検証
Primaryで作成した1000件のレコードが、Secondaryにレプリケートされいているか確認。

## レコード作成(Primary)
[ec2-user@mongo1 ~]$ mongo mongo1:30001/reptest
MongoDB shell version: 2.6.4
connecting to: mongo1:30001/reptest
psa:PRIMARY> for(var i=0; i<1000; i++) db.repcoll.insert( { "uid":i, "value":Math.floor(Math.random()*1000+1) } )
WriteResult({ "nInserted" : 1 })
psa:PRIMARY> db.repcoll.count()
1000
psa:PRIMARY> db.repcoll.find()
{ "_id" : ObjectId("5408144a85529d4cbf6eb107"), "uid" : 0, "value" : 929 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb108"), "uid" : 1, "value" : 547 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb109"), "uid" : 2, "value" : 26 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10a"), "uid" : 3, "value" : 813 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10b"), "uid" : 4, "value" : 609 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10c"), "uid" : 5, "value" : 992 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10d"), "uid" : 6, "value" : 75 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10e"), "uid" : 7, "value" : 449 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10f"), "uid" : 8, "value" : 817 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb110"), "uid" : 9, "value" : 422 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb111"), "uid" : 10, "value" : 133 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb112"), "uid" : 11, "value" : 280 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb113"), "uid" : 12, "value" : 613 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb114"), "uid" : 13, "value" : 830 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb115"), "uid" : 14, "value" : 790 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb116"), "uid" : 15, "value" : 155 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb117"), "uid" : 16, "value" : 915 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb118"), "uid" : 17, "value" : 317 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb119"), "uid" : 18, "value" : 903 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb11a"), "uid" : 19, "value" : 89 }
Type "it" for more
psa:PRIMARY>

## 確認(Secondary)
[ec2-user@mongo1 ~]$ mongo mongo2:30002/reptest
MongoDB shell version: 2.6.4
connecting to: mongo2:30002/reptest
psa:SECONDARY> db.repcoll.count()
2014-09-04T16:30:49.898+0900 count failed: { "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" } at src/mongo/shell/query.js:191
psa:SECONDARY>
→読み取り許可設定が必要。
psa:SECONDARY> db.getMongo().setSlaveOk()
psa:SECONDARY> db.repcoll.count()
1000
psa:SECONDARY> db.repcoll.find()
{ "_id" : ObjectId("5408144a85529d4cbf6eb107"), "uid" : 0, "value" : 929 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb108"), "uid" : 1, "value" : 547 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb109"), "uid" : 2, "value" : 26 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10a"), "uid" : 3, "value" : 813 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10b"), "uid" : 4, "value" : 609 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10c"), "uid" : 5, "value" : 992 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10d"), "uid" : 6, "value" : 75 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10e"), "uid" : 7, "value" : 449 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb10f"), "uid" : 8, "value" : 817 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb110"), "uid" : 9, "value" : 422 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb111"), "uid" : 10, "value" : 133 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb112"), "uid" : 11, "value" : 280 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb113"), "uid" : 12, "value" : 613 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb114"), "uid" : 13, "value" : 830 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb115"), "uid" : 14, "value" : 790 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb116"), "uid" : 15, "value" : 155 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb117"), "uid" : 16, "value" : 915 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb118"), "uid" : 17, "value" : 317 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb119"), "uid" : 18, "value" : 903 }
{ "_id" : ObjectId("5408144a85529d4cbf6eb11a"), "uid" : 19, "value" : 89 }
Type "it" for more
psa:SECONDARY>
Primaryに登録されたデータがSecondaryにレプリケートされていることを確認できました。


◆参考:MongoDBフェイルオーバー検証
Primaryに障害が発生した場合、SecandaryがPrimaryに昇格するか確認してみます。

## mongo1サーバのPrimary停止前(Arbiterに接続して確認)
[ec2-user@mongo1 ~]$ mongo mongo2:30003 --eval "printjson(rs.status())" | egrep "name|stateStr"
                        "name" : "mongo1:30001",
                        "stateStr" : "PRIMARY",
                        "name" : "mongo2:30002",
                        "stateStr" : "SECONDARY",
                        "name" : "mongo2:30003",
                        "stateStr" : "ARBITER",
[ec2-user@mongo1 ~]$
mongo ホスト名:ポート番号 --eval "printjson(mongoシェル)" とすると、Bashから直接mongoシェルを実行できます。

## mongo1サーバのPrimary停止
[ec2-user@mongo1 ~]$ ps -ef | grep mongo
root      1615     1  1 16:05 ?        00:02:43 mongod --config /data/mongo_rs/conf/mongod.conf
ec2-user  3681  2574  0 19:04 pts/0    00:00:00 grep mongo
[ec2-user@mongo1 ~]$ sudo kill -9 1615
[ec2-user@mongo1 ~]$
[ec2-user@mongo1 ~]$ mongo mongo2:30003 --eval "printjson(rs.status())" | egrep "name|stateStr"
                        "name" : "mongo1:30001",
                        "stateStr" : "(not reachable/healthy)",
                        "name" : "mongo2:30002",
                        "stateStr" : "PRIMARY",
                        "name" : "mongo2:30003",
                        "stateStr" : "ARBITER",
[ec2-user@mongo1 ~]$
SecandaryがPrimaryに昇格しました!!
※この後、元Primaryを復旧させると優先順位を定義していないのでSecondaryとなります。


長文にお付き合いいただきありがとうございました。こちらの情報が何かのお役に立てましたら幸いです。

2014年9月6日土曜日

AmazonLinuxにMongoDBをインストール

AWS上に実践的なMongoDBのReplication構成を構築するための事前作業としてAmazonLinuxにMongoDBをインストールする手順をまとめます。
データベース格納先のディレクトリは/(ルート)とは別ボリュームのEBSを利用するようにしています。
インストール完了後にAMIを作成します。
次回以降は、このAMIから複数のEC2を作成し、MonogoDBのReplication設定を進めていきます。併せてお読みください。

OS: amazon-linux-ami/2014.03 (64-bit)
MongoDB: 2.6.4



■EC2概要
Instance: i-eca4xxx5
Private IP: 10.54.10.90
Availability zone: ap-northeast-1a
OS: amazon-linux-ami/2014.03 (64-bit)


■AmazonLinux初期設定作業
TimeZone変更: Asia/Tokyo
iptables off
[ec2-user@ip-10-54-10-90 ~]$ sudo date; sudo cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime; sudo date
[ec2-user@ip-10-54-10-90 ~]$ sudo chkconfig iptables off; sudo chkconfig --list iptables
[ec2-user@ip-10-54-10-90 ~]$ sudo chkconfig ip6tables off; sudo chkconfig --list ip6tables
(出力結果省略)


■yum repository の追加
[ec2-user@ip-10-54-10-90 ~]$ sudo vi /etc/yum.repos.d/mongodb.repo
[ec2-user@ip-10-54-10-90 ~]$ cat /etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=0
[ec2-user@ip-10-54-10-90 ~]$
オフィシャルサイトでは"enabled=1"となっているが、他用途でyumコマンドを実行したときにmongodb.repoをデフォルトで参照する必要はないので"enabled=0"とする。


■Install MongoDB
[ec2-user@ip-10-54-10-90 ~]$ sudo yum --enablerepo=mongodb install mongodb-org
(中略)
============================================================================
 Package                      Arch        Version       Repository     Size
============================================================================
Installing:
 mongodb-org                  x86_64      2.6.4-1       mongodb       4.6 k
Installing for dependencies:
 mongodb-org-mongos           x86_64      2.6.4-1       mongodb       6.8 M
 mongodb-org-server           x86_64      2.6.4-1       mongodb       9.0 M
 mongodb-org-shell            x86_64      2.6.4-1       mongodb       4.3 M
 mongodb-org-tools            x86_64      2.6.4-1       mongodb        89 M

Transaction Summary
============================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 109 M
Installed size: 276 M
(以下略)


■version確認
[ec2-user@ip-10-54-10-90 ~]$ mongod -version
db version v2.6.4
2014-09-04T11:28:44.181+0900 git version: 3a830be0eb92d772aa855ebb711ac91d658ee910
[ec2-user@ip-10-54-10-90 ~]$


■MongoDBのデフォルト設定確認
[ec2-user@ip-10-54-10-90 ~]$ grep -v "^#\|^$" /etc/mongod.conf
logpath=/var/log/mongodb/mongod.log
logappend=true
fork=true
dbpath=/var/lib/mongo
pidfilepath=/var/run/mongodb/mongod.pid
bind_ip=127.0.0.1
[ec2-user@ip-10-54-10-90 ~]$
※コメント行と空白行を非表示。


■mongod自動起動off
replication設定でmongodを起動したいので、 デフォルト設定のmongodは起動しないようにしておく。
[ec2-user@ip-10-54-10-90 ~]$ sudo chkconfig mongod off; sudo chkconfig --list mongod
mongod          0:off   1:off   2:off   3:off   4:off   5:off   6:off
[ec2-user@ip-10-54-10-90 ~]$


■データベース格納用ボリューム準備
あらかじめ、EC2作成時に別EBS(今回は10GBとした)を作成しておく。

## EBSのデバイス名を確認
[ec2-user@ip-10-54-10-90 ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
??xvda1 202:1    0   8G  0 part /
xvdb    202:16   0  10G  0 disk
[ec2-user@ip-10-54-10-90 ~]$

## ext4でフォーマット
[ec2-user@ip-10-54-10-90 ~]$ sudo mkfs.ext4 /dev/xvdb
mke2fs 1.42.8 (20-Jun-2013)
(中略)
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[ec2-user@ip-10-54-10-90 ~]$

## 自動マウント設定
[ec2-user@ip-10-54-10-90 ~]$ sudo vi /etc/rc.local
[ec2-user@ip-10-54-10-90 ~]$ tail -2 /etc/rc.local
# for MongoDB data
mount /dev/xvdb /data
[ec2-user@ip-10-54-10-90 ~]$


■データベース格納先ディレクトリ準備
[ec2-user@ip-10-54-10-90 ~]$ sudo mkdir /data
[ec2-user@ip-10-54-10-90 ~]$ sudo mount /dev/xvdb /data
[ec2-user@ip-10-54-10-90 ~]$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     ext4      7.8G  1.2G  6.5G  16% /
devtmpfs       devtmpfs  486M   60K  486M   1% /dev
tmpfs          tmpfs     499M     0  499M   0% /dev/shm
/dev/xvdb      ext4      9.8G   23M  9.2G   1% /data
[ec2-user@ip-10-54-10-90 ~]$

## データベース格納先作成(replication考慮)
[ec2-user@ip-10-54-10-90 ~]$ sudo mkdir -p /data/mongo_rs/db

## configファイル格納先作成と所有者変更
[ec2-user@ip-10-54-10-90 ~]$ sudo mkdir /data/mongo_rs/conf
[ec2-user@ip-10-54-10-90 ~]$ sudo chown ec2-user: -R /data/mongo_rs


★AMI(201409xx_mongo_install_only)作成
データ格納先を独自に指定したいので、デフォルト設定のままではMongoDBを起動しない。
mongo1サーバおよび、mongo2サーバでホスト名を定義したそれぞれのレプリケーション用のmongod.confを作成するためこの時点でAMIを作成しておく。


今回の手順はここまでとします。Replication設定についてはこちらの記事にまとめます。
こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年8月10日日曜日

AWS上のLinuxにリモートデスクトップ接続

xrdpを利用してAWS上のLinuxサーバにリモートデスクトップ接続する手順をまとめます。
接続元PCはWindows7を利用しました。標準のリモートデスクトップ接続クライアントで接続できるため
とても便利ですが、ベースがVNCのため微妙に描画が遅く感じられることは否めません。
今回利用したAMIのLinuxのデフォルト言語は英語ですが、日本語化する手順も記載します。

OS: RHEL 6.5 (64-bit)
xrdp: 0.5.0
リモートデスクトップ接続クライアント: 6.3.9600


■EC2準備
Quick Startにある下記のAMIからEC2を作成しました。
Red Hat Enterprise Linux 6.5 (PV) - ami-e9aee0e8 (64-bit) / ami-cfbff1ce (32-bit)


■初期ログイン&rootパスワード変更
Using username "ec2-user".
Authenticating with public key "imported-openssh-key"
[ec2-user@ip-10-86-30-138 ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
[ec2-user@ip-10-86-30-138 ~]$ sudo passwd
Changing password for user root.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
[ec2-user@ip-10-86-30-138 ~]$
## ec2-userのパスワードも設定
[root@ip-10-86-30-138 ~]# passwd ec2-user


■SELinux/iptables無効化
[ec2-user@ip-10-86-30-138 ~]$ su -
Password:
[root@ip-10-86-30-138 ~]# vi /etc/selinux/config
[root@ip-10-86-30-138 ~]# grep disabled /etc/selinux/config
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
[root@ip-10-86-30-138 ~]# chkconfig iptables off; chkconfig --list iptables
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@ip-10-86-30-138 ~]# chkconfig ip6tables off; chkconfig --list ip6tables
ip6tables       0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@ip-10-86-30-138 ~]#
AWS上のEC2へのアクセス制御はとりあえずSecurityGroupで。


■TimeZoneとHostName変更
ここの手順は省略可です。後々の運用を考慮して設定しておきます。
[root@ip-10-86-30-138 ~]# date; cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime; date
Sun Aug 10 00:15:37 EDT 2014
cp: overwrite `/etc/localtime'? y
Sun Aug 10 13:15:39 JST 2014
[root@ip-10-86-30-138 ~]#
[root@ip-10-86-30-138 ~]# vi /etc/sysconfig/network
[root@ip-10-86-30-138 ~]# grep HOSTNAME /etc/sysconfig/network
# HOSTNAME=ip-10-86-30-138.localdomain
HOSTNAME=rhel65-rdp
[root@ip-10-86-30-138 ~]# reboot


■GnomeGUIインストール
[root@rhel65-rdp ~]# yum groupinstall "X Window System" "GNOME Desktop Environment" "Desktop"
(中略)
Install     273 Package(s)
Upgrade       6 Package(s)
(以下省略)


■vncserverのインストールと起動準備
xrdpはVNCを利用しているようなので。

## VNCインストール
[root@rhel65-rdp ~]# yum install tigervnc-server
(中略)
===============================================================================
 Package           Arch   Version       Repository                        Size
===============================================================================
Installing:
 tigervnc-server   x86_64 1.1.0-8.el6_5 rhui-REGION-rhel-server-releases 1.1 M
Installing for dependencies:
 xorg-x11-fonts-misc
                   noarch 7.2-9.1.el6   rhui-REGION-rhel-server-releases 5.8 M

Transaction Summary
===============================================================================
Install       2 Package(s)
(以下省略)
## VNCサーバ設定
[root@rhel65-rdp ~]# vi /etc/sysconfig/vncservers
[root@rhel65-rdp ~]# tail -3 /etc/sysconfig/vncservers
VNCSERVERS="1:ec2-user 2:root"
VNCSERVERARGS[1]="-geometry 1024x768"
VNCSERVERARGS[2]="-geometry 1024x768"
[root@rhel65-rdp ~]# chkconfig vncserver on; chkconfig --list vncserver
vncserver       0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@rhel65-rdp ~]#
## VNC接続ユーザパスワード設定
[root@rhel65-rdp ~]# vncpasswd
Password:
Verify:
[root@rhel65-rdp ~]# su - ec2-user
[ec2-user@rhel65-rdp ~]$ vncpasswd
Password:
Verify:
[ec2-user@rhel65-rdp ~]$
## VNCサーバ起動
[root@rhel65-rdp ~]# /etc/init.d/vncserver start
Starting VNC server: 1:ec2-user xauth:  creating new authority file /home/ec2-user/.Xauthority
xauth: (stdin):1:  bad display name "rhel65-rdp:1" in "add" command

New 'rhel65-rdp:1 (ec2-user)' desktop is rhel65-rdp:1

Creating default startup script /home/ec2-user/.vnc/xstartup
Starting applications specified in /home/ec2-user/.vnc/xstartup
Log file is /home/ec2-user/.vnc/rhel65-rdp:1.log

2:root xauth:  creating new authority file /root/.Xauthority
xauth: (stdin):1:  bad display name "rhel65-rdp:2" in "add" command

New 'rhel65-rdp:2 (root)' desktop is rhel65-rdp:2

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/rhel65-rdp:2.log

                                                           [  OK  ]
[root@rhel65-rdp ~]#


■EPELリポジトリのインストール
[root@rhel65-rdp ~]# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
Retrieving http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
warning: /var/tmp/rpm-tmp.D24qpa: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing...                ########################################### [100%]
   1:epel-release           ########################################### [100%]
[root@rhel65-rdp ~]#
## yum実行時にEPELリポジトリをデフォルト参照しない設定
[root@rhel65-rdp ~]# sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo


■xrdpのインストール
[root@rhel65-rdp ~]# yum --enablerepo=epel install xrdp
(中略)
================================================================================
 Package        Arch             Version                   Repository      Size
================================================================================
Installing:
 xrdp           x86_64           0.5.0-0.13.el6            epel           240 k

Transaction Summary
================================================================================
Install       1 Package(s)
(以下省略)
[root@rhel65-rdp ~]# chkconfig xrdp on; chkconfig --list xrdp
xrdp            0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@rhel65-rdp ~]#


■日本語キーボード対応
km-e0010411.iniをダウンロードしてシンボリックリンクを作成。
[root@rhel65-rdp ~]# cd /etc/xrdp/
[root@rhel65-rdp xrdp]# wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
[root@rhel65-rdp xrdp]# mv km-e0010411.ini km-0411.ini
[root@rhel65-rdp xrdp]# ln -s km-0411.ini  km-e0010411.ini
[root@rhel65-rdp xrdp]# ln -s km-0411.ini  km-e0200411.ini
[root@rhel65-rdp xrdp]# ln -s km-0411.ini  km-e0210411.ini
[root@rhel65-rdp xrdp]#


■xrdp起動
[root@rhel65-rdp xrdp]# /etc/init.d/xrdp start
Starting xrdp:                                             [  OK  ]
Starting xrdp-sesman:                                      [  OK  ]
[root@rhel65-rdp xrdp]#


■リモートデスクトップ接続
事前にSecurity GroupでPort 3389を開放しておきます。
Windows7のRDPクライアントから接続します。バージョンは、6.3.9600です。


AWS上のLinuxにリモートデスクトップで接続できました。



■GUIを日本語化
せっかくなのでGUIを日本語化してみます。

## 日本語化に必要なパッケージインストール
[root@rhel65-rdp ~]# yum groupinstall "Japanese Support"
(中略)
==================================================================================
 Package            Arch   Version         Repository                        Size
==================================================================================
Installing:
 Red_Hat_Enterprise_Linux-Release_Notes-6-ja-JP
                    noarch 5-1.el6         rhui-REGION-rhel-server-releases  98 k
 ibus-anthy         x86_64 1.2.1-3.el6     rhui-REGION-rhel-server-releases 133 k
 ipa-gothic-fonts   noarch 003.02-4.2.el6  rhui-REGION-rhel-server-releases 3.6 M
 ipa-mincho-fonts   noarch 003.02-3.1.el6  rhui-REGION-rhel-server-releases 5.0 M
 ipa-pgothic-fonts  noarch 003.02-4.1.el6  rhui-REGION-rhel-server-releases 3.6 M
 ipa-pmincho-fonts  noarch 003.02-3.1.el6  rhui-REGION-rhel-server-releases 5.0 M
 man-pages-ja       noarch 20100115-6.el6  rhui-REGION-rhel-server-releases 5.5 M
 vlgothic-fonts     noarch 20091202-2.el6  rhui-REGION-rhel-server-releases 2.2 M
 vlgothic-p-fonts   noarch 20091202-2.el6  rhui-REGION-rhel-server-releases 2.2 M
Installing for dependencies:
 anthy              x86_64 9100h-10.1.el6  rhui-REGION-rhel-server-releases 6.0 M
 ibus               x86_64 1.3.4-6.el6     rhui-REGION-rhel-server-releases 337 k
 ibus-gtk           x86_64 1.3.4-6.el6     rhui-REGION-rhel-server-releases  26 k
 ibus-libs          x86_64 1.3.4-6.el6     rhui-REGION-rhel-server-releases  99 k
 im-chooser         x86_64 1.3.1-3.el6     rhui-REGION-rhel-server-releases 144 k
 imsettings         x86_64 0.108.0-3.6.el6 rhui-REGION-rhel-server-releases 190 k
 imsettings-libs    x86_64 0.108.0-3.6.el6 rhui-REGION-rhel-server-releases 103 k
 kasumi             x86_64 2.5-1.1.el6     rhui-REGION-rhel-server-releases  71 k
 libgxim            x86_64 0.3.3-3.1.el6   rhui-REGION-rhel-server-releases 126 k
 notify-python      x86_64 0.1.1-10.el6    rhui-REGION-rhel-server-releases  26 k
 pyxdg              noarch 0.18-1.el6      rhui-REGION-rhel-server-releases  79 k
 vlgothic-fonts-common
                    noarch 20091202-2.el6  rhui-REGION-rhel-server-releases  16 k

Transaction Summary
==================================================================================
Install      21 Package(s)
(以下省略)
## OSの言語を日本語を設定し再起動
[root@rhel65-rdp ~]# vi /etc/sysconfig/i18n
[root@rhel65-rdp ~]# cp -p /etc/sysconfig/i18n /etc/sysconfig/i18n.org
[root@rhel65-rdp ~]# vi /etc/sysconfig/i18n
[root@rhel65-rdp ~]# cat /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"
[root@rhel65-rdp ~]# vi .bash_profile
[root@rhel65-rdp ~]# tail -1 .bash_profile
export LANG=ja_JP.UTF-8
[root@rhel65-rdp ~]#
[root@rhel65-rdp ~]# reboot
## 再びリモートデスクトップ接続

日本語GUI画面が表示されました。


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年8月2日土曜日

CentOS 7 yumリポジトリにisoファイルを指定

普通にyumコマンドを実行するとインターネット上のリポジトリから最新のモジュールを利用しますが、
CentOS7のインストールisoファイルのパッケージをインストールする手順です。

CentOS7のCD/DVDドライブにマウントしたisoファイルのマウント位置は下記となります。
/run/media/root/CentOS\ 7\ x86_64/

OS: CentOS 7.0 (64-bit)
isoファイル: CentOS-7.0-1406-x86_64-Everything.iso


■isoファイルの中身を確認
[root@centos70-example-com ~]# ll /run/media/root/CentOS\ 7\ x86_64/
total 1399
-rw-r--r--. 1 root root      14 Jul  5 01:01 CentOS_BuildTag
drwxr-xr-x. 3 root root    2048 Jul  5 00:59 EFI
-rw-r--r--. 1 root root     611 Jul  5 01:01 EULA
-rw-r--r--. 1 root root   18009 Jul  5 01:01 GPL
drwxr-xr-x. 2 root root    2048 Jul  5 00:59 LiveOS
drwxr-xr-x. 2 root root 1392640 Jul  5 00:59 Packages
-rw-r--r--. 1 root root    1690 Jul  5 01:01 RPM-GPG-KEY-CentOS-7
-rw-r--r--. 1 root root    1690 Jul  5 01:01 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root    2883 Jul  5 07:13 TRANS.TBL
drwxr-xr-x. 3 root root    2048 Jul  5 00:59 images
drwxr-xr-x. 2 root root    2048 Jul  5 00:59 isolinux
drwxr-xr-x. 2 root root    4096 Jul  5 01:01 repodata
[root@centos70-example-com ~]#


■yumレポジトリの設定
[root@centos70-example-com ~]# vi /etc/yum.repos.d/CentOS-7.0-x86_64-iso.repo
[root@centos70-example-com ~]# cat /etc/yum.repos.d/CentOS-7.0-x86_64-iso.repo
[centos70_iso]
name=CentOS-7.0-x86_64-iso
baseurl=file:///run/media/root/CentOS\ 7\ x86_64/
enabled=0
gpgcheck=1
gpgkey=file:///run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7
[root@centos70-example-com ~]#
1行目:レポジトリ名(適当に)
2行目:ラベル名(適当に)
3行目:isoファイルのパス
4行目:常に参照する場合は1。0の場合、yumオプションで"--enablerepo="を指定
5行目:GPG認証チェックを有効化する
6行目:GPG-KEYのファイルパスを指定


■インターネット上のリポジトリのhttpdを参照
[root@centos70-example-com ~]# yum info httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Available Packages
Name        : httpd
Arch        : x86_64
Version     : 2.4.6
Release     : 18.el7.centos
Size        : 2.7 M
Repo        : updates/7/x86_64
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

[root@centos70-example-com ~]#


■isoファイル内のhttpdを参照
[root@centos70-example-com ~]# yum --disablerepo=\* --enablerepo=centos70_iso info httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
Name        : httpd
Arch        : x86_64
Version     : 2.4.6
Release     : 17.el7.centos.1
Size        : 2.7 M
Repo        : centos70_iso
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

[root@centos70-example-com ~]#
--disablerepo=\* オプションでインターネット上のリポジトリを参照しないようにしています。
Releaseがインターネット上のリポジトリより1つ前のバージョンとなっています。


■isoファイル内のhttpdをyumでインストール
[root@centos70-example-com ~]# yum --disablerepo=\* --enablerepo=centos70_iso install httpd
(中略)
==========================================================================
 Package          Arch        Version                 Repository     Size
==========================================================================
Installing:
 httpd            x86_64      2.4.6-17.el7.centos.1   centos70_iso  2.7 M
Installing for dependencies:
 apr              x86_64      1.4.8-3.el7             centos70_iso  103 k
 apr-util         x86_64      1.5.2-6.el7             centos70_iso   92 k
 httpd-tools      x86_64      2.4.6-17.el7.centos.1   centos70_iso   77 k

Transaction Summary
==========================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 2.9 M
Installed size: 9.9 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------
Total                                      49 MB/s | 2.9 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : apr-1.4.8-3.el7.x86_64                             1/4
  Installing : apr-util-1.5.2-6.el7.x86_64                        2/4
  Installing : httpd-tools-2.4.6-17.el7.centos.1.x86_64           3/4
  Installing : httpd-2.4.6-17.el7.centos.1.x86_64                 4/4
  Verifying  : httpd-2.4.6-17.el7.centos.1.x86_64                 1/4
  Verifying  : apr-util-1.5.2-6.el7.x86_64                        2/4
  Verifying  : apr-1.4.8-3.el7.x86_64                             3/4
  Verifying  : httpd-tools-2.4.6-17.el7.centos.1.x86_64           4/4

Installed:
  httpd.x86_64 0:2.4.6-17.el7.centos.1

Dependency Installed:
  apr.x86_64 0:1.4.8-3.el7  apr-util.x86_64 0:1.5.2-6.el7
  httpd-tools.x86_64 0:2.4.6-17.el7.centos.1

Complete!
[root@centos70-example-com ~]#
依存関係も考慮してインストールされました。

## version確認
[root@centos70-example-com ~]# rpm -q httpd
httpd-2.4.6-17.el7.centos.1.x86_64
[root@centos70-example-com ~]#

## httpd起動
[root@centos70-example-com ~]# systemctl start httpd
[root@centos70-example-com ~]#
※CentOS 7 から起動方法が変更になっています。

こちらの情報が何かのお役に立てましたら幸いです。サイト継続のご協力ありがとうございます。m(_ _)m

2014年7月26日土曜日

CentOS 7 httpdの起動と停止

CentOS 6系まではプロセスの起動は init スクリプト (/etc/init.d/) を利用していましたが、
CentOS 7系では systemctl コマンドを利用する方針に変更されています。また、chkconfig 
コマンドも廃止され、systemctl コマンドに統合されました。このあたりの手順をhttpdを例として
確認します。



■httpd起動(&起動確認)
[root@centos70 ~]# systemctl start httpd.service
[root@centos70 ~]# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: active (running) since Sat 2014-07-25 15:33:43 JST; 5s ago
 Main PID: 2750 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           |-2750 /usr/sbin/httpd -DFOREGROUND
           |-2751 /usr/sbin/httpd -DFOREGROUND
           |-2752 /usr/sbin/httpd -DFOREGROUND
           |-2753 /usr/sbin/httpd -DFOREGROUND
           |-2754 /usr/sbin/httpd -DFOREGROUND
           `-2755 /usr/sbin/httpd -DFOREGROUND

Jul 25 15:33:43 centos70 systemd[1]: Starting The Apache HTTP Server...
Jul 25 15:33:43 centos70 httpd[2750]: AH00558: httpd: Could not reliably determine the server's fully qualified...essage
Jul 25 15:33:43 centos70 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos70 ~]#

## ブラウザでの確認
※事前にFireWallサービスを停止しておく
[root@centos70 ~]# systemctl stop firewalld.service


■httpd停止(&停止確認)
[root@centos70 ~]# systemctl stop httpd.service
[root@centos70 ~]# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: inactive (dead)

Jul 25 15:32:17 centos70 systemd[1]: Starting The Apache HTTP Server...
Jul 25 15:32:18 centos70 httpd[2713]: AH00558: httpd: Could not reliably determine the server's fully qualified...essage
Jul 25 15:32:18 centos70 systemd[1]: Started The Apache HTTP Server.
Jul 25 15:33:08 centos70 systemd[1]: Stopping The Apache HTTP Server...
(以下略)


■httpd自動起動設定(&設定確認)
[root@centos70 ~]# systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@centos70 ~]# systemctl list-unit-files | grep httpd
httpd.service                               enabled
[root@centos70 ~]#


■httpd自動起動解除(&設定確認)
[root@centos70 ~]# systemctl disable httpd.service
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@centos70 ~]# systemctl list-unit-files | grep httpd
httpd.service                               disabled
[root@centos70 ~]#


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年7月11日金曜日

ec2-user以外のユーザでAmazon Linuxにログインする

Amazon Linuxに個別のユーザでssh接続する必要があったりするのでその手順をまとめてみます。

本来は接続元で秘密鍵と公開鍵を作成し、接続先に公開鍵を配置しますが、秘密鍵と公開鍵のペアはどこで作成してもよいので、今回は接続先のLinuxサーバ上で鍵ペアを作成し、秘密鍵を接続元PCに持ち帰る手順を記載します。

OS: Amazon Linux 2014.03 (64-bit)
putty: 0.63


■ユーザ作成
[ec2-user@ip-10-86-30-32 ~]$ sudo useradd user001
[ec2-user@ip-10-86-30-32 ~]$ sudo passwd user001

## sudo権限付与(必要に応じて)
[ec2-user@ip-10-86-30-32 ~]$ sudo visudo
--- 99行目あたりに追記 ---
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user001 ALL=(ALL)       ALL ←追記


■秘密鍵(id_rsa)と公開鍵(id_rsa.pub)生成
[ec2-user@ip-10-86-30-32 ~]$ su - user001
Password:
[user001@ip-10-86-30-32 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user001/.ssh/id_rsa):
Created directory '/home/user001/.ssh'.
Enter passphrase (empty for no passphrase): ←パスフレーズ入力
Enter same passphrase again: ←パスフレーズ入力
Your identification has been saved in /home/user001/.ssh/id_rsa.
Your public key has been saved in /home/user001/.ssh/id_rsa.pub.
The key fingerprint is:
c8:30:57:dc:60:cc:ae:f1:5a:32:b0:8e:11:c5:a2:bc user001@ip-10-86-30-32
The key's randomart image is:
+--[ RSA 2048]----+
|       ++o       |
|    . .o+ .      |
|    oo.+         |
|    +=+.o .      |
| . . *oS+o       |
|  o .  o o       |
|   .   o         |
|  D   .          |
|                 |
+-----------------+
[user001@ip-10-86-30-32 ~]$
.sshディレクトリのパーミッションは700で自動生成されます。

## authorized_keysに公開鍵を登録
[user001@ip-10-86-30-32 ~]$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[user001@ip-10-86-30-32 ~]$ chmod 600 .ssh/authorized_keys
[user001@ip-10-86-30-32 ~]$ ll .ssh/
total 12
-rw------- 1 user001 user001  404 Jul 11 14:28 authorized_keys
-rw------- 1 user001 user001 1766 Jul 11 14:28 id_rsa
-rw-r--r-- 1 user001 user001  404 Jul 11 14:28 id_rsa.pub
[user001@ip-10-86-30-32 ~]$


■秘密鍵をローカルPCに保存
[user001@ip-10-86-30-32 ~]$ cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,8781E4937DE990254DE539C21439ABE1

XyHTJcMs/9BQpoctuFG4NeR8vo6yxu/XaXyy01HtobrLU+QFUMo96rZsl79DWroL
doa5RfBNKcT1/IQHuNNOrlJMJmvz7mQyN+j2tC6GPohE/ai+ytGCeWUGwkvysXBl
(中略)
xZun1TzEp9z1F19+EWmTkQzzULCY/faZK4jmnTPEMnoLYlfJQfYmwxbGaRm3v58S
+VuQ30YJsOfSUrhFG5kF0xHcepBN6AkzViYvUdc1/wf35dNlzCaw0tfeQWpcMaqQ
-----END RSA PRIVATE KEY-----
[user001@ip-10-86-30-32 ~]$
クリップボード経由でローカルPCの"C:\aws_keys\user001.pem"に保存。

## id_rsaとid_rsa.pubの削除
[user001@ip-10-86-30-32 ~]$ rm .ssh/id_rsa*
[user001@ip-10-86-30-32 ~]$ ll .ssh/
total 4
-rw------- 1 user001 user001 404 Jul 11 14:28 authorized_keys
[user001@ip-10-86-30-32 ~]$
セキュリティ的にも、作業済みで不要となった鍵は削除しておく。


■PUTTY用の鍵を生成
PUTTYGEN.EXEを利用してuser001.pem → user001.ppk を生成。




"C:\aws_keys\user001.ppk"に保存。


■user001でログイン


Using username "user001".
Authenticating with public key "imported-openssh-key"
Passphrase for key "imported-openssh-key": ←パスフレーズ入力
Last login: Sun Jul 11 15:02:20 2014

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.03-release-notes/
9 package(s) needed for security, out of 19 available
Run "sudo yum update" to apply all updates.
[user001@ip-10-86-30-32 ~]$
ログイン成功!!


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年7月10日木曜日

Amazon Linux に ffmpeg をインストール

Amazon Linux に ffmpeg をインストールする手順です。
メジャーどころのコーデックを組み込むために事前準備が大変だったので
そのあたりの手順をまとめています。

OS: Amazon Linux AMI release 2014.03 (64-bit)
ffmpeg: 2.2.4


■開発ツールインストール
[root@da-svr01 ~]# yum groupinstall "Development Tools"
(以下省略)


■yumリポジトリ追加
## rpmforge
[root@da-svr01 ~]# rpm -Uhv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
Retrieving http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
warning: /var/tmp/rpm-tmp.5VvNxx: Header V3 DSA/SHA1 Signature, key ID 6bxxx9e6: NOKEY
Preparing...                          ########################### [100%]
Updating / installing...
   1:rpmforge-release-0.5.3-1.el7.rf  ########################### [100%]
[root@da-svr01 ~]#
※デフォルトで利用することになっているので、パッケージインストール作業後は変更する。

## epel
[root@da-svr01 ~]# rpm -Uhv http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
Retrieving http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
warning: /var/tmp/rpm-tmp.D4D5xx: Header V3 RSA/SHA256 Signature, key ID 06xxx895: NOKEY
Preparing...                          ########################### [100%]
        package epel-release-6-8.9.amzn1.noarch (which is newer than epel-release-6-8.noarch) is already installed
[root@da-svr01 ~]#
※既にリリース済みの模様。


■関連パッケージのインストール
## その1
[root@da-svr01 ~]# yum install SDL-devel a52dec a52dec-devel alsa-lib-devel faac faac-devel faad2 faad2-devel
No package SDL-devel available.
No package a52dec available.
No package a52dec-devel available.
No package faac available.
No package faac-devel available.
No package faad2 available.
No package faad2-devel available.
=================================================================================
 Package                 Arch        Version                Repository      Size
=================================================================================
Installing:
 alsa-lib-devel          x86_64      1.0.22-3.9.amzn1       amzn-main      1.4 M

Transaction Summary
=================================================================================
Install  1 Package

## その2
[root@da-svr01 ~]# yum install freetype-devel giflib imlib2 imlib2-devel lame lame-devel libICE-devel libSM-devel
No package imlib2 available.
No package imlib2-devel available.
No package lame available.
No package lame-devel available.
=================================================================================
 Package                     Arch      Version                Repository    Size
=================================================================================
Installing:
 freetype-devel              x86_64    2.3.11-14.13.amzn1     amzn-main    410 k
 libICE-devel                x86_64    1.0.6-1.4.amzn1        amzn-main     11 k
 libSM-devel                 x86_64    1.2.1-2.6.amzn1        amzn-main     12 k
Installing for dependencies:
 xorg-x11-proto-devel        noarch    7.6-25.8.amzn1         amzn-main    304 k

Transaction Summary
=================================================================================
Install  3 Packages (+1 Dependent package)

## その3
[root@da-svr01 ~]# yum install libXau-devel libXdmcp-devel libXext-devel libXrandr-devel libXrender-devel libXt-devel
=================================================================================
 Package                  Arch       Version                 Repository     Size
=================================================================================
Installing:
 libXau-devel             x86_64     1.0.6-4.9.amzn1         amzn-main      13 k
 libXdmcp-devel           x86_64     1.1.1-3.8.amzn1         amzn-main      11 k
 libXext-devel            x86_64     1.3.1-2.8.amzn1         amzn-main      73 k
 libXrandr-devel          x86_64     1.4.0-1.6.amzn1         amzn-main      20 k
 libXrender-devel         x86_64     0.9.7-2.7.amzn1         amzn-main      15 k
 libXt-devel              x86_64     1.1.3-1.7.amzn1         amzn-main     504 k
Installing for dependencies:
 libX11-devel             x86_64     1.5.0-4.10.amzn1        amzn-main     1.0 M
 libXdmcp                 x86_64     1.1.1-3.8.amzn1         amzn-main      32 k
 libXrandr                x86_64     1.4.0-1.6.amzn1         amzn-main      38 k
 libXt                    x86_64     1.1.3-1.7.amzn1         amzn-main     206 k
 libxcb-devel             x86_64     1.8.1-1.14.amzn1        amzn-main     186 k

Transaction Summary
=================================================================================
Install  6 Packages (+5 Dependent packages)

## その4
[root@da-svr01 ~]# yum install id3tag-devel libogg libvorbis vorbis-tools mesa-libGL-devel mesa-libGLU-devel xorg-x11-proto-devel xvidcore xvidcore-devel zlib-devel
No package id3tag-devel available.
Package xorg-x11-proto-devel-7.6-25.8.amzn1.noarch already installed and latest version
No package xvidcore available.
No package xvidcore-devel available.
Package zlib-devel-1.2.7-10.17.amzn1.x86_64 already installed and latest version
=================================================================================
 Package                   Arch     Version                    Repository   Size
=================================================================================
Installing:
 libogg                    x86_64   2:1.1.4-2.1.5.amzn1        amzn-main    18 k
 libvorbis                 x86_64   1:1.2.3-4.6.amzn1          amzn-main   210 k
 mesa-libGL-devel          x86_64   9.0-0.9.30.amzn1           amzn-main   515 k
 mesa-libGLU-devel         x86_64   9.0-0.9.30.amzn1           amzn-main   112 k
 vorbis-tools              x86_64   1:1.2.0-7.6.amzn1          amzn-main   195 k
Installing for dependencies:
 flac                      x86_64   1.2.1-6.1.6.amzn1          amzn-main   292 k
 libXdamage                x86_64   1.1.3-4.7.amzn1            amzn-main    19 k
 libXdamage-devel          x86_64   1.1.3-4.7.amzn1            amzn-main   9.0 k
 libXfixes                 x86_64   5.0-3.6.amzn1              amzn-main    25 k
 libXfixes-devel           x86_64   5.0-3.6.amzn1              amzn-main    12 k
 libXxf86vm                x86_64   1.1.2-2.7.amzn1            amzn-main    23 k
 libXxf86vm-devel          x86_64   1.1.2-2.7.amzn1            amzn-main    17 k
 libao                     x86_64   0.8.8-7.1.6.amzn1          amzn-main    29 k
 libdrm                    x86_64   2.4.39-1.9.amzn1           amzn-main   133 k
 libdrm-devel              x86_64   2.4.39-1.9.amzn1           amzn-main    84 k
 libpciaccess              x86_64   0.13.1-3.10.amzn1          amzn-main    25 k
 mesa-dri-drivers          x86_64   9.0-0.9.30.amzn1           amzn-main   4.9 M
 mesa-dri-filesystem       x86_64   9.0-0.9.30.amzn1           amzn-main    46 k
 mesa-dri1-drivers         x86_64   7.11-8.6.amzn1             amzn-main   4.4 M
 mesa-libGL                x86_64   9.0-0.9.30.amzn1           amzn-main   200 k
 mesa-libGLU               x86_64   9.0-0.9.30.amzn1           amzn-main   251 k
 speex                     x86_64   1.2-0.12.rc1.1.7.amzn1     amzn-main   102 k

Transaction Summary
=================================================================================
Install  5 Packages (+17 Dependent packages)

## その5
[root@da-svr01 ~]# yum install amrnb-devel amrwb-devel libtheora theora-tools
No package amrnb-devel available.
No package amrwb-devel available.
No package libtheora available.
No package theora-tools available.
Error: Nothing to do
yumでは取得できず・・・。(T-T)

## その6
[root@da-svr01 ~]# yum install glibc ncurses-devel nasm libvpx* opencore-amr-devel
No package opencore-amr-devel available.
=================================================================================
 Package                 Arch     Version                    Repository     Size
=================================================================================
Installing:
 libvpx                  x86_64   1.2.0-1.0.amzn1            amzn-main     222 k
 libvpx-devel            x86_64   1.2.0-1.0.amzn1            amzn-main     358 k
 libvpx-utils            x86_64   1.2.0-1.0.amzn1            amzn-main      80 k
 nasm                    x86_64   2.10.07-5.6.amzn1          amzn-main     467 k
 ncurses-devel           x86_64   5.7-3.20090208.13.amzn1    amzn-main     687 k
Updating:
 glibc                   x86_64   2.17-55.84.amzn1           amzn-updates  5.6 M
Updating for dependencies:
 glibc-common            x86_64   2.17-55.84.amzn1           amzn-updates   28 M
 glibc-devel             x86_64   2.17-55.84.amzn1           amzn-updates  1.1 M
 glibc-headers           x86_64   2.17-55.84.amzn1           amzn-updates  721 k
 nss-softokn-freebl      x86_64   3.16.0-1.19.amzn1          amzn-updates  219 k

Transaction Summary
=================================================================================
Install  5 Packages
Upgrade  1 Package  (+4 Dependent packages)

## その7
[root@da-svr01 ~]# yum install yasm
=================================================================================
 Package          Arch           Version                 Repository         Size
=================================================================================
Installing:
 yasm             x86_64         1.2.0-1.2.amzn1         amzn-main         847 k

Transaction Summary
=================================================================================
Install  1 Package

■コーデックのインストール
## 基本的なコーデック
[root@da-svr01 ~]# mkdir src
[root@da-svr01 ~]# cd src
[root@da-svr01 src]# wget http://www8.mplayerhq.hu/MPlayer/releases/codecs/all-20110131.tar.bz2
[root@da-svr01 src]# bzip2 -dc all-20110131.tar.bz2 | tar xf -
[root@da-svr01 src]# mkdir /usr/local/lib/codecs/
[root@da-svr01 src]# mkdir /usr/local/lib64/codecs/
[root@da-svr01 src]# cp all-20110131/* /usr/local/lib/codecs/
[root@da-svr01 src]# cp all-20110131/* /usr/local/lib64/codecs/
[root@da-svr01 src]# chmod -R 755 /usr/local/lib/codecs/
[root@da-svr01 src]# chmod -R 755 /usr/local/lib64/codecs/

## LibOgg
[root@da-svr01 src]# wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
[root@da-svr01 src]# tar -zxf libogg-1.3.2.tar.gz
[root@da-svr01 src]# cd libogg-1.3.2
[root@da-svr01 libogg-1.3.2]# ./configure
[root@da-svr01 libogg-1.3.2]# make
[root@da-svr01 libogg-1.3.2]# make install

## Libvorbis
[root@da-svr01 src]# wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz
[root@da-svr01 src]# tar -zxf libvorbis-1.3.4.tar.gz
[root@da-svr01 src]# cd libvorbis-1.3.4
[root@da-svr01 libvorbis-1.3.4]# ./configure
[root@da-svr01 libvorbis-1.3.4]# make
[root@da-svr01 libvorbis-1.3.4]# make install

## Libtheora
[root@da-svr01 src]# wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz
[root@da-svr01 src]# tar -zxf libtheora-1.1.1.tar.gz; cd libtheora-1.1.1
[root@da-svr01 libtheora-1.1.1]# ./configure
[root@da-svr01 libtheora-1.1.1]# make
[root@da-svr01 libtheora-1.1.1]# make install

## Libvpx
[root@da-svr01 src]# git clone http://git.chromium.org/webm/libvpx.git
[root@da-svr01 src]# cd libvpx/
[root@da-svr01 libvpx]# ./configure --enable-shared --extra-cflags=-fPIC
[root@da-svr01 libvpx]# make
[root@da-svr01 libvpx]# make install

## Aacenc
[root@da-svr01 src]# wget http://downloads.sourceforge.net/opencore-amr/vo-aacenc-0.1.3.tar.gz
[root@da-svr01 src]# tar -zxf vo-aacenc-0.1.3.tar.gz; cd vo-aacenc-0.1.3
[root@da-svr01 vo-aacenc-0.1.3]# ./configure --enable-shared
[root@da-svr01 vo-aacenc-0.1.3]# make
[root@da-svr01 vo-aacenc-0.1.3]# make install

## X264
[root@da-svr01 src]# git clone git://git.videolan.org/x264.git
[root@da-svr01 src]# cd x264/
[root@da-svr01 x264]# ./configure --enable-shared --extra-cflags=-fPIC --extra-asflags=-D__PIC__
[root@da-svr01 x264]# make
[root@da-svr01 x264]# make install

## libfaac
[root@da-svr01 src]# wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
[root@da-svr01 src]# tar -zxf faac-1.28.tar.gz; cd faac-1.28
[root@da-svr01 faac-1.28]# ./bootstrap
aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'
automake: warning: autoconf input should be named 'configure.ac', not 'configure.in'
common/mp4v2/Makefile.am:1: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
automake: warning: autoconf input should be named 'configure.ac', not 'configure.in'
frontend/Makefile.am:10: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
libfaac/Makefile.am:11: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
[root@da-svr01 faac-1.28]# ./configure
[root@da-svr01 faac-1.28]# make
(中略)
make[3]: *** [3gp.o] Error 1
make[3]: Leaving directory `/root/src/faac-1.28/common/mp4v2'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/root/src/faac-1.28/common'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/src/faac-1.28'
make: *** [all] Error 2
[root@da-svr01 faac-1.28]#
エラー発生!!

バージョンを1.26にして再チャレンジ。
[root@da-svr01 src]# wget http://downloads.sourceforge.net/faac/faac-1.26.tar.gz
[root@da-svr01 src]# tar -zxf faac-1.26.tar.gz
[root@da-svr01 src]# cd faac
[root@da-svr01 faac]# ./bootstrap
[root@da-svr01 faac]# ./configure
[root@da-svr01 faac]# make
[root@da-svr01 faac]# make install

## lame
[root@da-svr01 src]# wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
[root@da-svr01 src]# tar -zxf lame-3.99.5.tar.gz; cd lame-3.99.5
[root@da-svr01 lame-3.99.5]# ./configure
[root@da-svr01 lame-3.99.5]# make
[root@da-svr01 lame-3.99.5]# make install

## libxvid
[root@da-svr01 src]# wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
[root@da-svr01 src]# tar -zxf xvidcore-1.3.2.tar.gz
[root@da-svr01 src]# cd xvidcore/build/generic/
[root@da-svr01 generic]# ./configure
[root@da-svr01 generic]# make
[root@da-svr01 generic]# make install


■ライブラリの登録
[root@da-svr01 ~]# export LD_LIBRARY_PATH=/usr/local/lib/
[root@da-svr01 ~]# sh -c "echo /usr/local/lib > /etc/ld.so.conf.d/custom-libs.conf"
[root@da-svr01 ~]# ldconfig
[root@da-svr01 ~]#


■ffmpegのインストール
gitからインストーラを取得して現時点の安定さ新バージョンである2.2.4を指定。
オプションが多いのでconfigure用のスクリプトを準備。
[root@da-svr01 src]# git clone git://source.ffmpeg.org/ffmpeg.git
[root@da-svr01 src]# cd ffmpeg/
[root@da-svr01 ffmpeg]# ./version.sh
N-64586-g8153847
[root@da-svr01 ffmpeg]# git checkout n2.2.4
[root@da-svr01 ffmpeg]# vi configure.sh
[root@da-svr01 ffmpeg]# chmod 755 configure.sh
[root@da-svr01 ffmpeg]# cat configure.sh
./configure \
--enable-version3 \
--enable-libvpx \
--enable-libfaac \
--enable-libmp3lame \
--enable-libtheora \
--enable-libvorbis \
--enable-libx264 \
--enable-libvo-aacenc \
--enable-libxvid \
--disable-ffplay \
--enable-shared \
--enable-gpl \
--enable-postproc \
--enable-nonfree \
--enable-avfilter \
--enable-pthreads \
--extra-cflags=-fPIC
[root@da-svr01 ffmpeg]#

## configure
[root@da-svr01 ffmpeg]# ./configure.sh
install prefix            /usr/local
source path               .
C compiler                gcc
C library                 glibc
ARCH                      x86 (generic)
big-endian                no
runtime cpu detection     yes
yasm                      yes
MMX enabled               yes
(中略)
License: nonfree and unredistributable
Creating config.mak, config.h, and doc/config.texi...
[root@da-svr01 ffmpeg]#

## make
サーバスペックにもよりますが、20分くらいかかるかも。
[root@da-svr01 ffmpeg]# date
Thu Jul 10 11:18:28 JST 2014
[root@da-svr01 ffmpeg]# make
(中略)
LD      ffserver_g
CP      ffserver
STRIP   ffserver
[root@da-svr01 ffmpeg]# date
Thu Jul 10 11:30:50 JST 2014
[root@da-svr01 ffmpeg]#

## make install
[root@da-svr01 ffmpeg]# make install
INSTALL doc/ffmpeg.1
INSTALL doc/ffprobe.1
(中略)
INSTALL libavutil/ffversion.h
INSTALL libavutil/libavutil.pc
[root@da-svr01 ffmpeg]#


■バージョン確認
[root@da-svr01 ~]# ffmpeg -version
ffmpeg version 2.2.4
built on Jul 10 2014 11:30:37 with gcc 4.8.2 (GCC) 20131212 (Red Hat 4.8.2-7)
configuration: --enable-version3 --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvo-aacenc --enable-libxvid --disable-ffplay --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --extra-cflags=-fPIC
libavutil      52. 66.100 / 52. 66.100
libavcodec     55. 52.102 / 55. 52.102
libavformat    55. 33.100 / 55. 33.100
libavdevice    55. 10.100 / 55. 10.100
libavfilter     4.  2.100 /  4.  2.100
libswscale      2.  5.102 /  2.  5.102
libswresample   0. 18.100 /  0. 18.100
libpostproc    52.  3.100 / 52.  3.100
[root@da-svr01 ~]#

## インストール先
[root@da-svr01 ~]# ll /usr/local/bin/
total 3256
-rwxr-xr-x 1 root root   35968 Jul 10 10:55 faac
-rwxr-xr-x 1 root root  191768 Jul 10 11:31 ffmpeg
-rwxr-xr-x 1 root root  121528 Jul 10 11:31 ffprobe
-rwxr-xr-x 1 root root  116576 Jul 10 11:31 ffserver
-rwxr-xr-x 1 root root  485827 Jul 10 10:44 lame
-rwxr-xr-x 1 root root  518907 Jul 10 10:20 vpxdec
-rwxr-xr-x 1 root root  491710 Jul 10 10:21 vpxenc
-rwxr-xr-x 1 root root 1357069 Jul 10 10:29 x264
[root@da-svr01 ~]#


■対応フォーマット一覧
[root@da-svr01 ~]# ffmpeg -formats
ffmpeg version 2.2.4 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jul 10 2014 11:30:37 with gcc 4.8.2 (GCC) 20131212 (Red Hat 4.8.2-7)
  configuration: --enable-version3 --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvo-aacenc --enable-libxvid --disable-ffplay --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --extra-cflags=-fPIC
  libavutil      52. 66.100 / 52. 66.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 33.100 / 55. 33.100
  libavdevice    55. 10.100 / 55. 10.100
  libavfilter     4.  2.100 /  4.  2.100
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
File formats:
 D. = Demuxing supported
 .E = Muxing supported
 --
  E 3g2             3GP2 (3GPP2 file format)
  E 3gp             3GP (3GPP file format)
 D  4xm             4X Technologies
  E a64             a64 - video for Commodore 64
 D  aac             raw ADTS AAC (Advanced Audio Coding)
 DE ac3             raw AC-3
 D  act             ACT Voice file format
 D  adf             Artworx Data Format
 D  adp             ADP
  E adts            ADTS AAC (Advanced Audio Coding)
 DE adx             CRI ADX
 D  aea             MD STUDIO audio
 D  afc             AFC
 DE aiff            Audio IFF
 DE alaw            PCM A-law
 DE alsa            ALSA audio output
 DE amr             3GPP AMR
 D  anm             Deluxe Paint Animation
 D  apc             CRYO APC
 D  ape             Monkey's Audio
 D  aqtitle         AQTitle subtitles
 DE asf             ASF (Advanced / Active Streaming Format)
  E asf_stream      ASF (Advanced / Active Streaming Format)
 DE ass             SSA (SubStation Alpha) subtitle
 DE ast             AST (Audio Stream)
 DE au              Sun AU
 DE avi             AVI (Audio Video Interleaved)
  E avm2            SWF (ShockWave Flash) (AVM2)
 D  avr             AVR (Audio Visual Research)
 D  avs             AVS
 D  bethsoftvid     Bethesda Softworks VID
 D  bfi             Brute Force & Ignorance
 D  bin             Binary text
 D  bink            Bink
 DE bit             G.729 BIT file format
 D  bmv             Discworld II BMV
 D  boa             Black Ops Audio
 D  brstm           BRSTM (Binary Revolution Stream)
 D  c93             Interplay C93
 DE caf             Apple CAF (Core Audio Format)
 DE cavsvideo       raw Chinese AVS (Audio Video Standard) video
 D  cdg             CD Graphics
 D  cdxl            Commodore CDXL video
 D  concat          Virtual concatenation script
  E crc             CRC testing
 DE data            raw data
 DE daud            D-Cinema audio
 D  dfa             Chronomaster DFA
 DE dirac           raw Dirac
 DE dnxhd           raw DNxHD (SMPTE VC-3)
 D  dsicin          Delphine Software International CIN
 DE dts             raw DTS
 D  dtshd           raw DTS-HD
 DE dv              DV (Digital Video)
 D  dv1394          DV1394 A/V grab
  E dvd             MPEG-2 PS (DVD VOB)
 D  dxa             DXA
 D  ea              Electronic Arts Multimedia
 D  ea_cdata        Electronic Arts cdata
 DE eac3            raw E-AC-3
 D  epaf            Ensoniq Paris Audio File
 DE f32be           PCM 32-bit floating-point big-endian
 DE f32le           PCM 32-bit floating-point little-endian
  E f4v             F4V Adobe Flash Video
 DE f64be           PCM 64-bit floating-point big-endian
 DE f64le           PCM 64-bit floating-point little-endian
 DE fbdev           Linux framebuffer
 DE ffm             FFM (FFserver live feed)
 DE ffmetadata      FFmpeg metadata in text
 D  film_cpk        Sega FILM / CPK
 DE filmstrip       Adobe Filmstrip
 DE flac            raw FLAC
 D  flic            FLI/FLC/FLX animation
 DE flv             FLV (Flash Video)
  E framecrc        framecrc testing
  E framemd5        Per-frame MD5 testing
 D  frm             Megalux Frame
 DE g722            raw G.722
 DE g723_1          raw G.723.1
 D  g729            G.729 raw format demuxer
 DE gif             GIF Animation
 D  gsm             raw GSM
 DE gxf             GXF (General eXchange Format)
 DE h261            raw H.261
 DE h263            raw H.263
 DE h264            raw H.264 video
  E hds             HDS Muxer
 DE hevc            raw HEVC video
  E hls             Apple HTTP Live Streaming
 D  hls,applehttp   Apple HTTP Live Streaming
 D  hnm             Cryo HNM v4
 DE ico             Microsoft Windows ICO
 D  idcin           id Cinematic
 D  idf             iCE Draw File
 D  iff             IFF (Interchange File Format)
 DE ilbc            iLBC storage
 DE image2          image2 sequence
 DE image2pipe      piped image2 sequence
 D  ingenient       raw Ingenient MJPEG
 D  ipmovie         Interplay MVE
  E ipod            iPod H.264 MP4 (MPEG-4 Part 14)
 DE ircam           Berkeley/IRCAM/CARL Sound Format
  E ismv            ISMV/ISMA (Smooth Streaming)
 D  iss             Funcom ISS
 D  iv8             IndigoVision 8000 video
 DE ivf             On2 IVF
 DE jacosub         JACOsub subtitle format
 D  jv              Bitmap Brothers JV
 DE latm            LOAS/LATM
 D  lavfi           Libavfilter virtual input device
 D  lmlm4           raw lmlm4
 D  loas            LOAS AudioSyncStream
 D  lvf             LVF
 D  lxf             VR native stream (LXF)
 DE m4v             raw MPEG-4 video
  E matroska        Matroska
 D  matroska,webm   Matroska / WebM
  E md5             MD5 testing
 D  mgsts           Metal Gear Solid: The Twin Snakes
 DE microdvd        MicroDVD subtitle format
 DE mjpeg           raw MJPEG video
  E mkvtimestamp_v2 extract pts as timecode v2 format, as defined by mkvtoolnix
 DE mlp             raw MLP
 D  mm              American Laser Games MM
 DE mmf             Yamaha SMAF
  E mov             QuickTime / MOV
 D  mov,mp4,m4a,3gp,3g2,mj2 QuickTime / MOV
  E mp2             MP2 (MPEG audio layer 2)
 DE mp3             MP3 (MPEG audio layer 3)
  E mp4             MP4 (MPEG-4 Part 14)
 D  mpc             Musepack
 D  mpc8            Musepack SV8
 DE mpeg            MPEG-1 Systems / MPEG program stream
  E mpeg1video      raw MPEG-1 video
  E mpeg2video      raw MPEG-2 video
 DE mpegts          MPEG-TS (MPEG-2 Transport Stream)
 D  mpegtsraw       raw MPEG-TS (MPEG-2 Transport Stream)
 D  mpegvideo       raw MPEG video
  E mpjpeg          MIME multipart JPEG
 D  mpl2            MPL2 subtitles
 D  mpsub           MPlayer subtitles
 D  msnwctcp        MSN TCP Webcam stream
 D  mtv             MTV
 DE mulaw           PCM mu-law
 D  mv              Silicon Graphics Movie
 D  mvi             Motion Pixels MVI
 DE mxf             MXF (Material eXchange Format)
  E mxf_d10         MXF (Material eXchange Format) D-10 Mapping
 D  mxg             MxPEG clip
 D  nc              NC camera feed
 D  nistsphere      NIST SPeech HEader REsources
 D  nsv             Nullsoft Streaming Video
  E null            raw null video
 DE nut             NUT
 D  nuv             NuppelVideo
 DE ogg             Ogg
 DE oma             Sony OpenMG audio
  E opus            Opus
 DE oss             OSS (Open Sound System) playback
 D  paf             Amazing Studio Packed Animation File
 D  pjs             PJS (Phoenix Japanimation Society) subtitles
 D  pmp             Playstation Portable PMP
  E psp             PSP MP4 (MPEG-4 Part 14)
 D  psxstr          Sony Playstation STR
 D  pva             TechnoTrend PVA
 D  pvf             PVF (Portable Voice Format)
 D  qcp             QCP
 D  r3d             REDCODE R3D
 DE rawvideo        raw video
 D  realtext        RealText subtitle format
 D  redspark        RedSpark
 D  rl2             RL2
 DE rm              RealMedia
 DE roq             raw id RoQ
 D  rpl             RPL / ARMovie
 D  rsd             GameCube RSD
 DE rso             Lego Mindstorms RSO
 DE rtp             RTP output
 DE rtsp            RTSP output
 DE s16be           PCM signed 16-bit big-endian
 DE s16le           PCM signed 16-bit little-endian
 DE s24be           PCM signed 24-bit big-endian
 DE s24le           PCM signed 24-bit little-endian
 DE s32be           PCM signed 32-bit big-endian
 DE s32le           PCM signed 32-bit little-endian
 DE s8              PCM signed 8-bit
 D  sami            SAMI subtitle format
 DE sap             SAP output
 D  sbg             SBaGen binaural beats script
 D  sdp             SDP
 D  sdr2            SDR2
  E segment         segment
 D  shn             raw Shorten
 D  siff            Beam Software SIFF
 DE smjpeg          Loki SDL MJPEG
 D  smk             Smacker
  E smoothstreaming Smooth Streaming Muxer
 D  smush           LucasArts Smush
 D  sol             Sierra SOL
 DE sox             SoX native
 DE spdif           IEC 61937 (used on S/PDIF - IEC958)
  E speex           Speex
 DE srt             SubRip subtitle
  E stream_segment,ssegment streaming segment muxer
 D  subviewer       SubViewer subtitle format
 D  subviewer1      SubViewer v1 subtitle format
  E svcd            MPEG-2 PS (SVCD)
 DE swf             SWF (ShockWave Flash)
 D  tak             raw TAK
 D  tedcaptions     TED Talks captions
  E tee             Multiple muxer tee
 D  thp             THP
 D  tiertexseq      Tiertex Limited SEQ
 D  tmv             8088flex TMV
 DE truehd          raw TrueHD
 D  tta             TTA (True Audio)
 D  tty             Tele-typewriter
 D  txd             Renderware TeXture Dictionary
 DE u16be           PCM unsigned 16-bit big-endian
 DE u16le           PCM unsigned 16-bit little-endian
 DE u24be           PCM unsigned 24-bit big-endian
 DE u24le           PCM unsigned 24-bit little-endian
 DE u32be           PCM unsigned 32-bit big-endian
 DE u32le           PCM unsigned 32-bit little-endian
 DE u8              PCM unsigned 8-bit
  E uncodedframecrc uncoded framecrc testing
  E v4l2            Video4Linux2 output device
 DE vc1             raw VC-1 video
 DE vc1test         VC-1 test bitstream
  E vcd             MPEG-1 Systems / MPEG program stream (VCD)
 D  video4linux2,v4l2 Video4Linux2 device grab
 D  vivo            Vivo
 D  vmd             Sierra VMD
  E vob             MPEG-2 PS (VOB)
 D  vobsub          VobSub subtitle format
 DE voc             Creative Voice
 D  vplayer         VPlayer subtitles
 D  vqf             Nippon Telegraph and Telephone Corporation (NTT) TwinVQ
 DE w64             Sony Wave64
 DE wav             WAV / WAVE (Waveform Audio)
 D  wc3movie        Wing Commander III movie
  E webm            WebM
 DE webvtt          WebVTT subtitle
 D  wsaud           Westwood Studios audio
 D  wsvqa           Westwood Studios VQA
 DE wtv             Windows Television (WTV)
 DE wv              raw WavPack
 D  xa              Maxis XA
 D  xbin            eXtended BINary text (XBIN)
 D  xmv             Microsoft XMV
 D  xwma            Microsoft xWMA
 D  yop             Psygnosis YOP
 DE yuv4mpegpipe    YUV4MPEG pipe
[root@da-svr01 ~]#


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m