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"); }