Ubuntu 14.04をwubi.exeでインストール

Windows7が入ったBIOSにパスワードロックがかかっていて、
CDブートすらできないという困難な状況にぶつかりました。
これにUbuntuを入れる方法について書き残しておきます。
幸いにもUbuntuにはWindowsからNTFSなHDD上に仮想HDDファイルを置いて、
そこにUbuntuをインストールすることで無理やりデュアルブートにしてしまうことができるので、
今回はその方法を使ってみます。

まずはWindows7(または別PC)でUbuntu 14.04.1(amd64)のisoファイルをダウンロードし、
DVDに焼いてインストールディスクを作っておきます。
Windows上からインストールディスクにある”wubi.exe”を実行し、
[デモおよびフルインストール]-[cdブート・ヘルパを使う]-[完了]を選択するも
会えなく途中でエラー

Could not retrieve the required installation files.

が発生してしまいます。
そこで”wubi.exe”をHDD(デスクトップ)にコピーしてから実行してみると、
断りもなくUbuntu 14.04のインストールファイルをダウンロードしてきます。
その後今度は

'NoneType' object has no attribute 'get_info'

なるエラーで止まります。
ということで”wubi.exe”を”–force-wubi”オプション付きで実行し、
[Windows内にインストール]してみますが

Permission denied

で撃沈。いったいどういうこと?
ためしに古いバージョンUbuntu 12.04を入れにかかると

Extraction failed with code: 2

なるエラーでまただめ。
結局行き着いたのは
デスクトップに”ubuntu-14.04-desktop-amd64.iso”と14.04の”wubi.exe”を置き、
インストールディスクをイジェクトした上で”wubi.exe”を実行するという方法です。
なお仮想HDDとなる[インストールサイズ]は最大の30GBを取りました。

インストールが進みPCがリブートするのでそのまま待つか、
[esc]でgrubのメニューに入り[Normal]を選択します。
すると以下のような連続した不幸のメッセージが…

serious errors were found while checking the disk for /
Press I to ignore, S to skip mounting, or M for manual recpvery
The disk derive for /tmp is not ready yet or not present.
Countinue to wait or Press  S to skip mounting, or M for manual recpvery
An error occurred while mounting /.
Press  S to skip mounting, or M for manual recpvery

これ、なんだか知りませんがリードオンリーでマウントされるために出ているエラーのようで、
grubのメニューで’e’を押してカーネルオプションの”ro”を”rw”に書き換えることで
起動できるようになりました。変更後はだいたいこんな感じ(大きく省略)になります。

linux /boot/vmlinuz-* root=UUID=* loop=/ubuntu/disks/root.disk rw 

ただこれだけでは起動のたびに修正する必要があるので、元から直しておきます。
root権限でgrub設定ファイル”/etc/grub.d/10_lupin”の

linux   ${rel_dirname}/${basename} root=${LINUX_HOST_DEVICE} loop=${loop_file_relative} ro ${args}

linux   ${rel_dirname}/${basename} root=${LINUX_HOST_DEVICE} loop=${loop_file_relative} rw ${args}

に直した上で以下を実行します。

# update-grub

ここで”/etc/grub.d/10_lupin”はwubiでループバックインストールした環境を
ブートするために用意されたファイルのようで、
その辺がリードオンリーになっている理由なのかもしれません。

PCの立ち上げ時にWindowsのブートメニューが表示され、
そこでUbuntuを選ぶと今度はgrubのブートメニューが表示される
二段構えになりますが仕方ありません。
なおWindowsのブートメニューで起動OSのデフォルトの変更は、
[コントロールパネル]の[システム]から[システムの詳細設定]を開き、
[システムのプロパティ]ダイアログで[詳細設定]タブを開いて
[起動と回復]フレームの[設定]をクリックし、
[起動と回復]ダイアログの[起動システム]フレームの
[既存のオペレーティングシステム]リストから選ぶことで可能です。

Ubuntuが立ち上がるとWindows7の入ったNTFSのCドライブが
/hostにマウントされているのが分かります。
やったーと小躍りしたのもつかの間、
なぜかIntel製チップの有線LANが繋がりません。
とりあえずそのLANインターフェイスでipv6をignoreすることでなんとかなりました。
いつもどおりsshサーバにするのと素のviは使いにくいので

# apt-get install sshd-server
# update-rc.d ssh defaults
# apt-get install vim

を実行し、14.04から14.04.1へアップデートを

# apt-get update
# apt-get dist-upgrade

でしたところまたネットワークが繋がらなくなってしまいました。
しょうがないのでネット上からドライバ(“e1000e-3.1.0.2.tar.gz”)を探し出して

# tar zxf e1000e-3.1.0.2.tar.gz
# cd e1000e-3.1.0.2/src
# make install

でなんとかなりました。
設定ファイル”/etc/NetworkManager/NetworkManager.conf”を見ると
[main]セッションに

no-auto-default=<LANのMACアドレス>,

の一行が追加されているのが気になりますが、繋がっているので良しとします。

ここまででもUbuntuはきちんと動きますが、仮想HDD上での動作となります。
ほぼ使わないWindowsのためにNTFSのHDDを使わせておくのはもったいないので、
Windows7にAOMEI Partition Assistant
スタンダード(フリー)版を入れてNTFSのCドライブを分割し、
できた未使用パーティションをEXT4として
Linuxでマウントして作業スペースにすればいいでしょう。
ついでに別途数GBのパーティションを作ってスワップ領域にしてみます。
とりあえずLinuxで見たときの”/dev/sda3″(10GB)をスワップに、
“/dev/sda5″(400GB)を”/opt”にマウントして使ってみます。以下を実行します。

# mkswap /dev/sda3
# mkfs.ext4 /dev/sda5

設定ファイル”/etc/fstab”を編集します。

/host/ubuntu/disks/swap.disk none 

で始まる行を削除(コメントアウト)し、

/dev/sda3 none swap sw 0 0
/dev/sda5 /opt ext4 defaults 0 2

の行を追加してリブートすれば完了です。
うまくすればルートファイルシステムを
仮想HDDからネイティブボリュームに移すことも可能みたいですが、
万一のときめんどくさいことになるのでこれで我慢します。
必要ならもっと細切れにパーティションを分けていろいろなところにマウントすれば
ネイティブに近い使い心地にはなるでしょう。