Ubuntu 7.10へのFFmpegのインストール

Linux上でFFmpegを使った動画変換を試しています。手元のUbuntu 7.10では、ffmpegパッケージは存在するものの、MP3やH.264のエンコーダがdisabledになっているようなので、ソースからビルドしてみました。

コーデックのインストール

事前に以下のパッケージをapt-getでインストールしました。

  • liblame0, liblame-dev: LAME MP3エンコーダ
  • libx264-54, libx264-dev: x264 H.264エンコーダ

FFmpegソースコードの入手

ビルド

  • 指定したconfigureオプション
    • --prefix=/opt/ffmpeg: アップデートを容易にするため、単独のディレクトリ以下にインストールすることを指定
    • --enable-libmp3lame: LAME MP3エンコーダを有効にする。
    • --enable-libx264: x264を有効にする。
    • --enable-gpl: GPLライセンス化で使用する。x264はGPLで配布されているために、x264との組み合わせでは必須。

上記のconfigureオプションで、make, make install が無事に通りました。

実行: FLV & MP3 44.1kHz

とりあえずは、以下のオプションで動画ファイルを変換できることを確認しました。

$ ffmpeg -y -i infile.mpg -f flv -vcodec flv -r 30 -b 500k -s 320x240 \
>  -acodec libmp3lame -ar 44100 -ab 64k output.flv
  • コンテナフォーマット: FLV (Flash Video)
  • ビデオコーデック: FLV
  • オーディオコーデック: MP3

どうやらFLVではオーディオのサンプリングレートとして48KHzを許容していないようで、オプションを変えたら以下のエラーが出ました。

$ ffmpeg -y -i infile.mpg -f flv -vcodec flv -r 30 -b 500k -s 320x240 \
> -acodec libmp3lame -ar 48000 -ab 64k output.flv

FFmpeg version SVN-r11901, Copyright (c) 2000-2008 Fabrice Bellard, et al.
(略)
[libmp3lame @ 0x84e0cb0]flv does not support that sample rate, choose from (44100, 22050, 11025).
Could not write header for output file #0 (incorrect codec parameters ?)

実行: MP4, H.264 & MP3 48kHz

x264を使ったエンコードを試すために、コンテナとしてMP4、ビデオコーデック/オーディオコーデックにそれぞれlibx264とlibmp3lameを指定してみました。こちらはサンプリングレート48kHzでも行けました。

$ ffmpeg -y -i infile.mpg -f mp4 -vcodec libx264 -r 30 -b 500k -s 320x240 \
> -acodec libmp3lame -ar 48000 -ab 64k output.mp4

コンテナをFlash Videoにして、ビデオコーデックにlibx264を指定するとエラーが出ました。最新のFLVフォーマットはH.264に対応しているはずなので、将来的にはできるようになるのでしょうか?

$ ffmpeg -y -i infile.mpg -f flv -vcodec libx264 -r 30 -b 500k -s 320x240 \
> -acodec libmp3lame -ar 44100 -ab 64k output5.mp4

FFmpeg version SVN-r11901, Copyright (c) 2000-2008 Fabrice Bellard, et al.
(略)
[libx264 @ 0x84e0cb0]video codec not compatible with flv
Could not write header for output file #0 (incorrect codec parameters ?)

Rubyリファレンスマニュアル閲覧環境構築メモ

Rubyリファレンスマニュアル刷新計画 からリリースされたリファレンスマニュアル1.9.0 (動的HTML版) を閲覧するための環境を構築してみました。
基本的には http://doc.loveruby.net/wiki/ReleasePackageHowTo.html に書かれている手順の通りですが、Apacheと統合して "http://localhost/ruby-refm/" のようなURLでアクセスできるようにするために一工夫してみました。

# CGI/FastCGIを使った方法も試してみたいところですが、まだbitclustの動作を把握していないので、こちらの方がお手軽にできると判断しました。

動作環境

Apache リバースプロキシの設定

Apache HTTP Serverに対する特定のアクセスをbitclustサーバに転送するために、リバースプロキシの設定を行いました。

  • mod_proxy, mod_proxy_httpのロード: /etc/apache2/mods-enabled/ の中に、/etc/apache2/mods-availabe/{proxy.load, proxy_http.load} へのシンボリックリンクを張る。
  • プロキシの有効化: Apacheのマニュアルと /etc/apache2/mods-available/proxy.conf を参考に、以下のような設定ファイル reverse-proxy.conf を作成し、mods-enabled/ からリンクを張る。
<IfModule mod_proxy.c>
    ProxyRequests Off
    <Proxy *>
       AddDefaultCharset off
       Order deny,allow
       Allow from all
    </Proxy>
</IfModule>
  • bitclustサーバへの転送: /etc/apache2/sites-available/ruby-refm として、以下の内容のファイルを作成し、sites-enabled/ からリンクを張る。
<IfModule mod_proxy.c>
    ProxyPass /ruby-refm http://localhost:10080/ruby-refm
    ProxyPassReverse /ruby-refm http://localhost:10080/ruby-refm
</IfModule>

ポイントは、転送元のパス (/ruby-refm) と転送先のパス (/ruby-refm) を一致させること。bitclustの仕様上、このようにしないと、bitclustにより生成されるリンクをApache経由でたどることができないようです。

bitclustの設定

Apacheのリバースプロキシの設定に対応して、Rubyリファレンスマニュアルを "http://localhost:10080/ruby-refm/" のようなURLで提供する必要があります。これは、server.rb中の

ARGV.unshift "--baseurl="

という記述を、以下のように書き換えれば良いようです。

ARGV.unshift "--baseurl=http://localhost/ruby-refm"

このようにすると、以下の効果があります。

  • bitclustにより生成されるリンクのURLが、"http://localhost/ruby-refm/..." という形になる。
  • WEBrickサーバにマウントされるパスが、"/ruby-refm/..." という形になる。

Webブラウザから "http://localhost/ruby-refm/..." のリンクをたどると、Apache側の設定により、"http://localhost:10080/ruby-refm/..." にリクエストが転送され、期待通りにマニュアルを参照することができるようになります。

なお、もし --baseurl の設定をしないと、href="/theme/default/style.css" のようなリンクが生成されてしまうので、Apache側からリンク先を正常に参照できないという結果になります。

これだけの設定でも "http://localhost/ruby-refm/1.8.6/" のようなURLを指定することでマニュアルを参照できますが、"http://localhost/ruby-refm/" ではNot foundとなってしまうので、bitclust/server.rbの内容を以下のように書き換えることで、トップページが表示されるようになりました。

変更前:

server.mount_proc(File.join(basepath, '/')) do |req, res|
  raise WEBrick::HTTPStatus::NotFound if req.path != '/'

変更後:

server.mount_proc(File.join(basepath, '/')) do |req, res|
  raise WEBrick::HTTPStatus::NotFound if req.path != File.join(basepath, '/')

Trac導入メモ

下の方ではRetrospectivaの導入メモを書きましたが、どうも挙動が怪しい&情報が少ないので、普段使いにはTracの方が良いかなあと思い直して、ローカルマシン上へのTracの導入を試みました。
UbuntuではTracはパッケージ化されているので、必要なのは設定作業だけです。ついでに、セキュア化を目指して、Apacheのdigest認証とTrac側でのアクセス制御の設定、およびmod_pythonも試してみました。

使用パッケージ

  • Ubuntu 7.10
  • trac 0.10.4-2
  • trac-ja-resource 0.10.4-ja-1-1
  • apache2 2.2.4-3build1
  • libapache2-mod-python 3.3.1-2

新規tracプロジェクトの作成

/usr/share/doc/trac/README.Debian, /usr/share/doc/trac-ja-resource/README.Debian.ja の手順に従っています。

# mkdir /data/trac
# trac-admin /data/trac initenv

ここで、templates directory として、/usr/share/trac-ja-resource/templates を選択する。

# chown -R www-data /data/trac
# trac-admin /data/trac wiki load /usr/share/trac-ja-resource/wiki-default
# cp /usr/share/doc/trac-ja-resource/examples/trac.cgi /usr/lib/cgi-bin/
# chmod +x /usr/lib/cgi-bin/trac.cgi

ここで、上記のtrac.cgiの中で定義されているTRAC_ENV環境変数は、後述のApache2設定ファイルの内容と重複するので、コメントアウトした。

さらに、/data/trac/conf/trac.ini 中の

default_charset = iso8859-15

を、

default_charset = utf-8

と変更する。

Apacheの設定 (基本編)

/usr/share/doc/trac/README.Debian中の内容をベースに、Apacheの設定ファイルを作成します。

/etc/apache2/sites-available/tracの内容:

Alias /trac/ "/usr/share/trac/htdocs/"
<Directory "/usr/share/trac/htdocs/">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>
<Location "/cgi-bin/trac.cgi">
        SetEnv TRAC_ENV "/data/trac"
</Location>

作成した設定ファイルへのリンク追加:

# cd /etc/apache2/sites-enabled/
# ln -s ../sites-available/trac 010-trac

Apache再起動&接続確認

ここまで設定した後でApacheを再起動して、Webブラウザからhttp://localhost/cgi-bin/trac.cgiに接続すると、とりあえずTracが使えるようになりました。

# /etc/init.d/apache2 restart

Apacheの設定 (digest認証編)

Tracでは、ユーザ認証をWebサーバの機能で行うのが基本のようです。ここは、セキュリティ向上を狙って、basic認証ではなくdigest認証を使ってみます。

mod_auth_digestの有効化:

# cd /etc/apache2/mods-enabled/
# ln -s ../mods-available/auth_digest.load .

/etc/apache2/sites-available/tracへの内容追加:

<Location "/cgi-bin/trac.cgi/login">
        AuthType Digest
        AuthName "trac"
        AuthDigestProvider file
        AuthUserFile /data/trac/trac.htdigest
        Require valid-user
</location>

ダイジェストファイル作成:

# htdigest -c /data/trac/trac.htdigest trac <username>

Tracのアクセス制御設定

ここでは、以下のような方針でアクセス制御を設定しました。

  • anonymousユーザの無効化
  • すべての管理権限を持つadministratorグループの作成
  • 新規ユーザ () のadministratorグループへの追加

実際の運用では、管理ユーザのほかに一般ユーザを作成して、普段は一般ユーザで作業することになると思います。

# trac-admin /data/trac permission remove anonymous "*"
# trac-admin /data/trac permission add <username> administrator
# trac-admin /data/trac permission add administrator TRAC_ADMIN

mod_python対応

Tracに付属のドキュメント「TracModPython」を参照して、mod_python経由でTracを起動するように設定してみました。
これで正しい設定なのかどうか確信は持てていませんが、とりあえず動いているようです。

/etc/apache2/sites-available/trac への追加内容:

<Location /projects/myproject>
   SetHandler mod_python
   PythonInterpreter main_interpreter
   PythonPath "['/usr/share/trac-ja-resource/python'] + sys.path"
   PythonHandler trac.web.modpython_frontend
   PythonOption TracEnv /data/trac
   PythonOption TracUriRoot /projects/myproject
</Location>

<Location /projects/myprojects/login>
   AuthType Digest
   AuthName "trac"
   AuthDigestProvider file
   AuthUserFile /data/trac/trac.htdigest
   Require valid-user
</Location>

Retrospectiva導入メモ

意外と使われていない「個人用trac」活用のすすめ | ランサーズ社長日記あたりを参考に、個人用のプロジェクト管理ツールの導入を思い立ちました。今回は、Ruby/Railsの勉強を兼ねて、Ruby on Railsベースの「Retrospectiva」を試してみました。インストールそのものは、Quick Installの手順通りで特に問題なく完了しましたが、Retrospectiva起動後の操作方法に少し戸惑ったので、試行錯誤の結果をメモしておきます。

# 私はtracを触ったことが少ないので、tracとの共通点・相違点については把握できていません。

導入したバージョン

最初、安定版の1.0.3を入れてみましたが、これは日本語リソースには対応していないようです。後で開発版の1.1 second preview を試したところ、メニューが日本語化されることを確かめました。

(後の記述は1.1ベース)

動作環境の概要は以下の通りです。

今回は、とりあえず動作確認ということで、ruby script/server で起動しています。今後Apacheとの統合を試みる予定です。

管理者ユーザでのログイン

username=admin, password=password としてログインする。
この時点では、"No projects available" と表示される。

初期設定→言語の選択

adminでログインした後で、画面右端の「Admin」を選択して、管理者メニューに移る。
ここで「Setup」を選択し、初期設定を行う。

  • Global locale: 「日本語 (Japanese)」を選択すると、メニューなどが日本語になる。

リポジトリ登録

管理画面から「リポジトリ一覧 (Repositories)」を選択し、新規のリポジトリを作成する。
ここでは、svnadmin createによって作成済みのSubversionリポジトリをRetospectivaに登録する作業を行う。
主な入力項目は、

プロジェクト作成

管理画面から「プロジェクト一覧 (Projects)」を選択し、新規のプロジェクトを作成する。
ここで、先ほど登録したリポジトリを選択することで、プロジェクトにSVNリポジトリを関連付けることができる。

グループ作成

管理画面から「グループ一覧 (Groups)」を選択し、新規のグループを作成する。
ここで、先ほど作成したプロジェクトを選択することで、このグループに所属するユーザはプロジェクトに参加することができるようになる。

ユーザ作成

管理画面から「ユーザ一覧 (Users)」を選択し、新規ユーザを作成する。
このとき、先ほど作成したグループ名にチェックすることで、作成したユーザがグループに所属するようになる。

自宅サーバ用マザーボード購入

複数台のPC間のデータ共有+(あわよくば) Web公開用というもくろみで、自宅サーバ用のPCを組み立ててみました。

レンタルサーバの情報も調べてみましたが、

  • 共有サーバ型は安価ではあるが、自由度が低い (Ruby on Railsとかtracをインストールするのは敷居が高そう)
  • 専用サーバは高くて手が出ない (国内サーバでは最安で7000円程度?)
  • 仮想専用サーバ (VPS) の安いプランはメモリ割当量が128〜256MB程度で、Rails+MysQLのような構成で動かすのは不安

という印象で、結局見送りました。

自宅サーバ導入への不安事項としては、

  • 24H通電だと電気代や騒音が気になる
  • 外部公開の場合、セキュリティが不安
  • 外部公開の場合、現状のフレッツ接続+非固定IPアドレスでは、外部から接続できるようにするのに手間がかかる

というところです。

1点目に関しては、低消費電力では定番のVIA C7で何とかなりそう、2点目と3点目はこれから勉強すれば何とかなりそう、と結論づけて、急遽以下のスペックで構成してみました。

まあ要は物欲が抑えられなかったというのが実態ですが、新規購入金額は16,000円程度 (MM3500+メモリ) なので、これくらいならリーズナブルかなということで。

OSとしては、とりあえずFedora 8を入れてみました。本格的なセットアップはこれから徐々にやっていく予定です。

ビデオカード追加

先日購入したVistaマシンでDVD-Videoを再生したところ、一定時間ごとに画面全体にノイズが入るという症状が発生しました。ソフトウェア的に解決できた可能性もありますが、ここは新規にビデオカードを追加することで解決しました。

メモを兼ねて、購入したビデオカードのスペックを書いてみます。

PC上でゲームをする予定は今のところないので、もっと低いスペックでも良かったかもしれませんが、価格的にあまり差がなかったのでこれをチョイスしました (購入価格7,000円弱)。

さっそくビデオカードを組み込んで試してみたところ、Windows Vista上ではDVD-Videoが正常に再生されることと、Linux上では視覚効果が有効になることを確認しました。DVD-Videoでは若干ジャギーが気になる感じはしますが、DVDに対してディスプレイの解像度が高すぎるためと解釈しました。

液晶ディスプレイ購入

以前旧サブマシン用に使っていたディスプレイがお亡くなりになったので、サブマシン更新に合わせて新しいディスプレイ (三菱電機 RDT222WM) を購入しました。
#「はまぞう」でリンクを貼ろうとしたら、該当する機種が出てこなかった

購入基準としては、D-Sub15ピン+DVD-D+HDMIの3系統入力を重視しました。当面はHDMIはなくても困りませんが、今後必要が出てくるかもしれない (かつ、それとは別にPC用にDVIを使いたい) ので。