2014年10月16日木曜日

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からネイティブボリュームに移すことも可能みたいですが、
万一のときめんどくさいことになるのでこれで我慢します。
必要ならもっと細切れにパーティションを分けていろいろなところにマウントすれば
ネイティブに近い使い心地にはなるでしょう。

0 件のコメント:

コメントを投稿