NISHIMURA Yutaka <[email protected]> wrote in <[email protected]>:
is> pkgで導入したものと、make configでコンパイルオプションを is> 変更してインストールしたportsが有りますが、 is> is> pkg upgrade ではportsで入れたものもpkgから入れられていまうようです。 is> 昔はportupgradeを使っていたのですが、 is> これはすべてコンパイルしてしまうので時間が掛かります。 is> is> デフォルトから変更されていないものはpkgで導入 is> デフォルトから変更されているものは、portsから導入すると言う条件で is> インストールされたパッケージ群をアップグレードする方法は無いでしょうか? pkg(8) にはオプションが変更されているか判別する機能が 一応あるのですが、現時点では確実に動作しません。 なので、手動で検出するしかないと思います。 たとえばやっつけですが、添付のようなスクリプトを実行すると 変更されている ports の一覧が出せます。 % sh ./list_touchedpkgs.sh | tee ./list この結果を pkg lock に渡せば、インストール済みの package を ロックすることができます。 # sh -c 'cat ./list | while read L; do env ASSUME_ALWAYS_YES=yes pkg lock $L; done' ロック後に pkg upgrade を実行すれば、オプションを変更していない package のみが更新されるはずです。 lock したままでは ports を使っての再インストールもできないので、 pkg upgrade 後に次のように unlock して、 個別に手動で make install すれば、目的は達成できるように思います。 # sh -c 'cat ./list | while read L; do env ASSUME_ALWAYS_YES=yes pkg unlock $L; done' -- Hiroki
#!/bin/sh
PORTSDIR=/usr/ports
for d in $(pkg query %o); do
u=$( (cd $PORTSDIR/$d && (make showconfig | awk "/=on/ && \
!/IPV6=|DOCS=|NLS=|EXAMPLES=/{print \$1}"; \
for i in $(make -VOPTIONS_DEFAULT); do \
echo "$i=on" | grep -v "IPV6=\|DOCS=\|NLS=\|EXAMPLES="; \
done ) | sed -e "s/://g" | sort | uniq -u))
if [ -n "$u" ]; then
echo "$d"
fi
done
pgpyfcvhw3qMu.pgp
Description: PGP signature
