HOKYPOKY.BLOG

MySQLを5.1にアップデート #mysql50# って何!?

少々煽り気味なタイトルで失礼します。

先日Gitの記事を書いて、自分のサーバーのGitのバージョンが古かったことが結局気になってバージョンアップをしたんですね。

たまにしかアップデートしないサーバーなのでPHPとかMySQLもアップデートしようと考えました。使っているOSはCentOS 5.5です。デフォルトで提供されているリポジトリでのMySQLの最新は5.0.x、PHPも5.1.x。

さすが最愛のCentOSさんです。ちーっす。

yumのリポジトリでそこそこ最新のPHPやMySQLを提供しているのがLes RPM de Remiというリポジトリらしいです。(Utter Ramblingsというのもある。)

では早速yumにリポジトリを追加しましょう。

$ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

これでremiが使えるようになります。/etc/yum.conf.d/remi.repoを編集し、remiを有効化したりするのですが、今回はそうしません。一時的に有効にする方法でインストールしていきます。
実はこれからMySQLをアップグレードするのですがコンフリクトしてしまいます。一度MySQLを削除します。

$ sudo yum remove mysql

インストールします。ここで先程のremiを一時的に有効にするため –enablerepo=remi オプションをつけます。
これで無闇に最新バージョンを入れるわけではなく基本は(古臭くて)堅実なCentOSのリポジトリを使うことができます。

$ sudo yum --enablerepo=remi install mysql mysql-server

MySQLがアップグレードされました。

$ mysql --version
mysql  Ver 14.14 Distrib 5.1.50, for redhat-linux-gnu (x86_64) using readline 5.1

しかしこれで安心してはいけません。

$ mysql -u USERNAME -p
mysql > show databases;

+---------------------------------+
| Database                        |
+---------------------------------+
| information_schema              |
| #mysql50#com_nijitaro-wordpress |
| mysql                           |
+---------------------------------+
...

com_nijitaro-wordpressというnijitaro.comブログ(ほぼ使ってない)用DBがあるのですが頭に#mysql50#がついています。
MySQL5.1で有効でない文字が使われていてどうのこうのというわけでバージョンアップするとDBの頭につくことがあるようです。DBのデータも5.1用にアップデートしなくてはなりません。

mysql_updateを実行すればいいようです。

$ mysql_update -u USERNAME -p
$ mysql -u USERNAME -p
mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| com_nijitaro-wordpress |
| mysql                  |
+------------------------+
...

ばっちりですね。

PHPも5.3にアップデートします。
タイトルとは関係ないのですがPHP5.3にするついでにMySQLも上げようとしてた時にはまったのでした。
こちらはremiリポジトリを使って簡単にインストールできました。

$ sudo yum --enablerepo=remi update php

これで関係するphp-mysqlなども一度にアップグレードされます。

WordPressなどのプロダクトは、比較的古いシステムでもインストールできるようになっていますが、Webサービスを構築するフレームワークなどではシステム効率、高速化、記述の簡略化などを優先してかバッサリと古いバージョンを切り捨てることもあったりします。
急いでバージョンを上げる必要はないように感じますが、攻めのWebサービスを構築する場合などはポータビリティは後回しにガンガン最新のバージョンで作っていくというのがトレンド(?)のようです。

とはいえ、ボクみたいに入り口で引っかかって悠長にブログなんか書いちゃって肝心のプログラムが全くすすまないなんてことにならないように!!

GitをGitosisでもっと便利にする


帯をGitとね! #itdajareless than a minute ago via Nambu

バージョン管理にGitを使い始めました。Gitいいですよね。

Gitが何かということについては結構情報もあるのでそちらをどうぞ。

一番手軽に始めるならgithubがオススメです。名だたるオープンソースのリポジトリがここで運用されています。ですが、オープンソースを促進するサービスなので無料ではパブリックなリポジトリまでしか作れなかったり。

ということでサーバーにgitをインストールして、さらにGitosisでリポジトリ管理を簡単にしたいと思います。

今回はクライアントがMac OS X 10.6 (Snow Leopard)とサーバーにCentOS 5を想定しています。また、SSH経由でログイン、新規ユーザーを作れる権限を持っていることを確認してください。

Gitインストール

Snow LeopardにGitをインストールします。
パッケージインストーラーがあるのでDLしてインストールしてください。(git-1.7.2.2-intel-leopard.dmg 2010/8/26 現在)

$ git --version

で「git version 1.7.2.2」と出てきたらインストール成功です。

クライアント側にはユーザー情報を登録します。
それぞれ自分の名前とメールアドレスを入れて下さい。

$ git config --global user.name "Konata Izumi"
$ git config --global user.email "konata@example.com"

次にCentOSにgitをインストールします。
ちなみに色々とやり方があるみたいなので自分のやり方でもいいです。
今回はPro Gitに書いてあるとおりにします。

$ sudo yum install git-core

簡単ですね。yumにgit-coreがない場合などはEPELを有効にします。

$ sudo yum --enablerepo=epel git-core

これでインストールできるのですが、「git version 1.5.5.6」とバージョンが古いです。ま、これでも問題はないでしょう。Cent OSなので仕方ないw

[追記] いや仕方なくない。rpmforgeリポジトリから1.7.2をインストールしました。

64bit (x86_64) の場合:

$ sudo rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
$ sudo rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

32bit (i386)の場合:

$ sudo rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
$ sudo rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm

Gitをインストールします。

既に古いGitがある場合:

$ sudo yum --enablerepo=rpmforge install git-core

Gitをまだインストールしていない場合:

$ sudo yum --enablerepo=rpmforge update git-core

[追記終了]

リポジトリを作ってみる

このセクションは一般的にサーバーにリポジトリを作る方法を載せていますが、今回は最終的にgitosisでの運用を考えているのでこういうモノだと読み飛ばしてください。

サーバーにログインして、

$ mkdir someRepository.git
$ cd someRepository.git
$ git init --bare

これでリポジトリができたのでクローンします。
Macから以下を実行でクローンできます。

$ git clone SSH_USERNAME@YOURDOMAIN:someRepository.git

例えばREADME(空)を追加しできるのでこれにコミットしてプッシュします。

$cd someRepository/
$ touch README
$ git add .
$ git commit -am "READMEを作成"
$ git push

これでサーバーに反映されました。
ではもう一人のユーザーがそのソースをクローンしようとしたらどうでしょう。

同じSSH_USERNAMEで入るのであればいいですが、SSHのユーザー管理とgitのユーザー管理は別にしたいものです。普通はサーバー管理者と、プロジェクト管理者は別ですからね。

GItosisを使う

SSHの管理とGitの管理を分離する。分離したほうがややこしくなるケースというものは往々にしてあり得ることなのですが、サーバー管理とプロジェクト管理という意味で考えれば分離したほうがいいなと。サーバー管理者はgit用のユーザーを作って終わりですからね。

というわけでGitosisというものを使います。
サーバーにGitosis用のユーザーをつくり、そのユーザーにプロジェクトリポジトリ、リポジトリユーザーの管理などを肩代わりさせます。
また、Gitosisが面白いのはプロジェクト管理、プロジェクト毎のユーザー管理自体をgitで管理してしまうというものです。

Gitosisのインストール

$ yum install gitosis

Gitosis用ユーザーの作成

gitというユーザーを作ります。デフォルトではgitosisというユーザー名になるのですがgithub風( git@example.com:repository_name.gitでクローンできるよう)にします。

$ su -
# useradd -g root git
# passwd git

公開鍵をサーバーへコピー

Gitosisの設定を行う前に、クライアントにあるSSHの公開鍵をサーバーにコピーしておきます。
そのためにまず公開鍵を作成します。

クライアント側で下記を実行して公開鍵をつくります。途中パスフレーズを聞かれますが空でもOKです。

$ ssh-keygen -t rsa

Enterを連打した場合 ~/.ssh/id_rsa.pub というファイルが作成されているかとおもいます。
これが公開鍵です。

これをサーバーにコピーします。

$ scp ~/.ssh/id_rsa.pub SSH_USERNAME@YOURDOMAIN:/tmp/YOURNAME.pub

これで自分の公開鍵を /tmp/YOURNAME.pub としてコピーしました。

gitosisの初期化

サーバー上でコピーされた鍵を使いgitosisの初期化を行います。
公開鍵はgitosis-adminの最初のユーザーとなりgitosis-adminの設定ができるようになります。

$ sudo -H -u git gitosis-init < /tmp/id_dsa.pub

次にgitosisの実行権限を設定します。

$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

これで設定は終わりです。あとは全てクライアントで作業できます。

リポジトリの管理

先も言いましたがgitosisはリポジトリ管理をgitで更新します。
つまりリポジトリを管理するするリポジトリ。なんとも不思議な感じです。

$ git clone git@YOURDOMAIN:gitosis-admin.git

ここでクローンしたgitosis-adminというリポジトリが管理用のリポジトリです。ややこしいですねw

中身をみてみると

  • gitosis.conf
  • keydir/
    • USERNAME.pub

となっています。
まずUSERNAME.pubを開くと先程転送した公開鍵がここにはいっていることがわかります。
keydirの中に{ユーザー名}.pubという名前でユーザーを追加することで簡単にユーザーを作成できます。

次にgitosis.confを見てみましょう。

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = USRNAME

これはgitosis-adminのリポジトリの情報です。
つまりあたらしいリポジトリhoge-repoをつくるとしたら以下のように追加します。

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = USRNAME

[group hoge-repo]
writable = hoge-repo
members = USRNAME USER2 USER3

ついでにUSER2とUSER3を追加してみました。
keydirにもUSER2.pubとUSER3.pubを追加してください。

これをサーバーにプッシュすれば新しいユーザーとリポジトリが増えました。

$ git add .
$ git commit -am 'リポジトリhoge-repoとユーザーUSER2, USER3を追加'
$ git push

プッシュしたら早速新しく作成されたリポジトリを使ってみましょう。
といってもリポジトリが空なのでリポジトリを作って最初のコミットをしましょう。

$ mkdir hoge-repo
$ cd hoge-repo
$ touch README
$ git init
$ git add README
$ git commit -am 'initial commit'
$ git remote add origin git@YOURDOMAIN:hoge-repo.git
$ git push origin master

最初のコミットだけちょっと特別です。

$ git remote add origin git@YOURDOMAIN:hoge-repo.git
$ git push origin master

上の部分は作ったリポジトリをどこのリポジトリにプッシュするのかの定義です。

では、早速サーバーにあるリポジトリをクローンしてみます。

$ git clone git@YOURDOMAIN:hoge-repo.git

READMEに一言追加して見ます。

$ cd hoge-repo
$ echo "Hello world!" > README
$ git add .
$ git commit -am 'edit README'

次のプッシュは簡単になっています。

$ git push

まとめ

以上でGitのインストールからGitosisでの運用まで駆け足に説明していました。
SSHについてやドメインのセットアップなど色々端折っているところもあるので補完してあげてください。

GitosisはGitのhookなどをうまく使った仕組みらしいですよ。Gitは奥深いですね。
これでとりあえずGitが自由に触れるようになってきたので、使いこなしたいところです。

長くなりましたが最後までありがとうございました。

It’s been a long time

お久しぶりです。2010年も大分すぎてしまいました。
前回の更新が2009年の年末だったことを考えると実に8ヶ月ぶりになります。
Feedを購読していただいているみなさん、お元気ですか?

実は4月に務めていた会社( FOURDIGIT Inc. )を退職しまして、現在は半分フリーの活動をしながら半分はアマナインタラクティブに勤務しています。

理由は特にないといったら嘘になるんですが、まあ変化をつけたかったのでしょうね。

おかげ様で環境もかわり、新しい出会いなどもありなかなかに刺激的な日々をおくっている次第でございます。電車通勤は久しぶりなので、考え事をする時間が増えました。
主に、環境問題について考えています。(嘘です

あと、ブログのデザイン変えてみました。中途半端ですけどね。

というわけで記事投稿のテストを兼ねた近況報告でした。
今後ともHOKYPOKYを宜しくお願い致します。