ぐだぽよー、おきなわです。
最近、一ユーザとして利用しているサーバにて、いろいろソフトをインストールしたくなり、root 権限を使えなくても ports を利用出来るように設定しました。今後また同じことをしたくなった時のために、今回やったことをメモっておきたいと思います。
やりたい事
FreeBSD サーバにて、root 権限を持っていなくても Ports からソフトウェアをインストールできるようにしたい。
設定手順
以下のサイトを参考にしました。
otsune’s FreeBSD memo :: ユーザー領域にFreeBSD portsをインストールする方法
設定ファイルの作成
まず ports のインストール先などを環境変数の指定により変更します。
僕は .bash_profile に以下の用に環境変数を記述しました。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# setting for ports to install by user privileges | |
export __MAKE_CONF=/dev/null | |
export INSTALL_AS_USER=yes | |
export PREFIX=${HOME}/usr/local | |
export LOCALBASE=${HOME}/usr/local | |
export PKG_DBDIR=${LOCALBASE}/var/db/pkg | |
export PORT_DBDIR=${LOCALBASE}/var/db/pkg | |
export DISTDIR=${LOCALBASE}/tmp/dist | |
export WRKDIRPREFIX=${LOCALBASE}/tmp/work | |
export PORTSDIR=${HOME}/usr/ports | |
export PKGTOOLS_CONF=${LOCALBASE}/etc/pkgtools.conf | |
export DEPENDS_TARGET='install clean' | |
export LDCONFIG="/sbin/ldconfig -f ${LOCALBASE}/var/run/ld-elf.so.hints -i -R ${LOCALBASE}/etc/ld-elf.so.conf" | |
export LD_LIBRARY_PATH=${LOCALBASE}/lib | |
export LD_RUN_PATH=${LOCALBASE}/lib | |
export PATH=${LOCALBASE}/bin:${LOCALBASE}/sbin:${PATH} | |
export MANPATH_MAP="${LOCALBASE}/bin ${LOCALBASE}/man" | |
# enable .bashrc | |
source ~/.bashrc |
なお、各環境変数やその値の示す意味は以下の通りです。
(説明は ports/Mk/bsd.port.mk 等を参考にしています。)
- __MAKE_CONF : make コマンドを実行する際に参照する make.conf のパスを明示的に指定します。デフォルトでは /etc/make.conf を参照するため、そちらに環境変数の記述があるとその値を使用します。そのため、今回は /dev/null を指定してシステム全体での設定が記述されている make.conf を参照しないようにします。
- INSTALL_AS_USER : root アクセスを利用せずに現在のユーザとしてインストールを行うために利用します。
- PREFIX : ports からのファイルのインストール先を指定します。デフォルトでは USE_LINUX_PREFIX がセットされていれば ${LINUXBASE} を、されていなければ ${LOCALBASE} を適用します。
- LOCALBASE : ports からのファイルのインストール先を指定します。デフォルトでは /usr/local です。
- PKG_DBDIR : どのパッケージをインストールしたかの記録を保存する場所を指定します。デフォルトでは /var/db/pkg です。
- PORT_DBDIR : port の設定オプションを保存する場所を指定します。デフォルトでは /var/db/ports です。
- DISTDIR : ダウンロードしたソースコードの保管場所を指定します。デフォルトでは ${PORTSDIR}/distfiles です。
- WRKDIRPREFIX : コンパイルなどを行う際に利用する一時的な作業用ディレクトリの場所を指定します。
- PORTSDIR : ports tree のルートディレクトリを指定します。デフォルトでは /usr/ports です。
- PKGTOOLS_CONF : pkgtools の設定ファイルの場所を指定します。
- DEPENDS_TARGET : 依存する ports をインストールする際の挙動を設定します。デフォルトでは install です。
- LDCONFIG : リンカに利用可能な共有ライブラリを伝えるための変数のようです。
- LD_LIBRARY_PATH : 共有ライブラリの場所を指定します。
- LD_RUN_PATH : プログラム実行時に利用する共有ライブラリの場所を指定します。
- PATH : 実行可能なコマンド群の場所を指定します。
- MANPATH_MAP : PATH にある各ディレクトリに対して、man ページファイルの検索パスに追加すべきディレクトリを一つづつ指定します。
なお、LD_RUN_PATH の LD_LIBRARY_PATH との違いですが、
LD_RUN_PATH で指定したパスは実行ファイルに埋めこまれますが、LD_LIBRARY_PATH はダイナミックリンカ ld-elf.so が利用します。コンパイル時に共有ライブラリの検索パスを指定するのが LD_RUN_PATH で、実行時に指定するのが LD_LIBRARY_PATH。
らしいです。
必要なディレクトリやファイルの作成
設定ファイルに記述したディレクトリを作成します。
$ mkdir -p ~/usr/local/etc ~/usr/local/lib ~/usr/local/tmp/dist ~/usr/local/tmp/work ~/usr/local/var/db/pkg
ライブラリの場所を記述したファイルを作成します。
$ 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
僕の環境の場合は
$ sysctl -n kern.osreldate
が実行出来たのでここまでですが、上記のコマンドが実行出来なかった場合は環境変数にさらなる追加記述が必要のようです。(ここでの記述はめんどくさいので省略します。参考元サイトの方にきちんと記述されていたため、そちらを参考にしてください。)
ports の展開
github にも公開されているため、そちらからダウンロードして来ても良いかもしれません。
freebsd/freebsd-ports · GitHub
$ git clone --depth 1 github:freebsd/freebsd-ports.git ~/usr/ports
もし既にシステム全体で使用している ports があるなら、そちらを利用した方が早いと思います。
.bash_profile に記述した環境変数のうち、PORTSDIR を記述しなければデフォルトの ports (/usr/ports)を利用します。
Let’s インストール
ここまでくればあとは通常通り
$ cd ~/usr/ports/editors/vim $ make install clean
とかやるとインストールすることが出来ます。やったぜ!