[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