商用目的であるコンピュータの市場は、 いかに新しいハードウェアとソフトウェアを売るかを探求し続けている ベンダにより大きく動かされています。 再利用を奨めることに、商業的、マーケット的な利益はありません。
Linux は大きなハードウェアを必要としないので、 古くて小さいハードウェアを使うのが好きだとか、 あるいはそうしないといけない場合、極めて便利です。
Linux は Intel の 386 や 486, Pentium, Pentium Pro, Pentium II, そして AMD, Cyrix, その他による互換プロセッサといった、 Intel 互換のプロセッサで動きます。
Linux は 286 CPU ファミリをまだサポートしていません。 しかし、ELKS ( http://www.linux.org.uk/ELKS-Home/index.html http://www.elks.ecs.soton.ac.uk/) に関して若干の動きがあります。
お好みなら、Linux の先祖の一つである Minix を使うこともできます。 Minix は 8088 から 286 までの CPU をサポートし、 640K といった小さなメモリでも動きます。
もちろん、Alpha や PowerPC といった他のシステムへの移植もあります。 Linux Kernel でサポートされているシステムについては、詳しくは Linux FAQ をご覧ください。
(訳注: Linux-FAQ 和訳)
別の選択肢として、高速かつ低電力消費である ARM があります。 例えば、Corel/Rebel の Netwinder は ARM プロセッサをベースとしています。 Rebel と Strong-ARM を参照ください。
ISDN Router を使えば、お持ちの古いハードウェアが、 キャッシング・ネームサーバ、IP ポート・フォワーディング、 オンデマンドのチャネル・バインディング付きの 安全なマスカレード機能付き ISDN ルータに変身します。 システムは一枚のディスクに収まっており、 設定変更はコンソールまたは telnet 経由で シンプルなメニューから行なえ、ディスクに記録されます。
The PingOO ISDN Router は、 486/DX でメモリ 8MB RAM でハードディスク 100 MB といったような、 古くて使い物にならなくなったコンピュータを信頼性の高い ISDN ルータ に変身させるよう設計された、 Debian ベースの Linux ディストリビューションです。 (1 本から 2 本の ISDN チャネルを用いた) オンデマンドの帯域幅対応、保守用のダイヤルイン機能、 ipchains による IP フィルタリング、 LZS 圧縮、LAN2LAN またはシングルホストとマスカレードの接続。 PingOO ISDN ルータは、 PingOO Communication Server と同じ設計思想をもちいています。
Linux FreeS/WAN には、IPSEC (IP セキュリティ、暗号化と認証の両方から成ります) を 提供するカーネル拡張、 IKE (インターネット鍵交換 (Internet Key Exchange), キーリングと 暗号化ルーティング・デーモン)、いろんな起動用 rc スクリプトと文書 が入っています。 古い 586 や 486 PC クローンのマシンでさえも、 システム管理者お手製のすてきな VPN ゲートウェイにしてしまいます。 バージョン 1.00 の時点で、 OpenBSD のように、他のベンダによってすでに実用されている 他の IPSEC, IKE システムとうまく協調動作することが知られています。
プリンタ・サーバを動かしておく、 これが古いコンピュータの一般的な使い方というものでしょう。
この章は私の Laptop-HOWTO から取ってきたものです。
限られたディスクスペース、メモリ、CPU 速度、 バッテリ駆動といった条件でやっていくためにこの章を書きました。
ディスク・スペースを稼ぐには、 冗長スペースや未使用スペースの解放、 ファイルシステムのチューニングや圧縮といった いろいろなタイプのテクニックがあります。
注意: 以下に述べるテクニックには、 ディスク・スペースの代りにメモリを使ってしまうものもあります。 お分かりの通り、 スペースを空けるには小さな段階を数多く踏まないとなりません。
man strip
を見てください。
ストリップされていないファイルをすべて見つけるには、
file
コマンドか、もっと便利なツール findstrip
があります。
注意: ライブラリをストリップしてはいけません。
悪いプログラミング技術のせいで、
間違ったシンボルが除去されてしまうことがあります。
Russell Marks <rus@beeb.net> からのお奨め:
最近 -g
付きでコンパイルする人がとても多くて、
個人的にはちょっとうんざりします
(私の知る限り、実際にはディスクを食うだけみたいですが)。
strip
には、シンボルは strip しないが
デバッグ用データは取り除いてくれる --strip-debug
オプション
があります。
たいていの場合はほぼうまくいきますし、ライブラリにやっても大丈夫です。
最近たまたま SuSE 6.3 を手に入れたので、
生の実行例をお目にかけることができます:
bash-2.03# cd /lib bash-2.03# ls -l libc.so.6 -rwxr-xr-x 1 root root 4223971 Nov 6 16:22 libc.so.6 bash-2.03# strip --strip-debug libc.so.6 bash-2.03# ls -l libc.so.6 -rwxr-xr-x 1 root root 1200355 Dec 8 00:13 libc.so.6
zum(1)
は標準入力からファイルのリストを読んで、これらのファイルを
「穴あけ」(perforate) しようとします。
ヌル・バイト (0 になっているバイト) の連続部分を、
lseek
で置き換え、
これらの「空き」バイトに対して実際のディスク・スペースを割り当てないで
済むようにしてくれます。
例: find . -type f | xargs zum
(訳注: lseek(3)
とは,
ファイルを読み書きするファイル・ポインタを任意の場所に動かす
UNIX のシステム・コールです。
一般に UNIX では、存在しない(実際に物理的にファイルが存在しない)
位置に対しても lseek
できてしまいます。これを活用(悪用?)すると、
「不要な」部分には物理的なディスク空間を割り当てていない、
ディスク上の物理的なサイズよりも
論理的なサイズが大きいファイルを作れてしまいます。
こういったものを sparse なファイルといいます)
patch
のリカバリ・ファイルがないかシステムをチェックしてみましょう。
重複を見つけるには finddup
を試してみましょう。
バックアップやテンポラリ、テストに使うファイルを名付けるときの規則を
考えておきましょう。
例えば、ファイル名の終りに一定の名称をつけるなど。
tmpwatch
というツールがあったりもします。
savelog
などの良いツールがあります。
binstats
パッケージが使えます
(Tom Ed White に感謝)。
rsfs
(Reiser Filesystem とも呼ばれる) といった、
ディスク空間を経済的に扱うファイル・システムを選びましょう。
ファイルシステムを tune2fs
などでチューンしましょう。
適切なパーティション・サイズ、ブロック・サイズを使いましょう。bzImage
を作る。両方やっても構いません。gzip
で圧縮して、
必要に応じてその場で展開できるはずです。
いくつかのファイルだけを圧縮する手もあります。
zexec
を使えば、圧縮されたファイルを実行することすらできます。
(訳注: gzexe
も同様のツールで、gzip と一緒に配布されています)e2fs ファイルシステムの場合、圧縮バージョン e2compr
も利用可能です。
http://debs.fuller.edu/e2compr/ を参照。
DMSDOS で、Windows95 の圧縮ドライブ (drivespace, doublestacker) にアクセスできるようになります。 DOS/Windows95 との互換性が必要ない場合、言い換えれば Linux でのみ使う場合は、 本当にガッカリな代物だとプログラムの作者自身言っています。 http://fb9nt-ln.uni-duisburg.de/mitarbeiter/gockel/software/dmsdos/ 参照。
mount
参照).
MS-DOS や Windows95 の圧縮ドライブ (doublespace, drivespace)
をマウントするには dmsdos
http://metalab.unc.edu/pub/Linux/system/filesystems/dosfs/
を使えます。libc5
を使ってみます。
このライブラリは libc6
、またの名を glibc2
よりも小さいようです。
hdparm
というツールを使えば、
ハードディスクの性能が向上するよう設定できます。
ストライピングを有効に設定してある
ラップトップのディスクを見たことがありますが、
私にはそうする理由がわかりませんでした。
私見では、RAID0 とも呼ばれるストライピングというものは、
性能向上のために少なくとも別のディスクを必要とするからです。
メモリ消費量を free
や top
で調べましょう。
Mergemem Project.
オペレーティング・システムに検出されないままの
中身が一緒のメモリ・エリアを含んでいるプログラムは多くあります。
プログラムの起動の際に生成され、長い期間変更されないまま残っている
データを含んでいるというのがよくある例です。
mergemem
を使えば、こういったエリアを検出し、共有できます。
共有はオペレーティング・システムのレベルで実行され、
ユーザ・レベルのプログラムには見えません。
mergemem
は、
その実行コードをプライベートなデータ・エリアにしまっておく
インタプリタやエミュレータ (Java とか Prolog など) の
インスタンスをいっぱい実行する時に特に便利です。
とはいえ、他のプログラムでも、程度こそ少ないものの、
その恩恵にあずかることはできます。
あなたの要求に必要ない機能をすべて除去し、 カーネルをできる限りモジュラー化すれば、カーネル・サイズ を小さくできます。
要らないサービスやデーモンを止める、例えば
lpd
, mountd
, nfsd
を止めたり、
仮想コンソール を何個か閉じてしまう、といったこともできます。
詳しくは Small-Memory-mini-HOWTO
(訳注:
Small-Memory-HOWTO 和訳)
をご覧ください。
もちろん、使えるならスワップ領域を使いましょう。
他のマシンのリソースだって使えます。
例えば X や VNC, telnet
だってそうです。
Virtual Network Computing (VNC) に関しては
http://http://www.uk.research.att.com/vnc/ を見てください。
あなたは CPU をクロック・アップしたいのかもしれませんが、 ハードウェアにダメージを与えるかもしれませんし、 私はそのへんの経験がありません。 例えば Adorable Toshiba Libretto - Overclocking http://www.cerfnet.com/~adorable/libretto.html を見てみてください。
まだちょっとしか集まっていません。もっと情報を探しています.
boa
はシングル・タスクの HTTP サーバです。
伝統的な Web サーバとは異なり、
やってくるコネクションごとに fork したりしませんし、
複数のコネクションを扱うために自分自身を多数 fork したりもしません。
内部的には、進行中の HTTP コネクションを多重化して扱っており、
CGI プログラム (別プロセスに成らざるを得ない) に関してだけ fork します。
予備試験の結果は、
100MHz Pentium マシンで毎秒何百ものヒットをハンドリングできることが
わかった、というものでした」
fdisk
と mkfs.ext2
が入っているので、
ハードディスクへのインストールが可能です。
4MB 以下しかメモリを積んでいないような古いマシンで立ち上げるのに便利です。
screen
- 小さくてもパワフルなコンソール・マネージャです。
John M. Fisk <fiskjm@ctrvax.vanderbilt.edu> は
LINUX GAZETTE 1996 年 7 月 1 日号に書いています:
「あぁ、世はなべて GUI, GUI, GUI, GUI ばっかり!
メジャーな OS 製造業者たちもそう信じさせようとしている。
その傾向は確かにますます増えている。けれども、
コトを片付けるのにはコマンド・ライン・インタフェース (CLI) のほうが実にいい、
ということもまだまだある、これが真実なのだ。
早いし、一般に効率的だし、
メモリや CPU が限られているマシンにはいいチョイスだ。
そして、実に多くの気の効いたことが
コンソールで済ませられる、ってことも忘れちゃいけない」
「screen
は、複数のプロセス、典型的には対話的なシェル間で
物理的な端末を多重化してくれる、フル・スクリーンのウインドウ・マネージャです。
それぞれの仮想端末は DEC VT100 ターミナルの機能、
加えて ANSI X3.64 (ISO 6429) と
ISO 2022 スタンダード (例えば行挿入/削除、複数キャラクタ・セットのサポート)
からの若干の制御機能を提供してくれます。
他にも本当のマルチユーザのサポート、
スクリーン分割、ハード・ステータス・エミュレーション、
設定可能なウインドウ・セパレータとハードステータス文字列、
常駐ウインドウ・セパレータ、多数の新しいエスケープ・シーケンス、
ログ・ファイルのタイムスタンプとフラッシュ・タイムアウト、
内蔵 telnet (オプション)、Braille 点字端末サポート (オプション)、
ヒストリ圧縮などがサポートされています」
ニッカド電池は、メモリ効果を防ぎ、寿命を延ばすためには 定期的に放電する必要があります。
ニッカド、アルカリ、NiMH といった種類の電池には 有毒な化学物質が含まれています。 技を使ってなるべく寿命を延ばして使うべきですし、 廃棄する際はリサイクルすべきです。ゴミ箱に放り投げてはいけません。
N.N. で触れられている「Iron」バッテリは チェックすべき技術といえましょう。 使用済み電池に係わる有毒廃棄物の問題を 減らすことができるかもしれないのですが、 こういった電池はおそらく数年前のものでしょう。
ラップトップ・マシンのバックライト、モニタ (スクリーン・セーバ)、 ハード・ディスク (hdparm) などについても所感を書かないといけません。
BadRAM Patch の目的は、 壊れた RAM モジュールでも Linux カーネルを動くようにすることにあります。 壊れた RAM には、ある(既知の)メモリアドレスにおいて、誤ったビットが発生します。 普通は、そういった RAM は使い物にならないので、捨てられます。 おおきな RAM ほど、エラーになるアドレスの確率も大きいものです。 壊れたメモリチップに対して、捨てる以外の別の手があるというのは、 大きいサイズのメモリほど、楽しいものです。
George White <gwhite@bodnext.bio.dfo.ca> のご好意で転載します:
UNIX が付属していて、幅広いオープン・ソース・ソフトウェアを走らせられる 古いコンピュータ (SGI, Sun, NeXT など) を買うのもいいでしょう。 今でも現行の OS のバージョンを動かせるもの (SGI Indigo2) もありますが、 さもなくば、Linux のようなオープン・ソースな OS でいったほうがいいでしょう。 どっちの場合でも、自分自身のソフトを書くための 良いソフトウェアやツール群に手が届くわけです。
古いコンピュータでの消費電力の低減には、 UPS が作動した際のバッテリ駆動時間が長くなるとか、 「メイン」電源につなげない場合でも、もっと別の小さな電源供給源を使える といった意味があります。