web-dev-qa-db-ja.com

USB経由で起動するDebianNetinst(執筆時点では8.2)のgrub.cfgメニューエントリをどのように記述しますか?

USBスティックにいくつかのLinuxディストリビューションを保持し、各ディストリビューションにgrub.cfgエントリを書き込むだけでそれらを管理します。私がスティックブートを続けて問題なく動作する他のディストリビューションですが、私は (そして他の人はそう思われます) Debian Jessie(8.x)で問題を抱え始めました。 DebianNetinstはdebian-installercursesインターフェースを起動しますが、grub.cfgのカーネル行にisoパスが指定されている場合でも、正しいdebianisoファイルを検索しようとします。

USBスティックから「debian-8.2.0-AMD64-i386-netinst.iso」を起動しようとして部分的に成功しました。最初に、 ArchWikiにあるUSBマルチブート手順 を使用してUSBスティックをセットアップしました。

これは、USBスティックの簡略化されたファイルとフォルダーの構造であり、その後に関連するgrub.cfgエントリが続きます。

USBROOT/
    ----boot/
        ----grub/
            ----grub.cfg
            ----(other grub paraphernalia)

        ----iso/
            ----debian/
                ----debian-8.2.0-AMD64-i386-netinst.iso
                ----initrd.gz (special initrd)

Iso内にinitramfsがありますが、私が本当に理解していない理由により、debianを適切に起動することはできません。これまでに示した2つのリンクで簡単に説明されています。

今私のgrub.cfgエントリ。これがi386/AMD64マルチアーチISOであることは知っていますが、簡単にするために64ビット部分に焦点を当てます。 64ビットの部分を理解できれば、i386の別のエントリを簡単に作成できるはずです。

probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"

menuentry 'Debian 8.2 Multiarch' {
    set isoname='debian-8.2.0-AMD64-i386-netinst.iso'
    set isopath='/boot/iso/debian'
    set isofile=${isopath}/${isoname}
    set initrdfile=${isopath}/initrd.gz
    loopback loop $isofile
    linux (loop)/install.AMD/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=${imgdevpath}/${isofile} config quiet
    initrd ${initrdfile}/initrd.gz
}

余談ですが、initrd行をに変更します

initrd ${initrdfile}

grub(私は思う)にエラーをスローさせます。 Grubがしばらく一時停止すると、Debianは起動を試み、すぐにカーネルパニックが発生します。これは、initramfsが見つからないためです。ただし、ブロックコードの例に示すようにパスを完全に書き出すと、これは発生しません。手動でフルパスを書き出すだけでなく、変数を設定してパスを指定すると、なぜエラーがスローされるのでしょうか。 しかし、私の主な質問は次のとおりです。

どのカーネルブートパラメータを指定する必要がありますか検索は実行されません そしてisoは指定したパスに配置されます。インストーラーは最終的に検索によって正しいISOを見つけますが、なぜ検索する必要があったのですか?

私はそれがLinuxラインと関係があるとほぼ確信しています:

linux (loop)/install.AMD/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=${imgdevpath}/${isofile} config quiet

テーマを変更するなど、少なくとも20のバリエーションを試しました。

iso-scan/filename=${isofile}
findiso=${imgdevpath}/${isofile}
findiso=${isofile}

編集:initrdの問題を修正しました:$ initrdfileを定義するときに一重引用符がありました。 findiso/iso-scan /その他の問題はまだ残っています。

4
Yankee

Netinstを起動しているので、ISOを完全にスキップして、USBファイルシステムから直接 kernel + initrd を起動できます。これはnetbootd-iであり、Debianリポジトリから残りのコンポーネントをロードするだけです。

ISO検索については、プロセスは次のようになります。

  • grubはISOをロードし、カーネルとinitrdをメモリに読み込みます(あなたの場合、initrdはすでにUSBドライブに抽出されています)
  • グラブはカーネルに制御を渡します
  • カーネルは制御をinitrdのinitスクリプトに渡します
  • initスクリプトが制御をdebian-installerに渡します
  • iso-scan d-i module 提供されたiso-scan/filenameを探して利用可能なすべてのドライブをマウントします
  • iSOが見つかり、ループバックマウントされると、debian-installerはプロセスを続行します

(詳細については、 install docs のセクション6.3.1.4も参照してください)

/dev/disk/by-uuid/UUID/debian/debian8.isoのようなパスを指定する場合、/dev/disk/by-uuid/UUIDはブロックデバイスであり、ファイルが存在できるマウントされたファイルシステムではないため、あまり意味がありません。

Iso-scan/filenameを使用する以外に、iso-scanで検索を絞り込む場合は、値* shared/ask_device=manualおよびshared/enter_device=/dev/disk/UUIDをpreseedすることもできます(カーネル行に追加するだけです)。

これはあなたのgrub.cfgであるはずです:

set imgdevpath="/dev/disk/by-uuid/UUID"

menuentry 'Debian 8.2 Multiarch' {
    set isofile='/boot/iso/debian/debian-8.2.0-AMD64-i386-netinst.iso'
    loopback loop $isofile
    linux (loop)/install.AMD/vmlinuz iso-scan/filename=$isofile shared/ask_device=manual shared/enter_device=$imgdevpath no-Prompt no-eject
    initrd (loop)/install.AMD/initrd.gz
}

私はこれを実際にテストしていないことに注意してください。古いdebianリリース用に私の同様のセットアップからコピーして貼り付けています。

これから始めることをお勧めします。それが機能しない場合にのみ、他のinitrdを試してください。また、UUIDのプローブを再読み込みする前に、「手動で」機能することを確認してください。

*これらは私が以前「ヒント」と呼んだものです。 Ubuntuや他のディストリビューションからのヒントを覚えていると思います

2
GnP

このソリューションを試してください。

grub.cfgを編集して、正しいパスをmini.isoに一致させます。各mini.isoはアーキテクチャに固有です。

menuentry "Debian Stable | Testing | Experimental  AMD64 Netinst" {
    set isoname="mini.iso"
    set isopath="/boot/iso/debian/AMD64"
    set isofile="${isopath}/${isoname}"
    echo "Using ${isoname}..."
    loopback loop $isofile
    linux (loop)/linux priority=low vga=788 ---
    initrd (loop)/initrd.gz
}

menuentry "Debian Stable | Testing | Experimental i386 Netinst" {
    set isoname="mini.iso"
    set isopath="/boot/iso/debian/i386"
    set isofile="${isopath}/${isoname}"
    echo "Using ${isoname}..."
    loopback loop $isofile
    linux (loop)/linux priority=low vga=788 ---
    initrd (loop)/initrd.gz
}

アーキテクチャに一致するmini.isoをここからダウンロードしてください。

幸運を祈ります。

0
user3135427