Linux その7 伊藤敏 1. DOSの領域にLinuxをインストール この連載も,もう7回目になりました.そこで,まだLinuxを導入されてない方に少し,宣伝をします. 最近は,パーソナルコンピュータも1年前には考えられないくらい安く,高性能になっております.そして,OSはもちろん,ワープロ,表計算ソフトが標準でインストールずみで売り出されております.このようなマシンを買われた方は,Linuxは面白そうだが,Linuxを導入するために,パーティションを切り直すという,「冒険」はしたくない,とお考えの方が多いと思います.そのような方はまず,Laser5から発売されているLinux+JE4を使って,CD-ROMから実行をして雰囲気を確かめるのも良い方法でしょう.しかし,スピードが遅く,正確な雰囲気はつかめないかも知れません.そこで,現に存在するDOSのパーティションを変更したり,フォーマットし直しをしたりすることなく,Linuxを導入する話を紹介します. これは,「UMSDOS」と言われ,昔からあります.DOSの中に,「\linux」というディレクトリを作り,その中にすべてをインストールします.DOSやその他に影響することなく,Linuxが導入できます.もちろん,Windows95がインストール済みのマシンでも全く問題なく導入できます.起動はフロピィディスクで行ないます.X windowはもちろん,JEを入れることで日本語も普通のLinuxと同様に使用できます.また,不必要になったら\linuxを消せば,インストール前の状態に完全に戻せます.パーティションを分けて導入したLinuxが,標準で使うファイルシステム「ext2」と比べると,ややスピードが遅くなるとのことですが,筆者が使った限りではそれほどの違いを感じませんでした. Linuxにちょっと興味があるが,まだ,インストールに踏み切れない方,現在持っているマシンのハードディスクの空き容量はいくつですか.もし,150M以上の空きがあれば,ぜひ,お試しと言うことで,「UMSDOS」のLinuxを入れて見て下さい.あ,メモリーは最低でも8M以上が必要です.しかし,この条件は満たしてますね.ここで,インストールの方法を長々と述べる紙面がありません.簡単な紹介にします.詳しくはこの連載の1,2,3などを参照して下さい. フォーマット済みの3枚のフロピィディスクを用意して下さい.ブート用ディスクを作るイメージは,SLAKINST\BOOT144にあります.持っているマシンのCD-ROMがIDEのATAPIならばIDECDを,サウンドブラスタ用ならばSBPCDです.その他のCD-ROMならばBOOT144ディレクトリにあるWHICH.ONEと言うファイルを読んで,選んで下さい.ルート用ディスクを作るイメージは,SLAKINST\ROOT144のUMSDS144を用います.DOS_UTILにあるRAWRITE.EXEとGZIP.EXEを使って作りましょう.手順をリスト1にまとめました. インストールの手順をリスト2にまとめました.手順6からは手抜きだと怒られそうですが,前述の連載等を参考にして下さい. 図1に,筆者のマシンのWindows95領域にUMSDOSのLinuxを入れた様子を,Windows95の「エクスプローラー」で見たところを示します.なお,MS-Winodws3.1が入っていた時に,DOS領域にUMSDOSを入れましたが,全く問題なくインストールできました.今,話題のWindows95とは違った,そしてより軽い本格的な32ビットシステムが待っております.まだの方,これを機会に導入しましょう.そして,これは使えると感じたならば,本格的にパーティションから切り直して導入をしましょう. *********** list 1 start ****** リスト1. UMSDOSのブート,ルート用ディスクの作成 持っているCD-ROMにより以下のIDECDを対応する名前に変えて下さい. C:\GZIP IDECD.GZ <-- 圧縮されている場合 C:\GZIP UMSDS144.GZ <-- 圧縮されている場合 C:\RAWRITE IDECD A <-- 順番に入れる文字 C:\RAWRITE UMSDS144 A <-- 順番に入れる文字 ******** list 1 end ********* ********** list 2 start ********* リスト2. インストール手順 1. ブートディスクからコンピュータを立ち上げる 2. すぐにメッセージがですのでそのまま,リターンを押す 3. しばらくすると,ルートディスクに入れ換えろと言うメッセージが出るので,入れ換える 4. 「slackware login:」と表示されたら,rootと入れる 5. setupといれて,インストーラを起動 6. メニューに従いインストール ********* list 2 end ********** ******** figure 1 start ******** 図1 DOSの領域にインストールされたLinux(UMSDOS) ***(umdos.tif):UMDOS.TIF ********** figure 1 end ******** 2. Linuxをインストールしたマシンにログインする すこし,家庭内のコンピュータをつなげることを考えましょう.はじめに,Linuxがインストールされたマシンに,RS-232Cケーブルをつなげて,別のマシンからログインする方法を紹介します.こればネットワークではありませんが,使わなくなった古いマシンを端末としていかすことができます.まあ,そのような実用性は考えずとも,他のマシンからログインできることは,なかなか楽しいものです. 用意するものは,Linuxがインストールされたマシン(当たり前ですね)と,もう一台の端末用のマシンです.筆者はエプソンのPC286VSを用いました.現役を退き,ごくたまにしか,電源が入れらないマシンです.それと,RS-232Cのクロスケーブルが必要です.このケーブルは普通のPC98用に販売しているものでも,使用可能です.次回に述べる予定のLinuxマシン同士をシリアルラインで結ぶ場合はPC98用のケーブルは使えません.結線が一部省略してあるようです.LinuxがインストールされたPC/AT互換機のRS-232CはDOSでいうCOM2につなげます.PC98とはコネクタの形状が違います.変換ケーブルも用意する必要があるでしょう.エプソンのPC286VSはRS-232Cが一つしかありませんから,迷いません.ログインをするためのソフトとして,PC286VS用にHTERMを用いました.または,WTERMでも使用できます. 端末用のマシンの通信条件を表1のよう設定します. Linuxマシンの設定は表2に示すファイルを編集設定します.これからの作業はスーパユーザになって,行なって下さい.必要なファイルがインストールされてかの確認をします. # ls /sbin/uugetty として,ファイルがあれば,そのまま作業を続けます.なければ,インストールの時に入れるのを忘れたのでしょう. CD-ROMのslakware/a1 の下にある getty.tgz をpkgtoolでインストールして下さい.その後,表2のファイルをリスト3のように編集します.そして,スーパユーザになって, # init q として下さい.少ししてから,ps とすると 68 v02 S 0:00 /sbin/agetty 38400 tty2 69 v03 S 0:00 /sbin/agetty 38400 tty3 70 v04 S 0:00 /sbin/agetty 38400 tty4 71 v05 S 0:00 /sbin/agetty 38400 tty5 72 v06 S 0:00 /sbin/agetty 38400 tty6 118 s01 S 0:00 /sbin/uugetty ttyS1 DT9600 vt100 の様に,uugettyが作動します.この状態で,RS-232Cでつながれた端末用マシンを見ると,ログイン用のメッセージが表示されているはずです.端末用のマシンに電源が入っていない場合は,電源を入れて,HTERMを立ち上げて下さい.その時点でメッセージが表示されるはずです.いかがですか.端末からログインをして,Linuxマシンを使うのもなかなか面白いものです.ただ,うっかり「startx」等とX Windowを立ち上げないで下さい.端末用のマシンではXは上がりませんが,Linuxマシンの上でXが上がってしまいます. ***** 表 1 端末用マシンの通信条件設定 Baud Rate 9600 8 Bits, No Parity 1 Stop Bit Xon/Xoff **************** ******************** 表2 外からログインできるように設定するファイル /etc/inittab /etc/gettydef /etc/defaluts/uugetty.ttyS1 **** end table ** *********** /etc/inittab,/etc/gettydef,/etc/defaluts/uugetty.ttyS1 それぞれをリスト3のように編集します. ****** リスト 3 外からログインできるように設定するファイルの編集 /etc/inittab 前略 # for 'getty_ps' you use line, linespeed and also use 'gettydefs' c1:12345:respawn:/sbin/agetty 38400 tty1 c2:12345:respawn:/sbin/agetty 38400 tty2 c3:45:respawn:/sbin/agetty 38400 tty3 c4:45:respawn:/sbin/agetty 38400 tty4 c5:45:respawn:/sbin/agetty 38400 tty5 c6:456:respawn:/sbin/agetty 38400 tty6 ############### Serial line for other PC login on RS232C cross cable S1:456:respawn:/sbin/uugetty ttyS1 DT9600 vt100 <- 追加 後略 /etc/gettydef 前略 # default/virtual console entry: # vc# B9600 SANE # B9600 SANE -ISTRIP CLOCAL #@S login: #vc # Add here DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600 <- 追加 # Modem locked at 38400: # 38400# B38400 CS8 CRTSCTS # B38400 SANE -ISTRIP CRTSCTS #@S login: #38400 後略 /etc/default/uugetty.ttyS1 CLEAR = NO HANGUP=YES #DEBUG=777 DEBUG=010 #INIT="" ATS0=1\r OK # Comment out 1995.12.01 ALTLOCK=cua1 ALTLINE=cua1 #WAITFOR=RING #CONNECT="" ATs0=1\r CONNECT \s\A TIMEOUT=60 ************* end list ** ****** 3. Mathematicaの試用記 3-1. ついに,Linux上で作動するMathematicaが発売されました.幸いにも,日本電子計算(株)の好意でデモ版をお借りすることができました.X Front Endが付いた版でしたので,MS-Windows版と同じ感覚で使うことができます. 3-2. 必要なハードディスク容量は,インストールするのに30M,インストール後は20M.さらに,X Front Endを入れるときは,インストールするのに7.5M,インストール後は3Mの容量が必要です.X Front Endを使うときはファイルマネージャtwmとの相性が悪いとマニュアルに書いてありました.Linuxのslackware版を入れた場合は,特に設定を変えなければfwmが使用されますが,twmが好みの方は注意をしてください. 試用したMathematica for Linuxはカーネルバージョン1.1.73で作成されておりました.パーソナルコンピュータ上のMathematicaとはいえ,unixバージョンですから,ハードウエアの更新時にはパスワードの再発行手続きが必要になります.残念ながらサウンド機能はサポートされていません. 3-3. インストール Mathematica用のディレクトリ/usr/local/mathを作り、tarコマンドで展開をします。その後、mathinfoコマンドを実行して,パスワードの発行に必要な情報を記録します.その情報を購入元へ連絡をして,パスワードを得ます.その後は,math.installとxfe.installを実行し,質問に答えていくだけです.実に簡単にインストールできました. 3-4. 使用例 実行例は筆者らの「パソコンによる数式処理ソフト活用法」から一部引用をします.mathematicaの実行方法は2種類あります.X Fornt Endを使わない場合は,ktermまたはxtermから'math'と入力します.X Fornt Endを使用する場合は'mathematica'と入れます.はじめに,2次関数とそれの微分をグラフに表す例や3次元グラフを,図3-1,2,3に示します.図3-1と2を描くためには図3-3のように実行をします. 図3-1. 2次関数のグラフ *** (fig3-1.tif) 図3-2. 波の干渉 *** (fig3-2.tif) 図3-3. ktermから'math'の実行例 *** (fig3-3.tif) 次に,X Front Endを用いて図3-4のような電気回路を解いて見ましょう.ktermまたはxtermから'mathematica'と入れます.図3-4のように電流i1,i2,i3をとると,キルヒホフの法則より i1 + i2 + i3 = 0 R1 i1 - R2 i2 = E1 - E2 R1 i1 - R3 i3 = E1 の連立方程式になります.これをSolve[]を用いて解くと,図3-5のようになります.ここで,X Front Endを用いる時には,入力の終了時に[shift]+Enterを押します. 図3-4. 電気回路 キルヒホフの法則 *** (fig3-4.tif) 図3-5. Mathematicaで解いた結果 *** (fig3-5.tif) では,微分方程式を解きましょう.LR回路に直流電圧を加えた時の電流iの変化を表す方程式, L di/dt + Ri = V を,DSolve[]で解き,電流iの時間変化をグラフにしたものを図3-6に示します.これは,前述の「パソコンによる数式処理ソフト活用法」では,粘性を持った流体中の落下運動,すなわち,空から降って来る雨滴の落下の様子で示しました. 図3-6. LR回路の解 *** (fig3-6.tif) 少し,遊びましょう.地図を描きます. 普通の地図ならばどこにでも載っておりますが,図3-7のような地図はまずないでしょう.WorldRotationの値を変えて,いろいろな場合を楽しんで下さい. 図3-7. 北半球の地図 *** (fig3-7.tif) 最後に,複素数の取扱を例示するのに,交流回路の扱いましょう.図3-8に示す直列回路の周波数特性を求めます.この回路の交流インピーダンスは j2= -1 として, Z(ω) = r+ jωL + 1/(jωC) ですね.ここでは,X Front Endを使わないでコンソールからmathematicaを使いました.図3-9のようにKtermから入力します.結果は図3-10のグラフが得られます.ωが1000 rad/s のところでインピーダンスが最小値をとっています. 図3-8 交流RLC直列回路 *** (fig3-8.tif) 図3-9 複素数の取扱 *** (fig3-9.tif) 図3-10 インピーダンスの周波数変化 *** (fig3-10.tif) さて,Mathematicaの紹介も兼ねて,ごく簡単にLinuxバージョンを見て来ました.試用した感想を言いますと,スピードはMS-Windows3.1で使っていたのとほぼ同様,決して速くはありません.しかし,自分のしたい仕事をプログラムなどを考えることなく,そのままできる点を考慮すれば,トータルな開発研究に使う時間は短くなるでしょう.そして,Mathematicaを使うために,MS-Windowsを起動し直したり,Sunのワークステーションの所へ出かける必要がないのが,何よりです.しかし,いくつか残念な点もあります.途中で,カーネルをバージョンアップしたら,作動しなくなりました.バージョンを元にもどすと,動きます.カーネルを換えるとパスワードの再発行が必要のようです.頻繁にカーネルを換える人には,つらいですね.それから,MS-Winodws版も含めて,値段がもうすこし,下がると良いのですが. コラム ------------------------------------------ Mathematica for Linuxの入手情報 連絡先: 東京都江東区東陽2-4-24 日本電子計算株式会社 科学技術事業部 製造技術営業部 電話: 03-5690-3205 FAX: 03-5690-3227 E-Mail: math@sci.jip.co.jp 価格: 一般 \180,000 教育機関 \145,000 ------------------------------------------- 参考文献 臼田,井上,伊藤:パソコンによる数式処理ソフト活用法,CQ出版(1994) 4. パスカル p2c と GPC と ベーシック basic さて,先月はマトリックス状に並んだデータをMuleを使って編集をし,gnuplotで等高線を表示しました.先月の例では19行9列のデータでしたから,編集もそれほど大変ではありませんでした.しかし,データ量が多くなるとそうはいきません.そこで,プログラムを使って,データを加工しましょう. はじめに,パスカルを紹介します.Linuxで手軽に利用できるパスカルはp2cとGPC(Gnu Pascal Compiler)です.インストールが済んでいない方は入れましょう.いずれも,slackwareに入っております.リスト3にディレクトリを示します. 先程の,マトリックスデータをgnuplotで表示する形式に変換するには,図2のようにデータの並びを1列にします.パスカルではリスト4の様にread文でコンマや空白で区切られた数値を1つづつ読み取っていきます.それを順番に1行に1つのデータを書き出します.1行のデータが終ると,空白の行を入れて,次の行のデータを書き込みます. ここで,p2cを用いる場合はcに変換をし,gccでコンパイルをします.手順はリスト5に示します.途中で,作られたconvdata.cをリスト6に示します.gpcを使う場合はgccと同じようオプションを付けないとa.outの実行ファイルができます.パスカルであることを意識せずに使用できますね. あとは,先月のデータをリダイレクトリを使ってgnuplotでのデータに変換をします. % convdata < electric.dat > gnu-ele.dat さきほどのデータ変換ぐらいならば,パスカルを使わなくてもCで,とお考えの方もおられるでしょう.しかし,人により得意な(プログラムをするのが楽な)言語は違います.自分が一番楽な言語でデータ処理をすれば良いのではないでしょうか.そのような訳で,次にbasicを紹介します.高等学校の数学の教科書にbasicは登場します.さて, % which basic として見て下さい. /usr/bin/basic と表示されますね.p2cをインストールするとパスカルで書かれたbasicの一緒にインストールされます.ソースは /usr/doc/p2c/basic.p です.67Kぐらいのファイルです.眺めると参考になるかも知れません.さて,basicを実行して見ましょう.コンソールまたは,KtermやXtermの中で % basic とすると,図3のように,'>'マークが出ます.ここに,ベーシックの命令を打ち込んで,実行します.図3はfor文でiを1から20まで2とびで,iとiの2乗から4乗までを計算するプログラムです.さらに,saveコマンドでセーブして,再び読み込む様子を示しました.昔作ったN88BASICのプログラムをそのまま読み込んで実行させましたが,グラフィック命令以外はほとんど通りました.なお図3でセーブした "test は 'test.TEXT'としてセーブされております.このbasicで使用できるコマンドや命令をリスト7に示します. ****** list 3 start ******** リスト3 p2cとGPC(Gnu Pascal Compiler)のあるディレクトリ 展開後の容量 p2c slakware/d2/p2c.tgz 730K GPC slakinst/contrib/gpc-1.1p2.tgz 2380K *********** list 3 end **************** **** figure 2 start ************* 図2. マトリックスデータからgnuplotデータへの変換 マトリックスデータ gnuplotデータ 19.000000 9.000000 0.089 0.089 0.125 0.238 0.449 0.691 0.918 0.125 0.053 0.086 0.189 0.433 0.699 0.941 => 0.238 0.047 0.022 0.000 0.039 0.730 0.101 0.449 0.691 . . . ******* figure 2 end **************** ************* list 4 start ********* リスト4. マトリックスデータからgnuplotデータへの変換 convdata.ps program conver(input,output); var a,b,tmp : real; i,j: integer; begin read(a);read(b); <-- 行と列の数を読む for i := 1 to trunc(a) do begin for j := 1 to trunc(b) do begin read(tmp); writeln(tmp) <-- 空白で区切られたデータを読み,1行に書き出す end; writeln; <-- 1行のデータが終る毎に空白行を入れる end; end. ******** list 4 end *********** ******** list 5 start ****** リスト5. p2cとGPCの使用法 p2cの使用法 % p2c convdata.pas これで,convdata.cが作られる % gcc -o convdata convdata.c -lp2c 変換されたconvdatat.cをgccでコンパイルします.ライブラリにp2cを指定します 実行ファイル convdata が作られます % gcc -o convdata convdata.c -lp2c -lm convdata.pasが数学関数(三角関数など)を用いている場合は「-lm」オプションを付けます GPCの使用法 % gpc -o convdata convdata.pas 実行ファイル convdata が作られます ******* list 5 end ********* ******* list 6 start ******* リスト6. p2cにより作られたconvdata.c /* Output from p2c, the Pascal-to-C translator */ /* From input file "convdata.pas" */ #include main(argc, argv) int argc; Char *argv[]; { double a, b, tmp; long i, j, FORLIM, FORLIM1; PASCAL_MAIN(argc, argv); scanf("%lg", &a); scanf("%lg", &b); FORLIM = (long)a; for (i = 1; i <= FORLIM; i++) { FORLIM1 = (long)b; for (j = 1; j <= FORLIM1; j++) { scanf("%lg", &tmp); printf("% .5E\n", tmp); } putchar('\n'); } exit(EXIT_SUCCESS); } /* End. */ ************* list 6 end ******** ************* figure 3 start ***** 図3. basicの実行画面 ****(basic.tif):BASIC.TIF ************ figure 3 end ******** ************ list 7 start ********** リスト7. basicのコマンドと命令 コマンド LIST, RUN, NEW, LOAD, MERGE, SAVE, BYE, DEL, RENUM 命令 REM comment, [LET] var = expr, DIM var(dimensions), PRINT, INPUT, GOTO, IF THEN ELSE, END, STOP, FOR TO STEP, NEXT, WHILE, WEND, GOSUB, RETURN, READ, DATA, RESTORE, GOTOXY, ON GOTO, ON GOSUB, POKE ************* list 7 end ***************