Redmineの再構築と移行など

開発支援サーバを構築したいとおもいSubversion、GitおよびRedmineのサービスを行うサーバを構築しました。3ヶ月くらい前に行ったことのメモをまとめました。メインはRedmineの移行です。

アプリケーション等管理ツール
バージョン管理ツール

Redmine

本題のRedmineの移行です。 ずっと1.0.5を使っていたのでバージョンアップしまます。また、アプリケーションを動かす環境も新たな場所に構築します。 なお、Redminepassengerスタンドアローン版で動かし、Apacheをプロキシサーバとして利用します。これはSubversionサーバ(w/Apache)が同じマシン上に立っているためです。 既存のRedmine1.0.5はホスト名 argyle.mnb というマシンで動いていました。今回は新規に作成する tattersall.mnb というVMに移行します。なお作業時の最新のRedmineのバージョンは2.0.3です。
移行先(tattersall)での作業
  1. Apacheのインストール
    # ダウンロードと解凍
    cd /usr/local/src
    sudo wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//httpd/httpd-2.4.2.tar.gz
    sudo tar xzvf httpd-2.4.2.tar.gz
    
    # apr, apr-utilをダウンロードと解凍
    # Subversionサーバ構築に必要だから。 > http://svn.apache.org/repos/asf/subversion/tags/1.7.5/INSTALL
    # Subversionサーバ構築に必要だから。 > http://svn.apache.org/repos/asf/httpd/httpd/tags/2.4.2/INSTALL
    sudo wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//apr/apr-1.4.6.tar.gz
    sudo tar zxvf apr-1.4.6.tar.gz
    sudo wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//apr/apr-util-1.4.1.tar.gz
    sudo tar zxvf apr-util-1.4.1.tar.gz
    
    # apr, apr-utilを組み込んだApacheをインストール
    sudo mv apr-1.4.6 httpd-2.4.2/srclib/apr
    sudo mv apr-util-1.4.1 httpd-2.4.2/srclib/apr-util
    sudo cd httpd-2.4.2
    sudo sh ./buildconf
    sudo ./configure --enable-dav --enable-so --enable-maintainer-mode --enable-ssl --enable-rewrite --with-included-apr --sysconfdir=/etc/apache2
    sudo make
    sudo paco -D make install
    
    # 自動起動の設定
    cd /usr/local/apache2/bin
    sudo cp -iv apachectl /etc/init.d/apache2
    sudo sysv-rc-conf apache2 on
    sysv-rc-conf --list | grep apache2
    
  2. MySQLのインストール
    sudo aptitude install cmake
    sudo groupadd mysql
    sudo useradd -r -g mysql mysql
    cd /usr/local/src
    sudo wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.25a.tar.gz
    sudo tar zxvf mysql-5.5.25a.tar.gz 
    cd mysql-5.5.25a/
    sudo aptitude install libncurses5-dev
    sudo cmake . \
     -DDEFAULT_CHARSET=utf8 \
     -DDEFAULT_COLLATION=utf8_general_ci \
     -DWITH_INNOBASE_STORAGE_ENGINE=1 \
     -DWITH_EXTRA_CHARSETS=all \
     -DWITH_READLINE=1
    sudo make
    sudo paco -D make install
    cd /usr/local/mysql
    sudo chown -R mysql .
    sudo chgrp -R mysql .
    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.20120707
    sudo scripts/mysql_install_db --user=mysql
    sudo chown -R root .
    sudo chown -R mysql data
    sudo cp -iv support-files/mysql.server /etc/init.d/mysql
    sudo sysv-rc-conf mysql on
    
  3. Rubyのインストール
    cd /usr/local/src
    sudo wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
    sudo tar zxvf yaml-0.1.4.tar.gz
    cd yaml-0.1.4
    sudo ./configure
    sudo make
    sudo paco -D make install
    paco -1Fdsa
    
    cd /usr/local/src
    sudo aptitude install zlib1g-dev # すでに入ってた
    sudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
    sudo tar zxvf ruby-1.9.3-p194.tar.gz
    cd ruby-1.9.3-p194/
    sudo ./configure
    sudo make
    sudo paco -D make install
    ruby -v
    
  4. bundlerのインストール
    sudo gem install bundler
    
  5. Imagemagickのインストール
    sudo aptitude install libmagickwand-dev
    
  6. Redmineのダウンロードおよびpassengerの設定
    cd /opt
    sudo mkdir -p redmine
    sudo useradd redmine
    sudo chown -R redmine redmine
    sudo chgrp -R redmine redmine
    cd redmine
    # ユーザ redmine を作ってこれ以降はredmineユーザで作業することとする。
    sudo su - redmine
    svn co http://redmine.rubyforge.org/svn/branches/2.0-stable redmine-2.0
    cd redmine-2.0
    
    # passengerのスタンドアローン版で運用するので。
    touch Gemfile.local
    echo 'gem "passenger"' > Gemfile.local
    bundle install --without development test postgresql sqlite --path=vendor/bundle
    
  7. MySQLの設定
    1. DBにログイン。
      $ cd /usr/local/mysql/bin
      $ ./mysql -u root
      
    2. mysqlシェルより以下の各処理を行う。
      mysql> create database redmine character set utf8; -- redmineデータベースを作成
      mysql> create user 'redmine'@'localhost' identified by 'yourpassword'; -- redmineデータベースにユーザ"redmine"を作成
      mysql> grant all privileges on redmine.* to 'redmine'@'localhost'; -- ユーザ"redmine"のredmineデータベースにおける権限を付与
      
    3. 一応 redmine にsu
      $ sudo su - redmine
      
    4. /opt/redmine/config/database.yml の設定
      production:
        adapter: mysql2
        database: redmine
        host: localhost
        username: redmine
        password: yourpassword
      
    5. セッションストアシークレットを作成
      $ cd /opt/redmine
      $ bundle exec rake generate_secret_token
      
移行元(argyle)での作業
  1. DBおよびファイルのバックアップ
    $ cd /mnt/nas01/redmine
    $ sudo mkdir migrate_redmine
    $ cd migrate_redmine;
    $ sudo cp -iprv /var/lib/redmine/default/files  ./
    $ sudo sh -c 'mysqldump -u redmine redmine -pmypassword > redmine.sql'
    
  2. アーカイブして移行先(tattersall)にコピー
    sudo tar czvf redmine_argyle.backup.migrate_redmine.tgz files redmine.sql
    sudo scp redmine_argyle.backup.migrate_redmine.tgz naoyes@tattersall.mnb:tmp/
    
移行先(tattersall)での作業
  1. バックアップを解凍
    $ cd ~/tmp
    $ tar vzxf redmine_argyle.backup.migrate_redmine.tgz
    
  2. redmineにファイルを移行
    $ sudo cp -irv files /opt/redmine
    
  3. MySQLのデータを移行
    $ /usr/local/mysql/bin/mysql -u root redmine < redmine.sql
    
  4. 新しいredmine用にMySQLのDBの属性変更
    $ cd /opt/redmine
    $ sudo RAILS_ENV=production bundle exec rake db:migrate
    $ bundle exec rake tmp:cache:clear
    $ bundle exec rake tmp:sessions:clear
    
  5. passengerを8080ポートで起動してみる
    $ cd /opt/redmine
    $ sudo RAILS_ENV=production bundle exec /opt/redmine/vendor/bundle/ruby/1.9.1/bin/passenger start -p 8080 --user=redmine -d
    

まとめ

Redmineのバージョンアップはなんの問題もなくサクッとできました。プラグインを一つも入れていないのでそれもスムーズな移行の要因かなと思います。 移行当時からまたバージョンが上がっているので近いうちにやりたいと思います。便利なプラグインの恩恵も受けてみたいのでそのへんは探りながら。

アベンジャーズ

「アイアンマン」しか観ていない状態で映画館へ。字幕3D(マスターイメージ方式)で鑑賞。配布の3Dメガネは「メガネ on メガネ」しづらかったのでクリップオンの3Dレンズを買いました。

144分と長尺なのは各ヒーローたちの出自をそれなりに明らかにする必要があるからでしょうね。なので冒頭が正直ちょっと長いよなぁと思わなくもなかったですが彼らの出自を明らかにしつつも物語は推進力を持っているのでなんとかついていくことができました。
すべての作品を知っているわけではないのでそれは逆に作品同士のリアリティラインの矛盾(それがあればですが)が気にならないという利点がありましたね。

ハルク(マーク・ラファロ)はどうして自制できるようになったんでしょ?あとホーク・アイ(ジェレミー・レナー)のマインド・コントロールが抜けた件ってちゃんと確認しなくてもいいのかね?と思っちゃいました。

が!

「ま、細かいことはいいぢゃん」ってのがこの映画のスタンスでしょうから頭の隅に追いやって、厨二病なロキ(トム・ヒドルストン)たんのルサンチマンからなるオイタの始末にシールドのなんか秘密裏に考えていることが軽くスパイスづけされて

魚器を思わせる巨大クリーチャーの存在感はよかったな。あんな巨大なのが空泳いでたらけっこうアガると思う。機械クリーチャーとしては「第9地区」を想起しました。
個人的にはハルクが良かったな。内気で臆病な狂気とその狂気が開放された結果の爆発力はいいね。マリオがスター取ったのと変わんないじゃん、アレ。で、爽快感はマリオ以上だと思う。

ただ、3Dの効果はほぼ皆無!こんなんだったら2Dで全然良かったよ。

トータル・リコールでアクションお腹いっぱいだったのでそのへんは若干食傷気味だったのですが、裏切りのサーカストータル・リコールアベンジャーズの間にはさめばよかったですね。日程的に厳しいけどw

アイアンマン2 スペシャル・コレクターズ・エディション [DVD]
パラマウント ホーム エンタテインメント ジャパン (2010-10-22)
売り上げランキング: 15408

静的ライブラリと動的ライブラリ

静的ライブラリとか動的ライブラリがよく理解できていなかったのでオライリーC++クックブックで勉強した。その際のメモ。

論理

コンパイラ
  • 入力 : C++ソースファイル。
  • 出力 : オブジェクトファイル。「実行可能コード」「関数やデータへのシンボリック参照」が含まれている。
アーカイバ
  • 入力 : オブジェクトファイルのコレクション。
  • 出力 : 静的ライブラリまたはアーカイブ(オブジェクトファイルを使いやすいようにまとめたもの)。
リンカ
  • 入力 : オブジェクトファイルとライブラリのコレクション。
  • それらのシンボリック参照を解決 : 実行可能ファイルまたは動的ライブラリ。「シンボリック参照を解決」とは使用されているシンボルをその定義と照合すること。

リンク、、、

  • する側 : 実行可能ファイルまたは動的ライブラリ
  • される側 : 実行可能ファイルや動的ライブラリをビルドするために使用されるライブラリ

実践

ディレクトリ構成

作業ディレクトリを以降では便宜的に$WORKとしています。

$ ls -R $WORK
$WORK/johnpaul:
john.cpp
john.hpp
johnpaul.cpp
johnpaul.hpp
paul.cpp
paul.hpp

$WORK/georgeringo:
george.cpp
george.hpp
georgeringo.cpp
georgeringo.hpp
ringo.cpp
ringo.hpp

$WORK/hellobeatles:
hellobeatles.cpp
ファイルの内容

$WORK/johnpaul/john.hpp

#ifndef JOHN_HPP_INCLUDED
#define JOHN_HPP_INCLUDED

void john(); // Prints "John, "

#endif // JOHN_HPP_INCLUDED

$WORK/johnpaul/john.cpp

#include <iostream>
#include "john.hpp"

void john()
{
  std::cout << "John, ";
}

$WORK/johnpaul/paul.hpp

#ifndef PAUL_HPP_INCLUDED
#define PAUL_HPP_INCLUDED

void paul(); // Prints "Paul, "

#endif // PAUL_HPP_INCLUDED

$WORK/johnpaul/paul.cpp

#include <iostream>
#include "paul.hpp"

void paul()
{
  std::cout << "Paul, ";
}

$WORK/johnpaul/johnpaul.hpp

#ifndef JOHNPAUL_HPP_INCLUDED
#define JOHNPAUL_HPP_INCLUDED

void johnpaul(); // Prints "John, Paul, "

#endif // JOHNPAUL_HPP_INCLUDED

$WORK/johnpaul/johnpaul.cpp

#include "john.hpp"
#include "paul.hpp"
#include "johnpaul.hpp"

void johnpaul()
{
  john();
  paul();
}

$WORK/georgeringo/george.hpp

#ifndef GEORGE_HPP_INCLUDED
#define GEORGE_HPP_INCLUDED

void george(); // Prints "George, "

#endif // GEORGE_HPP_INCLUDED

$WORK/georgeringo/george.cpp

#include <iostream>
#include "george.hpp"

void george()
{
  std::cout << "George, ";
}

$WORK/georgeringo/ringo.hpp

#ifndef RINGO_HPP_INCLUDED
#define RINGO_HPP_INCLUDED

void ringo(); // Prints "and Ringo"

#endif // RINGO_HPP_INCLUDED

$WORK/georgeringo/ringo.cpp

#include <iostream>
#include "ringo.hpp"

void ringo()
{
  std::cout << "and Ringo\n";
}

$WORK/georgeringo/georgeringo.hpp

#ifndef GEORGERINGO_HPP_INCLUDED
#define GEORGERINGO_HPP_INCLUDED

// libgeorgeringo.dllをビルドするときにGEORGERINGO_DLLを定義する
# if defined(_WIN32) && !defined(__GNUC__)
#   ifdef GEORGERINGO_DLL
#     define GEORGERINGO_DECL __declspec(dllexport)
#   else
#     define GEORGERINGO_DECL __declspec(dllimport)
#   endif
# endif // WIN32

# ifndef GEORGERINGO_DECL
#   define GEORGERINGO_DECL
# endif

// Prints "George, and Ringo\n"
#ifdef __MWERKS__
#pragma export on
#endif

GEORGERINGO_DECL void georgeringo();
#ifdef __MWERKS__
#pragma export off
#endif

#endif // GEORGERINGO_HPP_INCLUDED

$WORK/georgeringo/georgeringo.cpp

#include "george.hpp"
#include "ringo.hpp"
#include "georgeringo.hpp"

void georgeringo()
{
  george();
  ringo();
}

$WORK/hellobeatles/hellobeatles.cpp

#include "johnpaul/johnpaul.hpp"
#include "georgeringo/georgeringo.hpp"

int main()
{
  // Prints "John, Paul, George and Ringo\n"
  johnpaul();
  georgeringo();
}

Macでやってみる

g++ の属性確認。Command Line Tools for Xcode に同梱されているやつです。

$ g++ -v
Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.9~22/src/configure --disable-checking --enable-werror --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.9~22/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)
"johnpaul"静的ライブラリの生成
$ cd $WORK/johnpaul

# オブジェクトファイルを生成。
$ g++ -c -o john.o john.cpp
$ g++ -c -o paul.o paul.cpp
$ g++ -c -o johnpaul.o johnpaul.cpp

# アーカイブ。
$ ar ru libjohnpaul.a john.o paul.o johnpaul.o
ar: creating archive libjohnpaul.a
$ ranlib libjohnpaul.a
"georgeringo"動的ライブラリの生成
$ cd $WORK/georgeringo

# オブジェクトファイルを生成。
$ g++ -c -o george.o george.cpp
$ g++ -c -o ringo.o ringo.cpp
$ g++ -c -o georgeringo.o georgeringo.cpp

# 動的ライブラリ生成。
$ g++ -dynamiclib -fPIC -o libgeorgeringo.dylib george.o ringo.o georgeringo.o
"hellobeatles"実行可能ファイルの作成。
$ cd $WORK/hellobeatles

# アプリケーションのcppファイルをオブジェクトファイルにコンパイル。
$ g++ -c -o hellobeatles.o hellobeatles.cpp -I ../

# リンカを使用してオブジェクトファイルとライブラリから実行可能ファイルを生成する。
$ g++ -o hellobeatles1 hellobeatles.o -L ../johnpaul -L ../georgeringo -ljohnpaul -lgeorgeringo

# 実行してみるもエラー。
$ ./hellobeatles1
dyld: Library not loaded: libgeorgeringo.dylib
  Referenced from: $WORK/hellobeatles/./hellobeatles1
  Reason: image not found
Trace/BPT trap: 5

# 別の方法でリンカを使用してオブジェクトファイルとライブラリから実行可能ファイルを生成する。
$ g++ -o hellobeatles2 hellobeatles.o ../johnpaul/libjohnpaul.a ../georgeringo/libgeorgeringo.dylib

# 実行してみるもやっぱりエラー。
$ ./hellobeatles2
dyld: Library not loaded: libgeorgeringo.dylib
  Referenced from: $WORK/hellobeatles/./hellobeatles2
  Reason: image not found
Trace/BPT trap: 5

# DYLD_LIBRARY_PATH を指定してやるとOK。
$ env DYLD_LIBRARY_PATH=$WORK/georgeringo ./hellobeatles1
John, Paul, George, and Ringo
$ env DYLD_LIBRARY_PATH=$WORK/georgeringo ./hellobeatles2
John, Paul, George, and Ringo

# リンクを確認。相対パスになってる。
$ otool -L hellobeatles1
hellobeatles1:
  libgeorgeringo.dylib (compatibility version 0.0.0, current version 0.0.0)
  /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
$ otool -L hellobeatles2
hellobeatles2:
  libgeorgeringo.dylib (compatibility version 0.0.0, current version 0.0.0)
  /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

# 実行可能ファイルをパスの通りそうなところにコピーしてみる。
$ cp -iv hellobeatles1 ../georgeringo/
hellobeatles1 -> ../georgeringo/hellobeatles1
$ cp -iv hellobeatles2 ../georgeringo/
hellobeatles2 -> ../georgeringo/hellobeatles2
$ cd $WORK/georgeringo/

# コピーしたものを実行するとOK。
$ ./hellobeatles1
John, Paul, George, and Ringo
$ ./hellobeatles2
John, Paul, George, and Ringo

Ubuntuでやってみる

g++ の属性確認

$ g++ -v
組み込み spec を使用しています。
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
ターゲット: i686-linux-gnu
configure 設定: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
スレッドモデル: posix
gcc バージョン 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
"johnpaul"静的ライブラリの生成
$ cd $WORK/johnpaul
$ g++ -c -o john.o john.cpp
$ g++ -c -o paul.o paul.cpp
$ g++ -c -o johnpaul.o johnpaul.cpp
$ ar ru libjohnpaul.a john.o paul.o johnpaul.o
ar: creating libjohnpaul.a
$ ranlib libjohnpaul.a
"georgeringo"動的ライブラリの生成
$ cd $WORK/georgeringo
$ g++ -c -o george.o george.cpp
$ g++ -c -o ringo.o ringo.cpp
$ g++ -c -o georgeringo.o georgeringo.cpp
$ g++ -shared -fPIC -o libgeorgeringo.so george.o ringo.o georgeringo.o
"hellobeatles"実行可能ファイルの作成
$ cd $WORK/hellobeatles

# アプリケーションのcppファイルをオブジェクトファイルにコンパイル。
$ g++ -c -o hellobeatles.o hellobeatles.cpp -I ../

# リンカを使用してオブジェクトファイルとライブラリから実行可能ファイルを生成する。
$ g++ -o hellobeatles1 hellobeatles.o -L ../johnpaul -L ../georgeringo -ljohnpaul -lgeorgeringo

# 実行してみるもエラー
$ ./hellobeatles1
./hellobeatles1: error while loading shared libraries: libgeorgeringo.so: cannot open shared object file: No such file or directory

# リンクを確認。見つからないと言われる。
$ ldd hellobeatles1
        linux-gate.so.1 =>  (0xb777b000)
        libgeorgeringo.so => not found
        libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb7689000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74e3000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb74b7000)
        /lib/ld-linux.so.2 (0xb777c000)
        libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7499000)

# リンカを使用してオブジェクトファイルとライブラリから実行可能ファイルを生成する。
$ g++ -o hellobeatles2 hellobeatles.o ../johnpaul/libjohnpaul.a ../georgeringo/libgeorgeringo.so

# 実行してみるとOK。
$ ./hellobeatles2
John, Paul, George, and Ringo

# リンクを確認。ちゃんと認識されている。
$ ldd hellobeatles2
        linux-gate.so.1 =>  (0xb77a9000)
        ../georgeringo/libgeorgeringo.so (0xb77a4000)
        libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76b4000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb750e000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb74e2000)
        /lib/ld-linux.so.2 (0xb77aa000)
        libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb74c4000)

まとめ

  • 静的ライブラリは実行可能ファイルに取り込まれる。
  • 動的ライブラリは実行可能ファイルに取り込まれない。よってパスがちゃんと通ってないと困ることになる。パスの通し方はもう要検証。
  • LinuxならlddOSXならotoolで動的ライブラリのパスを確認できる。

C++クックブック
C++クックブック
posted with amazlet at 12.09.19
D. Ryan Stephens Christopher Diggins Jonathan Turkanis Jeff Cogswell
オライリー・ジャパン
売り上げランキング: 633899

トータル・リコール

アクション、アンド、アクション、アンド、アクション。
どんよりとして雑然として湿っぽさと埃っぽさの同居したブレードランナーを思わせる街並みにスターウォーズを思わせるカーチェイス
おばさんの顔が割れてシュワルツネッガーの顔が出てくるときのあのオリジナル版ほどのインパクトはないかな。
今回も「顔割れおばさん」は出てましたね。あの顔が割れるのかと思ってドキドキしてしまいましたが個人的にはそのドキドキが一番の盛り上がりだったような気がします。

自分が何者だかわからなくなる感じ、実在感の無さというのは誰もが潜在的に持っているんでしょうか?小さい時は自分はこの世においてどんな存在なんだろうとよく考えたものです。結局はおとなになって日常に流されてそんなことを思わない日々が当たり前になるのですが。映画を観るとふと俯瞰の立場を突きつけられてあの頃を思い出していたたまれなくなりますね。

自分がどうありたいかというのと、自分がどうあるべきかというのはちょっと違っていて、前者は内的なもの後者は外的な要因からの作用が大きいと思います。しかしみんなが求めている自分でありたいという心理もあると思うんです。
僕がダグラス・クエイド/ハウザー(コリン・ファレル)の立場だったらどうしただろう。
判断基準を外に求めることのカッコ悪さみたいなことの言及がたまに見受けられますがどれも程度の問題だと思うんですよね。

というような煩悶は実はあまり残らないアクションエンターテインメントでした。

裏切りのサーカス

原作「ティンカー、テイラー、ソルジャー、スパイ」を4分の1ほど読んでからの鑑賞。この原作が難読でなかなか読み進められず公開期限が迫ってきたために止む無く読了前の鑑賞となりました。

ゴーストライター」を見た時にも似た通底する重厚な雰囲気は好き。特に冒頭のシーケンスは淡々としてるんだけど飽かず観ていられました。スマイリー(ゲイリー・オールドマン)がカーラとの邂逅を吐露する場面の徐々に熱を帯びていく感じやオリバー・レイコン(サイモン・マクバーニー)だったっけか?がカリカリのトーストにバターを塗るシーンが印象的。
そして、サー・ポール・スミスが大きく関わっているのもあるのでしょうが衣装から色調から何から何までお洒落。「おしゃれ」でも「オサレ」でも「シャレオツ」でもなく「お洒落」。ポップなそれではなくトラディショナルでシックなもので時代感を感じさせとても素敵でした。それはサーカスという独自の雰囲気を持ったところには合っていたかも。まぁ「サーカスの連中ぼろぼろの安モン着てるんだけどね」的なスタンスだったとしてもぜんぜんきらいじゃないけどね。

原作の膨大なボリュームを限られた時間の中にそつなく詰め込んでいる手法は見事で、すべての登場人物が丁寧に語られていたと感じました。ただ、この物語を「謎解きモノ」として見ると4人のもぐら候補の描写はとたんに物足りなく感じられます。つまりその点はこの物語の焦点ではなく、あくまで「スマイリーと男たち」の物語なんですね、きっと。謎解きの部分は正直なところついていけませんでした。読解力がないんですね、俺に。

蛇足ですが「ダークナイト・ライジング」では敵対しているふたりが同舟しているさまはなんだかニヤニヤしてしまいますね。
鑑賞後に上っ面だけをそれでもノロノロリと読み進め残り150ページほどです。読後にはこの物語の真髄を味わえることができるのでしょうか?どちらにしろ映画一度だけの鑑賞だとその領域に到達するのは難しそうです。
自分に二度目は…、どうでしょう?なんとも言えません。




裏切りのサーカス コレクターズ・エディション [Blu-ray]
Happinet(SB)(D) (2012-11-02)
売り上げランキング: 119

ソースからビルドしたアプリケーション管理にpaco

Debian系ならapt、RH系ならyumでのアプリケーションやライブラリのインストール・アンインストールは大変ラクですよね。
しかし場合によってはソースからインストールしたいときもあります。が、ソースからインストールしたものを削除したい時に"make uninstall"が用意されていない場合も多いです。
そういった面を含めて体系的な管理をすること、つまりパッケージ化するcheckinstallというツールがあるようです。
しかし、

ソースからビルドしたファイルはcheckinstall
使いパッケージ化してインストールをしているが、

これだとソースからインストールしたのか、
パッケージ経由からのか区別が付きにくい

また、まれにパッケージ化できないものもあり、管理が煩雑に
なってしまう

ソースからインストールしたファイルをパッケージ管理出来る「paco」|DesktopなLinuxの設定とか

とあったり、

But though CheckInstall is very efficient, it finally depends on the package
manager of the host system (rpm, dpkg or installpkg), so it doesn't fit the
needs of the LFS community.

LFS hint | paco - a source code pacKAGE oRGANIZER for Unix/Linux

とあったりしたので二の足を踏んでしまいました。

よって代替案としてpacoをインストールすることにしました。その時の作業をメモしておきます。
"make install"したソフトウェアを管理できる超便利ツール「Paco」 - 元RX-7乗りの適当な日々の内容を参考にさせていただきました。

インストール

1. ダウンロード
$ cd /tmp/
$ la
$ wget http://sourceforge.net/projects/paco/files/paco/2.0.9/paco-2.0.9.tar.gz/download -O paco-2.0.9.tar.gz
2. 展開
$ tar zxvf paco-2.0.9.tar.gz
3. configure

GPaco is the graphic interface of paco.

http://paco.sourceforge.net/

GPacoというGUIが付属しているようですが今回は使わないので --disable-gpaco としてやります。

$ cd paco-2.0.9/
$ ./configure --disable-gpaco
4. make
$ make
プログラム 'make' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install make

わりとまっさらな状態のバーチャルマシンで行っているため make が入っていませんでした。
ご丁寧なメッセージに従って make をインストールすることとします。これは apt 使って。

5. make のインストール

By default, Ubuntu does not come with the tools required. You need to install the package build-essential for making the package and ...

https://help.ubuntu.com/community/CompilingEasyHowTo#Step_1:_Prep_your_system_for_building_packages

Ubuntuにはデフォルトでは make などのツールは入っていないようです。そこで build-essential というパッケージをインストールしてやることで make できるようにします。

$ sudo aptitude update
$ sudo aptitude upgrade
$ sudo aptitude install build-essential
以下の新規パッケージがインストールされます:
  binutils{a} build-essential cpp{a} cpp-4.6{a} dpkg-dev{a} fakeroot{a} g++{a} g++-4.6{a} gcc{a} gcc-4.6{a}
  libalgorithm-diff-perl{a} libalgorithm-diff-xs-perl{a} libalgorithm-merge-perl{a} libc-dev-bin{a} libc6-dev{a}
  libdpkg-perl{a} libgomp1{a} libmpc2{a} libmpfr4{a} libquadmath0{a} libstdc++6-4.6-dev{a} linux-libc-dev{a} make{a}
  manpages-dev{a}
0 個のパッケージを更新、 24 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
32.1 M バイトのアーカイブを取得する必要があります。 展開後に 88.4 M バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] 
 :
update-alternatives: /usr/bin/c++ (c++) を提供するために 自動モード で /usr/bin/g++ を使います。
build-essential (11.5ubuntu2) を設定しています ...
libc-bin のトリガを処理しています ...
ldconfig deferred processing now taking place
6. configure & make & make install
$ ./configure --disable-gpaco
$ make
$ sudo make install
7. paco自身を登録

paco自身をソースからインストールしたので自分自身をリストに登録してやります。

$ sudo make logme
8. 登録状況の確認
$ paco -1Fdsa
25 1.4M     20  16-Jun-2012  paco-2.0.9

コマンドオプションでわりと使いそうなもののメモ

パッケージに関連するパッケージの一覧
$ paco -f paco-2.0.9
paco-2.0.9:
/usr/local/share/paco/README
/usr/local/lib/libpaco-log.a
/usr/local/lib/libpaco-log.la
/usr/local/lib/libpaco-log.so
/usr/local/lib/libpaco-log.so.0
/usr/local/lib/libpaco-log.so.0.0.0
/usr/local/bin/paco
/usr/local/etc/pacorc
/usr/local/lib/pkgconfig/paco.pc
/usr/local/share/man/man5/pacorc.5
/usr/local/share/man/man8/paco.8
/usr/local/share/man/man8/pacoball.8
/usr/local/share/man/man8/rpm2paco.8
/usr/local/share/man/man8/superpaco.8
/usr/local/share/paco/faq.txt
/usr/local/share/paco/pacorc
/usr/local/bin/ocap
/usr/local/bin/pacoball
/usr/local/bin/rpm2paco
/usr/local/bin/superpaco
パッケージ情報
$ paco -i paco-2.0.9
------------
 paco-2.0.9
------------

Name:     paco
Version:  2.0.9
Summary:  Source code package organizer
configure時のオプションの表示
$ paco -o paco-2.0.9
--disable-gpaco

おおかみこどもの雨と雪

花は強し!

医療や助産婦の力を借りずに産んでしまうことの危うさ。
世間から孤立して育児を続ける危うさ。
子供たちの正体がバレてしまうのではないかという危うさ。
花が倒れたら子供たちはどうなってしまうのだろうという危うさ。

雪のとびきりのおてんばぶりや雨の恥ずかしがり屋さんぶりを観ていて「かうゎうぃうぃ〜」となること請け合いなのですが、心底そこに浸れないのはそういった危うさがもたらすいつか来るであろう危機を感じずにはいられないから。
とにかく観ててずっと息がつまりっぱなしでした。

雨の旅立ちに直面し「まだなにもしてあげられていない」と言っていたのがおおかみとしての雨の咆哮を聞いて「しっかり生きて!」になるまでの花の感情の展開は、正直なところ「切り替え早いな」と思わないでもなかったけどそれを加味してもやはりとても感動的なシーンでした。
ギリギリでよく頑張ったね、花。

聡明な花だから「結果的に」ギリギリ持ちこたえたといった印象。このギリギリ感がちょうど良い塩梅ではあったと思います。花は聡明ではあるけど完璧ではなかったから。「あぁすべきだった」とか「こうすべき」という指摘材料は多数あるところでしょう。
花みたいに母は強い。でもすべての母が花みたいに強くはなれない。そのあたりがこの映画の罪深さをはらんでいるような気がします。勇気をもらう人もいれば絶望する人もいるんじゃないだろうか。「花みたいに私は頑張れない」と。

とりあえず独身男としては両親への感謝を再認識です。