自分で起動してインストールできるイメージをリモートでインストールできますか?

自分で起動してインストールできるイメージをリモートでインストールできますか?

Linuxを実行しているリモートサーバーがあります。 OSイメージが破損した場合に備えて、リモートでOSイメージをマウントしたいと思います(OSの実験中にこれが2回発生しました)。

これまで私ができる唯一の方法は、物理的にコンピュータの場所に移動し、USBディスクを使用してOSをインストールすることです。これにより、BIOSでそれを確認して起動できます。

基本的にコンピュータに接続しssh、このイメージを添付し、Windowsの仮想ドライブ(デーモンツールなど)にあるかのように動作し、再起動後も維持され、OSをリモートでインストールできるようにする方法はありますか?

Googleが解決策を探していましたが、PXEブートに関する言及があることがわかりました...サーバーなどが必要なので、複雑に聞こえ、イメージをインストールして完了するのと同じくらい簡単ではありません。

それ以外は役に立つものが見つからなかったので、オプションは非常に限られています。これを実装する方法を知っている人はいますか?

答え1

私が合理的だと思う仮想的な状況は次のとおりです。

  1. ターゲットマシンはEFIです。
  2. grubターゲットにインストールされていないか、システムから完全に消去されました。
    • 邪魔にならず、そうでなければ貴重なものは提供できません。

/espしたがって、上記のシナリオで私たちができることは、EFIシステムパーティションに保存する小さなインストール/修復イメージの起動オプションを設定することです。

現在のインストールに問題がある場合は、少なくともEFIシステムパーティションにアクセスする方法がある限り、ファームウェアを接続し、次の再起動時にリカバリイメージから起動するようにマシンを設定できます。この場合、私たちがしなければならないのは、テキストファイルの1つまたは2つを変更し、祈り、実行することだけです。reboot now

以下は、Arch Linuxの最小構成のための基本的なコマンドセットです。(私が使う方法だから)システムは私が説明したようにまだ動作します。

  • まず、作業ディレクトリを作成し、いくつかのファイルをダウンロードします。

    • 私はaria2cそれをここで使用しています。私はそれをお勧めしますが、効果があるものを使用してください。
    • 私はrEFIndunzipツールを使用します7zaが、すべての場合に同じツール設定を使用します。
    • 私が投稿してから数時間/日以内にこの記事を読んでいない場合は、以下のリンクを使用する可能性があります。いいえ現在の。

      mkdir /tmp/work && cd /tmp/work || exit
      aria2c  'magnet:?xt=urn:btih:331c7fac2e13c251d77521d2dc61976b6fc4a033&dn=archlinux-2015.06.01-dual.iso&tr=udp://tracker.archlinux.org:6969&tr=http://tracker.archlinux.org:6969/announce' \
              'http://iweb.dl.sourceforge.net/project/refind/0.8.7/refind-cd-0.8.7.zip'
      7za x ref*.zip; rm ref*zip
      
  • 次に、ミラーディスクを作成したいと思います。

    • ここではループデバイスのあるファイルを使用していますが、ファームウェアからこのファイルを起動するには物理ディスクを使用する必要があります。
    • 物理デバイスの場合、fallocateコンテンツlosetupは無視される可能性があるため、実際のデバイス名が/dev/sda[12]次のように一致する可能性が高くなります。/dev/loop0p[12]

      fallocate -l4G img
      
  • 次に、このユーティリティを使用してgdiskこのディスクを分割し、ループデバイスに割り当てます。

    • これは、プログラムに対話的に提供するオプションのスクリプト化されたショートカットです。 GUIDパーティションテーブルとタイプのテーブルを作成します。EFIシステムこれは、ターゲットディスクの最初の利用可能な750Mibとディスクの残りの部分にまたがる別のLinuxベースパーティションにまたがっています。
      • 物理ディスクを使用している場合、パーティションは/dev/sda1それぞれ、およびです。 Linuxのルートディレクトリに複数のパーティションを追加する必要があることがよくあります。/dev/sda2/dev/sda./img/dev/sda2
    • printfこのプログラムはスクリプトの有無にかかわらず使いやすいgdiskので、インタラクティブに使用する方が良いでしょう。実行中はターゲットディスクをマウントしないでください。w変更を書き込むにはroot権限が必要な場合があります。
    • 一般に、このプログラムでは必要なほとんどすべての操作を実行できますが、w作成するまでは何も起こりません。
    • $TGT私の変数をシェル変数に入れます。ここで定義されているものに加えて、必要に応じてカスタマイズすることができ、私が使用している場合でも可能です。

      printf %s\\n o y n 1 '' +750M ef00 \
                       n 2 '' '' '' '' w y |
      gdisk ./img     >/dev/null
      TGT=$(sudo losetup --show -Pf img)p
      
  • また、espにファイルシステムが必要です。 FATでなければなりません。

    • 私はfsタグを与えましたVESP。あなたが望むように電話する必要があります。
    • 後でこのタグとは異なる設定ファイルを使用する予定/etc/fstabですので、必ずこれを行ってください。何。
    • 私の考えには常にラベルを付けるべきだと思います。みんなディスク。
    • 現在オペレーティングシステムがインストールされている場合は、${TGT}2もちろんファイルシステムも必要です。

      sudo mkfs.vfat -nVESP "$TGT"1
      
  • いくつかのディレクトリを作成mountし、関連ファイルの抽出を開始します。

    set     ref     ref*iso         \
            arch    arch*iso        \
            efi     arch/EFI/archiso/efiboot.img
    while   [ "$#" -gt 0 ]
    do      mkdir "$1" || exit
            sudo mount "$2" "$1"
            shift 2
    done;   mkdir esp
    
  • インストールするrEFInd...

    • rEFIndブートマネージャです。主に起動メニューを提供して入力します。
    • rEFIndespに設定ファイルを配置し、必要に応じていつでも編集できます。

      sudo ref/install.sh --usedefault "$TGT"1 &&
      sudo umount ref  && rm -rf ref*
      
  • これで、mountespを使用してArchインストールディスクから必要なファイルをインポートし、ライブブータブルリカバリディスクを入手します。

    • ほとんどのライブディスクは、非分割フラットISOファイルシステムを作成するために醜いハッキングを実装しています。バラよりBIOSシステムとの下位互換性を維持しながら、UEFIシステムで許可されている起動デバイスと同じです。
    • Arch Linuxも例外ではありません。
    • これ醜いハッカーそれだけです。efiboot.img現在./efi.whereにインストールされており、カーネルとinitramfsイメージファイルを見つけることができます。これその他ディスク上(存在する./arch/arch/boot〜するいいえEFIシステムに適しています。

      sudo sh -ec    <<CONF '
           mount    "$1" esp
           cp -ar    efi/EFI/archiso esp/EFI
           cp -ar    arch/arch/*x86* esp/EFI/archiso
           mkdir     esp/EFI/archiso/cow
           xargs   > esp/EFI/archiso/refind_linux.conf
           umount    efi arch
           rm -rf    efi arch*' -- "$TGT"1
      \"arch_iso\" \"archisobasedir=EFI/archiso    \
                     archisolabel=VESP             \
                     copytoram                     \
                     cow_label=VESP                \
                     cow_directory=/EFI/archiso/cow\
                     cow_persistence=P             \
                     cow_spacesize=384M            \
                     initrd=EFI/archiso/archiso.img\"
      CONF
      

デフォルトでは、永続性に基づいて最初からプリブート回復環境をインストールしました。書き込み中のコピーアーカイブの保存(たとえば、systemctl enable sshd_socket次回のライブシステムの起動時にこの設定を維持できます。)。 Arch Linuxライブインストールメディアはシステムのブートパーティションにあり、ブートメニューからいつでも読み込むことができます。もちろん、ブートメニューマネージャもインストールします。

  • 上記に関しては、次の点に注意してください。
    • *x86*私は64ビットコンピュータを持っており、globが私のニーズに適しているので、これを使用しています。 32ビットインストールの場合(ところでなぜ?)代わりに使用してください*686*
      • 私は必要ですところで、計7個のファイル(約300M)のみあります。
      • live-systemのrootfsは圧縮イメージですesp/EFI/archiso/x86_64/airootfs.sfs
    • ラベルでディスクを指定します。いいえヒントまたは、他の不可解なサウンド - ディスク名が指定され、簡単に見つけることができます。代わりに、espタグが選択する項目を置き換える必要があります。VESP
    • これcopytoramカーネルパラメータは、Arch Linuxライブinitシステムにループマウント前にrootfsイメージをtmpfsにコピーするように指示します。これにより、その環境で作業するときに実際にespにアクセスできます。ほとんどのフィールドマウントシステムは同様の配置を提供します。

EFIのハイライトは処理能力です。ファイルシステム。最新のコンピュータでは、生のバイナリを圧縮してディスクパーティション間に挿入する必要はありません。人々がまだこれを行うのではなく、日常のディレクトリツリーに配置された単純なテキストファイルを使用してブート環境を管理および設定できることは私にとっては驚くべきことです。上記では、カーネルとinitramfsを中央ツリー構造の独自の名前付きフォルダに配置しました。 EFI(rEFInd便宜上、この例ではインポート)は起動時に呼び出されます。パス名〜のため特に

今残っていることは、必要に応じて実際に起動するシステムを選択する方法を理解することです。ダウンロード - 今すぐ起動できます。仮想マシンでこれを行うことができます。qemu (OVMFファームウェアが必要です-pflashまたは、コンピュータを再起動してカーネルをrEFInd検出し、そのパス名をファームウェアに渡すと、Arch Linuxライブシステムがロードされ実行されます。ディスクにより永続的なシステムをインストールする場合、または複数をインストールする場合(ライブディスクから再起動してインストールを実行することを選択した場合は、これを行うことができます。)- カーネルとinitramfsを同じ構造に保つ必要があります。これは整理しやすいです。

  • たとえば、想像力が不足してルートパーティションにシステムをインストールしたい場合は、root、次のように設定したいと思います。

    • mount --bindルートパス/bootの特定の起動フォルダ/etc/fstab
    • この問題を処理する/etc/fstabには、2行を作成してマウントポイントを作成する必要があります。/esp

      sudo sh -c          <<\FSTAB     '
           [ -d /esp ]    || mkdir /esp
           findmnt   /esp || mount -L ESP /esp
           mkdir -p  /esp/EFI/root
           cp        /boot/kernel binary   \
                     /boot/initramfs.img   \
                     /esp/EFI/root
           mount -B  /esp/EFI/root /boot
           cat   >>  /etc/fstab
           echo "$1">/boot/refind_linux.conf
      ' -- '"new_menu_item" "root=LABEL=root"'
      LABEL=ESP       /esp    vfat    defaults        0 2
      /esp/EFI/root   /boot   none    bind,defaults   0 0
      FSTAB
      

このような作業はインストールごとに一度だけ行えます。最初にこのように設定しなかったと仮定すると、カーネルとinitramfsがすでに属している場所にあるので、より簡単です。この行/etc/fstabと最小構成ファイルを入力すると、/boot/refind_linux.confすべての準備が完了しました。このように、同じデバイスを使用して、同じシステムで必要な数のインストールをサポートでき、/esp起動可能なすべてのバイナリを同じツリーにまとめることができます。システムごとにいくつかの異なるタスクを実行します。たとえば、Windowsの場合、これに準拠するにはもう少し同軸操作が必要です。すべての職業

  • さて、前述したように、最後に知っておくべきことは、ファイルシステムから次の起動可能なインストールを選択する方法です。これはファイルに設定されています/esp/EFI/BOOT/refind.conf

    • このファイルをお読みください。おそらく99%のコメントが含まれており、このファイルで何ができるかを教えてくれます。
    • もちろん、実際には何もする必要はありません。rEFIndデフォルトでは、スキャンツリーで最後に更新されたカーネルが起動されます。
    • しかし、私は通常、次のオプションを設定します。

      <<\DEF sudo tee \
             /esp/EFI/BOOT/refind.conf.def
      ### refind.conf.def
      ### when renamed to refind.conf this file
      ### will cause refind to select by default
      ### the menu item called "new_menu_item"
      ### in its /boot/refind_linux.conf
      default_selection new_menu_item
      ### this file will also set the menu timeout
      ### to only 5 seconds at every boot
      timeout 5
      ### END
      DEF
      
    • 構造ファイルもあります...

      <<\RES sudo tee \
             /esp/EFI/BOOT/refind.conf.res
      ### refind.conf.res
      ### this one will default to selecting
      ### the entry named "arch_iso" with a
      ### 10 second timeout
      default_selection arch_iso
      timeout 10
      ### END
      RES
      
      • これで移動できます。
      • たとえば、次のようにして構造環境を確実に起動させるにreboot now

      sudo cp /esp/EFI/BOOT/refind.conf.res \
              /esp/EFI/BOOT/refind.conf
      
      • 交換して.def~のため.resもちろん、上記で使用したのは、デフォルトのルートディレクトリに戻ることです。

答え2

わかりやすくするため、ご質問を再度ご説明いたします。

Linuxディストリビューションをインストールしたいが、サーバーへの物理的なアクセスを避けたい。次の選択肢は使用できません。

  • DellのiDRACまたは他のベンダーの同等の製品。これらのソリューションは、帯域外サーバー管理を提供し、サーバー上でオペレーティングシステムを実行しない場合でも機能し、提供する機能の1つは、仮想USBスティックなどの仮想インストールメディアを接続できることです。
    • ただし、これを使用するには、その機能を備えたサーバーが必要です。
  • PXEを使用したネットワーク起動。 PXEは、DHCPとTFTPを使用してネットワーク経由でサーバーを起動できるようにする今日のほとんどのサーバーの機能です。
    • ただし、PXE を使用するには、DHCP サーバーと TFTP サーバーを構成できる必要があります。

あなたの質問で提案したアイデアは、サーバー上の既存のオペレーティングシステムを使用してネットワーク経由でインストールイメージをインストールし、何とかインストールイメージをインストールすることです。

一見すると、これは確かに不可能です。インストールするには再起動する必要があります。特に、既存のオペレーティングシステムの上にインストールする場合は現在のオペレーティングシステムを上書きし、再起動しないとオペレーティングシステムを上書きします。まだ使用中です。しかし、再起動すると、ネットワークインストール用のインストールイメージを含め、既存のオペレーティングシステムは当然終了する。

私が考えることができる方法はほとんどありません。これには2人の候補者がいます。どちらも非常に高度なプロセスであるため、プロセスが何をしているのか、どのように機能するのか理解していない限り、試してはいけません。また、まずローカルにアクセスできるサーバーを使用する練習をしてください。

  • kexec既存のオペレーティングシステムから直接別のオペレーティングシステムを起動するために使用されます。kexec現在、オペレーティングシステムを置き換える新しいオペレーティングシステムの起動イメージを提供できる私が知っている唯一のツールです。kexecこれは、現在のオペレーティングシステムがLinuxであり、ターゲットオペレーティングシステムもLinuxの場合にのみ(有効に)機能します。

    kexecロードするカーネルとinitrdを提供するように要求します。ルートファイルシステムイメージなどの他のものを提供することはできません。幸いなことに、ほとんどのLinuxインストーラは別々のカーネルとinitrdのペアを使用するので、それを使うことができます。たとえば、Debian インストーラに必要なカーネルと initrd を以下から取得できます。ネットワークリリースダウンロードページ。それからそれらを抽出しなさいnetboot.tar.gz。 (はい、ネットワークブートと同じカーネルとinitrdを使用できるはずです。)

    私はこのアイデアをまだテストしていません。エキスパートプログラムであると仮定するため、これを実装するにはいくつかの作業を行う必要があるかもしれません。これはこの回答の範囲外です。

  • 現在のオペレーティングシステム内に新しいオペレーティングシステムをインストールします。その後、新しいものに切り替えます。別のパーティションにインストールするか、LVM(この場合は推奨)を使用している場合は、別のLVにインストールできます。もちろん、これには両方のオペレーティングシステムを一時的に保存するのに十分なスペースが必要です。

    debootstrap通常のオペレーティングシステムインストーラの代わりに、新しいオペレーティングシステムのインストールなどのツールを使用する必要があります。これを使用することはdebootstrap通常、インストーラが処理するいくつかの手順(カーネルとブートローダのインストール、基本的なシステム設定ファイルの編集)を直接実行する必要があるため、通常のインストーラを使用するよりもはるかにユーザーフレンドリーではありません。これもこれを専門家プログラムにします。

すべての場合にリモートコンソールを介してサーバーにアクセスできるようにしたいです。これは、たとえばIPMIを介して達成できます。

関連情報