2012年10月03日

Adobe Flash Media Server をレンタルサーバー (Linux) にインストールする

先日は Windows 7 で Flash Media Server を試したが、使った Windows 7 マシンが遅すぎてたまらないのでレンタルサーバーにインストールすることにした。
【関連記事】
Adobe Flash Media Server のインストール (Windows 7)
今回使用したサーバーはさくらインターネットの VPS で、OS は CentOS 5.7。
インストールした Flash Media Server のバージョンは 4.5.0。
インストーラーの入手方法は Windows 7 のときと同じなので割愛する。

インストール

インストーラーの ZIP ファイルを解凍すると linux というディレクトリがあり、その中に FlashMediaServer4.5_x64.tar.gz があるのでそれを解凍する。
# unzip -d FlashMediaDevServer_4_5_all FlashMediaDevServer_4_5_all.zip
# cd FlashMediaDevServer_4_5_all/linux
# tar zxvf FlashMediaServer4.5_x64.tar.gz
# cd FMS_4_5_0_r297
FMS_4_5_0_r297 ディレクトリ内の installFMS を実行して インストールする。
インストールの際、以下の2点に注意:
  • 試用版としてインストールする場合は、シリアル番号は入力不要
  • レンタルサーバーの場合すでに Web サーバーが 80 番を使用している場合が多いと思うので、Apache は別のポートを指定する (ここでは 8080 とした)。
# ./installFMS

Copyright(C) 1993-2011 Adobe Systems Incorporated. All rights reserved.

Adobe Flash Media Server 4.5 for Linux

Adobe Flash Media Server 4.5 will be installed on this machine.

You will be asked a series of questions during the install
process and will be presented with the defaults for these questions.

Support is available at http://www.adobe.com/go/flashmediaserver_en

To install Adobe Flash Media Server now, press ENTER.

To cancel the installation at any time, press Control-C.

(<ENTER> キー)
ADOBE FLASH MEDIA SERVER

End User License Agreement

NOTICE TO USER: THIS END USER LICENSE AGREEMENT (?AGREEMENT?) GOVERNS INSTALLATION AND USE BY LICENSEES OF THE ADOBE SOFTWARE DESCRIBED HEREIN...

Do you agree with the license agreement? (y/n): y

Please enter your Adobe Flash Media Server 4.5 serial number.

(<ENTER> キー)
You have not entered a serial number. Falling back to
the Adobe Flash Media Development Server!

Would you like to try again? y/n: Default [n]: (<ENTER> キー)

Adobe Flash Media Server 4.5 requires approximately 200MB of
disk space.

The installer will install Adobe Flash Media Server 4.5 in the
following directory
Default [/opt/adobe/fms]: (<ENTER> キー)


The Adobe Flash Media Server communicates on the IANA-assigned
port of 1935, which is the port most Flash applications expect,
and can also communicate on port 80
over RTMPT, HTTP webserver proxy, and for HTTP Dynamic Streaming origin services.

Please enter the Adobe Flash Media Server port(s), comma-separated
Default [1935,80]: 1935,8080

Please enter the port to use for the Admin service. You can only specify one
admin port.
Default [1111]: (<ENTER> キー)


The administrative user name and password you provide here is required to use
the Adobe Flash Media Server Management Console for
administration, monitoring, and debugging.

Please enter the administrative username: admin

For increased security, enter a password of at least 8 characters.
Please enter the administrative password: (パスワード入力)
Confirm password: (再入力)


When the Adobe Flash Media Server service is started, the service
can be run as a user other than "root". The server would change to this user
when the server is started and has acquired its ports.

Please enter the user that the Adobe Flash Media Server service will run as
Default user [fms]: (<ENTER> キー)

Please enter a valid user group for the "fms" user: Default group [fms]: (<ENTER> キー)


Do you want to install apache? (y/n)
Default [y]: (<ENTER> キー)



Apache is started as root but once it has acquired its port it starts the worker
processes as a non-priviledged user.

Please enter the user that Apache will eventually run as.
Default user [fms]: (<ENTER> キー)


Do you want the Adobe Flash Media Server service to run as a
daemon? (y/n)
Default [y]: (<ENTER> キー)


Do you want to start the Adobe Flash Media Server
after the installation is done? (y/n)
Default [y]: (<ENTER> キー)
  :
うまくインストールされていれば、http://(サーバー名):8134/ で Start Screen を表示できる。
(なぜ 8080 ではなく 8134 なのかは不明)
インストール #25

動画が再生されれば正常インストールされている。
posted by K/I at 19:52 | 東京 ☁ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2012年09月11日

Adobe Flash Media Server のインストール (Windows 7)

Adobe Flash Media Server をインストールしてみた。
これを使用すれば、保存してある動画をオンデマンド配信したりライブ映像を配信したりすることができる。

今回インストールしたバージョンは Flash Media Development Server 4.5。
このバージョンは機能に制約がある無料バージョン (トライアルという位置づけ) である。

必要なスペックは、
Windows
  • 3.2GHz Intel® Pentium® 4 processor (dual Intel Xeon® or faster recommended)
  • Microsoft® Windows Server® 2008 R2 (64 bit) or Windows® 7 (32 bit; for Adobe® Flash® Media Development Server only)
  • 64-bit operating systems: 4GB of RAM (8GB recommended)
  • 1Gb Ethernet card recommended (multiple network cards and 10Gb also supported)
Linux
  • 3.2GHz Intel Pentium 4 processor (dual Intel Xeon or faster recommended)
  • Red Hat® Enterprise Linux® Server 5.5 (64 bit) or Linux CentOS 5.5 (64 bit)
  • 64-bit operating systems: 4GB of RAM (8GB recommended)
  • 1Gb Ethernet card recommended (multiple network cards and 10Gb also supported)
64bit OS が手元に無かったので、今回は必然的に Windows 7 に Development Servrer をインストールする選択肢となった。

1. インストーラーのダウンロード

まず、Adobeサイトから、インストーラーをダウンロードする。
インストール #1

インストール #2

インストール #3

インストール #4

インストール #5

2. インストールの実行

ダウンロードしたZIPファイルを開くと以下のように展開される。
インストール #6

Windowsフォルダー内の FlashMediaServer4.5.exe が32bit版のインストーラーらしい。
インストール #7

インストール #8

インストール #9

シリアル番号の入力を求められるが、何も入力しなければ Adobe Flash Media Develpment Server がインストールされる。
インストール #10

インストール #11

インストール #12

RTMP 経由ではなく、HTTP 経由でストリーミング配信したい場合は Apache 2.2 もインストールする (モジュール f4fhttp_module, jithttp_module, hlshttp_module がインストールされる)。
インストール #13

インストール #14

管理者のユーザー名とパスワードを入力。
Administration Console でログインするときに使うもの。
インストール #15

インストール #16

すでにポート 80 が使われている場合は、使われていないポート番号を指定する。
これが RTMPT と HTTP で使うポートになるらしい。
ポート 1935 のほうは変更するとたいへんだと書かれているので、たとえば 80 → 8080 に変更するなら 1935,8080。
インストール #17

インストール #18

インストール #19

ファイアウォールの設定ダイアログが表示された。
インストール #20

インストール #21

インストール完了するとブラウザーが開き、Server Start Screen と Administration Console が表示される。
インストール #22

インストール #23

Administration Console で、[Server Address] に "localhost"、[Username] と [Password] にインストール時に設定したユーザー名とパスワードを入力して [Login] するとコンソールに入れる。
インストール #24

3. インストールの確認

次のいずれかの方法で Start Screen を起動して正常にインストールできたかどうか確認できる。
  • Windows スタートメニューから「Adobe Flash Media Server Start Screen」起動
  • Webブラウザーで (インストール先ディレクトリ)/webroot/index.html を開く (実質、前項と同じ)
  • Apache をインストールした場合は Web ブラウザーで http://localhost にアクセス
Flash Media Server の画面が表示され、動画の再生がはじまる。
動画がはじまらない場合は、右側の "STREAMING" パネルの三角矢印ボタンのどれかをクリックしてみる。
インストール #25

今回はここまで。
posted by K/I at 19:54 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2012年09月06日

Redmineのインストール (Ver.2.x)

以前、Redmine 1.1.2 のインストールメモを書いたけれど、2.x のインストールはあちこち様子が違うのであらためて書いておく。

インストールした環境は、CentOS release 5.7 (Final)
インストールした Redmine のバージョンは 2.0.3

Redmine.JP に掲載されているインストール手順を参考に作業した。
http://redmine.jp/guide/RedmineInstall/

(1) 必要なツール類のインストール

今回は、Ruby をソースからコンパイルすることにした。
Rubyの前に libyaml をインストールしておかないと、Ruby 実行時に YAML ファイルが出力できないという警告がたびたび出てうるさい。
YAML
http://www.yaml.org/
から libyaml を選んでソースをダウンロードし、解凍&インストール。
# wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
# tar zxvf yaml-0.1.4.tar.gz
# cd yaml-0.1.4
# ./configure
# make
# make test
# make install
# cd ..
次に Ruby。
Rubyのサイト:
http://www.ruby-lang.org/ja/
からソースをダウンロードし、解凍&インストール。
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.bz2
# tar jxvf ruby-1.9.3-p194.tar.bz2
# cd ruby-1.9.3-p194
# ./configure
# make
# make test
# make install
# cd ..
そして Ruby on Rails と Bundler をインストールする。
# gem install rails
# gem install bundler
※あとで必要パッケージ一を括インストールするので、ここで rails インストールしなくても OK だったかも。

(2) Redmine 用アカウント作成

Redmine 用アカウント redmine を作成。
# useradd redmine

(3) データベースの準備

データベースは今回は MySQL を使用した。
これはめんどうなので yum でインストール。
# yum install mysql-server mysql mysql-devel
Redmine 用のデータベースとユーザーを作成。
# mysql -u root -p
Enter password: XXXXX
mysql> create database redmine character set utf8;
mysql> create user 'redmine'@'localhost' identified by 'XXXXX';
mysql> grant all privileges on redmine.* to 'redmine'@'localhost';

(4) Redmine のインストール

ソースファイルのダウンロードまたはSVNレポジトリからチェックアウトし、インストール先に設置する。
今回は /usr/local/redmine にした。
# svn checkout http://redmine.rubyforge.org/svn/branches/2.0-stable /user/local/redmine
/usr/local/redmine ディレクトリに移り、Bundler で必要な gem を一括インストール。
# cd /usr/local/redmine
# bundle install --without development test postgresql sqlite
必要なバージョンの ImageMagick がインストールされていないと rmagick に関するエラーが表示される。
その場合は、
# bundle install --without development test postgresql sqlite rmagick
とする。

(5) セッションストア秘密鍵の生成

redmine アカウントでログインし、セッションストア秘密鍵を生成する。
# rake generate_secret_token
これにより、config/initializers/secret_token.rb が作られる。

(6) テーブル作成

config/database.yml.example を config/database.yml にコピーし、production: のところの内容を変更する。
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: redmine のパスワード
encoding: utf8
そして、以下のコマンドを実行:
# cd /usr/local/redmine
# RAILS_ENV=production rake db:migrate
redmine データベース内にテーブル等が作られる。

もし、openssl が load できない、というエラーが出たら、Ruby ソース内の openssl 拡張をインストールする。
# cd ruby-1.9.3-p194/ext/openssl
# ruby extconf.rb
# make
# make install
(参考サイト: CentOS 5.2 に rails 環境を構築する)

(7) 動作確認

以下のディレクトリは redmine アカウントが読み書き可能にしておく。
# cd /usr/local/redmine
# mkdir tmp public/plugin_assets
# sudo chown -R redmine:redmine files log tmp public/plugin_assets
# sudo chmod -R 755 files log tmp public/plugin_assets

以下のコマンドを実行してWebサーバーを起動:
# ruby script/rails server webrick -e production
http://localhost:3000/ にアクセスして Welcome 画面が表示されるか確認する。

(8) Passenger (mod_rails) を導入

Redmin.JP サイトに webrick は「開発用」なので「動作確認以外には使用するな」という脅し文句が書かれているので、Passenger をインストールしてみる。
まずは、必要なパッケージをインストール。
# gem install fastthread daemons passenger
場合によってはほかのパッケージが必要かもしれない。
Passenger Apache 2モジュールのインストーラーを実行。
# passenger-install-apache2-module
もし足りないライブラリーやツールがあると、インストール方法を丁寧に教えてくれるのがありがたい。
提示されたコマンドを実行した後に再度実行。
いろいろ表示されるが、最後に Apache の設定ファイルに追加する設定を示してくれる。
ほんと、ありがたい。
たとえばこんな感じ:
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.17/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.17
PassengerRuby /usr/local/bin/ruby
これで、Apache に Passenger モジュールがインストールされ、Rails アプリが実行できるようになる。
Redmine を実行させるには、たとえば、
RailsBaseURI /redmine
RailsEnv production
という設定を追加し、DocumentRoot に Redmine の public ディレクトリをシンボリックリンクしてあげる。
たとえば:
# ln -s /usr/local/redmine/public /var/www/html/redmine
そして、Redmine ディレクトリのオーナーを apache:apache に変更。
# chown -R apache: /usr/local/redmine
これで http://(ホスト名)/redmine で Redmine にアクセスできるようになる。
posted by K/I at 23:16 | 東京 ☁ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2012年02月12日

Movable Typeでのログイン機能実装

MovableTypeでログイン機能を実装する方法を考える。
ブログ記事管理を通常の MT 管理画面上でいつもどおりに行えるようにしたい。
つまり、MT 管理画面上での:
  • ブログ記事の投稿や変更
  • テンプレートの改変
が公開される記事に反映されるようにしたい。

いろいろな方法があると思うが、以下のような仕組みを考えた:
  • ログインが必要なコンテンツは、別ブログに分ける。
  • ブログ記事、ウェブページはウェブ上に公開されない場所に保存させる。
  • ブログ記事は PHP スクリプトから読み出して表示させる。
     (PHP スクリプト上でユーザー認証を行うことで、ログイン機能を実現)
  • PHP 用のテンプレートはウェブページで作成する。
     (ウェブページのデザインテンプレートでデザインを変更できる)

以下、具体的な方法を説明する。

使用した MT バージョンは 5.12-ja。

ブログの作成

ログインを必要とするコンテンツ用のブログを作成する。
その際、[ブログパス] は [絶対パス] にチェックを入れ、ウェブ上に公開されないパスを指定する。

ブログの設定で、
「全般設定」
  • 「アーカイブ設定」-> [ファイルの拡張子] を "tpl" に変更 (これは好みに応じて)
「投稿設定」
  • 「作成の既定値」-> [テキストフォーマット] を "なし" に変更
とする。

デザインテンプレート整備

デザインの「ブログテンプレートの管理」画面で、以下のような設定を行う。
ウェブページテンプレート改変
アーカイブテンプレートの「ウェブページ」テンプレートを改変する。

ウェブページは PHP のデザインテンプレートとして使用するため、ところどころ PHP コードに置き換える必要がある。
ページタイトル
<title><$mt:PageTitle encode_html="1"$> - <$mt:BlogName encode_html="1"$></title>
の部分は記事ごとに変える必要があるので、たとえば
<title><?php echo htmlspecialchars($page_title); ?> - <$mt:BlogName encode_html="1"$></title>
のようにする。

PHP のデザインテンプレートは「ブログ記事」「カテゴリページ」など複数用意することになるので、「ウェブページ」テンプレートはそれらに共通して使えるようにする。
ブログ記事テンプレート改変
アーカイブテンプレートの「ブログ記事」テンプレートを改変する。

ブログ記事は PHP スクリプトから読み出される記事データベース的役割をする。
そのため、読み出しに適した単純な書式で各記事詳細を書き込むようにする。
たとえば:
<$mt:CategoryLabel$>
<$mt:EntryTitle$>
<$mt:EntryDate$>
<$mt:EntryBody$>
など。
今回は議論しないがコメントとタグもブログ記事に書き出すようにする。

また、ブログ記事の URL から記事 ID がわかるように、アーカイブマッピングで [パス] のファイル名部分を %-f から <$MTEntryID$>.html に変更する。
ブログ記事リストテンプレート改変
カテゴリ別や月別のブログ記事リストのテンプレートを改変する。

ブログ記事リストも PHP から読み出されるので、読み出しに適した書式にする。
たとえば:
<mt:Entries limit="$limit">
<$MTEntryDate format="%Y/%m"$>/<$MTEntryID$>:<$MTEntryTitle$>
</mt:Entries>
などとする。

また、アーカイブマッピングの [パス] で、
  • %iindex.html に、
  • %-c%c に、
  • 拡張子を .tpl から .html に、
変更する。
カテゴリリストテンプレート追加
アーカイブテンプレートに、カテゴリリストを出力する「ブログ記事リスト」を追加する。

たとえば、
<MTCategories>
<$MTCategoryBasename$>:<$MTCategoryLabel$>
</MTCategories>
など。

これは、メインインデックスを出力する際に使用する。
インデックステンプレート変更
メインインデックスは直接アクセスしないので削除する。
JavaScript、CSS は [パス] に絶対パスを指定する。
ほか、不要な物は削除。

ウェブページで PHP テンプレート作成

たとえば、以下のようなテンプレートをウェブページとして作成する。
ログイン画面用テンプレート
ファイル名: login.tpl
<h2>ログイン</h2>
<form name="form1" action="/members/index.html" method="post">
<table>
<tr>
<td>メールアドレス</td>
<td><input type="text" name="li_mail" value="<?php echo htmlspecialchars($mail); ?>"/></td>
</tr>
<tr>
<td>パスワード</td>
<td><input type="password" name="li_passwd" value=""/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="ログイン" /></td>
</tr>
</table>
</form>
メインインデックス用テンプレート
ファイル名: index.tpl
<h2>会員用ページ</h2>
<div class="members">
<?php
foreach ($categories as $category) {
?>
<div><a href="<?php echo htmlspecialchars($category['basename']); ?>/"><?php echo htmlspecialchars($category['label']); ?></a></div>
<?php
}
?>
</div>
カテゴリ別ブログ記事リスト用テンプレート
ファイル名: category.tpl
<h2><?php echo htmlspecialchars($category_label); ?></h2>
<div class="members">
<?php
foreach ($entries as $entry) {
?>
<div><a href="<?php echo htmlspecialchars($entry['path']); ?>.html"><?php echo htmlspecialchars($entry['title']); ?></a></div>
<?php
}
?>
</div>

PHPスクリプトの作成

ページを表示するための PHP スクリプトを用意する。
PHP スクリプトは、記事IDまたはカテゴリIDからブログ記事ファイルのパスを決定し、ファイルの内容を読み出し、デザインテンプレートを選んで表示する処理を行う。

以下の PHP コードはその一例で、view.php というファイル名で対象パス (DocumentRoot/members など) に置く。
<?php
/**
* ページ表示
*
* 入力パラメータ
* c -- 'index' / カテゴリのベースネーム
* y -- 記事年
* m -- 記事月
* e -- 記事番号
* 組み合わせは以下のいずれか
* view.php?c=index
* view.php?c=cat
* view.php?y=2012&m=01&e=00123
*/
// ブログの [ブログパス] で設定したパスを指定
define('MEMBERS_BASEDIR', '/var/www/members');
if (!auth()) {
require MEMBERS_BASEDIR . '/login.tpl';
exit;
}
// 表示ページの決定
if (isset($_REQUEST['c']) && $_REQUEST['c'] != '') {
$category_basename = $_REQUEST['c'];
}
if (isset($_REQUEST['e']) && $_REQUEST['e'] != ''
&& isset($_REQUEST['m']) && $_REQUEST['m'] != ''
&& isset($_REQUEST['y']) && $_REQUEST['y'] != '') {
$entry_year = $_REQUEST['y'];
$entry_month = $_REQUEST['m'];
$entry_id = $_REQUEST['e'];
if (!preg_match('/^\d{4}$/', $entry_year)) {
echo "ERR(1)";
exit;
}
if (!preg_match('/^\d{2}$/', $entry_month)) {
echo "ERR(1)";
exit;
}
} else {
$entry_year = '';
$entry_month = '';
$entry_id = '';
}
} else {
echo "ERR(2)";
exit;
}
// 記事の内容
if ($entry_id != '') {
// 個別の記事
$entry_fname
= MEMBERS_BASEDIR . "/$entry_year/$entry_month/$entry_id.html";
if (!file_exists($entry_fname)) {
echo "ERR(3)";
exit;
}
if (($fh = fopen($entry_fname, 'r')) === FALSE) {
echo "ERR(4)";
exit;
}
flock($fh, LOCK_SH);
$category_label = trim(fgets($fh));
$entry_title = trim(fgets($fh));
$entry_date = trim(fgets($fh));
$entry_contents = '';
while ($row = fgets($fh)) {
$entry_contents .= $row;
}
fclose($fh);
$page_title = $entry_title;
} else if ($category_basename == 'index') {
// インデックス
$categireis = array();
if (($fh = fopen(MEMBERS_BASEDIR . '/categories', 'r')) === FALSE) {
echo "ERR(5)";
exit;
}
flock($fh, LOCK_SH);
while ($row = fgets($fh)) {
$row = trim($row);
if ($row != '') {
list($cbn, $cl) = explode(':', $row, 2);
$categories[] = array('basename' => $cbn,
'label' => $cl);
}
}
fclose($fh);
$page_title = '会員用ページ';
} else {
// カテゴリ
$categirey_label = '';
if (($fh = fopen(MEMBERS_BASEDIR . '/categories', 'r')) === FALSE) {
echo "ERR(5)";
exit;
}
flock($fh, LOCK_SH);
while ($row = fgets($fh)) {
if (preg_match("/^$category_basename:(.+)$/", $row, $matches)) {
$category_label = $matches[1];
break;
}
}
fclose($fh);
if ($category_label == '') {
echo "ERR(6)";
exit;
}
$entries = array();
if (($fh = fopen(MEMBERS_BASEDIR . "/$category_basename/entries", 'r'))
=== FALSE) {
echo "ERR(7)";
exit;
}
flock($fh, LOCK_SH);
while ($row = fgets($fh)) {
$row = trim($row);
if ($row != '') {
list($p, $t) = explode(':', $row, 2);
$entries[] = array('path' => $p,
'title' => $t);
}
}
fclose($fh);
$page_title = $category_label;
}
if ($entry_id != '') {
require MEMBERS_BASEDIR . '/entry.tpl';
} else if ($category_basename == 'index') {
require MEMBERS_BASEDIR . '/index.tpl';
} else {
require MEMBERS_BASEDIR . '/category.tpl';
}
function auth()
{
// ここで認証処理行う
return TRUE;
}
?>

Rewrite設定

Apache の Rewrite エンジンを利用して、ブログ記事や記事リストへのアクセスを view.php にパラメータをつけて転送する。

設定例:
RewriteEngine On
RewriteRule ^index\.html view.php?c=index [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)\.html view.php?y=$1&m=$2&e=$3 [L]
RewriteRule ^([^/]+)/index\.html view.php?c=$1 [L]

以上で設定は完了。
タグ:MovableType PHP
posted by K/I at 08:55 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2011年12月03日

ApacheのログをMySQLにはき出す

Apacheのログファイルからアクセス解析するツールを作っていたのだが、アクセス数が多いサイトなのでログファイルのファイルサイズが大きく、読み出してデータベースに書き出すだけで一苦労。
何かよい工夫は無いものか。。。
と思っていたら、こんなものがあった。

mod_log_sql
http://www.outoforder.cc/projects/apache/mod_log_sql/

Apache ログを直接 MySQL に書き出してくれるらしいので、導入してみた。
環境は以下のとおり:

OS: CentOS 5.6
Apache: 2.2.3
MySQL: Ver 14.12 Distrib 5.0.77
mod_log_sql: 1.101

1. インストール


ファイルをダウンロード&解凍して configure
で、いきなりつまずいた。

$ ./configure --with-apxs=/usr/sbin/apxs
configure: creating config.nice
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for Apache 2.0 version >= 2.0.40... yes
checking for floor in -lm... yes
checking for gzclose in -lz... yes
checking for mysql_init in -lmysqlclient... no
configure: error: libmysqlclient is needed for MySQL support


libmysqlclient が見つからないなら、パスを指定して:
$ ./configure --with-apxs=/usr/sbin/apxs --with-mysql=/usr/lib64/mysql
とすればいい、と思ったが状況改善しない。

調べてみたらこんな記事が:
configure: error: libmysqlclient is needed for MySQL support
http://www.webhostingtalk.com/showthread.php?t=519406

言われるままに:
$ ln -s /usr/lib64/mysql /usr/lib/mysql
$ ./configure --with-apxs=/usr/sbin/apxs

としたらうまくいった。

あとはお決まりの:
$ make
# make install

でインストール完了。

2. MySQLデータベースの準備


ログの格納先データベースを準備する。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6781031
Server version: 5.0.77-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database apachelogs;
Query OK, 1 row affected (0.09 sec)

mysql> \u apachelogs
Database changed
mysql> \. mod_log_sql-1.101/contrib/create_tables.sql
Query OK, 0 rows affected (0.12 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.10 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> SHOW TABLES;
+----------------------+
| Tables_in_apachelogs |
+----------------------+
| access_log |
| cookies |
| headers_in |
| headers_out |
| notes |
+----------------------+
5 rows in set (0.00 sec)

mysql> CREATE USER apachelogs_user IDENTIFIED BY 'XXXXXXXXXX';
Query OK, 0 rows affected (0.60 sec)

mysql> GRANT INSERT ON apachelogs.* TO 'apachelogs_user'@'localhost'
Query OK, 0 rows affected (0.45 sec)


3. Apache の設定


データベースの準備ができたら、次は Apache の設定。

LoadModule log_sql_module modules/mod_log_sql.so
LoadModule log_sql_mysql_module modules/mod_log_sql_mysql.so
LogSQLLoginInfo mysql://apachelogs_user:XXXXXXXXXX@localhost/apachelogs

<VirtualHost aaa.bbb.ccc.ddd:80>
ServerName www.xxx.yyy
LogSQLTransferLogTable access_log
CustomLog logs/access_log combined
ErrorLog logs/error_log
</VirtualHost>


バーチャルホストごとに書出し先テーブルを指定できるようになっている。

Apache を再起動。

# service httpd graceful

設定が反映される。
ログは、ログファイルとデータベースの両方にはき出される。
posted by K/I at 20:31 | 東京 ☁ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2011年04月07日

Redmineのインストール

これまで trac を使っていたが、Redmine を使ってみることにした。
以下、インストールメモ。
Ver.2.x のインストールメモは「Redmineのインストール (Ver.2.x)」を参照

インストールした環境は、Fedora 14。
インストールした Redmine のバージョンは 1.1.2。

Redmine.JP に掲載されているインストール手順を参考に作業した。
http://redmine.jp/guide/RedmineInstall/

(1) 必要なツール類のインストール
Ruby, Rails, Rack のバージョンは、記載されているバージョンと完全に一致していないといけないようだ。

Fedora 14 のパッケージは、Rails と Rack のバージョンが一致しなかった。
今回、Redmine の公式リリース版をダウンロードしたが、Rails は Redmine のファイル一式に含まれていたが、Rack は含まれていなかったので必要なバージョンを gem でインストールした。
gem install rack -v=1.0.1

(2) Redmine 用アカウント作成

Redmine 用アカウント redmine を作成。

# useradd redmine

(3) データベースの準備

データベースは、今回は PostgreSQL を使用した (使い慣れているので)。

Redmine 用のロールとデータベースを作成する。

CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'パスワード' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;


そして、redmine をインストールするサーバーからのアクセスを許可させる。
同一ホストであっても、ローカルからのアクセスが ident メソッドのみになっている場合は、自IPアドレスから password メソッドでの host アクセスを許可させておく (/var/lib/pgsql/data/pg_hba.conf および /var/lib/pgsql/data/postgresql.conf を設定)。

(4) ダウンロード

以下のサイトから、Redmine のファイルをダウンロード。
http://www.redmine.jp/download/

レポジトリからチェックアウトもできるが、上述のとおり Rails の必要バージョンが含まれているという理由から、tar ファイルをダウンロードした。

tar ファイルを適当なところ (たとえば /usr/local の下とか) に解凍し、オーナーを redmine にする (←オーナー変更は必要なかったかも)。

# chown -R redmine: redmine-1.1.2

(5) セッションストア秘密鍵の生成

redmine アカウントでログインし、解凍したディレクトリ (たとえば、/usr/local/redmine-1.1.2。以下、Redmine ディレクトリと呼ぶ) に移動し、以下のコマンドを実行する。

# rake config/initializers/session_store.rb

(6) テーブル作成

解凍ファイルの中にある config/database.yml.exampleconfig/database.yml にコピーし、production: のところの内容を変更する。
production:
  adapter: postgresql
  database: redmine
  host: IPアドレスかホスト名
  username: redmine
  password: "redmine ロールのパスワード"


そして、Redmine ディレクトリで、以下のコマンドを実行:

rake db:migrate RAILS_ENV="production"
rake redmine:load_default_data RAILS_ENV="production"

redmine データベース内にテーブル等が作られる。

(7) 動作確認

以下のコマンドを実行してWebサーバーを起動:

# ruby script/server webrick -e production

http://localhost:3000/ にアクセスして Welcome 画面が表示されるか確認する。

(8) Passenger (mod_rails) を導入

Redmin.JP サイトに webrick は「開発用」なので「動作確認以外には使用するな」という脅し文句が書かれているので、Passenger をインストールしてみる。
まずは、必要なパッケージをインストール。
# yum install rubygem-fastthread
# yum install rubygem-daemons

場合によってはほかのパッケージが必要かもしれない。
Passenger 自体は rpm が用意されていなかったので、gem でインストール。
# gem install passenger
Passenger Apache 2モジュールのインストーラーを実行。
# passenger-install-apache2-module
ところが、なぜか
/usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/lib/phusion_passenger/platform_info/apache.rb:277:in `_unmemoized_apr_config_needed_for_building_apache_modules?': undefined local variable or method `test_exe_outdir' for PhusionPassenger::PlatformInfo:Module (NameError)
        from /usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/lib/phusion_passenger/platform_info.rb:92:in `apr_config_needed_for_building_apache_modules?'
        from /usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/bin/passenger-install-apache2-module:69:in `dependencies'
        from /usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/lib/phusion_passenger/abstract_installer.rb:166:in `check_dependencies'
        from /usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/bin/passenger-install-apache2-module:90:in `install!'
        from /usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/lib/phusion_passenger/abstract_installer.rb:63:in `start'
        from /usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/bin/passenger-install-apache2-module:236
        from /usr/bin/passenger-install-apache2-module:19:in `load'
        from /usr/bin/passenger-install-apache2-module:19

とかいうエラーが出てうまくいかない。
これはどうやら、typoらしい。
/usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/lib/phusion_passenger/platform_info/apache.rb を開き、"test_exe_outdir" を "tmpexedir" に変更してリトライ。
不足しているソフトウェアを提示してくれる (しかも、実行すべき yum コマンドまで教えてくれる!) ので、インストール後再実行。
起動できた。

(9) Apache 設定

Apache に Passenger の設定を追加。
たとえば、/etc/httpd/conf.d/passenger.conf を作成して、passenger-install-apache2-module 実行時に表示された設定を記載する。
今回の環境では以下のとおり:
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.6/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.6
PassengerRuby /usr/bin/ruby


次に、Redmine の設定を行う。
ポート 20080 にアクセスするとRedmineが表示されるようにVirtualHost設定することにした。
たとえば /etc/httpd/conf.d/redmine.conf に記載する。
今回の環境では以下のようにする:
Listen 20080
NameVirtualHost *:20080
<VirtualHost *:20080>
    ServerAdmin webmaster@aaa.bbb.ccc
    DocumentRoot /usr/local/redmine-1.1.2/public
    CustomLog /var/www/vhosts/logs/redmine_ssl_access-log combined
    LogLevel warn
    ErrorLog /var/www/vhosts/logs/redmine_ssl_error-log
</VirtualHost>

そして、Redmine ディレクトリのオーナーを apache:apache に変更する。
今回の環境では:
# chown -R apache: /usr/local/redmine-1.1.2

Apacheを再起動すると、http://localhost:20080/ でアクセスできる。

(10) メール送信設定

プロジェクトで発生したイベントをメールで送信するようにするには、Redmine ディレクトリの config/email.yml.exampleconfig/email.yml にコピーし、設定変更する。
たとえば localhost を SMTP サーバーにするには、production: のところを
production:
  delivery_method: :smtp
  smtp_settings:
    address: localhost
    port: 25
    domain: メールドメイン名

のように設定する。
タグ:redmine
posted by K/I at 21:20 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2011年03月14日

節電ポスター ブログパーツ

今回の東北地方の震災での節電をよびかけるポスターが、「節電ポスター」( http://setsuden.tumblr.com/ ) というサイトで提供されています。
これは、節電を呼びかけるポスターを印刷してあちこちに貼りましょう、というものです。

これをブログパーツ化したものを作成しましたのでお知らせします。

「節電ポスター」ブログパーツ
http://tan9.net/psvc/setsuden.js

ブログに貼る場合は、以下のようにします。
<script type="text/javascript" src="http://tan9.net/psvc/setsuden.js?wd=253&ht=358&bgcol=&brdrcol=&updt=1&intvl=8&rndm=0"></script>
wd画像横幅の最大値 (0なら無制限)
ht画像高さの最大値 (0なら無制限)
bgcol表示エリアの背景色 (ccccccなど、#は付けない)
brdrcol表示エリアの枠の色 (ccccccなど、#は付けない)
updt画像自動更新フラグ (0: 自動更新しない、1: 自動更新する)
intvl画像の更新周期 (単位: 秒)
rndmランダム再生フラグ (0: シーケンス再生、1: ランダム再生)

wdht の両方に 0 以上の値を指定した場合、表示エリアは横幅wdピクセル、高さ htピクセルの大きさに固定され、画像はエリア内最大の大きさ (縦横比は保持) に縮小/拡大されます。

なお、画像URLなどはハードコーディングしているので、サイトの画像投稿は自動反映されません。

【2011年3月20日更新】
・ht, wd, bgcol, brdrcol パラメータを追加
posted by K/I at 09:38 | 東京 ☀ | Comment(0) | TrackBack(2) | 日記 | このブログの読者になる | 更新情報をチェックする

2011年02月26日

もくもく日記: IS03で実機デバッグ環境整備

第六回日本Androidの会埼玉支部ワークショップ

開催日: 2011-02-26

今回の自分のもくもくテーマ: IS03で実機デバッグ環境整備

(1) IS03 のドライバーをインストール

ドライバーをダウンロードしてインストール。
『IS03 用USB ドライバ - SHARP』
http://k-tai.sharp.co.jp/support/a/is03/download/usb/

(2) IS03 を接続

USB接続モードを「高速転送モード」にすると、ドライバーのインストールがはじまる。
ところが、Android ADB Interface のドライバーインストールに失敗。

そこで。。。

(3) SDK ManagerでGoogle Usb Driver packageをインストール

これでもドライバーインストール失敗。
(これは必要だったのか?)

調べたら、IS03 専用のドライバーが必要だった。

(4) IS03 用のADB USBドライバをダウンロード

https://sh-dev.sharp.co.jp/android/modules/driver/index.php?/is03_adb/download

ドライバー更新して、ダウンロードしたドライバを指定したらうまくいった。

(5) SDK Manager でいろいろ更新したら、Eclipse の ADT のバージョンと合わなくなったので、そちらも更新。

EclipseからRunしたら、めでたくIS03上に表示された。

今回はここまで。
タグ:android
posted by K/I at 17:01 | 東京 ☀ | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年11月01日

電子証明書によるクライアント認証 (Apache)

銀行の企業向けインターネットバンキングなどで、よく「デジタル証明書」を使ってユーザー認証しているものがあるが、あれはどうやっているのだろうか?
ちょっと調べてみた。

Web サーバーが信頼する CA から発行した証明書を保有するクライアント (Webブラウザ) のみを信頼する、というのが「クライアント認証」の考え方のようだ。

ここでは、CA は自前で用意してあるものとする。
以下、以前まとめた下の関連記事の設定を前提に話を進める。
【関連記事】
PKI の認証局(CA)を構築する

【Webサーバー側】

(1) 信頼する CA の設定

まず、信頼する CA の一覧を設定する。
CA から、CA 証明書 (cacert.pem) を受け取り、Apache に以下のように設定する。
SSLVerifyClient require
SSLCACertificateFile cacert.pem のパス

複数の CA 証明書がある場合には、ディレクトリで指定できる。
SSLVerifyClient require
SSLCACertificatePath CA 証明書の設置ディレクトリ

設定したら Apache を再起動する。

(2) 秘密鍵+証明書署名要求ファイルの作成

※この処理は、Web サーバーで行うのか、CA で行うのか、あるいはクライアント側で行うのかは、サービスの運営方針によるのではないか? と思う。
クライアントの秘密鍵と証明書署名要求 (CSR) の両方を含む PEM 形式のファイルを作成する。
Country Name などに入力する値は、CA のものに合わせる。
# openssl req -new -keyout user01.pem -out user01.pem
Generating a 2048 bit RSA private key
.........+++
...+++
writing new private key to 'user01.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Shinjuku-ku
Organization Name (eg, company) [Default Company Ltd]:K-ISHIK
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:k.ishikawa
Email Address []:k-ishik@camel.zoo.park

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


なお、CA 証明書 の内容は以下のようなコマンドで表示できる。
# openssl x509 -in CA証明書ファイル -text

【CA側】
以下の (3)、(4) の手順で、PKCS #12 形式のクライアント証明書を発行する

(3) 署名付き秘密鍵ファイルの作成

作成した秘密鍵+証明書署名要求を CA にコピーし、証明書ファイルを作成する。
# openssl ca -in user01.pem -keyfile /etc/pki/CA/private/cakey.pem \
-cert /etc/pki/CA/cacert.pem -out user01.crt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 14 (0xe)
Validity
Not Before: Oct 31 15:05:37 2010 GMT
Not After : Oct 31 15:05:37 2011 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
organizationName = K-ISHIK
organizationalUnitName =
commonName = k.ishikawa
emailAddress = k-ishik@camel.zoo.park
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
A7:EC:D2:85:9F:59:4A:A0:B4:96:81:F6:68:5B:D8:49:69:81:7E:FA
X509v3 Authority Key Identifier:
keyid:2B:45:1F:EE:3B:DF:57:65:41:24:C9:04:53:AD:F1:B5:BA:80:D6:DA

Certificate is to be certified until Oct 31 15:05:37 2011 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

これにより、PEM 形式の証明書ファイル user01.crt が作成される。

(4) PKCS #12 形式の証明書ファイルの作成

秘密鍵+証明書署名要求ファイルと PEM 形式の証明書ファイルから PKCS #12 形式の個人証明書を作成する。
# openssl pkcs12 -export -clcerts -in user01.crt -inkey user01.pem \
-out user01.p12
Enter pass phrase for user01.pem:
Enter Export Password:
Verifying - Enter Export Password:


【クライアント側】

(5) 証明書のインポート

CA (または、Web サーバー経由で) PKCS #12 形式の個人証明書 user01.p12 をクライアント PC にコピーし、ブラウザにインポートする。
(以下、Internet Explorer 7 の場合)
  1. [ツール] メニューの [インターネットオプション] の [コンテンツ] タブで、[証明書] ボタンをクリックする。
    電子証明書のインストール#1
  2. "証明書" 画面の [個人] タブで、[インポート] ボタンをクリックする。
    電子証明書のインストール#2
  3. "証明書のインポート ウィザード" が起動する。[次へ] をクリックする。
    電子証明書のインストール#3
  4. [ファイル名] 欄に個人証明書のパスを設定し、[次へ] ボタンをクリックする。
    電子証明書のインストール#4
  5. [パスワード] 欄に、手順 (4) で入力した Export Password を入力する。
    [秘密キーの保護を強力にする] にチェックを入れると、ブラウザ起動後最初に対象サイトにアクセスするたびにパスワードの入力を求められる。
    [このキーをエクスポート可能にする] にチェックを入れると、"証明書" 画面でキーのエクスポートができるようになる。
    電子証明書のインストール#5
  6. あとは、指示に従って処理する。
    電子証明書のインストール#6
    電子証明書のインストール#7

以上で、設定は完了。
クライアント認証するように設定した URL にアクセスすると、"デジタル証明書の選択" ダイアログが表示される。
電子証明書のインストール#8
インストールした証明書を選択して [OK] をクリックすればアクセスできる。
タグ:PKI CA
posted by K/I at 01:16 | 東京 ☔ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2010年10月21日

PostgreSQL 8.3 から 8.4 への移行

Fedora を 10 から 12 にアップグレードしたら、PostgreSQL が起動しなくなった。
PostgreSQL のバージョンが 8.3 から 8.4 にバージョンアップしたため、データベースファイルが対応しなくなったからだ。
すでに 8.4 にアップグレードされているから PostgreSQL も起動しないので、pg_dump もできない。
しかたなく、8.3 環境を用意して /var/lib/pgsql/data ディレクトリをごっそりそちらにコピーし、pg_dumpall した。
この移行作業のめんどくささはなんとかならないものか?
ほかの人はどうやって対応しているのだろうか。

ちなみに、たまたまインストールしてあった Ubunto では、コピーした data ディレクトリでうまく動作しなかった。
Fedora 11 でもダメで、Fedora 10 にしたらうまくいった。
Ubundo は設定がいろいろ違っていて合わせるのが面倒だったので断念。
Fedora 11 がダメだった理由は不明。
posted by K/I at 12:12 | 東京 🌁 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする