#contents
 ----
 BSD UnixやLinuxなどのフリーOSでいつも悩むのが、
 OSに付属しているソフトウェアパッケージの管理フレームワークと
 自前で入れたソフトウェア((これを「野良make」と言っている))とが
 干渉しないかという問題だ。
 どちらの方法も、次に示すように一長一短があるので、
 場合によって使い分けることになる。
 
 CENTER:野良makeとパッケージ管理の比較
 |                        |CENTER:野良make             |CENTER:パッケージ |
 |バージョンアップへの対応|ソースが準備できればいつでも|配布されるのを待つ|
 |管理の手間              |掛かる                      |わりと楽          |
 |カスタマイズ            |いくらでも好きなように      |制約あり          |
 |依存関係                |なし。人間が管理            |自動で管理        |
 
 OpenBSDの場合のパッケージ管理は、ports(7)やpackages(7)により
 行う。上に挙げたように管理が楽な半面、最新のものに追従できなかったり、
 依存関係の定義から本来必要ないものまで大量にインストール
 されたり、逆にビルド時に付加して欲しい機能が指定されず、
 決め打ちでインストールされる場合もある。なので、現在は、
 -そのマシンでメインとなる機能や、セキュリティ的に早く対応したいものなど ... 野良make
 -運用上必要だが、付加的でありあまり手間をかけたくないもの ... ports/packages
 
 というような使い分けをしている。
 
 ports/packagesは、通常/usr/localの下にインストールされるが、野良makeする場合もconfigureを無指定で走らせると、やはり/usr/localの下にインストールされる。
 この時、パッケージ管理により入れてあるものが、野良installにより上書きされ、
 パッケージ管理を破綻させる可能性がある。
 
 なので、以前から安全な野良makeの方法を色々と試行していたのだが、現在行っている(原始的な)手順を紹介する。
 *コンセプト [#jf7b9967]
 以下のとおり;
 -/usr/localとは別のベースディレクトリに分離
 -一つのソフトウェアは、ベースディクトリ直下にそのソフトウェア専用の
 サブディレクトリを作成し、そこにソースツリーを含むビルド環境と、
 ビルド後インストールされるものをまとめて置いておく。
 
 この手法は、[[SerioWare GNU/Linux:http://hannah.ipc.miyakyo-u.ac.jp/kim/Linux/serioware.html]]のPROGパッケージやNEXTSTEPのパッケージ管理方法、GNU stowなどがヒントとなっている。
 *管理手順 [#y1792ea3]
 **インストール [#vf381a87]
 ベースディレクトリ(以降''BASEDIR''と表記)を決める。場所は/usr/local以外の適当な場所でよいが、空き容量に余裕のあるパーティションを選定するとよい。
 
 例として、ソフトウェア''foo''のバージョン''I.J.K''をインストールすると仮定する。この場合、以下のようにtar ballを置き、ソースツリーを展開する。
  - BASEDIR -+- foo -+- build -+- foo-I.J.K.tar.gz
                               |
                               +- foo-I.J.K -+- README
                               |             +- INSTALL
                               |             +- configure
                               |             (other source files...)
                               |
                               +- doconf.sh
 ソースツリーの展開されたディレクトリ BASEDIR/foo/build/foo-I.J.K上でソフトウェアのビルド作業を行う。
 
 fooのインストール先は、BASEDIR/fooの直下になるようにする。configureを用いてビルドを行う場合は、
  ./configure --prefix=BASEDIR/foo
 その他にもconfigureにオプションを付ける場合は、シェルスクリプトBASEDIR/build/doconf.shなどを作成しておき、
  ../doconf.sh && make
 などとすればよい。BASEDIR/buildに置くのは、ソースツリーを消去してもあとに残るし、将来foo-I.J.Kがバージョンアップしてfoo-I.J.Lが出た場合も、同じ手順でビルドできるため。
 
 コンパイル終了後、インストールする。上に述べたようなファイルレイアウトを行っていれば、インストール後のファイル配置は以下のようになる。
  - BASEDIR -+- foo -+- build -+- foo-I.J.K.tar.gz
                     |         |
                     |         +- foo-I.J.K -+- README
                     |         |             +- INSTALL
                     |         |             +- configure
                     |         |             (other source files...)
                     |         |
                     |         +- doconf.sh
                     |
                     +- bin -+- ...
                     |
                     +- lib -+- ...
                     |
                     +- etc -+- ...
                     |
                     +- man -+- ...
                     :
 **設定 [#y78838be]
 ソフトウェアfooのインストール終了後は、PATHが通っていなかったりするので、実行やマニュアルページの閲覧に手間が掛かる。また、同じ方法で別のソフトをインストールした場合にもいちいちPATHの設定をしなければならず、非常に繁雑。これを解消するため、/usr/localからシンボリックリンクを張ることとする。
  ln -s BASEDIR/foo/bin/* /usr/local/bin
  ln -s BASEDIR/foo/lib/* /usr/local/lib
  ln -s BASEDIR/foo/man/man1/* /usr/local/man/man1
        :
        :
 若しくは、
  cd /usr/local
  lndir BASEDIR/foo
 (注: この方法は、build以下にもリンクが張られるので注意。build以下へのリンクは手動で消去する)
 
 必要な他の付加的な設定(例えばldconfigなど)を実施。
 
 fooの動作を確認する。OKならディレクトリfoo-I.J.Kやtar ball foo-I.J.K.tar.gzは消去してもよい。
 **アンインストール手順 [#re097d45]
 -BASEDIR/foo以下を消去
 --再インストールするつもりの場合はBASE/foo/build以下は残す。
 -/usr/local以下の、リンク先が存在しなくなったシンボリックリンクを消去
 ----
 [[FrontPage]]
Reload  New Edit Diff Attach Copy Rename  Top Index Search Recent Backups  Help  RSS