2007-11-02

ユーザー領域にFreeBSD portsをインストールする方法

last update $Date: 2007/11/02 22:00:15 $

portsとは?

さまざまなソフトウェアをFreeBSDで管理するためのシステムです。ソースコードのコンパイルやインストールの手順が書かれたMakefileをもとに、バージョン更新やアンインストールなどを簡単に実行する事が出来ます。

ユーザー領域にインストールする理由

FreeBSDのportsは、root権限を持ったサーバー管理者が扱う事を前提として設計されているようです。大抵のroot権限を持たないユーザーは、使用したいソフトウェアがあった場合はportsを使用せずにソースコードからビルドして、手作業でインストールしたり更新管理をしています。また、システム管理者にportsを使ったインストールを要求して作業してもらう事も有ります。 このドキュメントではユーザーがユーザー領域(以下ローカルパス)にソフトウェアをインストールする際に、便利なportsを使ってインストールをする方法を紹介します。 (ports管理ツールを使う事で更新管理も出来ると思います)

ユーザー領域で使用しても無意味なソフトウェア

例えばsysutilsなど実行するのにroot権限が必要なカーネルやシステムを扱うソフトウェアは、ユーザー権限では使用出来ないのでportsを使う意味が無いでしょう。 ネットワークデーモンとなるサービス等は実行ユーザーの設定をする必要があるでしょう。

インストール前の準備

home以下の~/usr/ports/と~/usr/localを使用します。あらかじめディレクトリを用意します。

% mkdir -p ~/usr/local
% cd ~/usr/local
% mkdir -p etc lib tmp/dist tmp/work var/db/pkg

ports.tar.gzを使ってportsツリーを~/usr/portsに展開します。tarで展開後のports.tar.gzは消しても構いません。(portsツリーは400MB弱のHDD容量を使用します)

% cd ~/usr
% fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz
% tar zxvf ports.tar.gz

INDEX-6.bz2を取得してインデックスファイルを展開します。

% cd ~/usr/ports
% fetch http://www.FreeBSD.org/ports/INDEX-6.bz2
% bunzip2 INDEX-6.bz2

環境変数の設定

~/.cshrcに環境変数の設定をします

setenv INSTALL_AS_USER yes
setenv PREFIX ${HOME}/usr/local
setenv LOCALBASE ${HOME}/usr/local
setenv PKG_DBDIR ${LOCALBASE}/var/db/pkg
setenv PORT_DBDIR ${LOCALBASE}/var/db/pkg
setenv DISTDIR ${LOCALBASE}/tmp/dist
setenv WRKDIRPREFIX ${LOCALBASE}/tmp/work
setenv PORTSDIR ${HOME}/usr/ports
setenv PKGTOOLS_CONF ${LOCALBASE}/etc/pkgtools.conf
setenv DEPENDS_TARGET 'install clean'

sysctlが使えない場合

サーバーの設定によってはユーザー権限ではsysctlを実行出来ないようにしている場合が有ります。もし

% sysctl -n kern.osreldate

が実行出来なかった時は、環境変数に明示的に値を設定する事で回避できます。 OSVERSIONに/usr/src/sys/sys/param.h#define __FreeBSD_versionで表されるバージョン番号を設定します。uname -rの結果が「6.2-RELEASE-pX」であれば

setenv OSVERSION 602000

という文を~/.cshrcに記入します。 そしてsysctl -n kern.argmaxも実行出来ない場合は

setenv CONFIGURE_MAX_CMD_LEN 262144

とします。 もしユーザー権限でsysctlが実行出来る場合は、この項目の設定をする必要は有りません。

ライブラリパスの設定

ldconfig -rコマンドを使って整形し、ld-elf.so.confを生成します。ローカルのライブラリパスも追記しておきます。

% ldconfig -r | awk '/search/ {print $3}' | tr ":" "\n" > ~/usr/local/etc/ld-elf.so.conf
% echo ${HOME}/usr/local/lib >> ~/usr/local/etc/ld-elf.so.conf

LDCONFIGコマンドとライブラリパス環境設定を~/.cshrcに記入します。

setenv LDCONFIG "/sbin/ldconfig -f ${LOCALBASE}/var/run/ld-elf.so.hints -i -R ${LOCALBASE}/etc/ld-elf.so.conf"
setenv LD_LIBRARY_PATH ${LOCALBASE}/lib
setenv LD_RUN_PATH ${LOCALBASE}/lib

ローカルパスのbin,sbin等を~/.cshrcに記入します。

setenv PATH ${PATH}:${LOCALBASE}/bin:${LOCALBASE}/sbin
setenv MANPATH_MAP ${LOCALBASE}/bin ${LOCALBASE}/man

portsを使ってローカルパスにインストールする

以上の設定が出来たら、

source ~/.cshrc

を実行して環境変数を読み込んで、~/usr/ports/以下のインストールしたいportsでmake installを実行してください。

参考リンク

Permanent link | Trackback | | このエントリーを含むはてなブックマーク livedoor Clip View blog reactions del.icio.us

otsune posted at 09:19 in
WriteBacks
TrackBack ping me at
http://www.otsune.com/bsd/ports/install_as_user.
Post a comment

writeback message: