Stowを利用してソースからビルドしたソフトウェアを効率的に管理する – Glide Note – グライドノート

同じチームの@lamanotramaさんと話していて、これから一部パッケージはRPMを作らず、@hirose31さんの方式(ソースから自前ビルドしたソフトウエアの効率的な管理方法 – (ひ)メモ)を採用するとのことで、「なるほど!!」と思いながら上記記事のはてブコメントを眺めてたらStowというものを発見。

早速検証してみた。検証環境はCentOS 6.3です。

Stowの概要

  • Perlで書かれている
  • ソースからビルドしたソフトウェアを管理するソフト
  • 任意のディレクトリ/usr/local/stowなどにパッケージ一式をインストール
  • インストールしたパッケージから/usr/lib/{bin,lib,share}にリンクを貼って利用。
  • バージョンの切り替えはリンク張り直しで行う(ファイルの上書きはしない)
  • zsh-4.3.17zsh-5.0.0などバージョンの切り替えが容易になる(同じようなソフトのpacoと違う点)

Stowの導入

epelにあるのでyumで導入。cpanmでも入ります。

1
sudo yum -y install stow

Stow用のディレクトリを用意

パッケージインストール用のディレクトリを作成

1
sudo mkdir -p /user/local/stow/

Stowを利用してzsh-5.0.0を導入

試しにzsh-5.0.0を利用してみる。

configureのときに--prefix=/usr/local/stow/zsh-5.0.0といった感じで、--prefix=/usr/local/stow/{name}-{version}というような感じでインストール先を指定し、/usr/local/stow/以下に一式インストールする。これにより/usr/local/{bin,lib,share}以下が汚れずに済むし、管理も楽になる。

12345678
mkdir ~/srccd ~/srccurl -Lo zsh-5.0.0.tar.gz http://sourceforge.net/projects/zsh/files/zsh/5.0.0/zsh-5.0.0.tar.gz/downloadtar zxvf zsh-5.0.0.tar.gzcd zsh-5.0.0./configure --prefix=/usr/local/stow/zsh-5.0.0makesudo make install

stowコマンドを用いて、/usr/local/{bin,lib,share}にsymlinkを貼る。-v,--verboseをつけると詳細が見えるので良い感じです。

12
cd /usr/local/stowsudo stow -v zsh-5.0.0

symlinkを貼ろうとした際に既にファイルが存在すると下記のようなエラーが発生する。

12345
[akira@dev001] $ sudo stowWARNING! stowing bin would cause conflicts:  * existing target is neither a link nor a directory: zsh  * existing target is neither a link nor a directory: zsh-5.0.0All operations aborted.

既存ファイルの待避。マニュアルは入らないから一式削除

12345
sudo mv /usr/local/bin/zsh{,.org}sudo mv /usr/local/bin/zsh-5.0.0{,.org}sudo mv /usr/local/share/zsh{,.org}sudo mv /usr/local/lib/zsh{,.org}sudo rm -rf  /usr/local/share/man/man1/zsh*

再度stowコマンドを実行。

12
cd /usr/local/stowsudo stow -v zsh-5.0.0

下記のような形でlinkが貼られる。

123456789101112131415161718192021
LINK: bin/zsh-5.0.0 => ../stow/zsh-5.0.0/bin/zsh-5.0.0LINK: bin/zsh => ../stow/zsh-5.0.0/bin/zshLINK: share/man/man1/zshtcpsys.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshtcpsys.1LINK: share/man/man1/zshparam.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshparam.1LINK: share/man/man1/zshcontrib.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshcontrib.1LINK: share/man/man1/zshoptions.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshoptions.1LINK: share/man/man1/zsh.1 => ../../../stow/zsh-5.0.0/share/man/man1/zsh.1LINK: share/man/man1/zshroadmap.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshroadmap.1LINK: share/man/man1/zshexpn.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshexpn.1LINK: share/man/man1/zshmisc.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshmisc.1LINK: share/man/man1/zshzle.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshzle.1LINK: share/man/man1/zshbuiltins.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshbuiltins.1LINK: share/man/man1/zshcalsys.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshcalsys.1LINK: share/man/man1/zshmodules.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshmodules.1LINK: share/man/man1/zshcompctl.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshcompctl.1LINK: share/man/man1/zshzftpsys.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshzftpsys.1LINK: share/man/man1/zshcompsys.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshcompsys.1LINK: share/man/man1/zshall.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshall.1LINK: share/man/man1/zshcompwid.1 => ../../../stow/zsh-5.0.0/share/man/man1/zshcompwid.1LINK: share/zsh => ../stow/zsh-5.0.0/share/zshLINK: lib/zsh => ../stow/zsh-5.0.0/lib/zsh

ls/usr/local/{bin,lib,share}を確認

12345678910111213
[akira@dev001] $ ll /usr/local/bin/ | grep zshlrwxrwxrwx 1 root root       25 Aug  9 12:42 zsh -> ../stow/zsh-5.0.0/bin/zshlrwxrwxrwx 1 root root       31 Aug  9 12:42 zsh-5.0.0 -> ../stow/zsh-5.0.0/bin/zsh-5.0.0-rwxr-xr-x 1 root root   690064 Jul 23 11:00 zsh-5.0.0.org-rwxr-xr-x 1 root root   687144 Mar 29 13:06 zsh.old[akira@dev001] $ ll /usr/local/lib/ | grep zshlrwxrwxrwx 1 root root   25 Aug  9 12:42 zsh -> ../stow/zsh-5.0.0/lib/zshdrwxr-xr-x 4 root root 4096 Jul 23 11:00 zsh.org[akira@dev001] $ ll /usr/local/share | grep zshlrwxrwxrwx   1 root root   27 Aug  9 12:42 zsh -> ../stow/zsh-5.0.0/share/zshdrwxr-xr-x   5 root root 4096 Jul 23 11:00 zsh.dist

Stowを利用してzshバージョンの切り替え

zsh-4.3.17を導入して、zsh-5.0.0から切り替えをしてみる。

1234567
cd ~/srccurl -Lo zsh-4.3.17.tar.gz http://sourceforge.net/projects/zsh/files/zsh-dev/4.3.17/zsh-4.3.17.tar.gz/downloadtar zxvf zsh-4.3.17.tar.gzcd zsh-4.3.17./configure --prefix=/usr/local/stow/zsh-4.3.17makesudo make install

この状態で/usr/local/stow配下に2つのバージョンがある。

1234
[akira@dev001] $ ll /usr/local/stowtotal 8drwxr-xr-x 5 root root 4096 Aug  9 12:12 zsh-4.3.17drwxr-xr-x 5 root root 4096 Aug  9 11:27 zsh-5.0.0

zsh-5.0.0へのリンクを削除(stow -D)して、zsh-4.3.17にリンクを貼る。

123
cd /usr/local/stow/sudo stow -Dv zsh-5.0.0sudo stow -v zsh-4.3.17

12345678910111213141516171819202122
[akira@dev001] $ sudo stow -v zsh-4.3.17LINK: bin/zsh-4.3.17 => ../stow/zsh-4.3.17/bin/zsh-4.3.17LINK: bin/zsh => ../stow/zsh-4.3.17/bin/zshLINK: share/man/man1/zshtcpsys.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshtcpsys.1LINK: share/man/man1/zshparam.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshparam.1LINK: share/man/man1/zshcontrib.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshcontrib.1LINK: share/man/man1/zshoptions.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshoptions.1LINK: share/man/man1/zsh.1 => ../../../stow/zsh-4.3.17/share/man/man1/zsh.1LINK: share/man/man1/zshroadmap.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshroadmap.1LINK: share/man/man1/zshexpn.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshexpn.1LINK: share/man/man1/zshmisc.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshmisc.1LINK: share/man/man1/zshzle.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshzle.1LINK: share/man/man1/zshbuiltins.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshbuiltins.1LINK: share/man/man1/zshcalsys.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshcalsys.1LINK: share/man/man1/zshmodules.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshmodules.1LINK: share/man/man1/zshcompctl.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshcompctl.1LINK: share/man/man1/zshzftpsys.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshzftpsys.1LINK: share/man/man1/zshcompsys.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshcompsys.1LINK: share/man/man1/zshall.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshall.1LINK: share/man/man1/zshcompwid.1 => ../../../stow/zsh-4.3.17/share/man/man1/zshcompwid.1LINK: share/zsh => ../stow/zsh-4.3.17/share/zshLINK: lib/zsh => ../stow/zsh-4.3.17/lib/zsh

下記でバージョンが切り替わっているか確認。バージョン切り替えが楽。

1234
exec zshzsh --versionzsh 4.3.17 (x86_64-unknown-linux-gnu)

Stow関連の情報は全体的に古いものが多くて、ググっているとオワコン的な雰囲気が漂ってるんですが2012年現在もちゃんとメンテされているので、ソースからビルドするならStowを利用するのが良いかもしれない。

運用としてはwebistranoなどを利用して、

  • ビルドサーバでビルドしたものをデプロイ
  • 各サーバでstowコマンドを実行してバージョン切り替え

という感じになるかなーと考え中。

もう少し突っ込んで検証してみよう。

参考URL

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中