fetchindex でバージョンを指定 ― 2007年07月06日 10時27分44秒
そこで、fetchindex のターゲットがあり、cvsup/csup なり portsnap なりで、ソースを最新の状態にしたら、INDEX ファイルもダウンロードすることにより、自分で作り直す手間を省くことが出来る。特に、最新の機材でない場合は、ありがたい。
しかし、6-STABLE と 7-CURRENT 等と、複数のシステムを使っていると、問題が生じる。6-STABLE で make fetchindex
をやると、INDEX-6 しか更新しない。そのため、時間が経ってから 7-CURRENT を起動し、同じ ports を使っていると INDEX-7 が最新では無くなる。そして、fetchindex で取ってくると他の更新まで含むことになる。
fetchindex は Mk の中ではなく、Makefile に直接記載されていた。
% vi /usr/ports/Makefile
fetchindex: ${INDEXDIR}/${INDEXFILE}.bz2
@bunzip2 < ${INDEXDIR}/${INDEXFILE}.bz2 > ${INDEXDIR}/${INDEXFILE} && \
chmod a+r ${INDEXDIR}/${INDEXFILE}
${INDEXDIR}/${INDEXFILE}.bz2: .PHONY
@${FETCHINDEX} ${INDEXDIR}/${INDEXFILE}.bz2 ${MASTER_SITE_INDEX}${INDEXFILE}.bz2
次は、INDEXFILE の設定のされ方。
% grep INDEXFILE *
bsd.port.mk:INDEXFILE?= INDEX-${OSVERSION:C/([0-9]).*/\1/}
% vi Mk/bsd.ports.mk
# Get __FreeBSD_version
.if !defined(OSVERSION)
.if exists(${DESTDIR}/usr/include/sys/param.h)
OSVERSION!= ${AWK} '/^\#define __FreeBSD_version/ {print $$3}' < ${DESTDIR}/
usr/include/sys/param.h
.elif exists(${DESTDIR}/usr/src/sys/sys/param.h)
OSVERSION!= ${AWK} '/^\#define __FreeBSD_version/ {print $$3}' < ${DESTDIR}/
usr/src/sys/sys/param.h
.else
OSVERSION!= ${SYSCTL} -n kern.osreldate
.endif
.endif
OSVERSION が設定されていなかったら、色々なところから値を取ってこようとする。OSVERSION を自ら指定すれば、使っているシステムのバージョンに関係ないことになる。
% make -n fetchindex OSVERSION=602000
/usr/bin/env fetch -am -o /usr/ports/INDEX-6.bz2 http://www.FreeBSD.org/ports/INDEX-6.bz2
bunzip2 < /usr/ports/INDEX-6.bz2 > /usr/ports/INDEX-6 && chmod a+r /usr/ports/INDEX-6
% make -n fetchindex OSVERSION=702000
/usr/bin/env fetch -am -o /usr/ports/INDEX-7.bz2 http://www.FreeBSD.org/ports/INDEX-7.bz2
bunzip2 < /usr/ports/INDEX-7.bz2 > /usr/ports/INDEX-7 && chmod a+r /usr/ports/INDEX-7
ports ファイルを共有しているのであれば、fetchindex で OSVERSION を指定すれば、必要な INDEX ファイルを取ってこられる。さらに PORTSDIR を指定すると、/usr/ports 以外の場所に INDEX ファイルを展開できる。
最近のコメント