まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2014/02

CentOS に MySQL をインストールする手順を紹介します。一応 RDB を2回に分けて説明する予定で一回目の今回は MySQL を、次回は MariaDB を紹介する予定です。

まずはインストール:
# yum install mysql-server

これだけ、簡単すぎ。 起動と起動時設定も以下の2行できてしまいます:
# /etc/init.d/mysqld start
# chkconfig mysqld on

これだけだとあまりにも簡単すぎるので、インストール後のセットアップについても触れておきます。

まずは root ユーザーでサーバーにアクセスします。最初はパスワードなしでログインできます:
# mysql -u root
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7975
Server version: 5.1.71 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

とりあえずパスワードを設定しておきましょう。以下の例では localhost の root ユーザーに 'P@ssw0rd' というパスワードを設定しています(localhost 以外からのアクセスについては後述):
mysql> set password for root@localhost=PASSWORD('P@ssw0rd');

ついでに UTF-8 で使えるデータベースを1つ作成しておきます:
mysql> create database sampledb default character set utf8;

quit コマンドいったんログアウトして、再度今度はパスワードを指定して、先ほど作成した sampledb データベースにログインします:
# mysql -u root -p sampledb
Password: (パスワード入力)
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7975
Server version: 5.1.71 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

この sampledb データベースにアクセスする専用のユーザーを1つ作ります。ユーザー名は user_sample、パスワードを pass_sample としています。このユーザーには外部からのアクセスも許可しています:
mysql> grant all privileges on sampledb.* to user_sample@'%' identified by 'pass_sample';

この応用で、root ユーザーに外部アクセスを許可するのであればこのようにします(同じパスワードを指定しています):
mysql> grant all on *.* to root@"%" identified by 'P@ssw0rd' with grant option;

ついでにおまけ。一度導入した MySQL の root のパスワードを忘れてしまった、など、現在の MySQL 環境を一度捨てて、新たにイチから環境を作り直したい、というケースもあると思います。 そんな時に「一度削除して、再インストールすればいいや」ということで、
# yum remove mysql-server
# yum install mysql-server

で再導入できる、、、というわけにはいかないのでした。yum  でインストールした MySQL を yum で remove しても、管理用のデータベースが /var/lib/mysql/ 以下に残っていて、これが残った状態で再インストールしても設定情報は変わらないのでした。

というわけで、MySQL の再導入には、上記コマンドによる再インストール後に以下の様な手順が必要になります:
# /etc/init.d/mysqld stop (MySQL サーバーを止める)
# cd /var/lib/mysql (管理用データベースがあるフォルダに移動)
# mv mysql mysql-old (管理用データベースをリネームして削除)
# mysql_install_db (新しく管理用データベースを作成)
# /etc/init.d/mysqld start (MySQL サーバー起動)

注意点としては、この段階で root ユーザーのパスワードもリセットされ、パスワード無しの状態に戻ってしまいます。すぐにパスワードを設定するようにしましょう。


 

CentOS 環境構築備忘録シリーズ、今回は「VNC サーバー」です。

CentOS に VNC サーバーを導入して、VNC クライアントからデスクトップとして使えるようにします。X Window の導入が必要だし、runlevel=5 で動かすことになるので多少メモリ食いにはなりますが、最近の Linux デスクトップはかなり快適なので、ここまで環境が整うとサーバー側でのデスクトップを快適に使えるようにもなると思っています。

CentOS の導入後、yum で tigervnc サーバーをインストールします:
# yum install tigervnc-server

tigervnc サーバーのインストールが完了したら、引き続き VNC 関連の設定を行います。今回は 5901 番ポートに root ユーザーで接続することを前提として vncservers ファイルを編集します:
# vi /etc/sysconfig/vncservers

  :
VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 1024x768 -nolisten tcp"
  :

Tiger VNC はパスワードが必須なので、 VNC 接続用のパスワードを設定しておきます:
# vncpasswd
Password:(入力内容は画面に表示されません)
Verify: (同じパスワードを入力)

一旦 VNC サーバーを起動して、最低限必要な環境をセットアップします(次の作業で編集する xstartup の雛形もこの時に作られます):
# /etc/init.d/vncserver start

直前のコマンドで xstartup が作成されているはずなので、このファイルを編集します。環境変数 LANG を設定して、GNOME のセッションをそのまま VNC 環境でも使えるようにします:
# vi ~/.vnc/xstartup
#!/bin/sh

export LANG="ja_JP.UTF-8"(この一行を最初に挿入)
  :
  :
(最後の部分を編集)
# xterm -geometory 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & (コメントアウト)
# twm & (コメントアウト)
gnome-session & (この一行を追加)


改めて新しい設定で VNC サーバーを再起動し、またシステム起動と同時に実行されるようにしておきます:
# /etc/init.d/vncserver restart
# chkconfig vncserver on

これでサーバー側の準備はできました。


実際にこのサーバーに別マシンのクライアント側から接続してみます。VNC Viewer などのVNC クライアントアプリケーションを起動して、VNC サーバーの IP アドレス:1 を指定して接続します(最後の :1 を忘れずに):

vnc01


パスワードを聞かれたら vncpasswd コマンドで設定したパスワードを入力します:

vnc02


正しく接続できれば、サーバー側の GNOME デスクトップが表示されます:

vnc03



 

値段が高かったこともありますが、初めて買ったパソコンは結構記憶に残っているものですよね。自分の場合は NEC PC-9801 DA でした。

普段はこれに DOS や Windows を入れて使っていたのですが、当時アスキーから発売されていた MINIX 1.5(当時は 1.2だったかも)も使っていました。初めて使う UNIX でしたが、「カーネルやユーティリティのソースコードが手元にあって、自分でコンパイルする」などはとても新鮮でした。

後に MINIX は BSD ライセンスでオープンソースとなり、その後も進化を続けていて、現在の最新バージョンは 3.2.1 になっています。 当時は(少なくとも標準では)なかった X Window や TCP/IP ドライバも付属しており、久しぶりにインストール&セットアップして遊んでみました。その導入記です:


インストール

まずは導入メディアのダウンロードです。メインページのダウンロードサイトから最新版の ISO イメージをダウンロードします:
2014021501

ダウンロードしたファイルは bz2 形式で圧縮されています。この形式に対応したアーカイブツールで解答して、640MB 程の ISO ファイルを取り出します。この ISO ファイルを元に(仮想環境であればこの ISO からブートして、実機環境であれば CD に焼くなどしてから CD ブートして)インストールを開始します。

まず起動画面です。ここは特に何もしなければ10秒後に 1 を選択したと判断されて MINIX 3 の起動に進みます。何かキーを押して止めてしまった場合も 1 を選択して MINIX 3 の起動へ進んでください:
2014021502

起動が終わるとログイン画面になります。ログインプロンプトの直前に「 root でログインして setup コマンドを実行しろ」と書かれているのでそのようにします。root でログイン(パスワードなし)して、setup と入力します。
2014021503

セットアップを実行するとつらつらとメッセージが出てきます。こんなことが書かれています:
 1) ブランクスクリーンになったら CTRL+F3 で "Software Scrolling" を選ぶ
 2) 間違えた場合は CTRL+C で作業を中断して、最初からやり直す
 3) [y] のように書かれているときは Enter キーで y が選択されたことになる
 4) コロン(:) が表示されているときは Enter キーで先にすすむ
というわけで、まずは Enter キーで先に進みます:
2014021504

Step 1: まずはキーボードの種類を指定します。日本語キーボードであれば japanese と入力します:
2014021505

Step 2: は何もすることがなく飛ばされ、Step 3: パーティショニングの指定。ここは設定しても構いませんが、特に事情がなければそのまま Enter で automatic とします:
2014021506

Substep 3.1: MINIX をインストールするハードディスクを選択します。ハードディスクが1つしかないような状況であれば(大抵がそうでしょうけど)、Enter キーで 0 番目を選択します:
2014021507

Substep 3.2: 選択した領域をそのまま使うか、と聞かれているので Enter で [0] を選択
2014021508

Substep 3.3: この設定でいいか、と聞かれているので yes と入力します:
2014021509

Step 4: は再インストールではないので何もせず先に進み、Step 5: ホームディレクトリのサイズをMBで指定します。例えば 4GB にする場合は 4096 と入力します。"OK?" と聞かれるのでそのまま Enter で先に進みます:
2014021510

 Step 6: ディスクのブロックサイズの指定。デフォルトの 4KB のままで問題ないのでそのまま Enter :
2014021511

Step 7: ファイルのコピーが進みます。しばらく待ちます・・・:
2014021512


Step 8: イーサネットワークカードのチップを選択します。自動検知されたカードには * マークがついています。* がついていればそのまま Enter 、ついてなければ該当チップを選択(あるいは 0 のネットワークなしを選択)します:
2014021513

ネットワークの設定方法を指定します。DHCP であればそのまま Enter キーを:
2014021514

プロンプトが戻ってセットアップ完了です。変更を反映させるため、一度
# shutdown -r now 
と入力して、再起動します。
2014021515

ネットワークが有効になった状態で再起動完了。これでインストール作業は一応完了です:
2014021516


セットアップ

インストールは完了して、一応このままでも使いはじめることはできますが、セットアップして使いやすくしましょう。

まずは root でログインし、デフォルトで設定されていないパスワードを設定しておきます:
# passwd

次にパッケージ管理機能(pkgin)を使ってモジュールを最新状態に更新しておきます:
# pkgin update 
と入力してパッケージ管理DBを最新状態に更新しておきます:
2014021517

とりあえず ssh を入れてみましょう。
# pkgin install openssh

Proceed(「進めますか」)? と聞かれるので y を入力してインストールします。インストールが完了すると ssh コマンドや sftp コマンドなどが使えるようになります:
2014021518


同様にして vim をインストールしてみます。vi よりはやはり vim のほうが便利かな、と:
# pkgin install vim


次は X Window をインストールしてみます。これも pkgin コマンドでインストールできますが、今回はダウンロードサイズが大きいこともあり、かなり時間がかかります。インストールが完了するまでひたすら待ちます:
# pkgin install x11

2014021519


インストールが完了したら xdm コマンドで X Window を起動します:
# xdm
X Window のログイン画面が出るのでここでユーザー ID(root) とパスワードを入力してログインします:
2014021520



デフォルト状態の X Window が起動します。おお、懐かしい twm ! ついに MINIX もここまできたか:
2014021521


最後に X Window の設定を変更してみましょう。root のホームディレクトリ以下に .xinitrc という名前のファイルを、以下の内容で作成します:
xterm -geometry 80x24+1+345 -sb &
xeyes &
xclock -geometry 100x100+200+10 & xsetroot -solid lightskyblue & twm
このファイルを作成した後に MINIX を再起動して root でログインし、今度はコマンドラインから startx コマンドを実行して X Window を起動してみます:
# startx
すると先程 .xinitrc で設定した内容でウィンドウマネージャーが起動し、背景色も変わり、懐かしい xeyes や xclock が起動した状態でスタートするようになるはずです:
2014021522


xeyes キターッ! 懐かしすぎる!!

自分が MINIX を使っていた頃は、Mini-X とかいうツールを使って、なんとか X Window が動くようになったとかならないとか・・・という噂を聞いたことがあったくらいでした。今では X Window までこんな簡単に導入できちゃうんですね。

ただ自分はこの twm というウィンドウマネージャーがあまり得意でなくて(苦笑)・・ まあ軽くていいんでしょうけど、ちょっと慣れない感じ。別のに変更できないかな。あと日本語化についてもちゃんと調べてみたいです。


 

社内で使っていた古いサイボウズ、これを「最新版にすればモバイルからも使える」と聞いて、嫌々やってみたらやっぱり大変だった、という顛末記です。最初に書いておくとサイボウズを dis るつもりはなく、どちらかと iPhone の問題というかなんというか・・・

まずは環境情報。
現在使っているのは詳しい事情がよくわからない(苦笑)クラウドサーバー上にインストールされたサイボウズ Office 6 です。

※僕の入社前の話ですが、面倒を見ていた関連会社のサポート担当者が辞めちゃったらしいです・・・ なのでサーバーアプリケーションとしてのサイボウズとしては動き続けているけど、そのサーバーへのアクセス方法とか誰もわからない(苦笑)。

こいつを捨て、新たに自社ネットワーク内に専用サーバーを1つ作ってサイボウズ Office 10 環境を構築、データも既存環境からインポート&エクスポートする、というもの。クラウド→オンプレという時代を逆行ユニークな移行事例でございます。

まあ、今の環境を継続して使う選択肢もあったんですが、「サイボウズを最新版にすればモバイルアクセスができるらしい」と誰かが聞いて、「やってみよう!」ということになった模様です。加えて「クラウドはやっぱり高い」という結論になったらしく(これは正解だと思う)、自社ネットワーク内に作った上で外部からのアクセス環境も用意しよう、ということになりました。 ただ、こういうのは言い出しっぺがやるべきだと思うんですけど・・・ (--;


ちなみにモバイルアクセスについては Office 8 以降での標準機能のようで「サイボウズ KUNAI」という無料アプリを Google Play ストアや App Store からダウンロードして対象サーバーへの接続をセットアップするだけ、とのことでした:
2014021402


移行プランはシンプルです。物理的に異なるサーバーに移行すること、移行元サーバーのOSにアクセスする術がない(苦笑)のでサイボウズのデータインポート/エクスポート機能に依存するしかないことからこんな感じ:
(1) 新サーバー構築
(2) 旧サーバーから既存データを CSV エクスポート
(3) (2) のデータを新サーバーにインポート



実環境を構築する前に一度試してみたい、というわけで6カ月間お試し版の Linux 用モジュールをダウンロードして試してみました。実はインストール作業中にもちょこちょこ Undocumented なエラーメッセージに悩まされましたが、なんとか解決。どこにも書いてないけど「Linux 版をインストールする時はあらかじめ ld-linux.so.2 ライブラリを入れておくこと」が肝っぽいです。

で、なんとかインストールができて、データのエクスポート&インポートも無事完了。PC でのログインまではできる状態になりました:
2014021401


後は iPhone に KUNAI をインストールするだけで、この環境にモバイルアクセスできる、はず、、、だったのですが、ここで全く想定外の事態が発生!

KUNAI の設定項目としてサーバーの URL とユーザー名&パスワードを指定するのですが、ユーザー名というのは上図の「名前」です。これまで PC からの利用しか想定していなかったこともあり、ログインユーザー名は「漢字の名前」をそのまま使っていました(それをセレクトボックスから選択するだけ)。 KUNAI ではこれをテキストとして入力する必要があるのですが、よく見ると僕の名前の名字と名前の間に全角スペースが使われています。

詳しい方はこの時点で「想定外の事態」の内容に気付いたかもしれませんね。。 そう、iPhone は全角スペースを入力できないのです。つまりユーザー名を指定できない! メールなどで全角スペースを含むものを送って、そこから全角スペースをコピペしてメモ帳に残しておくとか、無理やり辞書登録するとか、回避策のような方法はあるんですが、一般ユーザーへのガイドとしては無理があります。


この事態は既存データのユーザー名に全角スペースを使っていたことと、そのデータをエクスポート&インポートしてユーザー登録したことによる制限事項のような感じになってしまいました。 これが新規導入であれば「ユーザー名に全角文字を使う方も悪い」とも思いますが、これまでは特に支障なく使っていた環境でもあります。加えて、これはどちらかというと全角スペースを入力できない iPhone 側の問題と言えなくもないような・・・


いや、それにしてもまさか、こんなことで躓くとは・・・


オフィスの中で無線 LAN を使っていると、たまにこんなことに遭遇します:
無線 LAN の調子が悪い!
繋がることは繋がるけど、反応が悪いし、すぐに切れちゃう!
全く繋がらないわけではないから自分の設定ミスではない。これは無線 LAN ステーション自体が不安定なのが原因だ! 管理者でてこーい!!

で、念のため隣の同僚に「お前もそうだよな?」と確認すると・・・ あれ、なんで大丈夫なの?
無線 LAN ステーションがおかしいわけではない? 何で自分だけ・・・??
wifi


こういった現象、もちろん原因が1つに絞られるわけではないのですが、考えられる可能性の1つとして「無線 LAN の(規格の)種類」があります。同じ無線 LAN ステーションに対しても異なるモードで接続した機器は異なる挙動になる可能性がある、ということです。

まず無線 LAN の種類を説明します。現在は 802.11a / 802.11b / 802.11g / 802.11n という4つの規格が存在しています。無線 LAN ステーションと無線 LAN 子機(PC とかスマホとか)やドライバが対応している無線 LAN 規格によってどのモードで接続することになるかが決まります。

これら4つの規格の違いは何でしょうか?使っている電波周波数や最大速度の違いもありますが、使い勝手を左右する違いとして「干渉の差」と「障害物の影響度合い」があります。

4つの規格を電波周波数帯で分けると、802.11a が 5GHz、802.11b と 802.11g が 2.4GHz です(802.11n は規格としては両方に対応しています)。周波数が高いほど、電子レンジや Bluetooth といった他の電子機器が発する電波ノイズの影響を受けにくくなります。例えば Bluetooth のマウスを接続した機器が近くにあるとか、そもそも自分自身が Bluetooth マウスを使っている、といった環境だとすると、無線 LAN を 802.11a で使っているとそれらの影響はあまり受けないけど、802.11b や 802.11g だと電波干渉を受けやすい(つまり無線も繋がりにくくなるし、マウスの方にも影響がでやすい)と言えます。

一方、周波数が高いと壁などの物理的な障害物があった時に電波が弱くなってしまい、広い範囲では利用しにくくなります。その意味では 802.11a はステーションから自分までの間にある障害物の影響を受けやすいので限られた範囲での利用になってしまう一方、802.11b や 802.11g は比較的広い範囲で使える、と言えます。

なお 802.11n は、規格としては 802.11a/b/g 全てを網羅しているのですが、実際には機器によって一部機能のみ使えたり使えなかったりもします。

仮に全ての規格に対応した無線 LAN の親機/子機を持っているとして、さてどのモードで接続させるのがよいでしょうか? これは何を優先するのか、という順位によっても答が変わってきます。でも壁の少ない、狭いオフィス内で使うことを前提とするのであれば、電波干渉の受けにくい 802.11a がいいのかな、と思っています。


話を戻します。

上記で書いたような現象が起こる原因の1つとして考えられるのは以下です:
・この人は 802.11b/g で無線 LAN に接続した結果、電波干渉の影響を受けて不安定になっている
・周りの同僚は 802.11a で無線 LAN に接続した結果、電波干渉をほとんど受けずに快適に使えている

一例として、日本で発売された iPhone の各バージョンがどの無線 LAN 規格に対応しているか、を特徴と併せて表にしてみました:
規格利用周波数帯電波干渉障害物の影響最大速度iPhoneの対応バージョン
802.11a5GHz受けにくい受けやすい54Mbps5 / 5c / 5s
802.11b2.4GHz受けやすい受けにくい11Mbps3G / 3GS/ 4 / 4s / 5 / 5c / 5s
802.11g2.4GHz受けやすい受けにくい54Mbps3G / 3GS/ 4 / 4s / 5 / 5c / 5s
802.11n(規格上は 802.11a/b/g を網羅)300Mbps4 / 4s / 5 / 5c / 5s

例えばですが、上記の人は iPhone 4s を使っていて、同僚が iPhone 5 以降を使っていた場合、自分は 802.11g に接続して干渉を受け、同僚は 802.11a に接続して快適、ということが起こり得るわけです。

余談ですが 802.11n についても補足しておくと、iPhone 4/4s は規格としては 802.11n に対応しています。でも干渉を受けにくい 5GHz 帯の電波を使って接続できるかというとできません。iPhone 4/4s の無線 LAN は利用周波数帯に関しては 2.4GHz での接続しかできない、ということです。この辺りがちょっとややこしいというかわかりにくい所です。

これはもちろん iPhone だけの問題ではなく、アンドロイドスマホやノート PC でも言えることです。使っている無線 LAN がどの規格に対応しているのか、無線 LAN 親機はどのモードでの接続に対応しているのか、それらによって隣の人と比べた際の無線 LAN の挙動も変わってくる、ということが起こり得るわけです。


iPhone に限った話をすると、4s 以前のモデルは無線 LAN では干渉を受けやすい接続しかサポートされてません。ということは、例えば Bluetooth キーボードと無線 LAN を同時に使おうとすると、それだけで干渉しまくる環境ができあがってしまうわけで、まあちょっと嫌だなあ、、、と。 その意味では今 4s 以前を使っていて無線 LAN に不満がある人はこの点だけでも 5 以降に変えるメリットはあるかもしれないですねー








 

このページのトップヘ