#title kexec-loader を利用する
[[http://www.solemnwarning.net/kexec-loader/|kexec-loader]]は、MBRやPBRにインストールしなくても、起動時に読み込めるパーティションにvmlinuzとinitrd.imgのみをコピーして、それらをカーネルローダで読み込めば起動できます。<
>
公式サイトは[[http://www.solemnwarning.net/kexec-loader/|こちら]]
<>
== kexec-loader起動用CDの作成方法 ==
以下の方法はkexec-loaderのバージョン2.2.1についての方法です。違うバージョンでは異なるかもしれません。
1. [[http://www.solemnwarning.net/kexec-loader/download.cgi|kexec-loaderのダウンロードサイト]]から
* kexec-loader-?-cdrom.tar.gz
* modules-?.tar.gz
をダウンロードします。
1. modules-?.tar.gzを展開して生成したディレクトリの中の必要そうなモデュールファイル(拡張子がmodのファイル)を、 kexec-loader-?-cdrom.tar.gzを展開して生成したディレクトリの中のiso-modulesディレクトリにコピーします。
1. 展開して生成したディレクトリの中のiso-filesディレクトリの中のkexec-loader.confを適当に編集します。その内容については、[[http://www.solemnwarning.net/kexec-loader/readme.html#s3|WEB上の説明(英語)]]あるいは、以下の「[[#kexecloader_conf|kexec-loader.confの書式]]」を参考ください。
1. [[https://wiki.ubuntulinux.jp/UbuntuTips/Others/HowToUseTerminal|端末]]で展開したディレクトリに移動し、
{{{
./mkiso.sh 作成したいISOファイルの名前.iso
}}}
を実行します。
1. すると、上記で設定した「作成したいISOファイルの名前.iso」という名前のファイルが生成されます。これをCD-Rなどに[[https://wiki.ubuntulinux.jp/UbuntuTips/Install/BurningISO|書き込んで]]ください。
1. Debian7 では、kexec-loader-?-cdrom.tar.gz を展開したディレクトリにある、mkiso.sh、addmod.sh はエラー終了します。暫定的に対応したシェルファイルを添付しておきます。
* [[attachment:mkiso.debian7.sh]]
* [[attachment:addmod.debian7.sh]]
<>
== 内蔵HDDにコピーしたkexec-loaderを利用する方法 ==
CD-Rに書き込まなくても、内蔵HDDからkexec-loaderを起動できます。 以下の方法はkexec-loaderのバージョン2.2.1についての方法です。違うバージョンでは異なるかもしれません。
[[http://www.solemnwarning.net/kexec-loader/download.cgi|kexec-loaderのダウンロードサイト]]から
* kexec-loader-?-cdrom.tar.gz
* modules-?.tar.gz
をダウンロードします。
modules-?.tar.gzを展開して生成したディレクトリの中の必要そうなモデュールファイル(拡張子がmodのファイル)を、 kexec-loader-?-cdrom.tar.gzを展開して生成したディレクトリの中のiso-modulesディレクトリにコピーします。 kexec-loader-?-cdrom.tar.gzを展開して生成したディレクトリの中のmkiso.shをテキストエディタで編集し、その最後の行の
{{{
rm -rf iso-root
}}}
の先頭に
{{{
#
}}}
を付けて保存します。(行ごと削除しても良いです。) テキストエディタを閉じます。 端末で展開したディレクトリに移動し、
{{{
./mkiso.sh 作成したいISOファイルの名前.iso
}}}
を実行します。すると、iso-rootというディレクトリの中にモデュールを組み込んだinitrd.imgが生成されます。起動時に読み込めるパーティションにkexecldrという名前のディレクトリを作成してください。作成したkexecldrディレクトリの中に、iso-rootディレクトリの中のinitrd.imgとvmlinuzをコピーします。
|| /ディレクトリにコピーしても使えるのですが、'''Ubuntuがインストールされているパーティション(/にマウントされるパーティション)の/ディレクトリには同名のシンボリックリンクがあるので、問題が生じる可能性があります。'''そこで、新たにディレクトリを作成した方が安全です。 ||
実際の起動時にkexec-loaderを利用できるようにするためには、別のカーネルローダでkexec-loaderのvmlinuzとinitrd.imgを読み込む必要があります。<
> grub4dosなら、menu.lstの末尾に
{{{
title kexec-loader
find --set-root /kexecldr/vmlinuz
kernel /kexecldr/vmlinuz
initrd /kexecldr/initrd.img
}}}
と追加すれば良いでしょう。<
> GRUB2なら、/etc/grub.d/40_linuxの末尾に
{{{
menuentry "kexec-loader" {
search -f --set /kexecldr/vmlinuz
linux /kexecldr/vmlinuz
initrd /kexecldr/initrd.img
}
}}}
と追加して、[[https://wiki.ubuntulinux.jp/UbuntuTips/Others/HowToUseTerminal|端末]]で
{{{
update-grub
}}}
を実行すれば/boot/grub/grub.cfgの末尾に追加されるでしょう。<
>
また、起動時にメニューを利用したい場合には、kexec-loader.confを、起動時に読み込めるパーティション(vmlinuzとinitrd.imgをコピーしたパーティションとは異なっても良いです)にコピーし、そのパーティションのラベルをGparted(パーティションエディタ)などで、
{{{
kexecloader
}}}
に変更します。 kexec-loader.confの書き方(使えるコマンド)は [[http://www.solemnwarning.net/kexec-loader/readme.html#s3|こちらに書いてあります。]]
<>
== kexec-loaderのコマンドラインでの利用 ==
コマンドラインで使えるコマンドは [[http://www.solemnwarning.net/kexec-loader/readme.html#s3s2|こちらに書いてあります。]]
{{{
disks
}}}
で認識されているデバイスとパーティションの一覧を表示させ、Ubuntuのインストールされたパーティションを、例えば、/dev/hda5と認識されていたら、
{{{
root hda5
}}}
のように指定。
{{{
kernel カーネルの名前(フルパスで)
}}}
でカーネルを指定し、
{{{
initrd initramfsの名前(フルパスで)
}}}
でinitramfsを指定し、カーネルに渡すべきオプションがあるのなら、
{{{
cmdline カーネルに渡したいオプション
}}}
してから
{{{
boot
}}}
で起動が試みられます。
なお、
{{{
cat 閲覧したいテキストファイル名(フルパスで)
}}}
でテキストファイルの内容を表示させることができるので、例えば、grub legacyの起動メニューの書かれたファイル、/boot/grub/menu.lstの内容を見たければ、rootでパーティションを設定した後で、
{{{
cat /boot/grub/menu.lst
}}}
で表示されるのですが、長いと、表示が上に流れてしまい、最後の方しか閲覧できません。moreのように表示させる方法がありましたら、このページに書き込んでくださると有難いです。
<>
== kexec-loader.confの書式 ==
kexec-loader.confの書き方(使えるコマンド)は [[http://www.solemnwarning.net/kexec-loader/readme.html#s3|こちらに書いてあります。]]
UbuntuでUUIDでパーティションが設定されている場合、UbuntuのUUIDを★として
{{{
title Ubuntu on UUID=★
root UUID=★
kernel /vmlinuz
initrd /initrd.img
cmdline root=UUID=★ ro カーネルに渡したい他のパラメータ
}}}
ぐらいで良いでしょう。「カーネルに渡したい他のパラメータ」と実際に書いてはいけません。 :) '''また、/のパーティションと/bootのパーティションが別の場合、/vmlinuzと/inirtd.imgというシンボリックリンクが利用できないので、上記の内容では起動できません。'''
他のパラメータが不要なら、上記の「ro」以降は不要です。
<>
== kexec-loader.confを置くパーティションのラベルをkexecloaderに変えたく無い場合 ==
1. http://www.solemnwarning.net/kexec-loader/download.cgi からソースファイルをダウンロードしてください。
1. 展開して、生成されたディレクトリの中のsrc/misc.cの中に
{{{
kexecloader
}}}
という文字列があるので、それをkexec-loader.confを置きたいパーティションのラベルに変更してください。
1. 後は、適切にコンパイルすれば良いです。コンパイルの方法は、
{{{
build.html}}}
に書かれているように、必要なパッケージが利用できさえすれば、展開したディレクトリでmakeでOKでしょう。 (ただし、Ubuntu9.10の2010/3/1の状態では、必要なパッケージが入手しにくく、makeしてもエラーが発生して失敗します。)
== 謝辞 ==
このページの情報を作成するにあたり、
「 kexec-loader を内蔵 HDD にインストールする方法」については、<
>
[[http://www.solemnwarning.net/kexec-loader/faq.cgi#contact|Daniel Collins (aka solemnwarning)]] さんからご教示を賜りました。
また、以上の方法は、 grub4dos や kexec-loader, kexec-tools, Ubuntu の開発者の方のご尽力があったからこそ実現できるものです。
この場をお借りして御礼申し上げます。