IPSのmanifest内でrestartしているfmriサービス
IPSのmanifestを色々見ていると、restart_fmri=svc… なる記述を見かける。どうやら、このファイルを追加したときに、サービス再起動することで、SVR4 pkgのpostinstall スクリプト相当の処理を行っているらしい。
ということで、一覧を取得してみた。何となく分かるものもあるけど、分からないものも多い。あとで調べてみよう。
svc:/application/desktop-cache/gconf-cache:default
svc:/system/rad:default
svc:/application/desktop-cache/pixbuf-loaders-installer:default
svc:/application/desktop-cache/desktop-mime-cache:default
svc:/application/desktop-cache/mime-types-cache:default
svc:/system/manifest-import:default
svc:/application/font/fc-cache:default
svc:/application/desktop-cache/input-method-cache:default
svc:/application/opengl/ogl-select:default
svc:/application/desktop-cache/icon-cache:default
svc:/system/rbac:default
方法は簡単。pkg contents -m パッケージ名で全パッケージのmanifestを拾って、”restrart_fmri=” でgrepして、その引数を拾って、uniq しただけ。
実際には、pkg contents を使わず、以下のように公開されているミラー用のrepository イメージ内のmanifestファイルをgrepしている。以下の例では、repositoryイメージを/export/pkg/repo2010_11に展開している。
find /export/pkg/repo2010_11/repo/publisher/solaris/pkg -type f -print0
| xargs -0 grep 'restart_fmri='>'file
上記のファイルを、perl script で処理して、unique なサービスを割り出している。以下のperl scriptでは、再起動しているFMRIが、どのpkgに含まれているかの一覧も出している。出力結果は長いから省略。
#!/usr/bin/perl
use strict;
use warnings;
use constant TAG=> ' ';
my %fmri;
while (<>) {
/restart_fmri=(S+)/;
my $key=$1;
next unless $key;
my $path=(split(/:/))[0];
my $pkg=(split(m|/|, $path))[-2];
$pkg =~ s|%2F|/|g;
$fmri{$key} = {} unless exists $fmri{$key};
$fmri{$key}->{$pkg}=1;
}
foreach my $k (keys %fmri ) {
print( "$kn", TAG,
join("n" . TAG, sort( keys %{$fmri{$k}} ) ),
"n");
}

