Yearly Archives: 2014

file-roller にて unzip を p7zip より優先させる

前回、Fedora 20 にて unzip の日本語ファイル名文字化けを回避するパッチを適用しました。しかし、p7zip をインストールするとそれが無効になってしまう問題が残っていました。これを解消するために、file-roller に対して unzip を p7zip より優先させるパッチを適用します。

開発環境のインストール

$ sudo yum groupinstall -y development-tools
$ sudo yum install -y gcc-c++ rpm-build

Source RPM の入手とインストール

file-roller のソースパッケージを入手します。

$ yumdownloader --source file-roller

file-roller-3.10.2.1-1.fc20.src.rpm がダウンロードされました。
このソースパッケージをインストールします。

$ rpm -ivh file-roller-3.10.2.1-1.fc20.src.rpm

「~/rpmbuild/SOURCES/」ディレクトリに Source RPM の内容が配置されました。
file-roller のソース本体は .tar.xz の形式でアーカイブされた状態になっています。

$ tree ~/rpmbuild/

├── SOURCES
│   └── file-roller-3.10.2.1.tar.xz
└── SPECS
    └── file-roller.spec

ビルド時に依存関係で必要となるパッケージをインストール

ビルド時に依存関係で必要となるパッケージは spec ファイルに記述されているのですが、「yum-builddep」という便利なコマンドを使用すると、一括してインストールすることができます。

$ sudo yum-builddep file-roller-3.10.2.1-1.fc20.src.rpm

これにより、gtk3-devel、nautilus-devel、intltool、itstool、GConf2-devel、file-devel、libarchive-devel、json-glib-devel などがインストールされます。

パッチ適用済みソースの展開

rpmbuild -bp コマンドでパッチ適用済みソースを展開します。

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp file-roller.spec

ソースのオリジナルを別のディレクトリにコピーして保存します。

$ cd ~/rpmbuild/BUILD/
$ cp -r file-roller-3.10.2.1 file-roller-3.10.2.1.org

ソースを変更

file-roller が zip ファイル展開に使用するコマンドの優先度に関して、p7zip よりも unzip が優先されるよう、vi エディタを使用して fr-init.c を修正します。

$ cd ~/rpmbuild/BUILD/file-roller-3.10.2.1
$ vi ./src/fr-init.c

変更内容は、以下の変更前と変更後のイメージのように、369行目を355行目に移動します。

変更前: 369 行目が移動する前の行です。

static void
register_archives (void)
{
	/* The order here is important. Commands registered earlier have higher
	 * priority.  However commands that can read and write a file format
	 * have higher priority over commands that can only read the same
	 * format, regardless of the registration order. */

#if ENABLE_LIBARCHIVE
	register_archive (FR_TYPE_ARCHIVE_LIBARCHIVE);
#endif

	register_archive (FR_TYPE_COMMAND_TAR);
	register_archive (FR_TYPE_COMMAND_CFILE);
	register_archive (FR_TYPE_COMMAND_7Z);
	register_archive (FR_TYPE_COMMAND_DPKG);

	register_archive (FR_TYPE_COMMAND_ACE);
	register_archive (FR_TYPE_COMMAND_ALZ);
	register_archive (FR_TYPE_COMMAND_AR);
	register_archive (FR_TYPE_COMMAND_ARJ);
	register_archive (FR_TYPE_COMMAND_CPIO);
	register_archive (FR_TYPE_COMMAND_ISO);
	register_archive (FR_TYPE_COMMAND_JAR);
	register_archive (FR_TYPE_COMMAND_LHA);
	register_archive (FR_TYPE_COMMAND_RAR);
	register_archive (FR_TYPE_COMMAND_RPM);
	register_archive (FR_TYPE_COMMAND_UNSTUFF);
	register_archive (FR_TYPE_COMMAND_ZIP);
	register_archive (FR_TYPE_COMMAND_LRZIP);
	register_archive (FR_TYPE_COMMAND_ZOO);
#if HAVE_JSON_GLIB
	register_archive (FR_TYPE_COMMAND_UNARCHIVER);
#endif
}
firstline="341" highlight="369"

変更後: 355 行目が移動した後の行です。

static void
register_archives (void)
{
	/* The order here is important. Commands registered earlier have higher
	 * priority.  However commands that can read and write a file format
	 * have higher priority over commands that can only read the same
	 * format, regardless of the registration order. */

#if ENABLE_LIBARCHIVE
	register_archive (FR_TYPE_ARCHIVE_LIBARCHIVE);
#endif

	register_archive (FR_TYPE_COMMAND_TAR);
	register_archive (FR_TYPE_COMMAND_CFILE);
	register_archive (FR_TYPE_COMMAND_ZIP);
	register_archive (FR_TYPE_COMMAND_7Z);
	register_archive (FR_TYPE_COMMAND_DPKG);

	register_archive (FR_TYPE_COMMAND_ACE);
	register_archive (FR_TYPE_COMMAND_ALZ);
	register_archive (FR_TYPE_COMMAND_AR);
	register_archive (FR_TYPE_COMMAND_ARJ);
	register_archive (FR_TYPE_COMMAND_CPIO);
	register_archive (FR_TYPE_COMMAND_ISO);
	register_archive (FR_TYPE_COMMAND_JAR);
	register_archive (FR_TYPE_COMMAND_LHA);
	register_archive (FR_TYPE_COMMAND_RAR);
	register_archive (FR_TYPE_COMMAND_RPM);
	register_archive (FR_TYPE_COMMAND_UNSTUFF);
	register_archive (FR_TYPE_COMMAND_LRZIP);
	register_archive (FR_TYPE_COMMAND_ZOO);
#if HAVE_JSON_GLIB
	register_archive (FR_TYPE_COMMAND_UNARCHIVER);
#endif
}

上記の fr-init.c に対する修正を vi エディタの替りに sed を使って変更するには以下のように入力します。

$ cd ~/rpmbuild/BUILD/file-roller-3.10.2.1
$ sed -i -e '/^\tregister_archive (FR_TYPE_COMMAND_ZIP);$/d' ./src/fr-init.c
$ sed -i -e '/^\tregister_archive (FR_TYPE_COMMAND_7Z);$/i \\tregister_archive (FR_TYPE_COMMAND_ZIP);' ./src/fr-init.c

差分パッチの作成

ソースを変更したら、diff コマンドでオリジナルとの差分パッチを作成します。diff コマンドは「diff -aurN hoge.org hoge > hoge.patch」のように使用します。ここでは差分パッチのファイル名は「my.patch」とします。作成した差分パッチは「~/rpmbuild/SOURCES」ディレクトリの下に移動します。

$ cd ~/rpmbuild/BUILD/
$ diff -aurN file-roller-3.10.2.1.org file-roller-3.10.2.1 > my.patch
$ mv my.patch ~/rpmbuild/SOURCES

spec ファイルの変更

vi エディタで spec ファイルを修正します。まずは spec ファイルの中の「Source:」の後に「PatchN」として追加します。N は任意の番号でよいです。ここでは「Patch100」としています。

$ cd ~/rpmbuild/SPECS
$ cp -p file-roller.spec file-roller.spec.org
$ vi file-roller.spec

以下のように 9 行目の「Source:」行の後に 10 行目の「Patch100:」行を追加します。

Source:         http://download.gnome.org/sources/file-roller/3.10/file-roller-%{version}.tar.xz
Patch100:       my.patch

BuildRequires: glib2-devel

以下のように 44 行目の「%setup -q」行の後に 45 行目の「%patch100 -p1」行を追加します。

%prep
%setup -q
%patch100 -p1

rpmbuild -bb コマンドによりバイナリーRPMを作成

rpmbuild -bb コマンドによりソースをビルドして Binary RPM を作成します。これには rpmbuild -bb コマンドに spec ファイルを読ませてビルドを実行します。

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bb file-roller.spec

ビルドが完了すると Binary RPM が ~/rpmbuild/RPMS ディレクトリに配置されます。

$ tree ~/rpmbuild/RPMS

└── x86_64
    ├── file-roller-3.10.2.1-1.fc20.x86_64.rpm
    ├── file-roller-debuginfo-3.10.2.1-1.fc20.x86_64.rpm
    └── file-roller-nautilus-3.10.2.1-1.fc20.x86_64.rpm

新しい file-roller のインストール

古い file-roller を削除して新しい file-roller をインストールします

$ sudo rpm -evh --nodeps file-roller file-roller-nautilus
$ cd ~/rpmbuild/RPMS/x86_64
$ sudo yum localinstall -y file-roller-3.10.2.1-1.fc20.x86_64.rpm file-roller-nautilus-3.10.2.1-1.fc20.x86_64.rpm

動作確認

p7zip をインストールした状態でも、日本語ファイル名を含む zip を文字化けしないで解凍できることを確認します。

$ sudo yum install -y p7zip

文字化けを起こす zip ファイルのサンプル「解凍すると文字化けするかも.zip」を以下のサイトから入手します。
https://wiki.ubuntulinux.jp/Develop/UnzipTestcase
file-roller から、この zip を正常に展開できることを確認します。

$ file-roller "解凍すると文字化けするかも.zip"

参考

以下のサイトを参考にさせていただきました。
http://linux.ikoinoba.net/index.php?UID=1304778906

zip ファイルの解凍にて日本語ファイル名が文字化け

Linux で日本語のファイル名を含んだ zip ファイルを解凍しようとすると、文字化けやエラーで正常に解凍できない場合があります。原因は、Windows で作成された zip ファイルに含まれるファイル名が Shift_JIS(CP932) を使用しており、Linux 側の unzip コマンドがそれらのファイル名に対応していないためです。この問題に対する unzip 6.0 のパッチが公開されているので、Fedora 20 に適用してみました。

make コマンドでビルドする方法と、rpmbuild コマンドでRPM パッケージを作成する方法があります。まずは、make コマンドによる手順を紹介します。

make コマンドでビルドする手順

開発ツールをインストールします。

$ sudo yum groupinstall -y development-tools
$ sudo yum install -y gcc-c++ rpm-build

unzip 6.0 のソースを入手して展開します。

$ wget http://downloads.sourceforge.net/infozip/unzip60.tar.gz
$ tar xzvf unzip60.tar.gz

unzip 6.0 用の Shift_JIS 対応の差分パッチを入手します。

$ cd unzip60
$ wget http://gist.github.com/raw/573753/unzip-6.0-japanese_charset.patch

パッチを適用して make generic_gcc コマンドでコンパイルします。

$ patch -p1 < unzip-6.0-japanese_charset.patch
$ make -f unix/Makefile LOCAL_UNZIP="-D_FILE_OFFSET_BITS=64 -DNO_LCHMOD -D_MBCS -DNO_WORKING_ISPRINT" generic_gcc

make install コマンドでインストールします。

$ sudo make -f unix/Makefile prefix=/usr install

これにより、以下のファイルがインストールされます。

/usr/bin/unzip
/usr/bin/funzip
/usr/bin/unzipsfx
/usr/bin/zipgrep
/usr/bin/zipinfo
/usr/man/man1/funzip.1
/usr/man/man1/unzip.1
/usr/man/man1/unzipsfx.1
/usr/man/man1/zipgrep.1
/usr/man/man1/zipinfo.1

何らかの理由でアンインストールするには、rm コマンドでこれらのファイルを削除するか、または以下ように make uninstall コマンドを実行します。

$ sudo make -f unix/Makefile prefix=/usr uninstall

make コマンドでビルドする手順は簡単ですが、つぎに紹介する rpmbuild コマンドでパッケージを作成してインストールするほうが、管理的には問題が少なくて便利です。

rpmbuild コマンドでパッケージを作成する手順

開発ツールをインストールします。

$ sudo yum groupinstall -y development-tools
$ sudo yum install -y gcc-c++ rpm-build

unzip のソースパッケージを入手します。

$ yumdownloader --source unzip

unzip-6.0-12.fc20.src.rpm がダウンロードされました。
このソースパッケージをインストールします。

$ rpm -ivh unzip-6.0-12.fc20.src.rpm

「~/rpmbuild/SOURCES/」ディレクトリに Source RPM の内容が配置されました。unzip 6.0 のソース本体 (unzip60.tar.gz) と、それに適用される 8 つの差分パッチ (.patch) が含まれています。

$ tree ~/rpmbuild/

├── SOURCES
│   ├── unzip-6.0-attribs-overflow.patch
│   ├── unzip-6.0-bzip2-configure.patch
│   ├── unzip-6.0-close.patch
│   ├── unzip-6.0-exec-shield.patch
│   ├── unzip-6.0-fix-recmatch.patch
│   ├── unzip-6.0-manpage-fix.patch
│   ├── unzip-6.0-nostrip.patch
│   ├── unzip-6.0-symlink.patch
│   └── unzip60.tar.gz
└── SPECS
    └── unzip.spec

unzip のビルド時に依存関係で必要となるパッケージをインストールします。ビルド時に依存関係で必要となるパッケージは spec ファイルに記述されているのですが、「yum-builddep」というコマンドを使用すると、一括してインストールできます。これにより、bzip2-devel などがインストールされます。

$ sudo yum-builddep unzip-6.0-12.fc20.src.rpm

rpmbuild -bp コマンドでパッチ適用済みソースを展開します。

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp unzip.spec

ソースのオリジナルを別のディレクトリにコピーして保存します。修正手順などが間違った場合は、unzip60.org から必要なファイルを戻してください。

$ cd ~/rpmbuild/BUILD/
$ cp -r unzip60 unzip60.org

unzip 6.0 用の Shift_JIS 対応の差分パッチの入手して、「~/rpmbuild/SOURCES」ディレクトリの下に配置します。

$ cd ~/rpmbuild/SOURCES
$ wget https://gist.githubusercontent.com/hamano/573753/raw/unzip-6.0-japanese_charset.patch

spec ファイルをエディタで修正します。まずは spec ファイルの中の「Patch8」などの後に「PatchN」として追加します。N は任意の番号でよいです。ここでは「Patch100」としています。

$ cd ~/rpmbuild/SPECS
$ cp unzip.spec unzip.spec.org
$ vi unzip.spec

以下のように 27 行目を追加します。

Patch8: unzip-6.0-symlink.patch
Patch100: unzip-6.0-japanese_charset.patch
URL: http://www.info-zip.org/UnZip.html

同様に「%patch8」などの後に「%patchN」として追加します。以下のように 51 行目を追加します。

%patch8 -p1 -b .symlink
%patch100 -p1

%build

また、以下のように52行目から始まる「%build」と「make …」の行の間に、コンパイラのオプション・フラグの設定を追加します。

%build
LOCAL_UNZIP="-D_FILE_OFFSET_BITS=64 -DNO_LCHMOD -D_MBCS -DNO_WORKING_ISPRINT"
RPM_OPT_FLAGS="$RPM_OPT_FLAGS $LOCAL_UNZIP"
export RPM_OPT_FLAGS
make -f unix/Makefile CF_NOOPT="-I. -DUNIX $RPM_OPT_FLAGS" generic_gcc %{?_smp_mflags}


rpmbuild -bb コマンドによりソースをビルドして Binary RPM を作成します。これには rpmbuild -bb コマンドに spec ファイルを読ませてビルドを実行します。

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bb unzip.spec

ビルドが完了すると Binary RPM が ~/rpmbuild/RPMS ディレクトリに配置されます。

$ tree ~/rpmbuild/RPMS

└── x86_64
    ├── unzip-6.0-12.fc20.x86_64.rpm
    └── unzip-debuginfo-6.0-12.fc20.x86_64.rpm

古い unzip を削除して新しい unzip をインストールします。yum remove または yum erase コマンドで削除すると、依存関係にある他のパッケージもたくさん削除されてしまうので、「rpm -e --nodeps」コマンドで削除することに注意してください。

$ sudo rpm -evh --nodeps unzip
$ cd ~/rpmbuild/RPMS/x86_64
$ sudo yum localinstall -y unzip-6.0-12.fc20.x86_64.rpm

p7zip をインストールすると、gnome の nautilus から起動される file-roller は zip ファイルの展開に unzip でなく p7zip を優先して利用するようになるので、上記修正が無効になります。p7zip をアンインストールすると元に戻ります。

動作確認

文字化けを起こす zip ファイルのサンプル「解凍すると文字化けするかも.zip」を以下のサイトから入手します。
https://wiki.ubuntulinux.jp/Develop/UnzipTestcase

「unzip -l」コマンドで、ファイル名の一覧が文字化けしないで表示されることを確認します。

$ unzip -l "解凍すると文字化けするかも.zip"

Archive:  解凍すると文字化けするかも.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  09-13-2008 01:10   解凍すると文字化けするかも.txt
---------                     -------
        0                     1 file

また、「unzip」コマンドで zip の中に含まれるファイルが正常に展開できることを確認します。

$ unzip 解凍すると文字化けするかも.zip
$ ls -1
...
解凍すると文字化けするかも.txt
...

うまく文字化けが直らないときは、環境変数 LANG の文字コードが大文字の「UTF-8」に設定されていることを確認してください。まれに小文字の「utf8」と設定されている場合があり、これだと文字化けが直らないので注意が必要です。

参考

以下のサイトを参考にさせていただきました。

https://gist.github.com/hamano/573753
https://wiki.ubuntulinux.jp/Develop/UnzipTestcase

ibus-mozc の初期モードを「ひらがな」入力にする

Fedora 20 では日本語の入力時に ibus-mozc を起動すると、初期モードが「Direct Input」入力になっています。日本語キーボードを使っているときは「半角/全角」キーを押すことでアルファベット入力とひらがな入力を切り替えるのでこのほうが便利です。しかし、英語キーボードを使っているときは、「半角/全角」キーが無いため Super+Space キーを押して切り替える必要があり、初期モードが「Direct Input」入力になっていると逆に面倒だったりします。そこで ibus-mozc の初期モードが「ひらがな」入力になるように変更してみました。

 

開発環境のインストール

ibus-mozc ソースの修正およびコンパイルが必要となるので、開発ツールをインストールします。

$ sudo yum groupinstall -y development-tools
$ sudo yum install -y gcc-c++ rpm-build

ibus-mozc の Source RPM のダウンロードとインストール

ibus-mozc のソースパッケージをダウンロードしてインストールします。

$ cd ~
$ yumdownloader --source ibus-mozc

以下のファイルがダウンロードされました。
mozc-1.15.1814.102-1.fc20.src.rpm

ダウンロードした Source RPM をインストールします。

$ rpm -ivh mozc-1.15.1814.102-1.fc20.src.rpm

上記コマンドを実行すると以下のワーニングがたくさん表示されますが無視してかまいません。

warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root

これで、「~/rpmbuild/SOURCES/」ディレクトリに Source RPM の内容が配置されました。ソースやパッチは .tar.bz2 の形式でアーカイブされた状態になっています。

$ tree ~/rpmbuild/

├── SOURCES
│   ├── ibus-setup-mozc-jp.desktop
│   ├── jigyosyo.zip
│   ├── mozc-1.15.1814.102.tar.bz2
│   ├── mozc-build-verbosely.patch
│   ├── mozc-init.el
│   └── x-ken-all201405.zip
└── SPECS
    └── mozc.spec

ビルド時に依存関係で必要となるパッケージをインストール

ビルド時に依存関係で必要となるパッケージは spec ファイルに記述されているのですが、「yum-builddep」という便利なコマンドを使用すると、一括してインストールすることができます。

$ sudo yum-builddep mozc-1.15.1814.102-1.fc20.src.rpm

これにより、protobuf-devel、qt-devel、zinnia-devel、gyp、ibus-devel、emacs、xemacs、xemacs-packages-extra、openssl-devel、libstdc++-devel、gtk2-devel といったパッケージがインストールされます。

rpmbuild -bp コマンドでパッチ適用済みソースを展開

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp mozc.spec

「rpmbuild -bp」コマンドの実行により、ソースが展開され、パッチが適用されて、パッチ適用済みソースが「~/rpmbuild/BUILD」ディレクトリに展開されます。実際には「~/rpmbuild/BUILD/mozc-1.15.1814.102/」以下のディレクトリに展開されます。最後に「+ exit 0」が表示されれば正常終了です。

オリジナルのソースを別のディレクトリにコピーして保存

$ cd ~/rpmbuild/BUILD/
$ cp -r mozc-1.15.1814.102/ mozc-1.15.1814.102.org/

ソースを変更

ibus-mozc の初期モードが「ひらがな」入力になるようソースを変更します。これは、「property_handler.cc」の 83 行目の「const bool kActivatedOnLaunch = false;」を「const bool kActivatedOnLaunch = true;」に変更することで設定できます。

$ cd ~/rpmbuild/BUILD/mozc-1.15.1814.102
$ vi ./unix/ibus/property_handler.cc

以下のように 83 行目の false を true に変更します。

// Some users expect that Mozc is turned off by default on IBus 1.5.0 and later.
// https://code.google.com/p/mozc/issues/detail?id=201
// On IBus 1.4.x, IBus expects that an IME should always be turned on and
// IME on/off keys are handled by IBus itself rather than each IME.
#if IBUS_CHECK_VERSION(1, 5, 0)
const bool kActivatedOnLaunch = true;
#else
const bool kActivatedOnLaunch = true;
#endif  // IBus>=1.5.0

vi エディタの替りに sed を使って変更するには以下のように入力します。

$ cd ~/rpmbuild/BUILD/mozc-1.15.1814.102
$ sed -i -e 's/const bool kActivatedOnLaunch = false;/const bool kActivatedOnLaunch = true;/g' ./unix/ibus/property_handler.cc

差分パッチの作成

ソースを変更したら、diff コマンドでオリジナルとの差分パッチを作成します。diff コマンドは「diff -aurN hoge.org hoge > hoge.patch」のように使用します。ここでは差分パッチのファイル名は「hiragana.patch」とします。作成した差分パッチは「~/rpmbuild/SOURCES」ディレクトリの下に移動します。

$ cd ~/rpmbuild/BUILD/
$ diff -aurN mozc-1.15.1814.102.org mozc-1.15.1814.102 > hiragana.patch
$ mv hiragana.patch ~/rpmbuild/SOURCES

spec ファイルの修正

「~/rpmbuild/SPECS」ディレクトリにある「mozc.spec」ファイルを修正します。「Patch0」の後に「PatchN」として追加します。N は任意の番号でよいです。

$ cd ~/rpmbuild/SPECS
$ vi mozc.spec

以下のように 46 行目を追加します。

Source4:        ibus-setup-mozc-jp.desktop
Patch0:         mozc-build-verbosely.patch
Patch100:       hiragana.patch

また、同様に「%patch0」の後に「%patchN」として追加します。これは以下のように 143 行目を追加します。

%patch0 -p1 -b .0-build-verbosely
%patch100 -p1

vi エディタの替りに sed を使って変更するには以下のように入力します。

$ cd ~/rpmbuild/SPECS
$ sed -i -e '/^Patch0:\s/a Patch100:       hiragana.patch' mozc.spec
$ sed -i -e '/^%patch0\s/a %patch100 -p1' mozc.spec

rpmbuild -bb コマンドによりバイナリーRPMを作成

「rpmbuild -bb」コマンドによりソースをビルドして Binary RPM を作成しますが、ビルド中に「/usr/lib64/qt-3.3/bin/rcc」を実行しようとして「No such file or directory」のエラーとなるので、「/usr/bin/rcc」を参照するよう事前に環境変数を操作します。

$ export QTDIR=
$ export QTINC=
$ export QTLIB=
$ PATH=/usr/bin:$PATH

「rpmbuild -bb」コマンドに spec ファイルを読ませてビルドを実行します。

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bb mozc.spec

最後に「+ exit 0」が表示されれば正常終了です。ビルドが完了すると Binary RPM が 「~/rpmbuild/RPMS」ディレクトリに配置されます。

$ tree ~/rpmbuild/RPMS

├── noarch
│   ├── emacs-mozc-1.15.1814.102-1.fc20.noarch.rpm
│   ├── emacs-mozc-el-1.15.1814.102-1.fc20.noarch.rpm
│   ├── xemacs-mozc-1.15.1814.102-1.fc20.noarch.rpm
│   └── xemacs-mozc-el-1.15.1814.102-1.fc20.noarch.rpm
└── x86_64
    ├── emacs-common-mozc-1.15.1814.102-1.fc20.x86_64.rpm
    ├── ibus-mozc-1.15.1814.102-1.fc20.x86_64.rpm
    ├── mozc-1.15.1814.102-1.fc20.x86_64.rpm
    └── mozc-debuginfo-1.15.1814.102-1.fc20.x86_64.rpm

古い ibus-mozc を削除して新しい ibus-mozc をインストールします

$ sudo rpm -evh --nodeps mozc ibus-mozc
$ cd ~/rpmbuild/RPMS/x86_64
$ sudo yum localinstall -y mozc-1.15.1814.102-1.fc20.x86_64.rpm ibus-mozc-1.15.1814.102-1.fc20.x86_64.rpm

動作確認

デスクトップに再ログインした後、Super+Space キーを押したとき、 ibus-mozc の初期モードが「ひらがな」入力となり、アイコンが「A」でなく「あ」になっていることを確認します。

自分の環境では、デスクトップ画面のトップバーから「あ」アイコンをクリックして、「Properties」 を選択したとき、一度、「mozc property cannot start conversion engine. failed to get current config value.」というエラーが表示され、「Mozc Settings」ダイアログの表示に時間がかかりましたが、いったん「OK」ボタンを押してやるとこのエラーメッセージは表示されなくなりました。

参考

以下のサイトを参考にさせていただきました。
https://code.google.com/p/mozc/issues/detail?id=201
http://sios-oss.blogspot.jp/2012/09/rpm-1.html
http://ken-etsu-tech.blogspot.jp/2014/09/centos-7mozc6mozc22.html
http://d.hatena.ne.jp/cactusman/20080315/p1

DIYで洗濯機の上に棚を作る

洗濯機の上がみっともないので、DIYで棚を作りました。ロイヤルというメーカーのブラケットと棚柱を使うと、簡単にDIYの棚が作れます。これを使うと棚の高さが自由に変更できるのでとても便利です。

【1】DIYで棚を作る前の写真です

今にも崩れそうな状態です。
DSC_0132

【2】棚のサイズなどをイメージしながら設計します

以下は自分が作成した例ですが、みなさん自身で自分の作りたい棚をよくイメージして決めてください。サイズを決めるにあたって、洗濯機置き場のサイズ、壁の幅、天井までの高さなどを巻き尺で測っておきます。また、手に入る材料などを考慮して寸法を決める必要があります。

(a) 棚板の材料 => ホームセンターで確認
(b) 棚の幅 => 76cm
(c) 棚の奥行き => 35cm
(d) 棚は何段 => 3段
(e) 棚板の下に付けるブラケットのサイズ => 30cm
(f) 棚柱の長さ => 90cm
などなど

設計図については省略します。ノートに走り書きした程度のものでよいです。

【3】棚の作成に必要な材料を揃えます

自分はホームセンターで品物を探すのが苦手なので、棚板以外はすべて通販で揃えました。ホームセンターですべて手に入れたほうが送料がかからず安くなると思います。使用した材料については後でリストしておきますので参考にしてください。

棚板は、購入時にホームセンターに頼めばカットしてもらえます。ビバホームセンターではカットする1辺ごとに50円程度掛かるようです。

【4】棚板にブラケットを取り付けます

棚の下側にブラケットを木ねじで固定します。ブラケットを取り付ける位置や木ねじを挿入する位置を鉛筆やマジックなどでマーキングしておくと作業しやすいです。ブラケットには円形と楕円形の2種類の穴がありますが、楕円形の方の穴を使って木ねじで固定すると後で微調整ができて良いです。木ねじは、棚を突き抜けない長さのものを使用します。また、ネジ径がブラケットのネジ穴に入る太さものを使用します。今回は長さが16mm、ネジ径が3.5mmのものを使用しました。
DSC_0138

棚にブラケットを固定した状態のイメージです。棚は3枚作成しました。
DSC_0137

【5】壁に棚柱を2本取り付けます

壁は石膏ボードなのですが、40mmのビスで棚柱を直接に固定しました。長さ90cmの棚柱1本につき6本のビスを使って固定しています。意外と硬い石膏ボードのようでしっかり固定でき、強度的に特に問題ありませんでした。またドライバーを使ってビスを直接ねじ込むだけでよく、ドリルによる事前の穴あけなども不要でした。柔らかい石膏ボードの場合は、ビスを入れる位置にドリルで穴を開けてプラスティック製のアンカーと呼ばれるものを事前に挿入しておく必要があります。
DSC_0139

左側の棚柱を、壁や天井からの位置を測りながら先に取り付けます。右側の棚柱は棚板を仮止めしながら、位置決めをして取り付けます。

【6】棚を取り付けて完成です

DSC_0140

【7】今回使用した材料は以下の通りです

価格は2014/9時点のものです。

(a) 桐浮造仕上げ 棚板(3枚)
ビバホームセンターで寸法910x350x17ミリの棚板3枚を購入し、長さを910ミリから760ミリにカットしてもらいました。カット面は隠れて見えない部分なので、特にニスを塗るといった処理はしていません。
数量:3 個
単価:¥ 1,350
金額:¥ 4,050
カット代:¥ 50 (3枚まとめてカットするのでカット代は50円で済みました。)

(b) ロイヤル 木棚受 B-032/033 クローム 【300】  2本1組
http://www.hardbox.jp/products/detail2675.html (Hard Box店)
商品コード: B-032/033CR300
数量:3 個
単価:¥ 641
金額:¥ 1,923

(c) ロイヤル チャンネルサポート 【棚柱】 ASF-1クローム【900mm】
http://www.hardbox.jp/products/detail2546.html (Hard Box店)
商品コード: ASF-1CR900
数量:2 個
単価:¥ 297
金額:¥ 594

(d) ロイヤル チャンネルサポート断面保護キャップ(直付け施工用)  CAS-1クローム  1袋10個入り
http://www.hardbox.jp/products/detail3382.html (Hard Box店)
商品コード: CAS-1CR
数量:1 個
単価:¥ 594
金額:¥ 594

(e) ロイヤル AT-P クローム 40mm タッピングビス 【50本入/袋】
http://www.hardbox.jp/products/detail2511.html (Hard Box店)
数量:1 個
単価:¥ 297
金額:¥ 297

(f) ニッケルA +穴 バインドネジ 3.5×16mm 【10本入/袋】
http://www.hardbox.jp/products/detail3785.html (Hard Box店)
数量:2 個
単価:¥ 32
金額:¥ 64
棚板とブラケットの固定には「ロイヤル 木棚用ブラケット 棚板取付ねじ WT-P 3.5X16 50本入り(http://item.rakuten.co.jp/iefan/st1-0499/)」という木ねじを使用すればよいらしいのですが、「Hard Box店」には見つからないので上記で十分代用できると思います。

送料込みで合計8,880円でした。

【8】感想

しっかりした棚が作れました。洗濯機の上に棚を作成するのは、DIYが初めての人にはちょうどよいです。みなさんも挑戦してみてはいかがでしょうか。

Python の pip search コマンドが Proxy 経由で動作しない

Python の pip search コマンドを proxy 経由で実行するとエラーになるようです。たとえば、pulp という名前のパッケージを検索しようとすると以下のように例外が発生してエラーになります。環境は Fedora 20, Python 2.7.5 を使用しています。

# pip search pulp --proxy=http://proxy.example.com:8080
Exception:
Traceback (most recent call last):
...
gaierror: [Errno -2] Name or service not known

これについてちょっと調べてみたところ、どうやら以下の GitHub のサイトにパッチが提供されていることがわかりました。

この問題の内容についての説明は以下の URL にあります。
https://github.com/pypa/pip/pull/1180/
必要なパッチについては以下の URL に提供されています。
https://github.com/pypa/pip/pull/1180/files/

さっそく、このパッチを適用してみましょう。まずはシステム内の search.py の場所を確認します。

# locate pip/commands/search.py
...
/usr/lib/python2.7/site-packages/pip/commands/search.py
/usr/lib/python2.7/site-packages/pip/commands/search.pyc
...

このディレクトリに移動し、Github からダウンロードした search.py に入れ替えます。念の為、変更前の search.py は search.py-BAK としてバックアップを取得しておきます。

# cd /usr/lib/python2.7/site-packages/pip/commands/
# mv search.py search.py-BAK
# wget https://raw.githubusercontent.com/cula/pip/master/pip/commands/search.py

さらに追加のモジュール xmlrpclib_ext.py をダウンロードします。

# cd /usr/lib/python2.7/site-packages/pip/
# wget https://raw.githubusercontent.com/cula/pip/master/pip/xmlrpclib_ext.py

以上でパッチの適用が完了です。再度、pip search コマンドを proxy 経由で実行して動作確認してみます。

# pip search pulp --proxy=http://proxy.example.com:8080
PuLP - PuLP is an LP modeler written in python. PuLP can
       generate MPS or LP files and call GLPK, COIN
       CLP/CBC, CPLEX, and GUROBI to solve linear
       problems.
...

今度は検索結果が正常に返されました。検索するだけのコマンドなので動作しなくても大して問題はないですが、Python 習い始めの自分はいきなりビビってしまいました。

(2015.03.20 追記)
上記のバグは Python 本家ではすでに修正されており、以下の方法で更新すると回避できるようです。Linux ディストリビューションの RPM による提供は遅れているようです。

念の為、python-pip、python-setuptools をインストールする。

# yum -y install python-pip
# yum -y install python-setuptools

pip コマンドで pip 自身および setuptools をアップデートする。

# pip install --upgrade pip --proxy=http://proxy.example.com:8080
# pip install --upgrade setuptools --proxy=http://proxy.example.com:8080

python を利用する場合、pip および setuptools を最新にアップデートしておくと何かとトラブルを回避できるとのことです。