さくらのVPS を改めて使いはじめる 8 - checkinstall
さくらのVPS(v3) 2GB プランへの環境構築メモ 8。今回は checkinstall
について書く。
checkinstall とは?
CheckInstall はソフトウェアのソースから RPM パッケージなどを生成できる非常に便利なツール。
RPM パッケージはプログラムの配布形式でソフトウェア本体や構成情報、セットアップ用スクリプトなどが格納されている。いわばインストーラのようなものである。
よく Linux 関連のソフトウェアでソースから make
→ make install
するものがあるけれど、この方法でインストールした場合は管理が非常に面倒である。例えば Makefile に uninstall
が定義されていないときれいに削除するのが難しい。また新バージョンを make install
で上書きしたら旧バージョンの余計なファイルが残っていて不具合が...ということもある。
RPM ならこのようなメンテナンス上の問題は起きにくい。これまでのシリーズで利用してきた yum
も管理対象は RPM である。今後このシリーズでソースからインストールするタイプのソフトウェアが必要になったら checkinstall
で RPM 化して管理する予定。
というわけで今回は chekcinstall
を利用するための方法について書く。
インストール
checkinstall
公式サイトから入手した最新ソースをコンパイルするとエラーになる。原因を調べていたら以下の記事を見つけた。
git リポジトリ上の最新ソースなら問題は修正されているそうなのでそちらから取得する。場所はユーザー HOME 直下としておく。
$ cd
$ git clone http://checkinstall.izto.org/checkinstall.git
Initialized empty Git repository in /home/XXXX/checkinstall/.git/
前述のサイトを参考にファイルを修正する。checkinstall
のディレクトリ内に移動して Makefile を vi
で開く。
$ cd checkinstall
$ vi Makefile
パスを以下のように修正して保存。
# $Id: Makefile,v 1.6.2.1 2008/11/09 07:48:18 izto Exp $
# Where to install.
PREFIX=/usr/local
BINDIR=$(PREFIX)/sbin
LCDIR=$(PREFIX)/lib/checkinstall/locale
CONFDIR=$(PREFIX)
次は checkinstallrc-dist を vi
で開く。
$ vi checkinstallrc-dist
EXCLUDE
に /selinux
を指定して保存。
# Comma delimited list of files/directories to be ignored
EXCLUDE="/selinux"
最後の修正。installwatch ディレクトリの Makefile を vi
で開く。
$ cd installwatch
$ vi Makefile
LIBDIR
に指定されたパスの lib
を lib64
に変更して保存。
# End of configurable part
VERSION=0.7.0beta7
BINDIR=$(PREFIX)/bin
LIBDIR=$(PREFIX)/lib64
すべての変更が完了したら checkinstall
ディレクトリに戻り git diff
でリポジトリとの差分を確認する。
$ cd ..
$ git diff
おそらく以下のように出力されるはず。
diff --git a/Makefile b/Makefile
index 2e28adc..b6d217c 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
PREFIX=/usr/local
BINDIR=$(PREFIX)/sbin
LCDIR=$(PREFIX)/lib/checkinstall/locale
-CONFDIR=$(PREFIX)/lib/checkinstall
+CONFDIR=$(PREFIX)
all:
for file in locale/checkinstall-*.po ; do \
diff --git a/checkinstallrc-dist b/checkinstallrc-dist
index d4feb4e..fe5f56e 100644
--- a/checkinstallrc-dist
+++ b/checkinstallrc-dist
@@ -117,7 +117,7 @@ RESET_UIDS=0
NEW_SLACK=1
# Comma delimited list of files/directories to be ignored
-EXCLUDE=""
+EXCLUDE="/selinux"
# Accept default values for all questions?
ACCEPT_DEFAULT=0
diff --git a/installwatch/Makefile b/installwatch/Makefile
index ae34fc1..fb41eb3 100644
--- a/installwatch/Makefile
+++ b/installwatch/Makefile
@@ -11,7 +11,7 @@ PREFIX=/usr/local
VERSION=0.7.0beta7
BINDIR=$(PREFIX)/bin
-LIBDIR=$(PREFIX)/lib
+LIBDIR=$(PREFIX)/lib64
コンパイルとインストールの準備が整ったのでさっそく実行。
$ make
$ sudo make install
これでインストール完了。試しにバージョンを表示してみる。
$ checkinstall -v
checkinstall 1.6.3, Copyright 2010 Felipe Eduardo Sanchez Diaz Duran
このソフトウェアはGNU GPLの下でリリースしています。
Copyright (c) 2010 Felipe Eduardo Sanchez Diaz Duran <izto@asic-linux.com.mx>
This program is free software; you can redistribute it and/or modify
it under the terms of the version 2 of the GNU General Public License
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
ばっちり。
checkinstall のパスについて
checkinstall
は /usr/local/sbin
にインストールされている。しかし CentOS 6.2 上でコマンドを sudo
経由で実行すると環境変数 PATH
を引き継がないため command not found
になってしまう。
これは一般ユーザーに依存するものを安易に管理者権限で実行させないためのセキュリティを考慮した措置。これに従うならばコマンドは /usr/local/sbin/checkinstall
のようにフルパス指定で実行する。
リスクを承知したうえでパス入力を省きたいなら .bash_profile に設定を追加してパスを通す。
$ cd
$ vi .bash_profile
sudo に対して環境変数 PATH を継承させる設定は、以下のようになる。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
PATH=$PATH:/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin
export PATH
alias sudo='sudo env PATH=$PATH'
最終行が sudo
の設定。.user_profile の変更を反映させる場合は再ログインするか以下のコマンドを実行する。
$ source ~/.bash_profile
パスを通すことの是非について。sudo
の実行ユーザーを限定しているのと sudo
コマンドを経由している時点でリスクの高い処理をしていることを強く意識させる効果があるから個人的にはありだと考えている。
以降の説明は /usr/local/bin
にパスが通っているものとして書く。パスを通していないなら sudo checkinstall
を実行している箇所は sudo /usr/local/sbin/checkinstall
に置き換えること。
RPM 化
管理を楽にするため checkinstall
自身を RPM 化しておく。これは checkinstall
の動作テストも兼ねている。まずは RPM 化するためのビルドを実行するディレクトリを作成。これを用意しておかないと RPM 化に失敗する。
$ sudo mkdir -p /root/rpmbuild/SOURCES
checkinstall
をコンパイルしたディレクトリに移動して checkinstall
コマンドを実行する。パッケージ方式をきかれたら R
を入力して Enter キーを押す。
$ cd
$ cd checkinstall
$ sudo checkinstall
checkinstall 1.6.3, Copyright 2010 Felipe Eduardo Sanchez Diaz Duran
このソフトウェアはGNU GPLの下でリリースしています。
使用するパッケージ方式を選んでください。
Slackwareなら[S], RPMなら[R], Debianなら[D]を入力R
少し待つ RPM パッケージの構成確認となる。特に変更する必要もないので Enter キーを押して続行。
**************************************
**** RPM package creation selected ***
**************************************
このパッケージは以下の内容で構成されます:
1 - Summary: [ CheckInstall installations tracker, version 1.6.2 ]
2 - Name: [ checkinstall ]
3 - Version: [ 20120430 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ checkinstall ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ checkinstall ]
変更するものの番号を入力してください。Enterで続行します:
しばらく待つと RPM 化される。
Installing with make install...
... 中略
**********************************************************************
Done. The new package has been saved to
/root/rpmbuild/RPMS/x86_64/checkinstall-20120430-1.x86_64.rpm
You can install it in your system anytime using:
rpm -i checkinstall-20120430-1.x86_64.rpm
**********************************************************************
作成された RPM のパスは /root/rpmbuild/RPMS/x86_64/checkinstall-20120430-1.x86_64.rpm
となった。Version
を変更しなかった場合は作成日時がファイル名にバージョンとして入るようだ。RPM 化された checkinstall をインストールする。
$ sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/checkinstall-20120430-1.x86_64.rpm
準備中... ########################################### [100%]
1:checkinstall ########################################### [100%]
インストール情報を確認。
$ sudo rpm -qi checkinstall
Name : checkinstall Relocations: (not relocatable)
Version : 20120430 Vendor: (none)
Release : 1 Build Date: 2012年04月30日 01時10分54秒
Install Date: 2012年04月30日 01時24分01秒 Build Host: akabeko.me
Group : Applications/System Source RPM: checkinstall-20120430-1.src.rpm
Size : 453050 License: GPL
Signature : (none)
Packager : checkinstall-1.6.3
Summary : CheckInstall installations tracker, version 1.6.2
Description :
CheckInstall installations tracker, version 1.6.2
CheckInstall keeps track of all the files created or
modified by your installation script ("make install"
"make install_modules", "setup", etc), builds a
standard binary package and installs it in your
system giving you the ability to uninstall it with your
distribution's standard package management utilities.
ばっちり。
...今回はここまで。次回は Ruby と Redmine 関連のセットアップについて書く。
Comments from WordPress
- m.i 2012-07-15T06:18:22Z
いつもこちら参考にさせて頂いております。
ちょっと気になったので書いておきます。
checkinstall のパスについて
の説明内容にて
.user_profile
とありますが、こちらは
.bash_profile
の誤りかと思いました。
- akabeko 2012-07-16T06:25:10Z
m.i さん、ありがとうございます。ご指摘のとおり .user_profile は誤りなので、.bash_profile に修正しておきました。