Ubuntu 9.04 で PostgreSQL + phpPgAdmin

CentOS で開発したシステムを保守用に Ubuntu へ移行中です。
すんなりとは行きませんねぇ。

PostgreSQL のインストール

Synaptic で PostgreSQL と php5-pgsql をインストール。

PostgreSQL の設定

開発環境なのでパスワード無しでログイン可能にしておく。
パスワードはなんだったっけなー、と思い出したり調べたりせずに済むので、作業効率がかなり上がります。

...
# Database administrative login by UNIX sockets
#local   all         postgres                          ident sameuser
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
#local   all         all                               ident sameuser
# IPv4 local connections:
#host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
#host    all         all         ::1/128               md5
local   all         postgres                          trust
local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128               trust

PostgreSQL に設定を反映します。

$ sudo /etc/init.d/postgresql-8.3 reload

PostgreSQL で UTF-8 以外のエンコードを使用可能にする

RedHat系の時もあったのですが、パッケージインストール時の initdb で –no-locale が指定されていないため、UTF-8 以外のデータベースが作成できません。
このため、initdb をやりなおします。

$ pg_dumpall -U postgres > dumpall.sql
$ sudo su
# /etc/init.d/postgresql-8.3 stop
# cd /var/lib/postgresql/8.3/
# cp -ra main main.back
# rm -rf main/*
# su postgres
$ /usr/lib/postgresql/8.3/bin/initdb --no-locale --encoding=UTF8 -D /var/lib/postgresql/8.3/main
$ exit
# cd main/
# ln -s /etc/postgresql-common/root.crt root.crt
# ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt
# ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key
# cp -a ../main.back/postmaster.opts .
# rm postgresql.conf
# rm pg_hba.conf
# rm pg_ident.conf
# /etc/init.d/postgresql-8.3 start
# exit
$ psql -U postgres -f dumpall.sql

データベースが元通りであることを確認して、バックアップを削除します。
万が一の場合でも pg_dumpall で作成した SQL があるので安心です。

$ sudo rm -rf /var/lib/postgresql/8.3/main.back/

phpPgAdmin のパッケージをインストール

Synaptic で phpPgAdmin を検索してインストール。
パッケージ名は全て小文字の phppgadmin。

phpPgAdmin の設定

/etc/phppgadmin/apache.conf でアクセスを制限。
あきらは以下の部分のみ修正してLANのネットワークアドレスを追加した。

allow from 127.0.0.0/255.0.0.0 ::1/128 192.168.11.0/255.255.255.0

/etc/phppgadmin/config.inc.php で phpPgAdmin を設定。
あきらは以下の部分のみ修正して、ユーザー postgres でのログインと パスワード無しのログインを可能にした。

...
//$conf['extra_login_security'] = false;
$conf['extra_login_security'] = false;
...
//$conf['min_password_length'] = 1;
$conf['min_password_length'] = 0;
...

※ パスワード無しのログインを可能にするには /etc/postgresql/8.3/main/pg_hba.conf を修正しておく必要があります。

おまけ – phpPgAdmin の SQL アップロードでハマりました

SQLをアップロードした所、以下のエラーが表示されました。

サーバーが指定されていません!

いままで見たことのないエラーなので、よく分かりません。
面倒ですがソースを追いかける事にしました。

(1) 表示しているスクリプトの特定

Firefox で右クリックして「このフレーム」>「フレームの情報を表示」で、sql.php と判明

(2) ソースを調べる

とりあえずソースを見たが、メッセージを表示している場所を特定できなかった。
しかし、$lang にメッセージが格納されているようなので、言語別メッセージファイルからアプローチする事にした。

/usr/share/phppgadmin/lang/japanese.php と見当をつけ、該当メッセージを検索した。
該当メッセージは $lang[‘strnoserversupplied’] と判明。

再び sql.php を調べたが、$lang[‘strnoserversupplied’] は検索できなかった。
grep ‘strnoserversupplied’ -R * で一括検索を行った所、libraries/lib.inc.php と判明。

さらに該当箇所を特定。

...
// Create data accessor object, if necessary
if (!isset($_no_db_connection)) {
if (!isset($_REQUEST['server'])) {
echo $lang['strnoserversupplied'];
exit;
}
...

(3) 状況の調査

該当箇所で print_r( $_REQUEST ) ; とした所、$_REQUEST[‘server’]が渡されていないことが判明した。
さらに SQL をアップロードしない場合はちゃんと渡されていることが判明。

(4) 原因の推理

a. 今まで見たことが無いエラーである -> 今回の環境特有
b. SQL をアップロードした場合のみ発生 -> ファイルのアップロード時

以上から、PHP のアップロード設定ではないかと推測できた。

(5) 対策

/etc/php5/apache2/php.ini の以下を修正

...
post_max_size = 20M
...
upload_max_filesize = 18M
...

Apache2を再起動

$ sudo /etc/init.d/apache2 restart

(6) 確認

エラーとなっていた SQL のアップロードが正常に実行されることを確認。

おつかれ?

新しい環境になると結構 php.ini の設定は忘れがちなんだよね?(俺だけかも)

Ubuntu 9.04 の Apache2 の設定 (2)

Ubuntu 9.04 の Apache2 の設定」の補足です。

その後、ネットで色々調べた所、Ubuntu(Debian?)では apache2 の設定は以下のコマンドを使うとの事だった。

a2enmod [module]
a2dismod [module]

a2ensite [site]
a2dissite [site]

過去に CentOS で開発したシステムを Ubuntu に移行する際に、SSL と SSI が必要だったので、以下の様にコマンドを実行した。

$ sudo a2enmod include
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl

でも、どんなモジュールがあってどんな名前で管理しているのか調べ上げないと使えないと思うんですが…

やっぱり不便ですねぇ。

Ubuntu 9.04 の Apache2 の設定

保守用に Perl CGI を動くようにしたが、RedHat系とかなり異なっていたため、てこずってしまった。

なにが分からないかって、設定ファイルが include だらけで、設定ファイルをずっと追っていく必要があった。
さらに ?available ディレクトリの中に設定ファイルを置いといて、有効にする場合は ?enabled ディレクトリにリンクを作成し、apache2.conf で ?enabled ディレクトリからインクルードするという、多分この説明で理解できる人は少ないだろうなー、と思うような構造になっている。

はっきり言って、一度設定してしまえばそうそういじることは少ないので、どうでもいいと言えばいいのだが、設定があまりに沢山のファイルに分散しすぎているため、目的の設定がどのファイルか特定するのに時間がかかってしまう。

設定ファイルはもっと見通しがよくて、該当場所がエディタですぐ検索出来る方がありがたいと思う。

SSIを有効にする

以下のコマンドでリンクを作成。

$ cd /etc/apache2/mods-enebled
$ sudo ln -s ../mods-available/include.load .

/etc/apache2/mods-available/mime.conf に .html を追加。

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml .html

SSIとCGIを許可する

/etc/apache2/sites-available/default に Includs と ExecCGI オプションを追加

<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews Includes ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>

microSDHC -> Memory stick PRO Duo アダプター

YAMADA電気米子店にあきら・ひろこ・ゆうと、ゆうくんのお兄ちゃんとお姉ちゃんの5人でぞろぞろ行きました。

そこでお兄ちゃんが PSP のメモリースティックを 8G にしたいと言い出しました。
しかし、Memory stick PRO Duo 8G の価格は、約8千円!
とてもお兄ちゃんのお小遣いでは手を出せません。

あきらとしても急に出せる金額では無いんです。

でも、こんな手で5千円も節約出来ました。

画像(180x135)

アダプターとmicroSDHC 8G Class4。
パソコン工房で 1,080 + 1,780 = 2,860。

画像(180x135)

ここに microSDHC を挿入。
パソコンのMSリーダーであっさり認識しました。

Memory stick PRO Duo が安くなれば、こんな手は使わないんですけどね。
今では 8千円も出せば microSDHC の 16G が二つも手に入ります。

こうやってみんなが節約すればソニーさんも考えざるを得なくなるでしょう。

確定申告をしました

やっと確定申告をすませました。
申告書を作成している間に思った事を書いてみます。

官舎(公舎・合同宿舎)は廃止せよ

出費の多くは家賃でした。安アパートですが自分の収入ではバカになりません。
民間企業では住宅手当や社宅制度があります。
公務員の場合も住宅手当があります。
また、公務員の場合は格安の官舎があります。

この官舎は廃止すべきと思います。

もともと転勤などが多い公務員のためと聞いていますが、税金の使い道として適切ではないと思います。
目的外の使い方ではないでしょうか。

公務員法で民間より高い賃金を受け取っている公務員が、民間の住宅より安い官舎(公舎・合同宿舎)を借りるのはどう考えてもおかしいと思います。
また、官舎を出て民間の住宅を借りてくれれば、かなりの経済効果があります。
もともと民間より高い賃金を受け取っている公務員がお金をため込まずに消費してくれないと経済が停滞するのは当たり前ではないでしょうか。
当然役所の近辺の地価は上がり、住宅費も上がる事になりますが、当然でしょう。

公務員法を改正し、公務員給与は最低賃金を基準にせよ

役所の業務の大半は、マニュアル化すればアルバイトでも出来ます。
そんな業務に高給を支払うのはばかげていると思います。
給与は最低賃金を基準とし、浮いた費用で予備人員を増やす方が効率的でサービスの向上が見込め、雇用対策にもなります。

予算レースを廃止せよ

税金が高くなる理由は単純です。役所の予算が増えるからです。
役所の予算が高くなる理由は、各省庁や部署が予算レースをしているからです。
予算が余ると来年度の予算が確保し辛くなるという理由で、予算は無駄使いされてゆきます。
競争力のない企業がこの余り予算に群がり、なんとか存続したりしています。
こういった企業はどんどん競争力がなくなり、役所に依存して行きます。
結果、他の地域からお金を引っ張ってくる事ができない企業になります。
また、そんな企業が増えると、高度な仕事は地元企業では出来ないため、結局他の地域の企業にお金を払う事になります。

そして、競争力のない貧乏地域になってゆきます。

お金は節約すると褒められるのが当たり前では無いでしょうか。
正しい評価システムが必要です。

見込みの税収による予算をやめ、前年度の税収を使え

予算レースの結果、各部署が費用を欲しがり、税収の見込みも希望的になってしまいます。
結果はみなさんご存じの通り借金の山です。

前年度の税収を使うようにすれば、少なくとも借金の金額は確定するので、明確な議論ができます。

ツライチ USB2.0

VAIO Type G2 を使っていますが、USBポートが2つしか無いのが悩みの種です。

USBポートの1つは、だいたいワイヤレスマウスで使います。
もう1つには USB microSDカードスロットを挿しっぱなしで、 Ubuntu とのデュアルブートにしています。

USBメモリを使う時に、USBポートが足りません。
そこで、PCカードでUSBポートを増設していました。

画像(180x135)

以前から持っていた BUFFALO IFC-CB2U2V。
なんかスマートさがありません。

そこで AREA ツライチ USB2.0 を試してみました。

画像(135x180)

パッケージ。

画像(180x135)

装着した所。
ほとんど出っ張っていません。

使い勝手はあまり良くありません。
挿しこみが固く、USBメモリなどの抜き差しには手間がかかります。
でも、装着したままでもカバンの出し入れがしやすく、見た目も良いので、かなり満足しています。

英語版のIE8がダウンロードされていました

Vista で IE8 をインストールしました。

しかし、すんなりとは行きませんでした。

まず、以下のページから IE8 x86 Vista をダウンロードしました。

Internet Explorer 8 : かつてない新機能:

さっそくインストールを行ってみると、英語版でした。
日本語パッケージとか必要なのかなーと思って検索しても見つかりません。

結局、以下のページから日本語版をダウンロードしました。

Internet Explorer 8: Worldwide sites

インストールしようとすると英語版をアンインストールする必要がありました。

しかし、IEをアンインストールしようとしてコントロールパネルから「プログラムのアンインストール」を開いても一覧に表示されません。
わかりにくい事に「インストールされている更新プログラムの表示」でアンインストールする必要があります。

やっぱりIEはWindowsの一部なんですな。

やっとIE8 日本語版のインストールが完了したわけですが、再起動が合計3回、しかも更新ステージでかなり待たされました。

ちなみに、ダウンロードしたファイルと更新日時は以下の通りです。

IE8-WindowsVista-x86-ENU : 2008/03/20 21:34:27
IE8-WindowsVista-x86-JPN : 2008/03/20 23:32:16

その後、最初にダウンロードしたページを確認すると、きちんと日本語版がダウンロードされるようになっていました。

普通こんな不手際があったらページに説明と謝罪を掲載するのが企業のモラルのような気がするのですが。
文句があるなら使わなければ良いという論理でしょうか。

この無駄な数時間はどう取り返せば良いのでしょうか?

まぁブログのネタが出来たと言えばそれまでですが。

※ 追記 (2009/03/21 0:26)

ようやく詳細がわかりました。

クリックだと正しく日本語版がダウンロードされます。
IE7/IE8 で右クリックをして「対象をファイルに保存」をクリックすると英語版がダウンロードされます。

Firefox ではいずれでも正しく日本語版がダウンロードされます。

結局、どうして?

jQuery を選択

JavaScript については自前のライブラリを作成して使っていましたが、効率が悪いため、公開されているライブラリを使う事にしました。

今では JavaScript のライブラリは色々あります。
有名な所では prototype でしょうか。
しかし、テストしてみた所、submitイベントのキック時にフォームが送信されない事が判明しました。

最近普及している jQuery で同様のテストを行ってみた所、問題ありませんでした。

と、言う事で jQuery を採用する事にしました。
上記理由以外にも色々検討した結果です。

参考サイト :
jQueryの魔法
jQuery日本語リファレンス