ということで,ikachan を動かすのに必要なパッケージを作った.
まだ #osoljp にはつっこんでいない.
あとは SMF マニフェストとスクリプトを書けば,
いい感じで使えるようになるはず.
YappoLogs: App::Ikachan - 様々なサーバのバッチ処理の結果等を IRC のチャンネルに通知するサーバ
http://blog.yappo.jp/yappo/archives/000760.html
ということで,ikachan を動かすのに必要なパッケージを作った.
まだ #osoljp にはつっこんでいない.
あとは SMF マニフェストとスクリプトを書けば,
いい感じで使えるようになるはず.
YappoLogs: App::Ikachan - 様々なサーバのバッチ処理の結果等を IRC のチャンネルに通知するサーバ
http://blog.yappo.jp/yappo/archives/000760.html
ということで,prctl を使って稼動中の zone のリソースを変更する方法.
変更する前に現状の確認.
testserver という zone の確認をする場合は以下.
# prctl -i zone testserver zone: 4: testserver NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT zone.max-lofi usage 0 system 18.4E max deny - zone.max-swap usage 58.1MB system 16.0EB max deny - zone.max-locked-memory usage 0B system 16.0EB max deny - zone.max-shm-memory system 16.0EB max deny - zone.max-shm-ids system 16.8M max deny - zone.max-sem-ids system 16.8M max deny - zone.max-msg-ids system 16.8M max deny - zone.max-processes usage 26 system 2.15G max deny - zone.max-lwps usage 124 system 2.15G max deny - zone.cpu-cap usage 0 privileged 100 - deny - system 4.29G inf deny - zone.cpu-shares usage 1 privileged 1 - none - system 65.5K max none -
zone.cpu-cap だけ表示したい場合は
"-n" オプションに zone.cpu-cap を渡す.
# prctl -n zone.cpu-cap -i zone testserver zone: 4: testserver NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT zone.cpu-cap usage 0 privileged 100 - deny - system 4.29G inf deny -
この表示は zonecfg -z testserver info で表示される以下の部分に相当.
rctl: name: zone.cpu-cap value: (priv=privileged,limit=100,action=deny)
prctl の
privileged 100 - deny -
と zonecfg の
value: (priv=privileged,limit=100,action=deny)
が対応している.
今,100 に設定されている cpu-cap を 200 に変更してみる.
# prctl -r -t privileged -n zone.cpu-cap -v 200 -i zone testserver
これで以下のように cpu-cap が 200 に変更される.
# prctl -n zone.cpu-cap -i zone testserverzone: 4: testserver NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT zone.cpu-cap usage 0 privileged 200 - deny - system 4.29G inf deny -
稼動中の testserver の cpu-cap は変更できたが,
zonecfg の方は変更されないので,再起動後も cpu-cap を 200 にしたければ,
zonecfg で変更しておく必要がある.
Solaris 11.1 が出たので,いくつかメモ.
Taking Your First Steps with Oracle Solaris 11
http://www.oracle.com/technetwork/articles/servers-storage-admin/o11-112-s11-first-steps-524819.html
Updating Your System From Oracle Solaris 11 to Oracle Solaris 11.1
http://docs.oracle.com/cd/E26502_01/html/E28978/glpgv.html#gmgim
Issues When Updating to Oracle Solaris 11.1 - Oracle Solaris 11.1 Release Notes
http://docs.oracle.com/cd/E26502_01/html/E28978/glmqm.html#gmnby
Solaris 用に pear のパッケージを作るため,
pear のオプションを眺めていたら,
makerpm という rpm 用の spec ファイルを作ってくれるオプションがあった.
#jposug のパッケージは rpm と同様の spec ファイルを使うので,
これが使えれば便利ということで,試してみたところ,
makerpm は deprecated なようで,
PEAR_Command_Packaging をインストールして make-rpm-spec を使え
というようなことを言われてしまった.
ということで,PEAR_Command_Packaging をインストール
sudo /usr/php/5.2/bin/pear install channel://pear.php.net/PEAR_Command_Packaging-0.3.0
ダウンロード済みのソースがある場合は以下のように実行.
/usr/php/5.2/bin/pear make-rpm-spec ~/packages/SOURCES/Mail-1.2.0.tgz
PEAR::Mail-1.2.0.spec が書き出されるので,
これを適当に修正して specbuild にかければパッケージのできあがり.
キーボードレイアウトは
svc:/system/keymap:default の
keymap/layout プロパティで設定されている.
設定を確認
$ svccfg -s svc:/system/keymap:default listprop keymap/layout keymap/layout astring US-English
日本語キーボードに変更
$ svccfg -s svc:/system/keymap:default setprop keymap/layout = Japanese svccfg: Permission denied. $ sudo svccfg -s svc:/system/keymap:default setprop keymap/layout = Japanese $ sudo svcadm refresh keymap $ sudo svcadm restart keymap $ svccfg -s svc:/system/keymap:default listprop keymap/layout keymap/layout astring Japanese
Solaris 11 から /etc/resolv.conf を見ると
以下のように書かれている.
# _AUTOGENERATED_FROM_SMF_V1_ # # WARNING: THIS FILE GENERATED FROM SMF DATA. # DO NOT EDIT THIS FILE. EDITS WILL BE LOST. # See resolv.conf(4) for details.
SMF のデータから生成されていると書かれていて,
それは以下のように確認できる.
svccfg -s svc:/network/dns/client listprop config
- config/search
- config/nameserver
の 2 つを setprop で設定すればよい.
nameserver を複数指定するには
以下のように括弧で囲んで渡す.
svccfg -s dns/client setprop \ config/nameserver = '(192.168.1.1 192.168.1.2)'
nscfg を使うと,編集した /etc/resolv.conf をインポートすることもできる.
nscfg import svc:/network/dns/client:default
/etc/nodename がなくなり,以下のように
svc:/system/identity:node の property として設定.
sudo svccfg -s svc:/system/identity:node setprop config/nodename = nodename sudo svcadm refresh svc:/system/identity:node sudo svcadm restart svc:/system/identity:node
ここに .p5p のパッケージが置かれている.
http://downloads.puppetlabs.com/solaris/
結局,以下のようなパッチでごまかすことにして,
#jposug にコミットした.
--- common/lib/Munin/Common/SyncDictFile.pm~ 2012-09-01 00:22:50.000000000 +0900 +++ common/lib/Munin/Common/SyncDictFile.pm 2012-09-29 12:40:13.342258023 +0900 @@ -170,6 +170,7 @@ sub _lock_write { my ($filename, $mode) = @_; + $mode = "w+" if $filename =~ /SPOOL-META/; $mode ||= "a+"; use Fcntl qw(:flock);
次は munin-async の SMF マニフェスト作り.
munin-node のマニフェストは含まれているのに,
munin-async のマニフェストは含まれていないので.
その後,plugin ごとパッケージを分割して,
それぞれに Requires を設定すれば,
ちゃんとしたパッケージっぽくなる.
- munin-async を Solaris 11 上で動かしたい [2012-09-27-1]
- munin-async を Solaris 11 上で動かしたい 2 [2012-09-28-3]
munin の apache 系 plugin がビルド環境のサーバでは動いて,
パッケージを持っていった環境では動かなかったので,
モジュールが足りないんだろうということで,
以下のように読み込まれるモジュールを確認してみた.
truss /usr/share/munin/plugins/apache_volume 2>&1 | \ egrep 'open.*\("/usr/perl5/' |cut -d " " -f 1 | \ sed -e 's/open.*(//' | sort -u
これで
"/usr/perl5/5.12/lib/AutoLoader.pm", "/usr/perl5/5.12/lib/English.pm", "/usr/perl5/5.12/lib/Exporter.pm", "/usr/perl5/5.12/lib/Exporter/Heavy.pm", "/usr/perl5/5.12/lib/File/Basename.pm", "/usr/perl5/5.12/lib/SelectSaver.pm", "/usr/perl5/5.12/lib/Symbol.pm", "/usr/perl5/5.12/lib/Tie/Hash/NamedCapture.pm", "/usr/perl5/5.12/lib/Time/Local.pm", (snip)
のようにとれる.
"open.*" としているのは,"open" と "open64" があるため.
apache 系 plugin に足りなかったのは,
library/perl-5/net-http-512
昨日 [2012-09-27-1] の続き.
以下のように print をいれて,どこのファイルでひっかかるのか確認
sub _lock_write { my ($filename, $mode) = @_; print "$filename: $mode\n";
これで実行すると,以下のように
/var/lib/munin/spool/SPOOL-META を "r" で開いたときに
flock($fh, LOCK_EX) が失敗している.
$ sudo -u munin /usr/share/munin/munin-asyncd -v /var/lib/munin/spool/SPOOL-META: r Cannot lock tied file '/var/lib/munin/spool/SPOOL-META' - Bad file number at /usr/perl5/vendor_perl/5.12/Munin/Common/SyncDictFile.pm line 182.
なので,以下のようにして,SPOOL-META を開くときの mode を
"w+" に変えてしまう.
sub _lock_write { my ($filename, $mode) = @_; $mode = "w+" if $filename =~ /SPOOL-META/; print "$filename: $mode\n";
すると,以下のように,flock でひっかからなくなる.
$ sudo -u munin /usr/share/munin/munin-asyncd -v /var/lib/munin/spool/SPOOL-META: w+ /var/lib/munin/spool/SPOOL-META.tmp: w+ /var/lib/munin/spool/SPOOL-META: w+ /var/lib/munin/spool/SPOOL-META.tmp: w+ /var/lib/munin/spool/SPOOL-META: w+ /var/lib/munin/spool/SPOOL-META.tmp: w+ [21634][main] Reading config from localhost:4949 [21634][plugin:cpu] asking for config [21634][plugin:cpu] asking for data [21634][plugin:df] asking for config
場当り的だけど,これで動くので,
とりあえず,しばらくはこれで使ってみる.
ちなみに,SPOOL-META は以下のようなファイル.
$ cat /var/lib/munin/spool/SPOOL-META lastruntime:1348803319
#osoljp の contrib-spec-files に munin 2.0.6 をコミットしたし,
依存関係もある程度解決したので,そろそろ munin-async を試そうかと.
munin-async の使い方はここを参照.
http://munin.readthedocs.org/en/latest/node/async.html
とりあえず,munin-asyncd を実行してみる.
$ sudo -u munin /usr/share/munin/munin-asyncd -v Cannot lock tied file '/var/lib/munin/spool/SPOOL-META' - Bad file number at /usr/perl5/vendor_perl/5.12/Munin/Common/SyncDictFile.pm line 180.
と言われるので,SyncDictFile.pm を見てみる.
sub _lock_write { my ($filename, $mode) = @_; $mode ||= "a+"; use Fcntl qw(:flock); use IO::File; my $fh = IO::File->new($filename, $mode) or die "Cannot open tied file '$filename' - $!"; flock($fh, LOCK_EX) or die "Cannot lock tied file '$filename' - $!"; return $fh; }
となっていて,flock のところでこけている.
ググってみると以下のような話がみつかった
OSがSolarisの場合、flockシステムコールの仕様の違いによりpkwk_chown(): flock() failedがでることが分かりました。Solarisのflockでは、LOCK_EX(排他ロック)をするためには書き込み可能な状態でファイルをオープンする必要があります。これに対して、LinuxなどのOSでは読み出しオープンでもLOCK_EX可能です。fopen の 'r' を 'w+' に変更すると改善するのは、OSのflockがSolaris流の場合と考えられます。ただ、pkwk_chown は、書き込みできないファイルのオーナーを変更することにより、書き込み権限を得ることが本来の目的ですので、'w+' でオープンできない場合、目的を果たせなくなります。それから、PHPのposix拡張モジュールの有無も、挙動に影響します。posix拡張モジュールがあれば、ファイルのオーナーをapacheの実行ユーザに変更することで解決できますが、posix拡張モジュールが無い場合、apache実行ユーザIDの取得ができず、毎回chownしようとしますので、pkwk_chown(): flock() failedが出ます。どのように問題解決すべきか考えています(LOCK_EXできないので、ロックファイルを作って対応かな・・・)。目処が立ったら、dev:BugTrack2で改善案を提案します。 -- 三浦克介 2010-10-24 (日) 11:51:16
http://pukiwiki.sourceforge.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B13%2F260
ということなので,
my ($filename, $mode) = @_; $mode ||= "a+";
で,$mode に "r" が入ることがあってこけてるっぽい.
とりあえず,以下のように LOCK_SH にしてみる.
flock($fh, LOCK_SH) or die "Cannot lock tied file '$filename' - $!";
すると,以下のように実行できた.
$ sudo -u munin /usr/share/munin/munin-asyncd -v [6812][main] Reading config from localhost:4949 [6812][plugin:cpu] asking for config [6812][plugin:cpu] asking for data (snip)
排他ロックを共有ロックにしてしまっているのでよろしくないのだけど,
どうすればいいんだろう?
Perl と Solaris に詳しい人いませんかね?
社長が mod_xsendfile 対応をしたというので,
Solaris 11 上でパッケージを作ってみた.
パッケージは作ったけど,動作は未確認.
#jposug に push してありますが,
動作未確認のため,trunk には merge していません.
認証した上で見せたいファイルなど,
document root 以下にファイルを置きたくない時に,
アプリケーションで read するよりは速いし,
CPU 負荷も少なくなるというものらしい.
http://docs.oracle.com/cd/E23824_01/html/821-1448/gayne.html#glixn
に
In previous Solaris releases, you could not create and publish NFS or SMB shares in a Oracle Solaris non-global zone. In this Solaris release, you can create and publish NFS shares by using the zfs set share command and the legacy share command with a non-global zone.
non-global zone で cifs を使いたければ,
samba を利用.
やったー GrowthForecast のページできたよー\(^o^)/ ということなので
Solaris 用のパッケージを作って jposug にコミットしておいた.
依存関係をほとんど書いていなかったり,
いろいろとあれだけど.
- GrowthForecast - Lightning fast Graphing / Visualization
- GrowthForecast に必要な perl のモジュールの IPS パッケージを作った [2012-06-17-1]
ということで,なにかと捗るらしい GrowthForecast を
Solaris 上で使うため,IPS パッケージを作りまくった.
jposug のリポジトリにブランチを切った形でコミット済み.
まだ defualt branch には merge してない.
cpanm で
perl cpanm -v -L extlib --installdeps .
とかしてもいいけど,パッケージにしておいた方が
ビルド環境を用意していないホストにも持っていきやすいし.
ただ,びみょうな点があって,
Solaris11 が提供する dbi は library/perl-5/database-512 で
バージョンは 1.58.
これだと,いくつかのモジュールで dbi が古いと言われてしまうので,
library/perl-5/dbi-512 というパッケージをつくり,
/usr/perl5/site_perl/5.12 以下にインストールしている
(library/perl-5/database-512 は /usr/perl5/vendor_perl/5.12 以下).
@INC が以下のようになっているので,
site_perl/5.12 が vendor_perl/5.12 より先に読み込まれるので,
一応,動くことは動く.
$ perl -e '(print join("\n",@INC));' /usr/perl5/site_perl/5.12/i86pc-solaris-64int /usr/perl5/site_perl/5.12 /usr/perl5/vendor_perl/5.12/i86pc-solaris-64int /usr/perl5/vendor_perl/5.12 /usr/perl5/5.12/lib/i86pc-solaris-64int /usr/perl5/5.12/lib
GrowthForecast 自体はパッケージにするか未定.
Puppet で github から clone するのがいいのかな?とか考え中.
とりあえず,SMF マニフェストは書いてあげないとダメだけど.
- GrowthForecastというグラフ表示ツールで捗る話 - blog.nomadscafe.jp
http://blog.nomadscafe.jp/2011/12/growthforecast.html
いろいろな機能について,
それを実現するコマンドの比較表(?).
- Red Hat Enterprise Linux to Solaris 11 Evaluation
http://www.oracle.com/technetwork/server-storage/solaris11/overview/redhat-mapping-guide-1555721.html
Oracle Solaris 11 には ilb というロードバランサがあって,
一通りのことはできるよう.
これに vrrpadm で VRRP (Virtual Router Redundancy Protocol) を設定すれば,
冗長構成のロードバランサができそうなので,あとで試す
- Oracle Blogs 日本語のまとめ: [Solaris] Integrated Load Balancer
http://orablogs-jp.blogspot.com/2011/07/integrated-load-balancer.html
- network load balancing with Solaris » Antony Pavlenko's blog
http://pavlenko.net/antony/2012/03/12/network-load-balancing-with-solaris/
- http://docs.oracle.com/cd/E26924_01/html/E25872/gijjm.html
/lib/svc/share/smf_include.sh の smf_is_system_labeled() で
/bin/plabel というコマンドが使われていて,
調べてたら辿りついたのでメモ.
- http://www.ipa.go.jp/security/fy14/contents/trusted-os/1-trustedsolaris.pdf
- Trusted Solaris 管理の概要
http://download.oracle.com/docs/cd/E19109-01/tsolaris7/805-8092/index.html
- Trusted Solaris ユーザーズガイド
http://download.oracle.com/docs/cd/E19109-01/tsolaris7/805-8088/index.html
- [ThinkIT] 第4回:セキュアOS紹介(2) 〜 Trusted SolarisとPitBull (1/4)
http://thinkit.co.jp/free/compare/7/4/1.html