[FreeBSD-users-jp 95358] Re: packageのアップグレード方法について

Hiroki Sato hrs at FreeBSD.org
Sat Nov 22 09:09:37 UTC 2014


NISHIMURA Yutaka <iscream at aypio.net> wrote
  in <20141122113504.A8A1.BD318DDB at aypio.net>:

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
-------------- next part --------------
#!/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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-users-jp/attachments/20141122/7e1e51bd/attachment.sig>


More information about the freebsd-users-jp mailing list