Ubuntuサーバーの初期設定

—–追記@2013-04-11—–
Debianのlocale問題について追加。

-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
みたいなものが出るときの対応↓

# apt-get install locales
# dpkg-reconfigure locales
# ↑ここでja_JP.UTF-8に設定する。
————————-

Ubuntuサーバーの初期設定で最初にやること自分用まとめです。忘れてしまうので。。。

# まずは update。これをやらないと古いパッケージは404だったりするので。。。
$ aptitude update
$ aptitude upgrade

# ↓対策とその他ソフトウェア
# -bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
$ apt-get install aptitude -y 
$ apt-get install language-pack-ja vim ufw git -y

# hostnameの設定
$ vi /etc/hostname
# ↑として、piyo-server などと一行記入する

# ユーザーを追加してrootログイン不可にする
$ adduser piyo
$ passwd piyo
$ su piyo
$ cd
$ mkdir .ssh
$ chmod 700 .ssh
$ vi authorized_keys
$ chmod 700 authorized_keys
$ su root
$ vi /etc/ssh/sshd_config (にて、AllowUsers piyo、など)

# UseDNSをnoにしないと、ログインがトロイ場合がありますので
$ echo 'UseDNS no' > /etc/ssh/sshd_config
$ service ssh restart

# ufw の設定(ポート22と80を開ける場合)
$ ufw reset
$ ufw default deny
$ ufw allow 22 
$ ufw allow 80
$ ufw enable

# 最後にreboot
$ reboot

それとネットワーク関連はこちら↓
http://mitsuakikawamorita.com/blog/?p=830

CentOS6でPostgresでのパスワード設定とチートシート

http://d.hatena.ne.jp/cats_mew/20090903/1251976038


このとおりやったら上手く行ったので書き残しておきます。

設定後は、↓という感じで入れます。

# psql --username=postgres
ユーザ postgres のパスワード: 
psql (8.4.13)
"help" でヘルプを表示します.

postgres=#

それとチートシートを。。。
######################################################################
# \l-> データベース一覧
######################################################################
postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権       
-----------+----------+------------------+-------------+-------------------+-----------------------
 benchmark | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | 
 postgres  | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | 
 template0 | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(4 行)
######################################################################
# \c -> データベースに接続
######################################################################
postgres=# \c benchmark
psql (8.4.13)
データベース "benchmark" に接続しました。.
######################################################################
# \d -> スキーマを閲覧
######################################################################
benchmark=# \d increment_table
    テーブル "public.increment_table"
 カラム |          型           | 修飾語 
--------+-----------------------+--------
 key1   | character varying(16) | 
 number | integer               | 
######################################################################
# CRUD
######################################################################
> create table increment_table (key1 varchar(16), number int);
> insert into increment_table values('value1', 1);
> select * from increment_table;
> update increment_table set number = number + 1;
######################################################################

MemcachedでKey一覧を得るには

Redisでの「keys*」みたいにしたいときはどうするかです。

流れ:
1. telnetで接続
2. “stats items” と打鍵
3. いろいろと出てくるが、”items:4:number 6″ みたいな、後ろの文字がnumberのものを探す
4. ↑の番号を使って、”stats cachedump 4 6″と打鍵
5. \一覧が取得できた/ or 出来なければ3に戻って、他の”items:数字:number 数字”のものを試す
6. おまけ。keyの中身を確かめるときは”get tweet_id:8″などとする。

具体例↓

# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats items
STAT items:1:number 1
STAT items:1:age 171
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:4:number 6
STAT items:4:age 499
STAT items:4:evicted 0
STAT items:4:evicted_nonzero 0
STAT items:4:evicted_time 0
STAT items:4:outofmemory 0
STAT items:4:tailrepairs 0
END
stats cachedump 4 6
ITEM tweet_id:8 [97 b; 1356219246 s]
ITEM tweet_id:7 [97 b; 1356219246 s]
ITEM tweet_id:6 [97 b; 1356219246 s]
ITEM tweet_id:5 [97 b; 1356219246 s]
ITEM tweet_id:4 [97 b; 1356219246 s]
ITEM tweet_id:3 [97 b; 1356219246 s]
END
get tweet_id:8
VALUE tweet_id:8 0 97
100|只今DBのテスト中。これはテストツイートです。|cURLから投稿|1356219814
END

CentOSでHBaseを動かす手順

いろいろと嵌ったのでNoteしておきます。スタンドアローンモードです。ディストリビュートモードはまた別記事で。。。

環境: CentOS6.3(ちなみにUbuntuだと↓の例ではうまくいかないかと思います。$JAVA_HOMEは、$which java として参照して、/etc/profileに書き加えてください)

http://hbase.apache.org/book/quickstart.html
↑公式のここを参照しました。

localhostと自分のサーバーのホストネーム(“$hostname”で出力されます)のIPアドレスが指定されていないとだめなようなので、書きます↓。”192.168.0.150 g530″は今回この記事で行った例ですのでご自分の環境に合わせて設定してください。

vi /etc/hosts
として、一番上の行に、
127.0.0.1 localhost
192.168.0.150 hoge
を書き加えます。

# JDKのインストール。最近は1.7も出てきましたがHbaseは1.6系推奨らしいです。
$ sudo yum install java-1.6.0-openjdk-devel.x86_64

# バイナリを落とします。安定版のリストはこちら -> http://ftp.meisei-u.ac.jp/mirror/apache/dist/hbase/stable/
$  wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/hbase/stable/hbase-0.94.3.tar.gz

# 解凍します。
$ tar xfz hbase-0.94.3.tar.gz

# 移動します。
$ cd hbase-0.94.3

# 設定ファイルを触ります。
$ vi conf/hbase-site.xml

hbase-site.xml↓ (↓のように書き換えます)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>/root/my_repos/hbase_data/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/my_repos/hbase_data/zookeeper</value>
</property>
</configuration>

↑で、
hbase.rootdir -> /root/my_repos/hbase_data/hbase
hbase.zookeeper.property.dataDir -> /root/my_repos/hbase_data/zookeeper
としたので、そのようなディレクトリを作ります。
$ sudo mkdir -p /root/my_repos/hbase_data/hbase
$ sudo mkdir -p /root/my_repos/hbase_data/hbase

$JAVA_HOMEの設定をします。↓
$ vi /etc/profile
の一番後ろに、↓を追加
export JAVA_HOME=/usr
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
として、
source /etc/profile

↓このようになれば適切に設定されています。
# echo $JAVA_HOME
/usr

HBaseを起動します。
$ ./bin/start-hbase.sh 
starting master, logging to /root/my_repos/hbase-0.94.3/bin/../logs/hbase-root-master-g530.out

# プロセスを確認してみます。hbase関連がたくさん表示されるので出力は省略します。
$ ps aux | grep hbase

# 止め方は↓です。15秒ぐらい掛かります。
# ./bin/stop-hbase.sh 
stopping hbase..........

シェルへの入り方は、↓です。もちろん事前に./bin/start_hbase.shを実行してください。
# ./bin/hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.3, r1408904, Wed Nov 14 19:55:11 UTC 2012

hbase(main):001:0>

WebでHBaseの管理画面を閲覧できます。HBase起動後、
# ↓ iptablesを停止(or、netstat -nlpでHBase(Java)が使っているポートを確認して空ける)
$ sudo service iptables stop
として、
http://192.168.0.150:60010
にアクセス。192.168.0.150はHBaseが走っているサーバーです。↓のような管理画面を閲覧できます。


↑サーバー群やメモリ使用量が出るのが嬉しいですね。


失敗例
うまくいかない例を書いていきます。尚、hbaseのディレクトリのlogs/hbase-root-master-xxx.logにも原因が書いてあることが。。。特にJavaのエラーの場合お役立ちです。

↓ $JAVA_HOMEの設定の仕方が間違っています。↑の/etc/profileを参照してください。
# ./bin/start-hbase.sh 
/root/my_repos/hbase-0.94.3/bin/hbase: line 232: java/bin/java: そのようなファイルやディレクトリはありません
/root/my_repos/hbase-0.94.3/bin/hbase: line 340: /root/my_repos/hbase-0.94.3/java/bin/java: そのようなファイルやディレクトリはありません
/root/my_repos/hbase-0.94.3/bin/hbase: line 340: exec: /root/my_repos/hbase-0.94.3/java/bin/java: cannot execute: そのようなファイルやディレクトリはありません
/root/my_repos/hbase-0.94.3/bin/hbase: line 232: java/bin/java: そのようなファイルやディレクトリはありません
/root/my_repos/hbase-0.94.3/bin/hbase: line 340: /root/my_repos/hbase-0.94.3/java/bin/java: そのようなファイルやディレクトリはありません
/root/my_repos/hbase-0.94.3/bin/hbase: line 340: exec: /root/my_repos/hbase-0.94.3/java/bin/java: cannot execute: そのようなファイルやディレクトリはありません
starting master, logging to /root/my_repos/hbase-0.94.3/bin/../logs/hbase-root-master-g530.out
/root/my_repos/hbase-0.94.3/bin/../bin/hbase: line 232: java/bin/java: そのようなファイルやディレクトリはありません
/root/my_repos/hbase-0.94.3/bin/../bin/hbase: line 340: /root/my_repos/hbase-0.94.3/java/bin/java: そのようなファイルやディレクトリはありません
/root/my_repos/hbase-0.94.3/bin/../bin/hbase: line 340: exec: /root/my_repos/hbase-0.94.3/java/bin/java: cannot execute: そのようなファイルやディレクトリはありません

↓ $JAVA_HOMEが設定されていないとこうなります。↑の/etc/profileを参照し設定してください。
# ./bin/start-hbase.sh 
+======================================================================+
|      Error: JAVA_HOME is not set and Java could not be found         |
 39     pathmunge /usr/sbin
+----------------------------------------------------------------------+
| Please download the latest Sun JDK from the Sun Java web site        |
|       > http://java.sun.com/javase/downloads/ <                      |
|                                                                      |
| HBase requires Java 1.6 or later.                                    |
| NOTE: This script will find Sun Java whether you install using the   |
|       binary or the RPM based installer.                             |
+======================================================================+

MacBookPro Mid 2009のLoopbackが遅い件

MacBookPro Mid 2009(Moutain Lion, 10.8.2)↓
(FireWall、無線LAN、ターミナルのみ開いた状態(ウィンドウシステムは使用)、システム環境設定->ネットワークでFirewallを切らないとpingが返らないかもです)

$ ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.052 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.078 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.075 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.074 ms
^C
--- localhost ping statistics ---
7 packets transmitted, 7 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.052/0.071/0.079/0.009 ms

とある仮想マシン(Intel X5650 @ 2.67GHz の 仮想2コア)
$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.046 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.020 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.031 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.030 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.021 ms
64 bytes from localhost (127.0.0.1): icmp_seq=6 ttl=64 time=0.021 ms
64 bytes from localhost (127.0.0.1): icmp_seq=7 ttl=64 time=0.023 ms
^C
--- localhost ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6430ms
rtt min/avg/max/mdev = 0.020/0.027/0.046/0.009 ms

とある仮想マシンその2(Intel Xeon E5530 @ 2.40GHz の 仮想4コア)
$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.072 ms
64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.023 ms
64 bytes from localhost (127.0.0.1): icmp_req=3 ttl=64 time=0.025 ms
64 bytes from localhost (127.0.0.1): icmp_req=4 ttl=64 time=0.024 ms
64 bytes from localhost (127.0.0.1): icmp_req=5 ttl=64 time=0.022 ms
64 bytes from localhost (127.0.0.1): icmp_req=6 ttl=64 time=0.025 ms
64 bytes from localhost (127.0.0.1): icmp_req=7 ttl=64 time=0.023 ms
64 bytes from localhost (127.0.0.1): icmp_req=8 ttl=64 time=0.022 ms
^C
--- localhost ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 6999ms
rtt min/avg/max/mdev = 0.022/0.029/0.072/0.017 ms

このMacBookPro(以下MBP)さん、他のLinuxマシンと比べると3倍程度Loopbackが遅いのですがいったいどうなっているのでしょうか。。。

なんでこれに気がついたかといえば、
1. このMBPとマシンAをUTPケーブルで直結してping
2. マシンAとマシンBをルーターを介してすべてUTPケーブルで直結してping
してみたところ、1が2の3倍程度掛かっていておかしいなと思ったからです。2の条件ではルーターを介しているので遅いはずなのに。

比較すると、
>>> 1 / (0.03 / 1000)
33333.3

>>> 1 / (0.07 / 1000)
14285.7
このように
– 0.03msだと、requestで言えば秒間3.3万リクエスト
– 0.07msだと、秒間1.4万リクエスト
になるので、かなり大きいです。

何かおかしいのでしょうかね…
OSやDriverのような、ソフトウェアレベルならましですが、NICがダメという可能性もありますね。