Tips: Linuxを、インストーラが起動したドライブにインストールする

Last-modified: 2015-05-26 (火) 22:31:33

(2015-5-26)このページ、意外と今でもアクセス数があるんで(7年ぶりに)ちょっと追記しておきます。
最近、私自身は本ページの手法を実践していません。少し前にあるお手軽な(?)手法を実践してみました。具体的には母艦上で、
手順1:ネット上のどこかから、VDI形式のインストールイメージをダウンロードする。
手順2:以下のコマンドでVDI形式からRawイメージに変換する

# VBoxManage internalcommands  converttoraw file.vdi file.raw

手順3:ddコマンドでRawイメージをハードディスクに書き込む
手順4:ブート環境を書き込む
※:実際にはVDI状態の時か、ハードディスクに書き込んだ後のどこかでウィルスチェックをおこないました。

 

実はこの手法を実践した理由はメモリが512Mバイトしかなくて、通常のインストールプロセスを完了させることができないPCに最新に近いLinuxを(お手軽に?)インストールする為でした。
余談ですが、最近は上記のように工夫して古いPCになんとかLinuxをインストールする意味が薄れてきたように思います。重いAjaxが当たり前になってある程度CPUの能力がないと快適にウェブページが閲覧できなくなっているからです。


(2008-3-5)このページで私が言いたいことは、Linuxはどのディストリビューションであれ、たとえ標準では対応していなくても、少なくとも改造すれば必ずUSBブートでのインストールが可能だということです。"可能"と示すことが目的なので、このページの内容をLinuxの最新リリースに合わせて常にリフレッシュしていくつもりはありません。ただし、読者が何かのディストリビューションの何かのリリースでどうしてもそのやり方がわからない場合には協力するかもしれません。


初出 2007-11-25
最終更新 2008-3-5
マルチブートするなら2段階ブートに統一してMBMを使用しましょう。MBMは、WindowsがインストールするMicrosoft謹製のMBR用ブートローダやgrubのchainloader機能の上位互換となる高機能なブートローダです。
 

何らかのLinuxディストリビューションを、
USBメモリや(外付けなどの)USBハードディスクにインストールしてUSB起動したいだけではありませんか?
それならこのページをどうぞ→ Linux各ディストリビューションのUSBブート・対応状況
検索エンジンもどちらに誘導すべきか判別できないみたいで誤誘導が多いです。

 

外付け光学ドライブは買いたくないけど、ワンスピンドルのノートPCなんかにLinuxをインストールしたい。
でもPXEブートしてのネットワークインストールは敷居が高いのでもっと簡単な方法はないか。
幸い、USBブートは可能なので、USBブートでUSBメモリやHDDなどに入れておいたLinuxのインストーラを起動し、同じドライブにインストールしたい。
これなら内蔵ドライブに影響が及ばない。
(もしくは、USBブートできない古いワンスピンドルのノートなんかで内蔵ドライブからLinuxのインストーラを起動し、同じドライブにインストールしたい)

 

という場合用の手順をごく簡単に紹介します。
現在は Debian 4 (etch), Ubuntu, Fedora 8, openSUSE の各ディストリビューションにおける手順を掲載しています。
(一部内容は当サイトの複数のページにバラバラに掲載されている内容と重複しています)

 

このページで対象となりえるデバイスは、
内蔵ハードディスクもしくはSSD、SATAもしくはIDE変換アダプタを介した内蔵CFもしくはSDカード、内部USB接続のCFもしくはSDカード(スロット)、USBメモリ、USBメモリリーダ経由のCFもしくはSDカード、USB接続外付けハードディスク等です。
CF(CFブート)を使用する場合はこのページも合わせて読んでおいたほうがいいでしょう。

 

本ページの方法を内蔵ドライブでおこなう場合、基本的には内蔵ドライブが取り外し可能である必要があります。取り外せない場合の対処法は千差万別なのでここでは述べません。

また本ページと同様な結果が得られる可能性のある方法として、オフラインインストールとか母艦インストール(どちらも同じ意味)があります。本ページがそれらにふれないのは、最もポピュラーなCD、DVDブートによるインストール手法と出来る限り似通った手法を用いることによって、ノウハウを活かしてトラブルを避けるためです。

 

インストールしたいPCのメモリ容量が非常に少ない場合、このページで扱っているディストリビューションの中ではDebianが最も適しています。Debianのインストールは非常に少ないメモリ容量で可能です。

 

下記の具体的な手順を見ればわかると思いますが、一部はネットワークインストールです。しかしPXEブート(ネットワークブート)ではありません。PXEブートによるネットワークインストールはサーバ側の設定が面倒ですが、本ページで扱っているネットワークインストールは全てローカルブートなのでネットワークインストールということをそれほど意識する必要はありません。

 

(2007-12-24追記)
技術的な面ではこのページよりも当サイトの他のページの方が詳しく載っています。
このページは当サイトの他のページとは異なり、どちらかというとLinux初心者の方が来られることが多いと思います。
そのような方の為に、Linuxを使いこなすにあたって、知っておけば便利な知識にどのようなものがあるのかをお知らせする意味で、当サイトの関連ページをリストします。各ページへのリンクの右側のコメントは特にこのページとの関連が深いと思う内容の説明です。


 
 

Debian 4 (etch) をインストーラが起動したドライブにインストール可能とするディスク(カード,USBメモリ)を作成する

(2008-2-8追記)今まで知らなかったのですが、
http://ftp.jp.debian.org/debian/dists/etch/main/installer-i386/current/images/に、
Debian謹製のハードディスクからインストーラを起動する場合用のinitrd(イニシャルラムディスク)ファイルがありました。
言い訳になってしまいますが、何故Debianは一つのinitrdでCD, ハードディスク(USBメモリを含む)両方から起動可能にしないんでしょうねえ?ほんの僅かな変更で済むのに...

↓のパッチはとりあえず削除しないで置いておきます。出来ればDebian純正のCDインストール用のinitrdを両対応に変更する動きにつながって欲しいと思います。このパッチは動作は両対応でメッセージはCD専用のままです。


もちろんこの方法は、USBブートのデバイス(ディスク)だけでなく、USBブートできないPCで内蔵ハードディスクからインストーラをブートして内蔵ハードディスクにインストールする場合にも使用できます。

 

Fedora 8, openSUSEとは異なり、インストーラを起動させたパーティションにインストールすることは出来ません。しかし、後でswapとして使用するパーティションをインストール用に使えば問題ないでしょう。

Linuxを母艦として作業する

ユーザ層が違うでしょうから、Fedora用の説明とは異なり、ポイントだけ記します。

インストーラ用のパーティションを準備し、ext3などのLinux標準で、シンボリックリンクが使えるファイルシステムとしてフォーマットしておきます。

# mkdir pnt pnt2
# mount -o loop,ro debian-40r1-i386-netinst.iso pnt  # kde版とかxfce版でも同様
# mount /dev/sdb5 pnt2 # デバイス名は一例
# (cd pnt; tar cpf - .) | (cd pnt2; tar xpf -)
# cd pnt2/install.386
# mkdir work
# cd work
# gzip -dc ../initrd.gz | cpio -idmv

ここでパッチをあてます。
このパッチで、CD以外にインストーラが書き込んであっても読み出せるようになります。

# patch -p0 < ../...somewhere.../debian-etch-initrd-cdrom-detect.postinst.patch

ダウンロード filedebian-etch-initrd-cdrom-detect.postinst.patch

--- var/lib/dpkg/info/cdrom-detect.postinst.orig	2007-06-05 04:17:13.000000000 +0900
+++ var/lib/dpkg/info/cdrom-detect.postinst	2008-01-01 23:12:55.000000000 +0900
@@ -32,13 +32,17 @@
 do
 	mounted=0
-	devices="$(list-devices cd; list-devices maybe-usb-floppy)"
+	devices="$(list-devices partition; list-devices cd; list-devices maybe-usb-floppy)"
 	for device in $devices; do
-		if mount -t iso9660 -o ro,exec $device /cdrom; then
-			log "CD-ROM mount succeeded: device=$device"
-			mounted=1
-			db_set cdrom-detect/cdrom_device $device
-			break
+		if mount -o ro,exec $device /cdrom; then
+			if [ -e /cdrom/.disk/info ] ; then
+				log "CD-ROM mount succeeded: device=$device"
+				mounted=1
+				db_set cdrom-detect/cdrom_device $device
+				break
+			else
+				log "The available partition does not include a Debian CD!"
+			fi
 		else
 			log "CD-ROM mount failed: device=$device"
 		fi

再圧縮してinitrdの修正完了

# find . | cpio -H newc -o | gzip -9 > ../initrd.gz
# cd ../../    # pnt2直下に戻る

あとはブート可能にするだけ

# mkdir grub; cd grub
# cp -p /boot/grub/{e2fs_stage1_5,stage1,stage2}  .

isolinux.cfgを元にmenu.lst(母艦によってはgrub.conf)を作成します。
こんな感じ

default 0
timeout 5
color cyan/blue white/blue
title install
	kernel /install.386/vmlinuz vga=normal
	initrd /install.386/initrd.gz

最後にgrubコマンドを実行する

# grub
  .
 省略
  .

このページの作業6なんかをを参考にして下さい。

この後、当該デバイス(ディスク)を対象のワンスピンドルPCなんかに接続もしくは取り付ければインストールを開始できます。CDブート時と比較して、インストーラ起動後の見た目に全く違いはありません。

 

パッチをあてる必要がある等、Debianはこのページで扱っている他のディストリと比べて扱いにくい面もありますが、少ないメモリ容量のPCにもインストールできる長所があります。

Ubuntu Linux をインストーラが起動したドライブにインストール可能とするディスク(カード,USBメモリ)を作成する

Ubuntuの場合、インストールCD(ライブCD)の中にそのようなディスクを作成する機能が含まれています。
ただし、その機能は実際にインストールCD(ライブCD)を起動してUbuntu上で使用する必要があります。以前は他のやり方も掲載していましたが、話を簡単にするためにそういうことにします。

光学ドライブの付いた適当なPCでインストールCD(ライブCD)をブートしてCD内のtools/install_usb.shを実行して下さい。
この作業後、当該デバイス(ディスク)を対象のワンスピンドルPCなんかに接続もしくは取り付ければインストールを開始できます。

 

ただし、私が試したところではUbuntu 7.10のインストーラの7/7の画面でAdvanced画面を表示させないとgrubがインストールされませんでした。

 

また、ASUS Eee PCのように画面解像度が低い場合は外部ディスプレイに出力しておかないと、Nextのボタンが押せないと思います。さらに外部ディスプレイを外す際には(プリインストールOSのxorg等を参考にして)、xorg.confの修正が必要となるでしょう。

Fedora 8 をインストーラが起動したドライブにインストール可能とするディスク(カード,USBメモリ)を作成する

(2008-1-9)ここにFedora 8 Live CDについての注意点を追加しました。でもそこにもUSBメモリへのインストールの方法は書いていません。そのやり方は以前このページに載せていたUbuntuのUSBへのインストールと殆ど同じです。


もちろんこの方法は、USBブートのデバイス(ディスク)だけでなく、USBブートできないPCで内蔵ハードディスクからインストーラをブートして内蔵ハードディスクにインストールする場合にも使用できます。
Fedora 8におけるこの方法の特筆すべき点として、インストーラが起動したパーティションにインストールすることができるということが挙げられます。
インストーラ用にパーティションを用意する必要がないわけです。(その代わり、ある程度メモリ容量が必要。同じ要因により、実はPXEブートによるネットワークインストールもわりと簡単に可能)

 

ご存知の方も多いと思いますが、Fedora8のDVD内には、USBブートしてネットワークインストールする場合に利用できる、USBメモリ(等)にそのまま書き込めるディスクイメージが付属しています。これを書き込んだUSBメモリ(等)でブートすると、そのUSBメモリや他のUSBメモリや内蔵ハードディスクにFedora8をインストールすることが出来ます。ここで紹介する方法は、このディスクイメージを材料として用いる方法です。ディスクイメージをそのまま使用する場合には不可能な、USBブートできないPCで既に他のデータが書き込まれたディスクからインストーラを起動することを可能としますし、USBブート可能なPCにおいてもインストール時とインストール後のシステム構成が変わらない為にマイナーなトラブルを避けることの出来るメリットがあります。

 

diskboot.imgはブートセクター付きのFATファイルシステムイメージです。その中身を抜き出して使います。
syslinuxでFAT(32)パーティションをLinuxブート可能にして、その中に、元のディスクイメージの中のldlinux.sys以外を全てコピーするだけです。確認していませんがこの方法はFedora Core 6, Fedora 7でも共通だと思います。

Linuxを母艦として作業する

手順1 母艦上でFedora 8のDVDをダウンロードする

Fedora-8-i386-DVD.iso
本当はBittorrent利用がおすすめ

手順2 母艦上で対象デバイス(ディスク)のパーティションを切る

ポイントはただ、インストール後にswapか、/bootか、/にしたいパーティションをFAT(ID=6)かFAT32(ID=b or c)にしておくだけです。

手順3 母艦上で対象パーティションをフォーマットする

インストーラを書き込むパーティションだけをフォーマットすればいいです。

# mkfs.vfat /dev/sda5  # デバイス名は一例

MBRにMBMのような高機能なブートローダを使用する場合は拡張領域内の論理領域を使用できます。

手順4 母艦上でsyslinuxをインストールする

# syslinux /dev/sda5  # デバイス名は一例

MBRにMBMのような高機能なブートローダを使用する場合は拡張領域内の論理領域を使用できます。
もし母艦にsyslinuxパッケージが入ってなければ入れておいて下さい。

手順5 対象デバイス(ディスク)のMBRにブートローダをインストールする

インストーラを書き込んだパーティションを呼び出すブートローダ(チェーンローダ)が必要です。元々インストールされていない場合はインストールして下さい。
grubのmenu.lst(grub.conf)をインストーラを書き込むパーティションに置いて、デバイス(ディスク)のMBRにgrubをインストールする方法でもいいですし、あるいはMBM等を使ってもいいです。
母艦がDebianとかで、且つ、インストーラを書き込んだパーティションが基本パーティションならinstall-mbrコマンドを使ってもいいです。

手順6 母艦上でdiskboot.imgの中身をコピーする

# mkdir pnt1  pnt2  pnt3
# mount -t vfat /dev/sda5 pnt1  # ldlinux.sysがある筈です。
# mount -o loop,ro Fedora-8-i386-DVD.iso  pnt2
# mount -t vfat -o loop,ro pnt2/images/diskboot.img  pnt3
# cp -a pnt3 copied
# rm -f copied/ldlinux.sys
# cp -p copied/* pnt1

手順7 母艦上でDVDの中身を外部からhttpでアクセス可能にする

Apacheなどのhttpサーバを用いて手順6のpnt2ディレクトリをhttpを介して読めるようにします。
この作業をおこなう代わりに外部の公開ミラーを利用する方法もありますが、スピードの面では圧倒的に自前のサーバを使った方が速いでしょう。

 

この後、当該デバイス(ディスク)を対象のワンスピンドルPCなんかに接続もしくは取り付ければインストールを開始できます。
遠慮なく、インストーラを起動させたパーティションをインストール対象のパーティションとしてフォーマットして使用して下さい。

 

DVDブートしてインストールする場合とは異なり、インストール時の言語に日本語が選べませんが、インストール後、システムグローバル、ユーザ毎、どちらの言語設定もGUIで変更できます。

CentOS 5 をインストーラが起動したドライブにインストール可能とするディスク(カード,USBメモリ)を作成する

多分Red Hat EL 5も同じだと思います。
Fedora8の場合の作業と似ているので簡略化します。作業の一例を示します。

# mkdir pnt
# mount -o loop,ro CentOS-5.1-i386-netinstall.iso  pnt
# cp -a pnt copied.pnt
# umount pnt
# cd copied.pnt/isolinux
# rm TRANS.TBL isolinux.bin
# mv isolinux.cfg syslinux.cfg
# cd ../../
# mkfs.vfat /dev/hda5
# syslinux /dev/hda5
# mount /dev/hda5 pnt
# cp -p copied.pnt/isolinux/* pnt

同じくMBRには適切なブートローダをインストールしておく必要があります。この例のように論理領域をブートさせたい場合はMBMが適切でしょう。

DVDブートしてインストールする場合とは異なり、インストール時の言語に日本語が選べませんが、インストール後、システムグローバル、ユーザ毎、どちらの言語設定もGUIで変更できます。ですが、
Fedora8とは異なり、言語を日本語に変更する際に日本語用パッケージが自動ではインストールされませんので、日本語に変更する前に、手動でjapanese-fontsとscim-anthyをインストールしておく必要があります。

openSUSE をインストーラが起動したドライブにインストール可能とするディスク(カード,USBメモリ)を作成する

もちろんこの方法は、USBブートのデバイス(ディスク)だけでなく、USBブートできないPCで内蔵ハードディスクからインストーラをブートして内蔵ハードディスクにインストールする場合にも使用できます。
openSUSEにおけるこの方法の特筆すべき点として、Fedora8と同様、インストーラが起動したパーティションにインストールすることができるということが挙げられます。
インストーラ用にパーティションを用意する必要がないわけです。(その代わり、ある程度メモリ容量が必要。同じ要因により、実はPXEブートによるネットワークインストールもわりと簡単に可能)

 

openSUSEにもUbuntuと同様、そのようなディスク(カード,USBメモリ)を作成するスクリプトが含まれています。
ただしUbuntuと異なり、ライブCDには含まれていません。

そのスクリプトはSUSE上で使用することが前提になっているので、SUSE以外のディストリビューション上で使用するには中身の一部をコメントアウトする必要があります。

SUSE以外のLinuxを母艦として作業する

SUSE以外のディストリビューションを母艦として作業する場合のポイントだけを記します。

インストーラ用のパーティションを準備し、インストール後にswapか、/bootか、/にしたいパーティションをFAT(ID=6)かFAT32(ID=b or c)で確保しておきます。

# mkfs.vfat /dev/sda5  # デバイス名は一例

↑後でスクリプト内でfsckが走るので既にフォーマット済みの場合でも出来る限りここでフォーマットして下さい。

# mkdir pnt
# mount -o loop,ro openSUSE-10.3-GM-i386-mini.iso pnt
# cp -p pnt/boot/i386/mkbootdisk  .

ここでパッチをあてます。(一部をコメントアウトするだけです)
SUSE独自らしいactivateというコマンドを実行する部分と、FAT16かをチェックしている部分と、MBRに独自にブートローダをインストールしている部分をコメントアウトしています。MBRのブートローダ(チェーンローダ)にgrubとかMBM等を使えば、拡張領域内の論理パーティションからブートできますし、現在のsyslinuxはFAT32でも問題ないので、コメントアウトしています。その代わり自分自身でブート環境を整備する必要があります。

# patch -p0 < ../...somewhere.../openSUSE-mkbootdisk.patch

ダウンロード fileopenSUSE-mkbootdisk.patch

--- mkbootdisk.orig	2007-09-27 05:22:45.000000000 +0900
+++ mkbootdisk	2008-01-12 23:05:45.000000000 +0900
@@ -1090,7 +1090,7 @@
   print "disk $opt_disk, partition $part\n";
-  die "sorry, must be a primary partition (number 1 - 4)\n" if $pn < 1 || $pn > 4;
+#  die "sorry, must be a primary partition (number 1 - 4)\n" if $pn < 1 || $pn > 4;
   my ($bpc, $fatsize);
@@ -1107,13 +1107,13 @@
   die "not a FAT file system\n" unless $bpc >= 512 && $fatsize >= 12;
-  die "must be 16 bit FAT\n" unless $fatsize == 16;
+#  die "must be 16 bit FAT\n" unless $fatsize == 16;
   die "cluster too large (max. 32k)\n" if $bpc > 0x8000;
   system "$opt_syslinux $part" and die "error: syslinux failed\n";
-  system "activate $opt_disk $pn" and die "error: activate failed\n";
+#  system "activate $opt_disk $pn" and die "error: activate failed\n";
   system "mount -tmsdos $part $tmp_dir/mp" and die "error: mount failed\n";
   $mp = "$tmp_dir/mp";
@@ -1145,9 +1145,9 @@
     close W;
   }
-  open W, ">$opt_disk" or die "$opt_disk: $!\n";
-  die "writing mbr failed\n" unless syswrite(W, $new_mbr) == length($new_mbr);
-  close W;
+#  open W, ">$opt_disk" or die "$opt_disk: $!\n";
+#  die "writing mbr failed\n" unless syswrite(W, $new_mbr) == length($new_mbr);
+#  close W;
 }
 else {

スクリプトを実行します。事前にsyslinuxパッケージをインストールしておいて下さい。

# ./mkbootdisk --partition /dev/sda5 pnt  # デバイス名は一例

前述のようにMBRのブートローダ(チェーンローダ)を自分で整備すると、拡張領域内の論理領域からインストーラをブートさせることが出来ます。その必要がない場合はスクリプト内でMBRにブートローダを書き込ませてもいいかもしれません。適宜自分で判断して下さい。

 

この後、当該デバイス(ディスク)を対象のワンスピンドルPCなんかに接続もしくは取り付ければインストールを開始できます。
遠慮なく、インストーラを起動させたパーティションをインストール対象のパーティションとしてフォーマットして使用して下さい。

 

Fedora8とは異なり、インストール作業を日本語でおこなえます。

 

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)