Ubuntu Weekly Recipe

第431回Debian 0.91をインストールしよう

今回は1994年の1月にリリースされたばかりの「Debian 0.91」をインストールしてみましょう。とはいえ実機にインストールとなると、いろいろと過去の遺物を発掘しなければなりませんので、本記事では仮想マシン(QEMU)を使用します。

なぜ今、Debian 0.91なのか?

先日発売された『Software Design 2016年8月号』紙版電子版の第2特集では、⁠YumとAPTのしくみと活用」と題してパッケージングシステムの歴史や、基本的な使い方について紹介しています。

Linuxディストリビューションの歴史は、パッケージングシステムの歴史でもあります。そこで今インストールできる中でもっとも古い部類に入るであろうDebian 0.91を使うことで、パッケージングシステムの黎明期を体験してもらおうというのが今回のRecipeの趣旨です。さらにあわよくば、Recipeの読者に今月発売の『Software Design』を購入してもらおうという隠された目論見もあります。いわゆるダイレクトマーケティングです。

さてDebianの公式サイトからたどれる、もっとも古いリリースは「Debian 0.93R6」です。Debian小史によると1995年の10月にリリースされた0.93R6は、Debianとしては最初の公式リリースであり、TeXやX Window Systemをはじめとして数百個のパッケージが提供されていました。ちなみに、このころの実行ファイル形式は「a.outフォーマット」です。パッケージ管理システムとしてのaptはまだ存在せず、dpkgとdselectコマンドを使ってパッケージをインストールしていました。

Debian小史にもあるように、0.93R6より前にいくつかのベータリリースが行われています。インターネット上で簡単に手に入るアーカイブのうち、おそらくもっとも古いであろうリリースが今回紹介する「0.91」です。1994年の1月にリリースされたインストールイメージは、フロッピーディスク3枚からなる構成で、一通りのベースシステムとシェルスクリプト版の「dpkg」コマンドが含まれていました。つまり0.91でも、パッケージのインストールや削除ができるというわけです。

Debian 0.91のインストール方法

Debian 0.91はもう公式サイトでは配布していませんが、OldLinuxHistoric Linux Distributionsなどにはイメージがアーカイブされています。今回はOldLinuxのDebian 0.91を使うことにしましょう。

次の手順でインストールします。

  1. QEMUをインストールする
  2. HDD用のQEMUイメージを作成する
  3. Debian 0.91をダウンロードする
  4. フロッピーディスクイメージを作成する
  5. フロッピーディスクイメージから起動する

ちなみにQEMUでエミュレーションしますので、フロッピーディスクドライブを用意する必要はありません[1]⁠。最低限必要なものは、i386をエミュレートできるCPUと数十MB程度のディスク容量です。

QEMUのインストールからインストーラーの準備まで

まずはQEMUをインストールし、起動用ディスクイメージとインストール先のHDDイメージを作成します。

$ sudo apt install qemu qemu-kvm
$ qemu-img create fd0.raw 1228800
$ qemu-img create -f qcow2 hda.qcow2 200M

ディスクは最低でも10MiB程度あれば十分です。ここでは200MiBにしています。ちなみに、504MiBを超える「大容量の」ディスクイメージを作ってしまうと「CHSの504MiBの壁によりカーネルが認識してくれなくなりますので、ご注意ください。

次にOldLinuxからインストールイメージをダウンロードします。

$ wget http://www.oldlinux.org/Linux.old/distributions/debian/debian-0.91.tar
$ tar xvf debian-0.91.tar
$ cp debian/debian-0.91/dist/base/*.gz .
$ gunzip *.gz
$ ls
basedsk1  basedsk2  bootdisk  debian  debian-0.91.tar  fd0.raw  hda.qcow2

bootdiskがインストーラーです。basedsk1やbasedsk2はベースシステムそのものがパッケージとなっています。いずれもフロッピーディスク用のイメージなのでサイズは1.22MBです。

インストーラーの実行

インストールに必要なものはすべて用意できたので、さっそくエミュレーターを起動し、インストーラーを動かします。

$ qemu-system-i386 -enable-kvm -m 32M \
    -drive file=bootdisk,index=0,if=floppy,format=raw -hda hda.qcow2 -boot a

「-enable-kvm」でKVMオプションを有効化しています。CPUの仮想化支援機構が使えない環境ではこのオプションを省いてください。メモリは32MiBにしていますが、実際のところ4MiB程度あれば動くようです。⁠-drive」オプションではフロッピーディスクイメージを指定し、⁠-hda」オプションでインストール先のHDDイメージを指定しています。⁠-boot」オプションはブートデバイスで、この場合は最初のフロッピーデバイスです。

図1 ⁠Welcome to Debian Linux!」
画像

ブートローダーであるLILOが起動し、ブートオプションを入力する画面になります。今回は特にオプションは不要なので、そのままエンターキーを押してください。

図2 インストーラーの起動
画像

それほど時間がかからずにDebian 0.91 BETAが起動するはずです。ここでは基本的なコマンドを使用できます。インストーラーを起動したい場合は、dinstallコマンドを実行してください。

# dinstall
図3 メニュー形式のインストーラー
画像

当時のDebianインストーラーは、CUIベースで一つ一つ質問に答えてインストールしていく仕組みです。ただ、そこまで難しいことはしていません。

1. Run fdisk to partition your hard disk(s)
パーティションの設定を行います。といってもfdiskが起動するだけなので、どう設定するかはユーザー任せです。
2. Initialize and activate your swap partition(s)
スワップパーティションのデバイス名を指定します。
3. Format your Linux native partition(s) with mke2fs
ルートファイルシステムをインストールするパーティションのデバイス名を指定します。
4. View partition table
設定したパーティション情報を表示します。
5. Install the Debian Linux base syste
Debianをインストールします。
6. Reboot your system
再起動します。
7. Return to the shell
インストーラーを起動する前のシェルに戻ります。

ディスクが空の状態なので、まずは1を入力してfdiskで設定しましょう。デバイス名をたずねられるので「/dev/hda」と回答してください。

図4 ただfdiskが起動するだけ
画像

fdiskが起動します。それだけです。説明も何もないので、あとはユーザーが適切に設定する必要があります。今回は以下のように、ルートパーティションとスワップパーティションをひとつずつ作成することにしましょう。

(ルートファイルシステム用のシステムパーティション作成)
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-406): 2
Last cylinder or +size or +sizeM or +sizeK (344-406): +168M
(シリンダ番号の先頭は偶数である必要があります)

(スワップ用のパーティション作成)
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1-406): 344
Last cylinder or +size or +sizeM or +sizeK (344-406): 406
(344はルートファイルシステムの後ろのシリンダ番号です。"p"コマンドで確認してください)

(スワップパーティションのシステムIDをスワップに変更します)
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82

(設定後のパーティションテーブルを表示します)
Command (m for help): p

Disk /dev/hda: 16 heads, 63 sectors, 406 cylinders
Units = cylinders of 1008 * 512 bytes

   Device Boot  Begin   Start     End  Blocks   Id  System
/dev/hda1           2       2     343  172368   83  Linux native
/dev/hda2         344     344     406   31752   82  Linux swap

(パーティションテーブルを実際に書き込み、fdiskを終了します)
Command (m for help): w

最後に再起動するかどうか問われるのでyと答えてください。再びブートローダーからシステムを起動し、dinstallを実行します。

次は2のスワップパーティションを選択します。パーティション名を問われるので、今度は上記で設定したように「/dev/hda2」と入力してください。

図5 初期化し設定するだけなのですぐに終わる
画像

さらに3のシステムパーティションのフォーマットを行います。今度は「/dev/hda1」と回答します。

図6 ext2ファイルシステムを作成する。選択の自由はない
画像

4でパーティションテーブルを確認できます。といっても上記のfdiskで表示したそれと同じです。ここまできてようやくDebianシステムのインストールに入れます。5を選択するとまず、⁠パーティションの作成は終わっているか」と問われますので「y」と答えます。さらに、インストール先のファイルシステムを/rootとしてマウントします。

図7 マウントの問い合わせ画面
画像

「m」を入力し、さらにシステムパーティションである「/dev/hda1」を入力します。

Mount which filesystem (ex: /dev/hda3)? /dev/hda1
Mount /dev/hda1 on which directory (ex: /usr)? /root/

正しくマウントできたら「c」と入力して処理を続けます。

図8 ベースシステムフロッピーディスクの指定
画像

次に行うのがベースシステムパッケージが保存されているフロッピーディスクの指定です。そこで「ドライブAに挿入されているインストールディスクを取り出し、代わりににベースシステムディスクを挿入します⁠⁠。といっても今回はQEMU上でフロッピーディスクドライブをエミュレーションしているため、物理的なディスクの出し入れはできません。その代わり、QEMUモニターを使います。

まずQEMU上で「Ctrl-Alt-2」と入力してください。するとモニター画面に変わります[2]⁠。

図9 QEMUモニターの画面
画像

このQEMUモニター上でコマンドを実行することで、ハードウェア的な操作をエミュレーションできます。

(qemu) info block
(ブロックデバイスが表示される)

(qemu) eject floppy0
(qemu) change floppy0 basedsk1

(qemu) info block
(floppy0のファイル名が変わる)

上記操作により、Aドライブにbasedsk1のディスクイメージが接続されました。⁠Ctrl-Alt-1」でコンソールに戻り、basedsk1が存在するデバイスとして「/dev/fd0」を指定してください。

図10 basedsk1のインストール完了
画像

インストールが完了したら同じ手順で今度はbasedsk2へと切り替えた上で、Enterキーを押します。インストール後は、念のためシステムパーティションとスワップパーティションのパティション名を問われるので、それぞれ「/dev/hda1」「/dev/hda2」と答えてください。

図11 ホスト名とドメイン名の設定。
画像

ホスト名とドメイン名を適当に入力します。次のネットワークの設定は今回はスキップします。⁠n」と回答してください。システムクロックがGMTかどうかに回答したあとの、タイムゾーンの設定では「Japan」と入力してください。キーマップの設定は日本語レイアウトがないので、英語のままにしておきます。

図12 モデムの設定
画像

モデムも設定しないので「5」を選択します。マウスは使うのであれば、3のPS/2を選択しておきましょう。

最後にカスタムブートディスクを作成するか問い合わせてきます。今回はフロッピーブートとするためにyと答えておいてください。QEMUモニターで今度はfd0.rawを指定した上で、Enterキーを押すと起動ディスクを作成してくれます。

図13 起動ディスクの作成完了
画像

すべてが終わったら7でシェルに戻った上で、haltコマンドで仮想マシンを終了します。これでインストールは完了です。

Debian 0.91を起動する

次に、先ほど作成したブートディスクを使って起動しましょう。

$ qemu-system-i386 -enable-kvm -m 32M \
    -drive file=fd0.raw,index=0,if=floppy,format=raw -hda hda.qcow2 -boot a
図14 インストール完了!
画像

最初はrootアカウントのみ存在します。また、パスワードは未設定です。

Debian 0.91の中身

Debian 0.91のベースシステムには、最低限使うであろうコマンドはそろっています。bashもvi、sedやawkもありますし、crondやinetdも動いています。Linuxカーネルのバージョンは0.99です。

[root:~]# uname -a
Linux aoba.eaglejump.co.jp 0.99.14w #1 Fri Jan 28 21:45:47 EST 1994 i586

ちなみにdmesgもすごくシンプルです。

Console: colour EGA+ 80x25, 8 virtual consoles
Serial driver version 3.99a with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16550A
lp_init: lp1 exists (0), using polling driver
Probing 82C710 mouse port device.
PS/2 auxiliary pointing device detected -- driver installed.
tpqic02: IRQ 5, DMA 1, IO 300h, IFC Wangtek, $Revision: 0.2.1.21 $, $Date: 1993/
06/18 19:04:33 $
tpqic02: DMA buffers: 20 blocks, at address 0x1bfc00 (0x1bfab4)
tpqic02: reset failed!
ftape: allocated 3 buffers alligned at: 001E8000
Calibrating delay loop.. failed
aha152x: Probing: BIOS test: failed
scsi : 0 hosts.
scsi : detected 0 SCSI disks 0 tapes 0 CD-ROM drives total.
Memory: 31212k/32640k available (676k kernel code, 384k reserved, 368k data)
This processor honours the WP bit even when in supervisor mode. Good.
Floppy drive(s): fd0 is 1.2M
floppy: FDC version 0x90
Swansea University Computer Society Net2Debugged [1.27]
IP Protocols: ICMP, UDP, TCP
SLIP: version 0.7.5 (4 channels)
CSLIP: code copyright 1989 Regents of the University of California

dl0: D-Link DE-600 pocket adapter: not at I/O 0x378.
Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
Linux version 0.99.14w ([email protected]) #1 Fri Jan 28 21:45:47 EST 1994
Partition check:
  hda: hda1 hda2
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem) readonly.
Adding Swap: 31748k swap-space

パッケージデータは/var/lib/dpkgではなく、/var/adm/dpkgに入っています。

[root:~]# ls /var/adm/dpkg/list/
base1.list  base2.list
[root:~]# dpkg -v base1
0.91 BETA

このようにベースシステムは2つの大きなパッケージとしてインストールされているようです。ちなみにbase1が設定ファイルやデバイスファイルなど、base2がbashなどのコマンド群になっています。

当時のdpkgコマンドはただのシェルスクリプトです[3]⁠。

[root:~]# more /sbin/dpkg
#! /bin/sh
#
# dpkg (Debian pkg) - Debian Linux package maintenance utility (distributed
#   with Debian Linux 0.91 BETA!
#
# Copyright (C) 1994 Ian A. Murdock <[email protected]>
#
# (Inspired by StopALOP by Dr. Greg Wettstein.)
#
(後略)

パッケージのインストール

aptと異なりdpkgコマンドはリポジトリという概念を持っていません。もし何かをインストールしたい場合は、debファイルを渡します。

ダウンロードしたdebian-0.91.tarには、インストールイメージだけでなくいくつかのパッケージファイルも含まれています。そこでこのパッケージファイルをすべて含んだディスクイメージを用意し、それを仮想マシン上でマウントさせてみましょう。最初に、ディスクイメージを作成します[4]⁠。

$ qemu-img create repo.raw 40M

この空のイメージを使って、仮想マシンを起動しましょう。

$ qemu-system-i386 -enable-kvm -m 32M
    -drive file=fd0.raw,index=0,if=floppy,format=raw -hda hda.qcow2
    -drive file=repo.raw,index=1,media=disk,format=raw -boot a

仮想マシン上では「/dev/hdb」と見えるはずなので、fdiskでパーティションを作成し、mke2fsでファイルシステムを作成します。

[root:~]# fdisk

Disk /dev/hda: 16 heads, 63 sectors, 81 cylinders
Units = cylinders of 1008 * 512 bytes

   Device Boot  Begin   Start     End  Blocks   Id  System
/dev/hdb1           2       2      81   40320   83  Linux native

[root:~]# mke2fs /dev/sdb

一度シャットダウンしてください。ホスト上で、作成したパーティションをマウントします。まずは最初のパーティションまでのオフセットを取得します。

$ parted repo.raw unit B print
o警告: 管理者権限がありません。パーミッションに注意してください。
モデル:  (file)
ディスク /home/shibata/ダウンロード/debian/repo.raw: 41945088B
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始     終了       サイズ     タイプ   ファイルシステム  フラグ
 1    516096B  41803775B  41287680B  primary  ext2

ここで最初のパーティションの開始位置は「516096バイト」であることがわかりますので、そのオフセット分ずらしてマウントします。さらにパッケージファイル一式をコピーします。

$ sudo mount -t ext2 -o loop,offset=516096 repo.raw /mnt
$ sudo cp -a debian/debian-0.91/dist/packages/* /mnt/
$ sudo umount /mnt

再度仮想マシンを起動してください。

dpkgコマンドの書式は、以下のとおりです[5]⁠。

パッケージの追加
dpkg -a パッケージ名 デバイス名 ファイルシステムタイプ ディレクトリ

パッケージの削除
dpkg -r パッケージ名

「デバイス名」は今回の場合「/dev/hdb」になります。デバイス名を指定するとそのデバイスを「ファイルシステムタイプ」で指定したファイルシステムで自動的にマウントします。省略した場合は、特にマウントしません。⁠ディレクトリ」はパッケージが存在するディレクトリです。たとえばutilディレクトリに存在するbcコマンドをインストールするなら、次のように実行します。

[root:~]# dpkg -a bc /dev/hdb1 ext2 util/

Package:                bc
Category:               util

Name:                   GNU bc
Version:                1.02

Description:            An arbitrary precision calculator language

Approximate uncompressed size:     78848 bytes.

Installing `bc'...done.
Fixing the permissions of `bc'...done.

Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda1             172368   20861   142889     13%   /

Installation of `bc' (version 1.02) complete.
[root:~]# bc
bc 1.02 (Mar 3, 92) Copyright (C) 1991, 1992 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.

何もオプションを指定せずに起動すると、パッケージセレクションモードになります。このモードでは、カテゴリごとにわけられたパッケージのうち、インストールしたいパッケージをひとつずつ選択していきます。一通り選択し終えたら「q」でセレクションモードを終了してください。実際のインストールは「-p」オプションで行います。たとえばEmacsカテゴリのパッケージを選択したら、次のように実行します。

[root:~]# dpkg -p /dev/hdb1 ext2 emacs/

最後の引数は、選択したパッケージファイルがあるディレクトリです。今回のようにカテゴリごとに別ディレクトリにしている場合は、カテゴリごとに「-p」オプションを実行する必要がありますので注意してください[6]⁠。あとは画面の指示に従えば、インストールが行われます。

図15 Emacsのバージョンは19.22.1
画像

まとめ

今回はいつもと趣向を変えて、古いディストリビューションを使う方法を紹介しました。自由ソフトウェアが標榜する自由の一つに「再配布の自由」があります。たとえ公式サイトが配布しなくなったリリースイメージやソースアーカイブであっても、自由ソフトウェアであれば有志が気兼ねなく再配布できるのです。

今回のイメージはパッケージリポジトリとのセットなので、他にもいろいろなパッケージをインストールできます。たとえばgccなどの開発ツールはもちろんのこと、linuxsrcというパッケージもあるので0.99カーネルのソースコードも確認できるでしょう。X Window System関連のパッケージもあるので、GUIを立ち上げることも可能かもしれません。

ちょっとした息抜きの一例として、昔のソフトウェアを触ってみるのもいいのではないでしょうか。

おすすめ記事

記事・ニュース一覧