定義されたサーバーで何を開始するかを尋ねる方法

定義されたサーバーで何を開始するかを尋ねる方法

次の起動シナリオを完了するために使用できるオプションは何ですか?

起動時に(起動前に)定義されたネットワークサーバーに接続し、何を起動するかを尋ねます。 (一般的な回答:ローカルハードドライブから起動、代替回答:起動イメージXYZ)

目的は、クライアント側でユーザーの対話なしでクライアントを再インストールできることです。これを行う論理的な方法はPXEブートですが、デフォルトでは通常のブートに設定されている環境を制御できないため、PXEは攻撃ベクトルを開くので安全ではありません。

これまで、私は次を見つけようとしました。ローカルハードドライブからGrub2を起動し、iPXEをチェーンロードします。その後、iPXEはhttpを介して定義されたWebサーバーに接続し、iPXEスクリプトを取得します。しかし、そこで私はローカルドライブから起動する方法を見つけることができませんでした(Grubを再起動して無限ループで終わる以外)。起動しようとしているオペレーティングシステムは、Grub / iPXEが起動したのと同じハードドライブのパーティション2にあります。

  1. 私たちが達成したいことを達成する他の方法はありますか?
  2. 2番目の起動(iPXEから再起動)でGrubに別のオプションを選択するように指示するか、iPXEにパーティション2から起動するように指示する方法はありますか?

注:パーティション2には、Grubメニューから起動できるWindows Boatloaderが含まれています。

答え1

私はリモートシステムをアップグレードするために次の技術を使用しましたが、これはあなたにも役立ちます。このシステムではリセットを開始するだけで、(ブート)画面は表示できません.システムはgrub(Ubuntu 12.04)で起動し、追加のパーティションとデータパーティションがあります。秘密は以下を挿入することです /etc/default/grub

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=false

以下の場合を除き、常にエントリ0(Ubuntu 12.04)で起動します。

  • コンソールの誰かが別のものを選択しました。
  • grub-reboot XUbuntuにログインして実行してから再起動してください。

Ubuntuからtarファイルをダウンロードして追加のパーティションに抽出し(または手動で少し変更を加える)、実行してupdate-grubgrubメニューを更新します(新しく塗りつぶされた追加のパーティションをスキャンし、そのOSのメニュー項目を作成します)。grub-reboot と を使用しますreboot

マシンを回復できない場合(つまりssh猶予期間以降に回復できない場合)、マシンをリセットするとUbuntuで再起動し、何が間違っているかを分析し、次のサイクルの準備ができます。

起動時に適切なプログラムを実行すると、ダウンロードする必要がある次の「画像」が何であるかを確認し、そのイメージがすでに存在するか(ダウンロードしていない場合)確認してインストールできます。その後、上記のように再起動します。

リーンベースのsystemdディストリビューションの場合、再起動プロセスは比較的高速である必要があり、代替OS/ディストリビューションのダウンロード/インストールにはほとんど時間がかかります。

答え2

私たちが探していることを達成する方法を見つけました。 grubenvと@Anthonのヒントを提供した@jc__に感謝します。

だから私の解決策は次のとおりです。 iPXE カーネル バイナリ (.lkrn) をカスタム スクリプトと共に配置してブート制御サーバーに接続するには /boot

その後、Grubを設定します。

1-grubenvで変数を使用する

GRUB_DEFAULT=saved

2- /bootのGrubからiPXEをチェーンロードし、iPXEを起動する前に、次のコマンドを含めます。

set saved_entry='<menuentry to boot from local drive>'
save_env saved_entry

3- Grubメニュー項目の前に、ローカルドライブからオペレーティングシステムをロードするコマンドを追加します。

set saved_entry='<menuentry iPXE>'
save_env saved_entry

4- アクションが不要な場合、ブート制御サーバーは iPXE にローカルドライブからブートするよう指示します。

sanboot --no-describe --drive 0x80

5- Grubを再ロードしてローカルドライブから起動し、次の起動をiPXEに戻します。

Windows 10への起動時間(起動制御サーバー要求を含む)は約25秒です。だから実際にはかなり高速です。 :)

答え3

これを達成する方法は少なくとも2つあります。

  1. 見てhttp://ipxe.org/appnote/work_around_bios_halting_on_ipxe_exit#examples、次のいずれかのコマンドが適している可能性があります。

    chain ${server}/grub4dos.exe --config-file="find --set-root /BOOTMGR;chainloader /BOOTMGR"
    chain ${server}/grub4dos.exe --config-file="root (hd0,1);chainloader +1"
    
  2. iPXE サイトの GRUB4DOS でこのページを探す前にこれを構築したため、現在以下を使用しています。 ISOLINUXと次の構成を含むISOイメージを生成します。

    NOESCAPE 1
    PROMPT 0
    ALLOWOPTIONS 0
    
    DEFAULT chain-hd0-2
    LABEL chain-hd0-2
    SAY Chaining hd0 2...
    COM32 chain.c32
    APPEND hd0 2
    

    次のコマンドで始まります(デフォルトは0x80に設定され、ローカルディスクを上書きするため、ここでは0x81を使用する必要があります)。

    sanboot --drive 0x81 ${server}/chain-hd0-2.iso
    

関連情報