使用 netconsole 记录 netinstall 映像启动

使用 netconsole 记录 netinstall 映像启动

netconsole我正在尝试使用以下文档通过本地网络上的以太网接口将内核启动消息记录到另一个设备:https://www.kernel.org/doc/Documentation/networking/netconsole.txt,我从一个答案另一个问题。

我通过 Debian Netinstall 直到配置了网络,然后了解到ip address接口是enp2s0,IP 地址是192.168.88.17,MAC 是d0:50:99:83:4d:25。我打开路由器的界面检查IP是否保持租用。

我重新启动并修改了内核的启动参数:

setparams 'Graphical install'

    set background_color=black
    linux    /install.amd/vmlinuz vga=788 --- quiet
    initrd   /install.amd/gtk/initrd.gz

到:

setparams 'Graphical install'

    set background_color=black
    linux    /install.amd/vmlinuz vga=788 [email protected]/enp\
2s0,[email protected]/14:f6:d8:b3:99:5d
    initrd   /install.amd/gtk/initrd.gz

F10使用该参数启动。我立即将其复制syslog到 USB 驱动器。我看了一遍。和syslog表明cat /proc/cmdline内核参数已被接受。

启动之前,在目标 Fedora 工作站上,我nc -u -l 6666监听端口,但没有任何显示。

我尝试删除vga=788并添加ignore_loglevel,但仍然没有消息。

lsofDebian Netinstall 上没有。

我应该检查什么才能使其正确?我尝试首先使用 Debian Netinstall 来完成此操作,以便我可以使用导致麻烦的类似映像来完成此操作。


为了进行测试,我尝试netconsole在配置网络时调用正在运行的 Debian Netinstall,但得到以下信息。

~ # insmod netconsole neconsole=@/,@192.168.88.21/
insmod: ERROR: could not load module netconsole: No such file or directory
~ # modeprobe netconsole
modprobe: FATAL: Module netconsole not found in directory /lib/modules/5.10.0-22-amd64
~ # lsmod | grep console

它看起来netconsole根本不包含在 Debian Netinstall 中。获取内核启动消息的其他选项有哪些?

答案1

可以从运行 Debian 安装程序的计算机获取日志ssh。例如,这允许我syslog从带有 USB 键盘的计算机上获取仅在 GRUB2 屏幕上工作但在内核启动后不工作的信息。为此,network-console需要预先播种。我选择通过直接在 GRUB2 中将 URL 添加到内核引导参数来通过本地网络进行预置。 Debian 安装程序文档中提供了其他预置方法。这是对我有用的预置配置文件:

$ cat ~/www/preseed.cfg
# It is necessary to define language settings for ssh to run.
# By example from: https://www.debian.org/releases/bookworm/example-preseed.txt
d-i debian-installer/locale string en_US
d-i keyboard-configuration/xkb-keymap select us

# By example from: https://wiki.debian.org/DebianInstaller/NetworkConsole
d-i anna/choose_modules string network-console
d-i preseed/early_command string anna-install network-console
d-i network-console/password-disabled boolean true
d-i network-console/authorized_keys_url string http://192.168.88.15:8000/id_rsa.pub

它由网络上的机器提供:

$ hostname --all-ip-addresses
192.168.88.15
$ cp ~/.ssh/id_rsa.pub ~/www/
$ cd ~/www
$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.88.17 - - [24/Jun/2023 01:21:19] "GET /preseed.cfg HTTP/1.1" 200 -
192.168.88.17 - - [24/Jun/2023 01:22:38] "GET /id_rsa.pub HTTP/1.1" 200 -

这假设您将ssh公钥保存为id_rsa.pub,这是 RSA 的默认设置。最后两行是目标机器访问提供的预置文件和之后配置时的公钥network-console。要使安装程序自动使用 DHCP 配置网络连接并加载预置文件,只需使用预置配置文件的 URL 命中e并添加到 Linux 内核参数即可。auto=true priority=critical url=以下是我的引导选项在 Debian Netinstall 安装程序上的样子:

setparams '... Automated install '

        set background_color=black                                
        linux    /install.amd/vmlinuz auto=true priority=critical url=192.1\
68.88.15:8000/preseed.cfg vga=788 --- quiet
        initrd   /install.amd/initrd.gz

这是 Trisquel Netinstall 安装程序中的另一个:

setparams '... Automated install'

        set background_color=black
        linux    /linux auto=true priority=critical url=192.168.88.15:8000/preseed.cfg vga=7\
88 --- quiet
        initrd   /initrd.gz

在 Debian 上,firmware=never还可能需要跳过要求安装非自由固件以进行网络配置的步骤,但将其添加为 GRUB 菜单项中的内核引导参数对我来说没有任何效果。 Trisquel 上不需要它,因为 Trisquel 从不提供非免费固件。如果您有HelpGRUB2 菜单选项,则可以从boot提示符中进行预置:

boot: /install.amd/vmlinuz vga=788 initrd=/install.amd/gtk/initrd.gz auto=true priority=critical url=192.168.77.15:8000/preseed.cfg ---

该行遵循以下示例:https://www.debian.org/releases/stable/amd64/apbs02.en.html#preseed-bootparms-examples

以上假设您的计算机上有一个网络设备可供选择。否则,安装程序可能会暂停询问您选择哪一个。

ssh以用户身份进入机器installer。您可以仅从 HTTP 服务器输出中获知 IP 地址。

$ ssh [email protected]

不会network-console立即提供终端。相反,它会要求您选择三个选项之一,包括是否要照常继续安装过程或进入终端。scp并且sftp在此设置下不起作用。

$ scp -i ~/.ssh/id_rsa.pub [email protected]:/var/log/syslog ~/
subsystem request failed on channel 0
scp: Connection closed
$ $ sftp -o IdentityFile=~/.ssh/id_rsa.pub [email protected]
subsystem request failed on channel 0
Connection closed
$ ssh [email protected] 'tar -C /var/log -cf - syslog' > ~/syslog.tar
$ cat ~/syslog.tar
Must be connected to a terminal.
$ mkdir ~/net
$ sshfs [email protected]:/ ~/net/ -v
subsystem request failed on channel 0
read: Connection reset by peer

nano /var/log/syslog逐屏使用并复制了日志。

你可以用Ncat复制syslog!打开它以侦听计算机上的端口并将其输出重定向到文件。

$ nc -l 6666 > syslog

保持其打开并连接到远程计算机。

$ ssh [email protected]

选择Start shell。将日志发送到远程端口。

~ # cat /var/log/syslog | nc 192.168.88.15 6666

相关内容