LPMの紹介
べつに何ベントカレンダーでもありませんが便利なのでLPMについて紹介します。
LPMを使うモチベーション
自分が作業するlinuxサーバに必要なソフトがインストールされてないにも関わらず、root権限が無いことがしばしばあります。
大抵のLinuxディストリビューションのパッケージマネージャはビルド済みバイナリをrootユーザ管理下にコピーするため、root権限が無い場合役に立ちません。*1
その場合最も手っ取り早い解決策としてローカルディレクトリで野良ビルドすることになるワケですが、管理するソフト数や環境が増えると破綻します。
それを解決してくれるのがLPM(LocalPackageManager)です。
LPMが対応しているソフトウェアならダウンロードからビルドしてインストールまで全自動で完了します。
同様のソフトにpacoがありますがLPMはこれのラッパーです。(と言っていいのかな?)
LPMの利点
インストール
LPMは単一ファイルのperlスクリプトで、単にダウンロードして初期化を実行するだけで使えます。
initlocaldirに指定したディレクトリ(指定しない場合 ~/lcl)以下がLPMの管理対象となります。
$ cd
http://www.kasahara.ws/lpm/quickstart_ja.html
$ wget http://www.kasahara.ws/lpm/lpm
$ chmod +x lpm
$ ./lpm initlocaldir [--local=/path/to/installdir]
$ rm ./lpm
$ exec $SHELL -l # シェルを再起動(ターミナルを開き直せばよい)
使い方
インストール/アンインストール
$ lpm (install|uninstall) <package-name> [--local=<path/to/installdir>]
パッケージ一覧
$ lpm listrepos
ディレクトリ管理
管理領域の追加と削除
$ lpm (init|remove)localdir [--local=<path/to/installdir>]
ディレクトリごとの一時的な有効/無効切り替え
$ lpm ssconfig [<localdir> (on|off)]
その他
使用するツール等をコマンドラインオプションで切り替えることが出来ます。
$ lpm --version
LPM version 1.39
このように '--' を付けて指定します。以下に一覧を載せます。
オプション | 意味 |
debug=[012] | デバッグレベルに応じたログを表示(大して量は出ないので2を使えばよさげ) |
pacobase | pacoのダウンロードサイト |
reset | 既存のディレクトリをローカルディレクトリに指定する時に指定 |
force | 他のパッケージと共有されているファイルを消す。またはlpmかpaco自体を消す(笑) |
local | LPMで操作する対象のディレクトリ(デフォルトlcl) |
tar | |
gzip | |
bzip | |
xz | |
unzip | |
make | |
gpg | |
config | オプションの設定を書き出したファイル |
home | ホームディレクトリを指定 |
version | バージョンを表示 |
backup=[01] | バックアップの有無(デフォルト1)。LPMスクリプトを書くときは0がオススメ。 |
wget | |
wnocert | wgetにSSL証明書の警告を無視させる(ヤメロー |
空白の箇所は同名のツールを置き換えます。
スクリプトの書き方
LPMスクリプトが公開されていないソフトを扱いたい場合は自分で書きます*2。書いたスクリプトは公式サイトに投稿して承認されれば他の人も使うことが出来るようになります。書きましょう。
LPMスクリプトは以下のようなフォーマットのテキストファイルです。
典型的な構成(GNU style)のソフトウェアの場合、ソースコードの場所(とテンプレ)だけ書けば終わりです。素晴らしく簡単ですね。
# 行頭'#'はコメント行 source=<ソースコードのURL> url=<公式サイトなどのURL> # 人間向け情報 download extract # --prefixは自動で付与される configure [--prefixを除くconfigureのオプション] make [makeターゲット] makeinstall
configureやmakeが必要無い場合は書く必要はありません。
書いたファイルはコマンドに直接渡せば動作が確認できます。
lpm install ./myhoge.lpm
debugオプションを指定すると詳細な挙動が確認できます。
lpm --debug=2 install ./myhoge.lpm
git,mercurial,subversionリポジトリからのダウンロードにも対応しています。これを指定する場合extractは不要になります。
# 行頭'#'はコメント行 source=git://gitrepo.example.com/hoge.git url=http://hogeapp.example.com/ download # extractは不要 shell # 常にmasterから取ってくるのは不安なのでタグを指定 git checkout v3.14 EOC configure make makeinstall
特殊なビルド手順への対応
上で挙げたのは典型的なGNU styleに沿った構成のソフトウェアを自動でビルドできる場合でしたが、そうでない構成にも以下のLPMコマンドを使用することで柔軟に対応できます。
- name,verコマンド
- パッケージ名とバージョンをurlから推測出来ない場合(=GNU styleでない場合)に明示する
- shellコマンド
- このコマンドの直後から'EOC'のみから成る行までをシェルスクリプトとして実行する
以下のように、shellと書いた行から 'EOC' と書かれた行までを単一のスクリプトとして処理してくれます。
# 怪しげなインストールスクリプトを書き換えている雰囲気を感じ取ってください(^^;;
shell sed -e "s!/usr/local!$LOCAL_DIR!g" EOC
このスクリプトはあらかじめ以下のような環境変数が設定されているものとして記述できます。
変数名 | 値 |
---|---|
$LOCAL_DIR | |
$ARCHIVE_DIR | |
$BIN_DIR | |
$LIB_DIR | |
$VAR_DIR | |
$OPT_DIR | |
$ETC_DIR | |
$SHARE_DIR | |
$MAN_DIR | |
$BUILD_DIR | |
$INCLUDE_DIR | |
$LPMLIB_DIR | |
$PACKAGE_NAME | hogehoge |
$PACKAGE_VER | 1.3.2 (アーカイブ名から読み取ったバージョン) |
$ARCHIVE_FILE | |
$ARCH | `uname -m` (シェルコマンド) |
$OS | $^O (perlの特殊変数) |
- custominstallコマンド
- 'make install'ではインストール出来ない場合に任意のスクリプトでインストール方法を指定する。ファイル操作はlpm(のバックエンドであるpaco)によって自動的に追跡される。使い方は 'shell' コマンドと同様。
これらのコマンドを使った場合のLPMスクリプトは以下のよう(な雰囲気)になります。
source=git://hoge.example.com/hoge.git url=http://hoge.example.com/ download # extract # gitリポジトリなので展開不要 shell # 任意のスクリプトが書ける ./specialconfigure --prefix=$LOCAL_DIR --enable-benri-feature EOC make custominstall cp build/hoge $BIN_DIR/ cp lib/*.a $LIB_DIR/ # ファイルの書き出し,移動等は自動で追跡される EOC
終わり
LPMを使って快適な野良ビルド生活を送りましょう! 作者の笠原さん++
*1:FreeBSDならLOCALBASEとか設定するだけで…以下略
*2:現在の公式パッケージは150程度ですので、全く書かずに済むにはちょっと厳しいでしょう