| /export/home/voyager/solaris.html |
ここでは,Solaris の Software に関する話題を掲載します.
Linux や FreeBSD では,"top" コマンドがあるのに,Solaris8 には,なぜ無いのという人のために
システムの状態を調べるのに,便利なコマンドです.
/usr/platform/`uname -m`/sbin/prtdiag -v
システム構成: Sun Microsystems sun4u (2 X UltraSPARC-II 450MHz)
システムクロック周波数: 113 MHz
メモリーサイズ: 2048 M バイト
========================= CPUs =========================
Run Ecache CPU CPU
Brd CPU Module MHz MB Impl. Mask
--- --- ------- ----- ------ ------ ----
0 0 0 450 4.0 US-II 10.0
0 2 2 450 4.0 US-II 10.0
========================= IO Cards =========================
Bus Freq
Brd Type MHz Slot Name Model
--- ---- ---- ---- -------------------------------- ----------------------
0 PCI 33 1 network-SUNW,hme
0 PCI 66 1 SUNW,Expert3D SUNW,370-3987
0 PCI 33 3 scsi-glm/disk (block) Symbios,53C875
0 PCI 33 3 scsi-glm/disk (block) Symbios,53C875
0 UPA 113 30 FFB, Double Buffered SUNW,501-4788
システムに障害は見つかりませんでした
===========================
========================= HW Revisions =========================
ASIC Revisions:
---------------
PCI: pci Rev 4
PCI: pci Rev 4
Cheerio: ebus Rev 1
FFB Hardware Configuration:
-----------------------------------
Board rev: 2
FBC version: 0x3241906d
DAC: Brooktree 9070, version 1
3DRAM: Mitsubishi 130a, version 1
システム PROM のバージョン:
----------------------
OBP 3.23.1 1999/07/16 12:08 POST 2.0.2 1998/10/19 10:46
ふつうにインストールした,Solaris 7 or Solaris 8 ではフロッピィディスクのイメージファイルがうまく作成 できません.
上記は,"su" して "root" になっても同じ.いったい誰がデバイスを使っているんだ!!
いや待てよ,何かのプロセスがデバイスを使っているのでは?
そのとおりです."/usr/sbin/vold" つまりボリュームマネージャがデバイスを使用していたのです.
ボリュームマネージャを殺します.
さあ,ピーコしましょ
ボリュームマネージャを蘇生させます.
修正前
# @(#)vold.conf 1.25 99/11/11 SMI # # Volume Daemon Configuration file # # Database to use (must be first) db db_mem.so # Labels supported label cdrom label_cdrom.so cdrom label dos label_dos.so floppy rmdisk pcmem label sun label_sun.so floppy rmdisk pcmem # Devices to use use cdrom drive /dev/rdsk/c*s2 dev_cdrom.so cdrom%d use floppy drive /dev/rdiskette[0-9] dev_floppy.so floppy%d use pcmem drive /dev/rdsk/c*s2 dev_pcmem.so pcmem%d forceload=true use rmdisk drive /dev/rdsk/c*s2 dev_rmdisk.so rmdisk%d # Actions eject dev/diskette[0-9]/* user=root /usr/sbin/rmmount eject dev/dsk/* user=root /usr/sbin/rmmount insert dev/diskette[0-9]/* user=root /usr/sbin/rmmount insert dev/dsk/* user=root /usr/sbin/rmmount notify rdsk/* group=tty user=root /usr/lib/vold/volmissing -p remount dev/diskette[0-9]/* user=root /usr/sbin/rmmount remount dev/dsk/* user=root /usr/sbin/rmmount # List of file system types unsafe to eject unsafe ufs hsfs pcfs udfs
修正後
# Devices to use use cdrom drive /dev/rdsk/c*s2 dev_cdrom.so cdrom%d #use floppy drive /dev/rdiskette[0-9] dev_floppy.so floppy%d use pcmem drive /dev/rdsk/c*s2 dev_pcmem.so pcmem%d forceload=true use rmdisk drive /dev/rdsk/c*s2 dev_rmdisk.so rmdisk%d
ボリュームマネージャがフロッピィを使えないように,floppy の所をコメントアウトしてしまいましょう.
M$ Windows 上で作成した M$ 外字があるテキストファイルを転送して,Solaris 上で編集する際,
sjtoeuc コマンドでは,完全な漢字コード変換ができません.
Solaris では,"sjtoeuc" コマンドでは,外字部分のコード変換は保証されません.
つまり,外字部分が文字化けしてしまうということ.
下記は,悲惨な結果になります.
solaris euc% sjtoeuc MS-gaiji.txt > MS-gaiji.euc
それでは,どうすれば良いのかというと,下記の様にすれば OK です.
solaris euc% iconv -f PCK -t eucJP MS-sample.txt > MS-sample.euc
これで,ちゃんと外字が処理できるようになります.
Macintosh のページを書いて,Solaris 7 上でソースコードの編集や,マニュアルの補完を 行っていたときに判明したのですが,euc の text file を shift-jis の MacOS 形式 のファイルに変換する際,改行コードを LF から CR に変換するのに "tr" コ マンドの動作が他の OS と違います.
linux % nkf -s abc.euc | tr '¥n' '¥r' > abc.mac と書いてあります.
"nkf" 等をインストールしていない場合,"euctosj" コマンドが使用できます.
また,"tr' コマンドには,"/usr/bin/tr" , "/usr/xpg4/bin/tr" の2つがあります.
上記の構文で,コマンドを置き換えてみると,下記のとおりになります.
solaris euc% euctosj abc.euc | tr '¥n' '¥r' > abc.mac
solaris euc% euctosj abc.euc | /usr/xpg4/bin/tr '¥n' '¥r' > abc.mac
ところが,上記の2つの実行結果は,文字化けだらけの惨憺たる状況です.
そこで,"man tr" とマニュアルを参照すると,"tr" コマンドは LOCALE の設定により
動作が変わるようです.
よってlocale により "tr" コマンドの動作がどうなるか,実験します.
検証方法は,NFS server に "pcnfsd" をインストールしてあるため,Windows98SE上の "jvim 3.0-j2.0" からファイルを直接開いてみます."jvim" は,"LF" は,改行コードと みなしますが,"CR" のみでは "^M" と表示されるので,一発で分かります. また,コードも "euc" だと "[E]","Shift-jis" だと "[S]" と表示されるので,検証用にはぴったり でしょう.
solaris euc% tr '¥n' '¥r' < abc.euc | euctosj > abc.mac
もしくは,
solaris euc% cat abc.euc | tr '¥n' '¥r' | euctosj > abc.mac
と行い,期待通りの実行結果を得ることができました.
solaris pck% tr '¥n' '¥r' < abc.sjis > abc.mac
これが,出きれば,locale 値により "tr" コマンドが動作を変えることの実証になりますが, 残念ながら惨憺たる結果でした.
結果的に,locale 値により動作を変更するような実装をしているが, かなり Bug 含みであるということでしょうか.
これが,噂の"ja_JP.PCK"はかなり危ないということの実証ですね.
solaris pck% /usr/xpg4/bin/tr '¥n' '¥r' < abc.sjis > abc.mac
これも出来ないと,本当にだめだという結論なんですが,これはできました.
結論とすると,PCKを使うなら,"/usr/xpg4/bin/tr" を使え!ということ でしょうか.
"ere - edit and run and edit" script のことです.
この shell script は,Unix Guru Universeの Kirk Waingrow が Unix Guru Universe のサイトの cgi をテストするために書きました.
#!/bin/sh file="$1" if [ -z "$file" ] ; then exit; fi while [ 1 ] ; do vi $file chmod 755 $file $file echo "Hit [return], or [CTRL-C] to stop" ; read x done
この,script で,while [ 1 ] は,常に真ですから,[CTRL-C] で抜けない限り,ずっとループします.
そして,編集している shell script が,うまく実行できるまで,リターンキーで,編集を再開できます.
いちいち,vi でファイルを開いて,保存して,実行するという手間が省けます.
これは,素晴らしいヒントになります.
実際,私はこの script を応用して,このサイトの編集をしています.