Redmineの再構築と移行など
開発支援サーバを構築したいとおもいSubversion、GitおよびRedmineのサービスを行うサーバを構築しました。3ヶ月くらい前に行ったことのメモをまとめました。メインはRedmineの移行です。
- アプリケーション等管理ツール
- バージョン管理ツール
-
- Subversionサーバ
いろいろゴチャゴチャやったのでまとまってません。また今度やる時があれば綺麗にまとめたいなと(^_^;) - Gitサーバ
インストールは以下のように。sudo aptitude install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev cd /usr/local/src sudo wget http://git-core.googlecode.com/files/git-1.7.11.1.tar.gz sudo tar zxvf git-1.7.11.1.tar.gz cd git-1.7.11.1 sudo ./configure sudo make sudo paco -D make install
サーバの構築は以下のリンク先で。
UbuntuにGitサーバ構築。Macでローカルリポジトリを運用してみる。 - ペイパー・プログラマーズ・ダイアリー
- Subversionサーバ
- 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
- 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
- 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
- bundlerのインストール
sudo gem install bundler
- Imagemagickのインストール
sudo aptitude install libmagickwand-dev
- 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
- MySQLの設定
- DBにログイン。
$ cd /usr/local/mysql/bin $ ./mysql -u root
- 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データベースにおける権限を付与
- 一応 redmine にsu
$ sudo su - redmine
- /opt/redmine/config/database.yml の設定
production: adapter: mysql2 database: redmine host: localhost username: redmine password: yourpassword
- セッションストアシークレットを作成
$ cd /opt/redmine $ bundle exec rake generate_secret_token
- DBにログイン。
- 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'
- アーカイブして移行先(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/
- バックアップを解凍
$ cd ~/tmp $ tar vzxf redmine_argyle.backup.migrate_redmine.tgz
- redmineにファイルを移行
$ sudo cp -irv files /opt/redmine
- MySQLのデータを移行
$ /usr/local/mysql/bin/mysql -u root redmine < redmine.sql
- 新しい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
- 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
本題のRedmineの移行です。 ずっと1.0.5を使っていたのでバージョンアップしまます。また、アプリケーションを動かす環境も新たな場所に構築します。 なお、Redmineはpassengerスタンドアローン版で動かし、Apacheをプロキシサーバとして利用します。これはSubversionサーバ(w/Apache)が同じマシン上に立っているためです。 既存のRedmine1.0.5はホスト名 argyle.mnb というマシンで動いていました。今回は新規に作成する tattersall.mnb というVMに移行します。なお作業時の最新のRedmineのバージョンは2.0.3です。移行先(tattersall)での作業
移行元(argyle)での作業
移行先(tattersall)での作業
アベンジャーズ
「アイアンマン」しか観ていない状態で映画館へ。字幕3D(マスターイメージ方式)で鑑賞。配布の3Dメガネは「メガネ on メガネ」しづらかったのでクリップオンの3Dレンズを買いました。
144分と長尺なのは各ヒーローたちの出自をそれなりに明らかにする必要があるからでしょうね。なので冒頭が正直ちょっと長いよなぁと思わなくもなかったですが彼らの出自を明らかにしつつも物語は推進力を持っているのでなんとかついていくことができました。
すべての作品を知っているわけではないのでそれは逆に作品同士のリアリティラインの矛盾(それがあればですが)が気にならないという利点がありましたね。
ハルク(マーク・ラファロ)はどうして自制できるようになったんでしょ?あとホーク・アイ(ジェレミー・レナー)のマインド・コントロールが抜けた件ってちゃんと確認しなくてもいいのかね?と思っちゃいました。
が!
「ま、細かいことはいいぢゃん」ってのがこの映画のスタンスでしょうから頭の隅に追いやって、厨二病なロキ(トム・ヒドルストン)たんのルサンチマンからなるオイタの始末にシールドのなんか秘密裏に考えていることが軽くスパイスづけされて
魚器を思わせる巨大クリーチャーの存在感はよかったな。あんな巨大なのが空泳いでたらけっこうアガると思う。機械クリーチャーとしては「第9地区」を想起しました。
個人的にはハルクが良かったな。内気で臆病な狂気とその狂気が開放された結果の爆発力はいいね。マリオがスター取ったのと変わんないじゃん、アレ。で、爽快感はマリオ以上だと思う。
ただ、3Dの効果はほぼ皆無!こんなんだったら2Dで全然良かったよ。
トータル・リコールでアクションお腹いっぱいだったのでそのへんは若干食傷気味だったのですが、裏切りのサーカスをトータル・リコールとアベンジャーズの間にはさめばよかったですね。日程的に厳しいけどw
静的ライブラリと動的ライブラリ
静的ライブラリとか動的ライブラリがよく理解できていなかったのでオライリーの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)
トータル・リコール
アクション、アンド、アクション、アンド、アクション。
どんよりとして雑然として湿っぽさと埃っぽさの同居したブレードランナーを思わせる街並みにスターウォーズを思わせるカーチェイス。
おばさんの顔が割れてシュワルツネッガーの顔が出てくるときのあのオリジナル版ほどのインパクトはないかな。
今回も「顔割れおばさん」は出てましたね。あの顔が割れるのかと思ってドキドキしてしまいましたが個人的にはそのドキドキが一番の盛り上がりだったような気がします。
自分が何者だかわからなくなる感じ、実在感の無さというのは誰もが潜在的に持っているんでしょうか?小さい時は自分はこの世においてどんな存在なんだろうとよく考えたものです。結局はおとなになって日常に流されてそんなことを思わない日々が当たり前になるのですが。映画を観るとふと俯瞰の立場を突きつけられてあの頃を思い出していたたまれなくなりますね。
自分がどうありたいかというのと、自分がどうあるべきかというのはちょっと違っていて、前者は内的なもの後者は外的な要因からの作用が大きいと思います。しかしみんなが求めている自分でありたいという心理もあると思うんです。
僕がダグラス・クエイド/ハウザー(コリン・ファレル)の立場だったらどうしただろう。
判断基準を外に求めることのカッコ悪さみたいなことの言及がたまに見受けられますがどれも程度の問題だと思うんですよね。
というような煩悶は実はあまり残らないアクションエンターテインメントでした。
裏切りのサーカス
原作「ティンカー、テイラー、ソルジャー、スパイ」を4分の1ほど読んでからの鑑賞。この原作が難読でなかなか読み進められず公開期限が迫ってきたために止む無く読了前の鑑賞となりました。
「ゴーストライター」を見た時にも似た通底する重厚な雰囲気は好き。特に冒頭のシーケンスは淡々としてるんだけど飽かず観ていられました。スマイリー(ゲイリー・オールドマン)がカーラとの邂逅を吐露する場面の徐々に熱を帯びていく感じやオリバー・レイコン(サイモン・マクバーニー)だったっけか?がカリカリのトーストにバターを塗るシーンが印象的。
そして、サー・ポール・スミスが大きく関わっているのもあるのでしょうが衣装から色調から何から何までお洒落。「おしゃれ」でも「オサレ」でも「シャレオツ」でもなく「お洒落」。ポップなそれではなくトラディショナルでシックなもので時代感を感じさせとても素敵でした。それはサーカスという独自の雰囲気を持ったところには合っていたかも。まぁ「サーカスの連中ぼろぼろの安モン着てるんだけどね」的なスタンスだったとしてもぜんぜんきらいじゃないけどね。
原作の膨大なボリュームを限られた時間の中にそつなく詰め込んでいる手法は見事で、すべての登場人物が丁寧に語られていたと感じました。ただ、この物語を「謎解きモノ」として見ると4人のもぐら候補の描写はとたんに物足りなく感じられます。つまりその点はこの物語の焦点ではなく、あくまで「スマイリーと男たち」の物語なんですね、きっと。謎解きの部分は正直なところついていけませんでした。読解力がないんですね、俺に。
蛇足ですが「ダークナイト・ライジング」では敵対しているふたりが同舟しているさまはなんだかニヤニヤしてしまいますね。
鑑賞後に上っ面だけをそれでもノロリノロリと読み進め残り150ページほどです。読後にはこの物語の真髄を味わえることができるのでしょうか?どちらにしろ映画一度だけの鑑賞だとその領域に到達するのは難しそうです。
自分に二度目は…、どうでしょう?なんとも言えません。
売り上げランキング: 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
LFS hint | paco - a source code pacKAGE oRGANIZER for Unix/Linux
manager of the host system (rpm, dpkg or installpkg), so it doesn't fit the
needs of the LFS community.
とあったりしたので二の足を踏んでしまいました。
よって代替案として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
おおかみこどもの雨と雪
花は強し!
医療や助産婦の力を借りずに産んでしまうことの危うさ。
世間から孤立して育児を続ける危うさ。
子供たちの正体がバレてしまうのではないかという危うさ。
花が倒れたら子供たちはどうなってしまうのだろうという危うさ。
雪のとびきりのおてんばぶりや雨の恥ずかしがり屋さんぶりを観ていて「かうゎうぃうぃ〜」となること請け合いなのですが、心底そこに浸れないのはそういった危うさがもたらすいつか来るであろう危機を感じずにはいられないから。
とにかく観ててずっと息がつまりっぱなしでした。
雨の旅立ちに直面し「まだなにもしてあげられていない」と言っていたのがおおかみとしての雨の咆哮を聞いて「しっかり生きて!」になるまでの花の感情の展開は、正直なところ「切り替え早いな」と思わないでもなかったけどそれを加味してもやはりとても感動的なシーンでした。
ギリギリでよく頑張ったね、花。
聡明な花だから「結果的に」ギリギリ持ちこたえたといった印象。このギリギリ感がちょうど良い塩梅ではあったと思います。花は聡明ではあるけど完璧ではなかったから。「あぁすべきだった」とか「こうすべき」という指摘材料は多数あるところでしょう。
花みたいに母は強い。でもすべての母が花みたいに強くはなれない。そのあたりがこの映画の罪深さをはらんでいるような気がします。勇気をもらう人もいれば絶望する人もいるんじゃないだろうか。「花みたいに私は頑張れない」と。
とりあえず独身男としては両親への感謝を再認識です。