☆HDDに置いたISOからブートしてUbuntuをインストールする

このエントリに記載している方法は危険かもしれません。実施される方は自己責任で行ってください。

vine_userさんのサイトでHDDに保存したISOイメージをGRUB2で直接起動する方法《Ubuntu 9.10対応》を見ました。
これはとても快適です。

調子に乗って、この方法をつかってブートし、UbiquityでLucidのインストールを試みたのですが、
実際にインストールを開始する段階の最初でアンマウントできない旨のメッセージが出てインストールできません。

悔しいので、気合を入れてUbiquityのソースを見てみたのですが、結構複雑で追いかけるのはかなりきついです。
基本的にPythonなのですが、GUIがある上に裏でシェルを使っていたりします。
そこで、エラーメッセージが出るところまで進めておいて、pstree -alp でそのときに走っているプロセスと
そのオプションを見てみました。関係ありそうな部分は下記です。

pstree -alp の一部分
|-gksudo,3123 --preserve-env --desktop /home/ubuntu/Desktop/ubiquity-gtkui.desktop -- /usr/bin/ubiquity gtk_ui
  |   `-udisks,3125 --inhibit -- /usr/lib/ubiquity/bin/ubiquity gtk_ui
  |       `-ubiquity,3128 /usr/lib/ubiquity/bin/ubiquity gtk_ui
  |           |-debconf-communi,4062 -w /usr/bin/debconf-communicate -fnoninteractive ubiquity
  |           |-ibus-daemon,4041 --xim
  |           |   |-ibus-gconf,4055
  |           |   |-python,4057 /usr/share/ibus/ui/gtk/main.py
  |           |   |-python,4060 /usr/share/ibus-anthy/engine/main.py --ibus
  |           |   `-{ibus-daemon},4056
  |           |-log-output,11685 -t ubiquity --pass-stdout /bin/partman-commit
  |           |   `-partman-commit,11686 /bin/partman-commit
  |           |       `-01unmount_busy,12462 /lib/partman/commit.d/01unmount_busy
  |           `-{ubiquity},11682

名前からして怪しいのが"/lib/partman/commit.d/01unmount_busy"です。
見てみると、確かにumountを実行しています。
GUIのエラーメッセージもここから出しているようで、そのおかげでpstreeの出力にも出てくれたみたいです。
debconfの機能を使ってumoutを実行するかどうかを調べているようです。
debconf経由でubiquity/partman-skip-unmountをtrueにするのがスマートなのでしょうが、
やりかたがわからなかったので下のコードのように処理を始める前に"exit 0"で正常終了するようにしました。
この修正を実施してからインストールを開始すればISOイメージとは別のパーティションにUbuntuをインストールできるようになります。
下図のダイアログが出たら、[Ubuntu 10.04 を試す]のボタンを選択していったんGnomeのデスクトップ環境を表示されて修正を行います。

立ち上がった直後はキーボードレイアウトに英語配列になっているので"Setting"->"Preferences"->"Keybord"で設定を日本語配列にしてから編集したほうが良いでしょう。

"/lib/partman/commit.d/01unmount_busy" の修正内容(わざわざdiffを表示するほどのものではないですが)
@@ -1,13 +1,13 @@
 #! /bin/sh
 
 # This should largely be unnecessary now that partman-base/init.d/parted
 # checks for mounted partitions at startup, but it may still serve as
 # insurance against partitions being mounted while the partitioner is
 # running.
-
+exit 0
 . /lib/partman/lib/base.sh
 
 db_get ubiquity/partman-skip-unmount
 if [ "$RET" = true ]; then
     exit 0
 fi

0 件のコメント:

コメントを投稿