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」ノーマル コンプリート
このバカ騒ぎは好きだった。
なおハードはイベントマスが無いのでいつも通りにバーテックスを殺戮するステージになるもよう。