libfaketimeを用いると、プロセスに通知する現在日時を、マシンのシステムクロックとは異なる日時にすることができる。虚偽の日時を設定するというこの機能は、システム日時の参照に直接関連する機能だけでなく、更新日時など、ファイルのタイムスタンプ機能にも影響を及ぼす。libfaketimeを用いれば、マシンのシステムクロックを変更することなく、プログラムの将来の動作や異なるタイムゾーンでの動作をテストすることができる。ネットワークアプリケーションにおいては、タイムゾーンのテストができると便利である。ローカル環境ではまだ有効な証明書の期限が、あるタイムゾーンでは切れているということがあり得るからだ。
libfaketimeは、プリロードのライブラリとして動作する。これを使用するには、プログラム実行時にこの共有ライブラリが含まれるように環境変数LD_PRELOADを設定する。たとえば、LD_PRELOADを設定してdateプログラムを実行すると、マシンの動的リンカは新しいプロセスにlibfaketimeライブラリをロードする。libfaketimeをロードすることにより、ある特定の関数群が、システム関数を直接使用する代わりにlibfaketimeライブラリにマッピングされる。libfaketimeは、静的にリンクされたプログラムやsetuidプログラムでは使用することができない。これらのプログラムにはLD_PRELOADが適用されないためである。
虚偽の日時は、相対的なオフセット値(12時間前など)または絶対値で指定するか、ある絶対日時から開始するように設定することができる。libfaketimeは、環境変数FAKETIMEを用いて、システム日時の偽造を行う。デフォルトでは、システムによるファイルのタイムスタンプもFAKETIMEに応じて変更される。ファイルのタイムスタンプは変更したくないという場合は、環境変数NO_FAKE_STAT=1を設定するとよい。
libfaketimeのバージョン0.5は、openSUSE 10.3向けに1-Clickインストールとして提供されている。FedoraとUbuntu向けのパッケージはない。以下の手順でソースからビルドすることができる。
$ tar xzvf /.../libfaketime-0.8.tar.gz $ cd ./libfaketime* $ make $ sudo make install
上記のコマンド列により、faketimeプログラムがマニュアルページと共有ライブラリlibfaketimeとともにインストールされる。faketimeを使用すれば、libfaketimeを使用するための環境変数へのライブラリパスの追加を行う必要はない。faketimeプログラムには、数種のオプションフラグ、タイムスタンプを指定した後に、日時設定を変更して実行したいプログラムの名前と引数を指定する。呼び出し形式はtime(1)やnice(1)などと同様で、コマンドの前にfaketimeとその引数を追加するだけで、普通にコマンドイラインから呼び出すことが可能である。以下に、時刻を10分間遅らせてdateコマンドを実行する例を示す。
$ date Sat Sep 6 15:01:44 EST 2008 $ faketime -f '-10m' date Sat Sep 6 14:51:45 EST 2008
