2017-12-26 :-)
_ [pkgsrc][NetBSD][pkd_add]pkgsrc で make install したときに実際に /usr/pkg/bin に設置するのは誰なのか
結論: pkg_add
do-install
make install を実行したときに実際に install を実施するのは do-install: である。パッケージの Makefile で do-install を上書きしない場合、取得したソフトウェアに付属している Makefile が使われる。
.if !target(do-install)
do-install:
. for _dir_ in ${INSTALL_DIRS}
${RUN} ${_ULIMIT_CMD} \
cd ${WRKSRC} && cd ${_dir_} && \
${PKGSRC_SETENV} ${INSTALL_ENV} ${MAKE_ENV} \
${MAKE_PROGRAM} ${MAKE_FLAGS} ${INSTALL_MAKE_FLAGS} \
-f ${MAKE_FILE} ${INSTALL_TARGET}
. endfor
.endif
pkgsrc のお作法としては /usr/pkg 以下にインストールするものなのだが(変更可能)、よくあるのが /usr/local/bin にインストールされたりするソフトウェアである。これを /usr/pkg/bin にインストールしないといけない。なので、たとえば archivers/9e/Makefile には以下のように書いてある。do-install を上書きすることで pkgsrc のお作法にのっとることができる。
do-install:
${INSTALL_PROGRAM} ${WRKSRC}/9e ${DESTDIR}${PREFIX}/bin
これは具体的には以下のように展開される。
/usr/bin/install -c -s -o root -g wheel -m 755 /usr/pkgsrc/archivers/9e/work/9e/9e /usr/pkgsrc/archivers/9e/work/.destdir/usr/pkg/bin
install の先が /usr/pkg/bin ではなく、work/.destdir/usr/pkg/bin なのである。しかし make install したあとには /usr/pkg/bin/9e がある。
% which 9e /usr/pkg/bin/9e
ではいったい /usr/pkg/bin にインストールしているのは誰なのか。我々はその謎を追うために pkgsrc/mk/* を眺めた。
結論をいうと pkg_add で /usr/pkg/bin にインストールされる。
make install したときの関数ツリーを追うと以下のように呼ばれる。
install (install/bsd.install.mk)
package-install (pkgform/pkg/package.mk)
su-real-package-install (pkgform/pkg/package.mk)
su-real-package-install はこれ。
su-real-package-install:
@${PHASE_MSG} "Installing binary package of "${PKGNAME:Q}
.if !empty(USE_CROSS_COMPILE:M[yY][eE][sS])
@${MKDIR} ${_CROSS_DESTDIR}${PREFIX}
${SETENV} ${PKGTOOLS_ENV} ${PKG_ADD} -m ${MACHINE_ARCH} -I -p ${_CROSS_DESTDIR}${PREFIX} ${STAGE_PKGFILE}
@${ECHO} "Fixing recorded cwd..."
@${SED} -e 's|@cwd ${_CROSS_DESTDIR}|@cwd |' ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS > ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp
@${MV} ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS
.else
${RUN} case ${_AUTOMATIC:Q}"" in \
[yY][eE][sS]) \
${SETENV} ${PKGTOOLS_ENV} ${PKG_ADD} -A ${STAGE_PKGFILE} ;; \
*) ${SETENV} ${PKGTOOLS_ENV} ${PKG_ADD} ${STAGE_PKGFILE} ;; \ ←←←←ここを通るらしい
esac
.endif
ようするに pkd_add でインストール( /usr/pkg/bin に配置 )される。
pkd_add とは
pkg_add(1) - NetBSD Manual Pages
-W viewbase
Set viewbase as the base directory for the managed views. The
default viewbase directory is set by pkg_view(1). This value
also may be set from the LOCALBASE environment variable.
-w view
Set the view to which packages should be added after installa-
tion. The default view is set by pkg_view(1). This value also
may be set from the PKG_VIEW environment variable.
LOCALBASE This is the location of the viewbase directory in which all
the views are managed. The default viewbase directory is
/usr/pkg.
「データベースに設定したあとに viewbase にインストールするよ。viewbase は LOCALBASE だよ。LOCALBASE のデフォルトは /usr/pkg だよ」
make show-all を実行すると make 時に使われるすべての変数の値が分かる。めっちゃ大量に出力されるので注意。LOCALBASE はこれ。/usr/pkg です。
usr LOCALBASE = /usr/pkg
_ [ゆゆゆい]結城優奈は勇者である 花結いのきらめき イベント「HAPPY BIRTHDAY」ノーマル コンプリート
このバカ騒ぎは好きだった。
なおハードはイベントマスが無いのでいつも通りにバーテックスを殺戮するステージになるもよう。





