トップ «前の日記(2017-12-25) 最新 次の日記(2017-12-27)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|

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」ノーマル コンプリート

このバカ騒ぎは好きだった。

なおハードはイベントマスが無いのでいつも通りにバーテックスを殺戮するステージになるもよう。

_ 朝の散歩

IMG_4271