📌

カーネル引数を使ってinitramfsのIPアドレスを固定にする

2025/01/29に公開

initramfsのアドレスを固定にする方法を以下に記します。暗号化されたUbuntuのルートファイルシステムをリモートから復号する方法を参考にしています。

考え方

initramfsはLinuxが動作を始める前にその下準備をする小さなLinuxです。initramfsはLinuxシステム本体と同じカーネルを使いますが、デーモン等は共用しません。

動作中のinitramfsに介入するためにdorpbear SSHを使うのですが、その際IPアドレスがDHCPで割り振られていると何かと不都合です。そこで、IPアドレスを固定にする必要があります。

initramfsでIPアドレスを指定するには、単にカーネル引数で指定すれば済みます。

カーネル引数によるIPアドレスの指定

先に述べたようにSSHから接続するためにはIPアドレスを固定しなければなりません。ここで固定するアドレスはDHCPが付与するアドレスとの衝突を避けるため、付与されるアドレスレンジの外でなければなりません。

設定に当たって以下の事を調べておきます。

項目 この稿での略記 説明
IPアドレス xxx.xxx.xxx.xxx initramfsの中で使用したいIPアドレスです。Dropbearでこのアドレスに接続します
ゲートウェイIPアドレス yyy.yyy.yyy.yyy PCが所属するサブネットワークのゲートウェイのIPです
ネットマスク zzz.zzz.zzz.zzz 使用するIPアドレスのネットマスクです
ホスト名 foo initramfsの中で使用するホスト名です。Linuxシステムのホスト名と同じでいいでしょう
インターフェース名 bar ネットワークインターフェースの名前です。あらかじめLinuxシステムを起動して調べておきます

設定はetc/default/grubの中のGRUB_CMDLINE_LINUXの中に書きます。書式はip=の後にあらかじめ調べておいた引数を":"で区切って並べます。最初から順番に

  • initramfsで使用するIPアドレス
  • NFSサーバーのIPアドレス(省略可)
  • ゲートウェイのIPアドレス
  • ネットマスク
  • ホスト名
  • インターフェース名
  • 自動設定方法

となります。上の表の略記を使うと、設定は以下のようになります。

/etc/default/grub
GRUB_CMDLINE_LINUX="ip=xxx.xxx.xxx.xxx::yyy.yyy.yyy.yyy:zzz.zzz.zzz.zzz:foo:bar:none"

最後に私のVMの設定を例として挙げます。

/etc/default/grub
GRUB_CMDLINE_LINUX="ip=192.168.222.101::192.168.2.101:255.255.255.0:myserver:ens33:none"

GRUBの更新

修正を保存したらgrubを更新して再起動します。

sudo update-grub

Discussion