【和訳】Linux kernel INSTALL-0.10

white_kitten_playing_small_ball Linux
white_kitten_playing_small_ball
記事内に広告が含まれています。

Linux kernel INSTALL-0.10

RELNOTES-0.01 の和訳を投稿してから、RELNOTES-0.01 ~ 0.12 の間の資料がないか調べてみました。すると、Google Source に v0.10、v0.11 の資料を見つけました。

残念ながら、v0.02、v0.03 の資料はありませんでした。

v0.10 の場合は Release Notes ではなく、INSTALL-0.10 という Linux Ver.0.10 を PC にインストールする方法が記載されているファイルでした。

初期の Linux のインストール方法について、雰囲気だけでも味わってもらえたらと思い和訳してみました。今回はセクション分けされていませんので、一定の区切り毎に引用元の英文と和訳を載せて、私のコメントを付加します。

前回 の RELNOTES-0.01 の和訳へのリンクです。

使用したサービス

RELNOTES-0.01 の時と同様に、以下のサービスを使用して和訳しました。

Shaper : 英文の改行・空白を除去する

DeepL 翻訳 : 高精度な翻訳ツール

Google 翻訳 : Google の翻訳サイト

手順も変更ありません。

  • 段落毎に Shaper で空白を除去
  • 主に DeepL 翻訳、副に Google 翻訳を使用
  • 元の英文と比較して内容を確認
  • 最終的に括弧等の記号の全角 -> 半角、用語の統一、レイアウトなどを調整

という手順です。

Linux kernel INSTALL-0.10 和訳

原文は下記のリンク先にあります。

NetNews に投稿した内容も含まれますが、INSTALL-0.10 の部分のみの和訳です。適宜分割して引用します。

タイトル ~ 序文 : 原文
<INSTALL-0.10>

Warning: I have personally not done this the hard way, so I don't know
what problems could surface.  In general, this version is still meant
for people with minix: they are more used to the system, and can do some
things that DOS-based persons cannot.  If you have only DOS, expect some
troubles.  As the version number suggests, this is still not the final
product.

This is a "fast hack", meant as a minimal guide to what you must do.
I'll expand this as soon as people tell me what they have problems with
etc etc.  If somebody who has successfully installed the system wants to
write something better, I'd be delighted.  This guide stinks to high
heaven.
タイトル ~ 序文 : 和訳
<INSTALL-0.10>

警告 : 私は個人的にこの難しい方法を実行したことがありませんので、どのような問題が表面化するかわかりません。一般的に、このバージョンはまだ minix を持っている人向けです : 彼らはよりシステムに慣れていて、DOS ベースの人にはできないことができます。DOS しか持っていない人は、何らかのトラブルが発生することが予想されます。バージョン番号が示すように、これはまだ最終製品ではありません。

これは "速攻ハック" であり、あなたがしなければならないことの最小限のガイドという意味です。問題点などを教えてもらえれば、すぐにでも改良するつもりです。インストールに成功した人が、もっといいものを書いてくれたら大歓迎です。このガイドは天にも昇るほどひどいので。

linux-0.10 も、当時は compress で圧縮されていましたが、現在残っているのは gzip 圧縮のファイルでした。linux-0.01 と linux-0.10 を比較してみました。

【訂正】linux-0.10 には RCS や backup file が多く含まれていましたので除外しました。

Ver.0.010.10
compressed
kernel size (gz)
73 kB95 kB
kernel sources size285 kB376 kB
number of files88102
Linux kernel Ver.0.01 vs. 0.10

kernel ソースのサイズもファイル数も 1.2 ~ 1.3倍に増加しています。

この時期の文書は日付が書かれていないので時期は分かりませんが、Linus Torvalds 氏が linux-0.01 を数人の友人に公開したのは 1991年9月17日との事です。

linux-0.02 の公開が 1991年10月5日、linux-0.10 の公開が 1991年11月 (日付不明) との事ですので、凡そ2カ月の間で成長している事が分かります。

【追記】原文のリンク先の author 欄の日付は正確なようです。linux-0.10 は 1991年11月4日でした。

$ ls -l linux*gz
-rw-r--r-- 1 hiro hiro 123051 Dec  4  1994 linux-0.10.tar.gz
-rw-r--r-- 1 hiro hiro  95373 Feb  2 19:45 linux-0.10_remove_RCS.tar.gz

$ du -sb linux-0.10_remove_RCS
375731  linux-0.10_remove_RCS

$ find linux-0.10_remove_RCS -type f | wc -l
102

$ tree -d linux-0.10_remove_RCS
linux-0.10_remove_RCS
├── boot
├── fs
├── include
│   ├── asm
│   ├── linux
│   └── sys
├── init
├── kernel
│   ├── blk_drv
│   └── chr_drv
├── lib
├── mm
└── tools

14 directories

$ head -n 3 linux-0.10_remove_RCS/kernel/Makefile
#
# Makefile for the FREAX-kernel.
#

v0.10 でも、kernel/Makefile には "FREAX" の文字が残っています 🙂

linux-0.10 の頃は RCS でバージョン管理していたようです。上記の検証では除外しました。

RCS とは、Revision Control System の略で、テキストファイルの変更履歴を管理するためのツールです。RCS は1980年代に開発され、UNIX や Linux などのシステムで広く使われていました。RCS は、ファイルごとに変更履歴を保存する方式で、複数のファイルをまとめて管理することはできませんでした。また、ネットワーク上のリポジトリにアクセスすることもできませんでした。現在は Git が主流ですね (これも Linus Torvalds 氏が開発しました)

Minix については RELNOTES-0.01 の和訳 に記載しました。

DOS とは、ディスクオペレーティングシステム(Disk Operating System)の略称で、磁気ディスク装置を使用可能としたオペレーティングシステムの通称です。DOSには、パーソナルコンピュータ (PC) 用の PC DOS や MS-DOS などがあります。MS-DOSは Microsoft が開発した DOS で、Windows の先輩にあたります。Windows が普及するまでは、MS-DOS がパーソナルコンピュータの主流のオペレーティングシステムでした。DOS はコマンドラインインタフェース (CLI) を採用しており、ユーザーはキーボードでコマンドを入力して操作します。

NEC が開発した PC-98 シリーズも MS-DOS を使用していました。私と同年代の方であれば、MS-DOS 上で動作するワープロや表計算のソフトウェアを一度は使用した事があるかと思います。

私の PC のスタートは PC-8801 MH ですので N88-Basic が初めて触れた環境です。その後 PC-9801 DS で MS-DOS を使い始め、FreeBSD (98) を経由して IBM PC/AT 互換機で Linux という流れです。

未だに Windows でも cmd.exe で CLI を使う事があります。コマンドライン好きなんですよね。

本文1 : 原文
		Installing Linux-0.10 on your system

There are 5 major steps in installing linux on your system:

1 - BACK UP ANY IMPORTANT DATA.  Linux accesses your hardware directly,
and if your hardware differs from mine, you could be in for a nasty
surprise. Doublecheck that your hardware is compatible: AT style
harddisk, VGA controller. (If somebody has EGA, please tell me if the
screen driver should happen to work)

2 - Make a file-system on your harddisk.  This is easy if you have
minix, but if you haven't got minix, you'll have to get the minix
demo-disk from somewhere (plains.nodak.edu is one place), and use that.
There should be a manual accompanying the demo-disk, and you had better
read that carefully.  Although this version of linux will boot up
without minix, a knowledge of minix would help.  Especially if you have
never done any unix work, you'll be very confused.

Making a filesystem means getting a empty partition (with DOS fdisk or
similar), and using the 'mkfs /dev/hdX nnn' command to write out a empty
file-system.
本文1 : 和訳
Linux-0.10 をあなたのシステムにインストールする方法

Linux をシステムにインストールするには、大きく分けて5つのステップがあります :

1 重要なデータのバックアップを取ってください。Linux はハードウェアに直接アクセスするので、もしあなたのハードウェアが私のハードウェアと違っていたら、思わぬことになるかもしれません。あなたのハードウェアに互換性があるかどうか再確認してください : AT型ハードディスク、VGA コントローラー。(もし EGA を持っている人がいたら、スクリーンドライバが動くかどうか教えてください)

2 ハードディスクにファイルシステムを作ります。minix を持っていればこれは簡単なことですが、持っていない場合は、どこかから minix のデモディスクを入手して (plains.nodak.edu がそのひとつ)、それを使う必要があります。デモディスクにはマニュアルが添付されているはずなので、それをよく読んだ方がいいでしょう。このバージョンの linux は minix を使わなくても起動しますが、minix の知識があれば役立ちます。特に unix の作業をしたことがない人は、とても混乱するでしょう。

ファイルシステムを作るとは、(DOS の fdisk などで) 空のパーティションを用意し、"mkfs /dev/hdX nnn" コマンドを使って空のファイルシステムを書き出すことです。

5つのステップがあるといいつつ、実は 6つあります 🙂

第1ステップは今でもよく言われる「バックアップとってね、消えてなくなるからね」という注意事項と、ハードウェアの互換性の確認です。RELNOTES-0.01 では EGA に対応、と書かれていましたが、実は確認してなかったのですね。動作したら教えてくださいと書かれています。

第2ステップはファイルシステムの作成についてです。'mkfs' について言及されていますが、"minix をもっていれば簡単なこと" と書かれている事から、Minix 上の mkfs の事だと推測します。DOS だけの知識だと難しいと書かれている理由がこの辺りにあります。

MS-DOS の場合は、format コマンドでファイルシステム (当時だと fat12 か?) を作成していました。ドライブレター ("D:" 等) を割り当てて、フロッピーディスクなら A と B、ハードディスクは C、など、ある程度固定されていました。

そのような世界しか知らない人が、いきなりファイルシステムを作ってマウントして…となれば混乱して当然だと思います。

本文2 : 原文
3 - copy the diskimages to two floppies. Again, under minix (or any
unix), this is easy, as you can just do a simple 'dd' to a floppy, but
from within MS-DOS this might be a bit trickier. 'debug' should be able
to write diskettes directly, or you could get the sources to "raw-write"
from the same place as you got the minix demo disk, and modify them to
write out any disk image (or do they do that already?).

NOTE! The floppies MUST be of the same type: even though the boot-image
will fit nicely on a 360kB floppy, you have to write it to the same type
of floppy as the root-image. That means a 1.2M or 1.44M floppy. The
reason is that the floppy-type is determined at boot-time from the
boot-floppy. Thus the same binary works on both 3.5" and 5.25" drives.

4 - boot up from floppy. This should be obvious. Having a floppy as
root-device isn't very fast (especially on a machine with less than 6MB
total ram -> small buffer cache), but it works (I hope). Test the
programs on the root-floppy (cat mkdir etc).
本文2 : 和訳
3 ディスクイメージを2枚のフロッピーにコピーします。これも minix (または他の unix) では、フロッピーに単純に 'dd' するだけなので簡単ですが、MS-DOS 内ではちょっと難しいかもしれません。'debug' は直接ディスケットを書き込めるはずですし、minix のデモディスクを入手したのと同じ場所から "raw-write" のソースを入手して、どんなディスクイメージでも書き出せるように修正することもできます (あるいは、すでにそうなっているのでしょうか)。

注意!フロッピーは同じタイプでなければなりません : ブートイメージが 360kB のフロッピーにうまく収まるとしても、ルートイメージと同じタイプのフロッピーに書き込まなければなりません。つまり、1.2M か 1.44M のフロッピーです。その理由は、フロッピーのタイプはブート時にブートフロッピーから決定されるからです。したがって、同じバイナリは 3.5 インチと 5.25 インチの両方のドライブで動作します。

4 フロッピーから起動します。これは当然ですね。フロッピーをルートデバイスにするのはあまり高速ではありませんが (特に RAM の総容量が 6MB 未満のマシンでは)、うまくいきます (そう願っています)。ルートフロッピー上のプログラムをテストしてください (cat mkdirなど)。

第3ステップは、2枚のフロッピーディスクに bootimage.Z と rootimage.Z を書き込む内容です。確かに unix 系なら dd コマンドだけで済みますが、当時の DOS 環境ではそのようなコマンドはありませんでした。現代なら USB メディアに書き込む Rufus を使って...という内容です。DOS の環境だと uncompress するのも大変だったと想像します。

最近の方だとフロッピーと言われても知らないでしょうか。自治体では最近まで現役だったようですが。

フロッピーディスクとは、磁気ディスクを使った外部記憶装置の一種です。フロッピーディスクは、円形のプラスチック製の薄いディスクに磁性体を塗布したもので、ディスクドライブと呼ばれる専用の装置に挿入して読み書きします。フロッピーディスクは、パソコンやワープロなどの機器でデータの保存や交換に使われていましたが、現在では容量が小さく速度も遅いため、ほとんど使われていません。

8 inch、5.25 inch, 3.5 inch と徐々に円盤が小さくなりました (私は 5.25 inch から使っていました)。片面のみだったり両面使えたり、高密度タイプがあったりと購入する時にも注意が必要でした。

第4ステップは、フロッピーディスクからの起動です。現在に当てはめると、USB メモリからの起動でしょうか。でも、経験者の方は分かると思いますが、アクセス速度が非常に遅いんですよね、フロッピーディスクって。「ガタゴトガタゴト」いいながら、だいぶ待って起動して、何か実行する度にまた「ガタゴトガタゴト」音がしていたと思います。

本文3 : 原文
5 - Mount the harddisk partition (I do it on /user: ie
'mount /dev/hdX /user'), and copy the file system over to the new
partition. The following is a example of how to do this:

$ cd /user
$ mkdir usr
$ for i in bin etc usr/bin usr/root mtools
> do
> mkdir $i
> cp `ls -A /$i` $i
> done
$ mkdir dev
$ cd dev
$ for i in 0 1 2 3 4 5 6 7 8 9
> do
> mknod 'hd'$i b 3 $i
> done
$ mknod tty c 5 0
$ mknod tty0 c 4 0
$ mknod tty1 c 4 1
$ mknod tty2 c 4 2

You should now have a filesystem you could boot from. Play around a bit,
try to get aquainted with the new system. Log out when you've had
enough.
本文3 : 和訳
5 ハードディスク・パーティションをマウントし (私は /user にマウントしています : つまり 'mount /dev/hdX /user')、ファイルシステムを新しいパーティションにコピーします。以下はその方法の例です :

$ cd /user
$ mkdir usr
$ for i in bin etc usr/bin usr/root mtools
> do
> mkdir $i
> cp `ls -A /$i` $i
> done
$ mkdir dev
$ cd dev
$ for i in 0 1 2 3 4 5 6 7 8 9
> do
> mknod 'hd'$i b 3 $i
> done
$ mknod tty c 5 0
$ mknod tty0 c 4 0
$ mknod tty1 c 4 1
$ mknod tty2 c 4 2

これでブートできるファイルシステムができたはずです。少し遊んで、新しいシステムに慣れてみてください。 満足したらログアウトしてください。

第5ステップは、ディレクトリとブロックデバイスの作成です。今では udev が良きに図らってくれますが、以前は mknod でブロックデバイスを作っていました。

udev は、linux カーネル用のデバイス管理ツールです。udev は、コンピュータに接続されたデバイスを /dev ディレクトリにデバイスファイルとして動的に作成・削除します。udev は、カーネルから uevent と呼ばれるイベント通知を受け取り、事前に定義した udev ルールに従ってデバイスファイルの名前やパーミッション、シンボリックリンクなどを設定します。

udev は 2003年11月から使われていますので、それまでの間は皆 mknod で /dev 以下にデバイスファイルを作っていたのですね。

bootimage を書き込んだフロッピーディスクからハードディスクへ cp で環境を移しています。この辺の作業は、LFS (Linux from Scratch) や Arch Linux のインストール、debootstrap の経験があると分かりやすいです。(この時代には chroot もなかったでしょうから大変です...)

Linux-0.01 では mount コマンドが未だでしたが、Linux-0.10 では mount コマンドがあるようです (それとも Minix の mount コマンドでしょうか)。

本文4 : 原文
6 - Changing the boot-diskette use your new harddisk partition as root.
The root device to be used for linux is encoded in a word at offset 508
in the boot image.  Normally this is 0, meaning that the root is to be
the same type of floppy as was used in the boot process.  This can be
changed to whatever you like.

Use a short program like the one at the end to change the word (I assume
everybody has access to some kind of C compiler, be it under dos or
unix).  You can then write out the new bootdisk, and boot from it, now
using the harddisk as root (much faster).  Once you have successfully
done that you might want to install additional programs (gcc etc) by
reading them from a dos-floppy with 'mcopy'.

		Linus (torvalds@domainname)
本文4 : 和訳
6 boot-disketteを変更し、新しいハードディスクパーティションを root として使用します。linux に使用するルートデバイスは、ブートイメージの 508 ワードだけオフセットされた所に書かれています。 通常、これは 0 であり、ブートプロセスで使用したのと同じタイプのフロッピーディスクを root にすることを意味します。 これは好きなように変更できます。

末尾のような短いプログラムを使って、word を変更します (dosであれunixであれ、誰もが何らかのCコンパイラにアクセスできると仮定します)。 その後、新しいブートディスクを書き出し、そこからブートすれば、今度はハードディスクをルートとして使うことができます (はるかに高速です)。これが成功したら、"mcopy" を使って dos フロッピーから読み込んで、追加のプログラム (gccなど) をインストールしたくなるでしょう。

Linus (torvalds@domainname)

記載のなかった第6ステップ 😉 では、フロッピーディスクで起動してハードディスクを root として使用する方法が書かれています。

そうです。この時点ではネットワークは未だ使えない状態なのですね。フロッピーディスクでデータを受け渡しする時代です。mcopy は mtools と呼ばれるソフトウェアのコマンドの一つです。

mtools とは、MS-DOS や Windows で使われるファイルシステムである FAT を Linux や Unix で扱うためのツールセットです。mtools には、FAT フォーマットのフロッピーディスクにアクセスするためのコマンドが含まれています。例えば、mcopy はファイルのコピー、mdir はディレクトリの表示、mformat はメディアのフォーマットなどを行います。

本文5 : 原文
------	example program: use 'a.out < oldboot > newboot' ----
#include <unistd.h>
char tmp[512];

void main(void)
{
	int i;

	if (512 != read(0,tmp,512))
		exit(1);
	if (0xAA55 != *((unsigned short *)(tmp+510)))
		exit(2);
	*((unsigned short *)(tmp+508)) = NEW_DEV;
	if (512 != write(1,tmp,512))
		exit(3);
	while ((i=read(0,tmp,512)) > 0)
		if (i != write(1,tmp,i))
			exit(4);
	exit(0);
}
-------

		Devices:

Harddisks:
0x301 - /dev/hd1 - first partition on first drive
...
0x304 - /dev/hd2 - fourth partition on first drive

0x306 - /dev/hd1 - first partition on second drive
...
0x309 - /dev/hd2 - fourth partition on second drive

0x300 - /dev/hd0 - the whole first drive. BE CAREFUL
0x305 - /dev/hd5 - the whole second drive. BE CAREFUL

Floppies:
0x208 - 1.2M in A
0x209 - 1.2M in B
0x21C - 1.44M in A
0x21D - 1.44M in B
本文5 : 和訳
------	example program: use 'a.out < oldboot > newboot' ----
#include <unistd.h>
char tmp[512];

void main(void)
{
	int i;

	if (512 != read(0,tmp,512))
		exit(1);
	if (0xAA55 != *((unsigned short *)(tmp+510)))
		exit(2);
	*((unsigned short *)(tmp+508)) = NEW_DEV;
	if (512 != write(1,tmp,512))
		exit(3);
	while ((i=read(0,tmp,512)) > 0)
		if (i != write(1,tmp,i))
			exit(4);
	exit(0);
}
-------

デバイス:

ハードディスク:
0x301 - /dev/hd1 - 最初のドライブの最初のパーティション
...
0x304 - /dev/hd2 - 最初のドライブの第4パーティション

0x306 - /dev/hd1 - 2台目のドライブの最初のパーティション
...
0x309 - /dev/hd2 - 2台目のドライブの第4パーティション

0x300 - /dev/hd0 - 最初のドライブ全体 *慎重に*
0x305 - /dev/hd5 - 2台目のドライブ全体 *慎重に*

フロッピーディスク:
0x208 - 1.2M Aドライブ
0x209 - 1.2M Bドライブ
0x21C - 1.44M Aドライブ
0x21D - 1.44M Bドライブ

ハードディスクのブロックデバイスの指定方法も現在とは異なっています。0x300 と 0x305 は間違えやすそうです。この時代はパラレル ATA 接続で、フラットケーブルに二つあるコネクタの何方に接続するかで1台目、2台目が決まっていましたので、自分の PC の事を比較的把握しやすい状況でした。

NEC PC-88 / PC-98 はフロッピードライブは2基が標準でした。IBM PC/AT 互換機でフロッピードライブが2基という経験はありませんが、ハードディスク同様に、確かケーブルには二つコネクタがあったと記憶しています。何方に接続するか、あるいはジャンパピンで切り替える方式だったのかもしれません...記憶の彼方なので思い出せません。

結び

前回に引き続き、今回も昔の PC の用語がたくさん出てきましたので、楽しく調べながら和訳しました。

インストール方法の主な部分は、現在だと Arch Linux のインストールに近いかもしれません。難易度は Linux v0.10 の方がはるかに高いです。だって Rufus も rawrite.exe もネットワーク接続もないのですから。

私が IBM PC/AT 互換機に Linux をインストールした際には CD-ROM を使用しましたので、この時代と比較すると難易度は低めでした。PC-98 に FreeBSD (98) をインストールした時は、記憶の彼方ですが、もっと面倒だったように思います。

次回は INSTALL-0.11 を和訳しようと考えています。

Linux を気軽に試したい場合には Intel N100 CPU の Mini PC が良いかと思います。初期設定用に USB keyboard & mouse はあった方が良いと思いますが、一度設定が終了すれば Bluetooth 接続でも大丈夫です。Hyper-V や Virtualbox 等の仮想マシンだけではなく実機で Linux を経験しておくと、後々に役立ちます。

コメント

タイトルとURLをコピーしました