openSUSE:报告 YaST 错误

跳转到:导航搜索
本页面描述了如何报告 YaST2 或安装过程中的错误。
实际的介绍,说明“在哪里报告错误”

附件 - y2logs、hwinfo 等

我报告了一个 YaST2 错误,现在要求我“附加 y2logs”(对于软件包安装,也包括“libzypp 日志”)。这是什么意思,我该如何操作?

YaST2 在运行期间将日志信息写入以下日志文件/var/log/YaST2我们需要这些信息来重建发生的情况。

Libzypp(软件包库)将有关软件包安装的信息记录到/var/log/zypp、/var/log/zypper.log 和 /var/log/pk_backend_zypp(来自 'gpk-update-viewer' 的日志记录)。

从 SUSE Linux 9.3 或 SLES-9 SP1 开始,在 Qt UI(图形模式)中按 Shift-F8。系统将提示您输入文件名以保存日志。

从 NCurses UI(文本模式),退出 UI 并使用 shell 命令

save_y2logs /tmp/y2logs.tgz

如果您拥有最新 SLE 的新型“模块化”安装,您可能需要安装 yast2 才能获取 save_y2logs

zypper in yast2

从 SUSE Linux 11.2 开始,Shift-F8 或 save_y2logs 还会收集 /var/log/zypper.log 和 /var/log/pk_backend_zypp。对于早期版本(包括 SLES 11 GM/ SP1/SP2),这些文件必须手动添加。

对于 SUSE Linux 9.2(或 SLES-9)或更早版本,请创建包含所有这些文件的(压缩)tar 归档文件。请不要尝试猜测我们需要哪些文件,哪些文件不需要 - 对于大多数人来说,这几乎是不可能的。只需将它们全部打包,如下所示

cd /var/log
tar -czvf /tmp/y2logs.tgz YaST2

无论您使用的是哪个版本,如果这发生在安装/更新的早期部分或系统修复会话期间,请不要忘记将结果文件从/tmp(当时在 RAM 磁盘上)复制到安全的地方 - 软盘、USB 存储设备、不同的硬盘分区或通过网络。

最后,在 Bugzilla 中创建一个新的附件,附加该/tmp/y2logs.tgz文件。请特别选择文件类型tar.gz 归档文件 (app/x-gunzip)在 Bugzilla 中,而不是依赖 Bugzilla 自动检测类型。

Firefox 无法附加我使用 save_y2logs 保存的 /tmp/y2logs-*.tar.gz。为什么?

这是正常的,因为 save_y2logs 必须以 root 用户身份运行,并使用模式 0600 来指示敏感信息。因此,它也阻止您的浏览器读取该文件。在 firefox 中,您不会收到错误消息,提交按钮只是静默失败。请尝试sudo chmod a+r /tmp/y2logs-*.tar.gz

我将 /var/log/YaST2/y2log 附加到 YaST2 错误,但仍然要求我附加 y2logs。为什么?

因为该文件 y2log 只是许多文件中的一个,我们需要这些文件来重建发生的情况。/var/log/YaST2包含更多文件。y2log按一定大小轮换,因此名为y2log只是最新的一个 - 通常较旧的文件包含我们正在寻找的信息。除了这一点,那里还有其他文件可以帮助我们调试问题。

请不要尝试猜测我们需要哪些文件,哪些文件不需要 - 对于大多数人来说,这几乎是不可能的。请打包整个目录 - 有关详细信息,请参阅前面的问题。

重要的是,您始终在安装失败后附加 /var/log/YaST 的目录内容,获得适当日志的最佳方法是使用 YaST logging to USB stick during installation

我想报告与软件包依赖项和 libzypp 求解器相关的错误,现在要求我“附加一个求解器测试用例”。应该附加哪些日志?

您可以通过选择菜单项

 Extras/Generate_Dependency_Resolver_Test_Case 
在单个软件包选择框架中。系统将提示您生成日志文件,您应该将其添加到 bugzilla 条目中。

使用 zypper 创建求解器测试用例,只需将选项 --debug-solver 添加到您的 zypper 命令中。如果您的命令不支持该选项,或者没有相关的 zypper 命令,只需按如下方式运行 zypper

 $ zypper in --debug-solver nopackage
 Loading repository data...
 Reading installed packages...
 'nopackage' not found.
 Resolving package dependencies...
 Generating solver test case...
 Solver test case generated successfully at /var/log/zypper.solverTestCase.

然后打包包含测试用例的目录并将其附加到 bug 报告

 $ tar cjvf /tmp/zypper.solverTestCase.tar.bz2 /var/log/zypper.log /var/log/zypper.solverTestCase

如果测试用例超过了 bugzilla 上传的 10MB 限制,可以使用 split 将文件分成较小的部分

 $ cd /tmp
 $ ls -lh zypper.solverTestCase.tar.bz2
 -rw-r--r--  1 root root 22M Jul  8 09:44 zypper.solverTestCase.tar.bz2
 $ split -b 9M --additional-suffix=-zypper.solverTestCase.tar.bz2 zypper.solverTestCase.tar.bz2
 $ ls -lh x*
 -rw-r--r--  1 root root  9.0M Jul  8 09:56 xaa-zypper.solverTestCase.tar.bz2
 -rw-r--r--  1 root root  9.0M Jul  8 09:56 xab-zypper.solverTestCase.tar.bz2
 -rw-r--r--  1 root root  3.5M Jul  8 09:56 xac-zypper.solverTestCase.tar.bz2

上述求解器测试用例在 95% 的情况下就足够了!另一种方法(只有在上述方法不起作用时。

在 SUSE Linux 10.1(或更早版本)中,请将 /var/log/YaST2/* 附加到 bugzilla 条目,如 此处 所述。在大多数情况下,提高日志级别和日志文件大小会很有帮助

对于软件包安装

export ZYPP_FULLLOG=1
export Y2MAXLOGSIZE=123456789
export Y2MAXLOGNUM=42
yast2 -i

对于您

export ZYPP_FULLLOG=1
export Y2MAXLOGSIZE=123456789
export Y2MAXLOGNUM=42
yast2 online_update

对于图形 YaST

 kdesu -u root -c env ZYPP_FULLLOG=1 Y2MAXLOGSIZE=123456789 Y2MAXLOGNUM=42 /sbin/yast2

我想报告与 Zypper(Zypper、带有 ZYpp 后端的 openSUSE Updater Applet)相关的错误。应该附加哪些日志?

请附加/var/log/zypper.log到错误中。有关更多信息,请参阅 Zypper 故障排除

如果 KDE Updater Applet 中选择了 ZYpp 后端,它会在内部使用 Zypper 执行其任务(例如检查更新、安装更新)。附加/var/log/zypper.log当您怀疑问题实际上在于执行这些任务而不是 applet GUI 或其他地方时。

我想报告与 ZENWorks(ZMD、rug、软件更新器)相关的错误。应该附加哪些日志?

请附加/var/log/zmd-*.log附加到错误中。我们通常需要这两个zmd-messages.log*zmd-backend.log*.

由于这些文件可能很大,请在上传之前压缩它们。这可以节省双方的带宽。

如果您正在运行 SLES 或 SLED 10 Service Pack 2 或更高版本,您可以自行生成求解器测试用例。

/usr/lib/zmd/zmd-solver-testcase /var/lib/zmd/zmd.db output-dir

您应该在 rug 等待确认事务时生成它。此时,事务信息存在于 zmd.db 中。

打包 output-dir 并将其附加到错误中。

如果您在事务确认过程中生成测试用例,例如 rug 要求确认安装软件包时,测试用例将包含所选事务,这将有助于找到问题。

我想报告一个注册错误。我需要做一些特殊的事情吗?

是的,请将 /root/.suse_register.log 和 /var/log/messages 附加到错误中。

我报告了一个 YaST2 错误,现在要求我“附加 hwinfo”。这是什么意思,我该如何操作?

hwinfo 是执行硬件探测的命令。我们需要该命令的输出,以确定探测到的硬件 - 如果您报告的问题的硬件是否被探测到,是否被正确探测到,或者是否存在已知的问题与已知有问题硬件相关。

执行此命令

hwinfo >/tmp/hwinfo.txt

并附加结果文件hwinfo.txt到 Bugzilla。

请不要附加/usr/sbin/hwinfo二进制文件(是的,有些人实际上这样做过) - 我们真正需要的是输出,而不是二进制文件。

我如何附加 YaST2 屏幕截图?

在 Qt(图形)安装中,只需按 PrintScreen 键。系统将提示您输入文件名。但是,这不适用于 NCurses(文本模式)安装。

(yast 功能,不是 kde)

如果错误仍然显示在 xterm 中,您可以在 x-term 中打开 Yast2 并使用 ksnapshot(或任何其他硬拷贝实用程序)进行截图。

我如何在安装过程中执行 shell 命令?

如果您使用的是物理(非网络)控制台,请使用 Ctrl-Alt-F2 切换到控制台 2。在安装过程中,那里有一个 root shell 正在运行。

如果您使用的是带有图形的网络控制台(例如 VNC),可以通过按 Ctrl-Alt-Shift-X 从 YaST 调用终端 获取一个 X 终端窗口。

y2logs 似乎没有显示我的问题。是否可以使该日志记录更详细?

是的,可以:您可以启用调试日志记录(日志级别 y2debug)

  • 在已安装的系统中,设置Y2DEBUG环境变量,然后从相同的 shell(!)启动YaST2
export Y2DEBUG=1
yast2
  • 在安装期间进行调试日志记录,请添加y2debug到内核引导参数(在引导菜单底部的输入字段中)。
  • 如果你忘记添加y2debug到内核引导参数中,你仍然可以在Qt UI(图形模式)中使用 Shift-F7。
  • 向 y2base 发送 SIGUSR1 也会切换调试日志记录
pkill -USR1 -f y2base

无论如何,请注意调试日志记录可能会非常冗长,因此日志可能会变得非常长——这在安装的第一阶段可能会成为问题,因为/var/log在RAM磁盘上。

我告诉你一台出现bug的机器的主机名或IP,然后你们自己从那里获取所有需要的信息,这还不够吗?

不,这是bug报告者的责任。

能够通过 SSH 访问有问题的机器是一个很好的附加项,但这并不能替代在当时将y2logs附加到 bug 报告中。

一方面,很大一部分报告为 YaST2 或安装相关的错误,结果却是完全不同的东西——软件包问题(通过 YaST2 安装,但这并不能使这些问题成为 YaST2 的问题)、内核问题、硬件不兼容、由于用户不屑阅读文档而产生的误解。这意味着我们,YaST2 维护者,已经为许多其他方面做了大量的昂贵的第一级支持工作,我们真的不想再做任何更多的琐碎工作(比如获取y2logshwinfo等等)。

另一方面,等我们真正开始处理这个问题时,相关机器可能早已发生变化——重新安装、日志中充斥着不相关的内容等等;我们也不能简单地放下一切,每次收到一个bug就急匆匆地通过 SSH 连接到某台机器去获取日志等等——特别是当时还不清楚谁会处理这个bug,所以那些分发bug报告的人将不得不除了他们正在做的所有其他事情之外,再做这些。

在安装期间,如何将YaST日志重定向到远程计算机?

这主要用于高级测试/调试。你可以在安装开始前将安装日志简单地重定向到远程NFS服务器(另一台计算机)。关于如何配置它的文章在此处

在安装期间,如何将YaST日志重定向到USB闪存盘?

这与上一个答案类似。YaST日志可以重定向到任何启用写权限的设备,例如USB闪存盘或另一个硬盘。关于如何配置它的文章在此处

如何在调试器 (gdb) 中启动 YaST?如何创建回溯?

在某些情况下,你可能会被要求在调试器中运行 YaST (例如当 YaST 崩溃时) 以获取更详细的信息。

为了提供完整的调试信息,你应该安装相关的 *-debuginfo 软件包。这通常意味着yast2-core-debuginfo, yast2-pkg-bindings-debuginfolibzypp-debuginfo软件包。如果崩溃发生在 YaST 之外(在外部库中),可能需要额外的 debuginfo 软件包。

Debuginfo 软件包在额外的仓库中可用,例如 http://download.opensuse.org/factory/repo/debug/ 包含 Factory 仓库的 debuginfo 软件包。没有 debuginfo 软件包也可以进行调试,但会缺少一些信息(例如函数名、源代码中的确切位置...),因此结果可能无用。

要在gdb调试器中启动YaST解释器,请使用命令

gdb /usr/lib/YaST2/bin/y2base

然后使用

run <module_name> qt

来运行Qt图形界面中的相应YaST模块,Gtk UI使用gtk(也可以使用ncurses UI,但gdb和YaST输出会混杂,请参阅下一段如何解决此问题)。你可以使用'yast -l' 命令查看可用模块列表。

另一种可能性是将gdb附加到已运行的YaST进程。在这种情况下,使用命令

gdb /usr/lib/YaST2/bin/y2base <PID>

其中PID是y2base进程的进程ID。例如,使用'ps -aux' 命令获取ID。在调试器中使用'cont' 命令在附加调试器后再次运行YaST。这样就可以附加到在ncurses UI中运行的YaST模块(从另一个终端)。

现在我们在gdb中运行YaST,我们可以尝试重现问题(崩溃)。当YaST模块崩溃时,在正在运行的调试器中使用bt命令显示程序堆栈(回溯)。如果你需要将其附加到错误报告中,请复制并粘贴输出。

如何手动设置网络连接?

你经常被要求附加 YaST 日志,但是如何在没有网络连接的情况下从 inst-sys 复制它们呢?从 openSUSE 13.2 和 SLE 12 开始,你可以使用这种方法:切换到 Ctrl+Alt+F2 的控制台(在文本模式安装中)或使用 Ctrl+Alt+Shift+X 打开新的 xterm(在图形安装中)。找到你的网络设备名称,例如,eth0,使用

ip a

并创建新的配置文件,例如,vi /etc/sysconfig/network/ifcfg-eth0内容如下

BOOTPROTO=dhcp
STARTMODE=auto

保存它,使用[Esc]:wq并使用以下命令激活你的配置:

wicked ifup all

更多选项,如静态配置,请在已安装系统中输入man ifcfg

常见问题

我收到一个红色的弹窗提示“安装过程中发生错误”。还有办法挽救日志文件吗?

有!只要错误弹出窗口仍然打开,控制台2上的root shell仍然在运行。然而,当你确认该错误弹出窗口时,它就会终止。你可以使用控制台2上的shell来复制失败安装尝试中的日志文件。


我被问到手动安装是否也会出现问题。“手动安装”是什么意思?

在安装介质的启动菜单中,选择“安装”并输入“manual=1”作为启动选项。系统会提示你确认加载内核模块。如果安装在其中一个确认后挂起,这会提供一些关于硬件不兼容或内核驱动程序问题的提示。

我中止了安装并从“linuxrc”重新启动,现在我被问了许多关于要加载的内核模块的问题。怎么回事?

你进入了“手动安装”模式。这完全正常。

安装只以文本模式启动,但我确定我的机器有一块不错的显卡!怎么回事?

图形安装需要分辨率为800x600或更高——在帧缓冲模式下。并非所有显卡都完全符合 VESA 标准来支持这一点,因此安装期间使用的 X 服务器会回退到仅640x480这不足以显示所有内容。我们收到了太多关于文本或对话框元素被截断的投诉,以至于在某个时候我们放弃了对这些旧图形模式的支持。

阅读 YaST 日志

如果你想自己阅读 YaST 日志(/var/log/YaST2/y2log),你可能会迷失在所有信息中并忽略相关部分。

要只查看重要消息,你可以在 y2log 中通过日志级别进行 grep

grep '<[2345]>' /var/log/YaST2/y2log

将只显示严重性为“warning”及以上的日志行。

现有日志级别为

  • 0: debug (调试)
  • 1: milestone (里程碑)
  • 2: warning (警告)
  • 3: error (错误)
  • 4: security (安全,很少使用——如果有的话)
  • 5: internal (内部,有时用于特殊调试消息)

日志级别的详细说明可在 YaST2 文档中找到。