Bug 998152

Summary: Error in setting default boot entry (due non-latin symbols)
Product: [openSUSE] openSUSE Tumbleweed Reporter: Konstantin Voinov <kv>
Component: YaST2Assignee: Josef Reidinger <jreidinger>
Status: RESOLVED WONTFIX QA Contact: Jiri Srain <jsrain>
Severity: Normal    
Priority: P2 - High CC: forgotten_JqTMNXa92r, jreidinger, kv, schubi, vovochka13
Version: Current   
Target Milestone: ---   
Hardware: x86-64   
OS: Other   
URL: https://trello.com/c/sAtpaiX9
Whiteboard:
Found By: --- Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---
Attachments: tail -n 30 y2log
y2log
/etc/default/grub
/etc/sysconfig/language
/boot/grub2/grub.cfg
rpm -qa|grep grub
rpm -qa

Description Konstantin Voinov 2016-09-09 11:51:36 UTC
User-Agent:       Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
Build Identifier: 

Error when trying to select default boot section in Yast2->bootloader->bootlodaer-option


Reproducible: Always

Steps to Reproduce:
0.Install openSUSE or update bootloader from Yast2 with Russian locale
1.Start Yast2 (gui or ncurses)
2.Select "System" - "Bootloader"
3.Goto "Bootloader Options"
4.Select default boot section in  "Default Boot Section"
5 Press "OK"
Actual Results:  
The error appears:

Internal error. Please report a bug report with logs.
Details: Unknown value "openSUSE Tumbleweed , \u0441 Linux 4.6.4-2-default"
Caller:  /usr/share/YaST2/lib/bootloader/sections.rb:41:in `default='

Expected Results:  
Applied default boot section.

Problem appears only if boot entry has Cyrillic symbols (or maybe non-latin).
When I manually changed entry from:

menuentry 'openSUSE Tumbleweed , с Linux 4.6.4-2-default'
("с" is cyrillic)
to
menuentry 'openSUSE Tumbleweed , with Linux 4.6.4-2-default'

problem gone. Or you can run LC_ALL Yast2 and recreate grub.cfg with English locale.
Comment 1 Konstantin Voinov 2016-09-09 12:02:14 UTC
Created attachment 691645 [details]
tail -n 30 y2log
Comment 2 Konstantin Voinov 2016-09-09 12:04:14 UTC
small correction:

problem gone. Or you can run LC_ALL=C Yast2 and recreate grub.cfg with English locale.
Comment 3 Steffen Winterfeldt 2016-09-09 13:01:55 UTC
I could reproduce this, also happens with sle12-sp2.

It's also a bit related to bug 985946.

There are actually two issues:

1) yast crashing as described here
2) yast is not using /etc/sysconfig/language::RC_LANG (cf. bug 985946) essentially resetting the grub language to the locale yast is run in

Josef, could you look into this?
Comment 4 Josef Reidinger 2016-09-12 09:01:58 UTC
yes, will check
Comment 5 Josef Reidinger 2016-11-01 11:50:20 UTC
fix is under review https://github.com/yast/yast-bootloader/pull/374
Comment 6 Josef Reidinger 2016-11-01 14:54:54 UTC
fix merged. If it still happen in TW with yast2-bootloader 3.2.5 or newer, please reopen with fresh logs. Thanks
Comment 7 Konstantin Voinov 2016-11-07 08:24:30 UTC
Still get error:

2016-11-07 18:18:17 <1> Kot(13104) [Ruby] lib/cheetah.rb:158 Executing "/usr/bin/grub2-editenv list".
2016-11-07 18:18:18 <1> Kot(13104) [Ruby] lib/cheetah.rb:206 Standard output: saved_entry=openSUSE Tumbleweed
2016-11-07 18:18:18 <1> Kot(13104) [Ruby] lib/cheetah.rb:178 Status: 0
2016-11-07 18:18:23 <1> Kot(13104) [Ruby] bootloader/sections.rb:38 set new default to '"openSUSE Tumbleweed, \u0441 Linux 4.8.6-1-default"'
2016-11-07 18:18:23 <3> Kot(13104) [Ruby] yast/wfm.rb:235 Client call failed with 'Unknown value "openSUSE Tumbleweed, \u0441 Linux 4.8.6-1-default"' and backtrace ["/usr/share/YaST2/lib/bootloader
2016-11-07 18:18:23 <3> Kot(13104) [Ruby] yast/wfm.rb:256 Internal error. Please report a bug report with logs.
Details: Unknown value "openSUSE Tumbleweed, \u0441 Linux 4.8.6-1-default"
Caller:  /usr/share/YaST2/lib/bootloader/sections.rb:41:in `default='

rpm -qi yast2-bootloader
Name        : yast2-bootloader
Version     : 3.2.6
Release     : 1.1
Architecture: x86_64
Install Date: Вс 06 ноя 2016 16:20:58
Group       : System/YaST
Size        : 220007
License     : GPL-2.0+
Signature   : RSA/SHA256, Чт 03 ноя 2016 23:29:14, Key ID b88b2fd43dbdc284
Source RPM  : yast2-bootloader-3.2.6-1.1.src.rpm
Build Date  : Чт 03 ноя 2016 23:29:07
Build Host  : cloud129
Relocations : (not relocatable)
Packager    : http://bugs.opensuse.org
Vendor      : openSUSE
URL         : http://github.com/yast/yast-bootloader
Summary     : YaST2 - Bootloader Configuration
Description :
This package contains the YaST2 component for bootloader configuration.
Distribution: openSUSE Tumbleweed
Comment 8 Josef Reidinger 2016-11-07 08:30:03 UTC
(In reply to Konstantin Voinov from comment #7)
> Still get error:
> 
> 2016-11-07 18:18:17 <1> Kot(13104) [Ruby] lib/cheetah.rb:158 Executing
> "/usr/bin/grub2-editenv list".
> 2016-11-07 18:18:18 <1> Kot(13104) [Ruby] lib/cheetah.rb:206 Standard
> output: saved_entry=openSUSE Tumbleweed
> 2016-11-07 18:18:18 <1> Kot(13104) [Ruby] lib/cheetah.rb:178 Status: 0
> 2016-11-07 18:18:23 <1> Kot(13104) [Ruby] bootloader/sections.rb:38 set new
> default to '"openSUSE Tumbleweed, \u0441 Linux 4.8.6-1-default"'
> 2016-11-07 18:18:23 <3> Kot(13104) [Ruby] yast/wfm.rb:235 Client call failed
> with 'Unknown value "openSUSE Tumbleweed, \u0441 Linux 4.8.6-1-default"' and
> backtrace ["/usr/share/YaST2/lib/bootloader
> 2016-11-07 18:18:23 <3> Kot(13104) [Ruby] yast/wfm.rb:256 Internal error.
> Please report a bug report with logs.
> Details: Unknown value "openSUSE Tumbleweed, \u0441 Linux 4.8.6-1-default"
> Caller:  /usr/share/YaST2/lib/bootloader/sections.rb:41:in `default='
> 
> rpm -qi yast2-bootloader
> Name        : yast2-bootloader
> Version     : 3.2.6
> Release     : 1.1
> Architecture: x86_64
> Install Date: Вс 06 ноя 2016 16:20:58
> Group       : System/YaST
> Size        : 220007
> License     : GPL-2.0+
> Signature   : RSA/SHA256, Чт 03 ноя 2016 23:29:14, Key ID b88b2fd43dbdc284
> Source RPM  : yast2-bootloader-3.2.6-1.1.src.rpm
> Build Date  : Чт 03 ноя 2016 23:29:07
> Build Host  : cloud129
> Relocations : (not relocatable)
> Packager    : http://bugs.opensuse.org
> Vendor      : openSUSE
> URL         : http://github.com/yast/yast-bootloader
> Summary     : YaST2 - Bootloader Configuration
> Description :
> This package contains the YaST2 component for bootloader configuration.
> Distribution: openSUSE Tumbleweed

OK, so please attach complete y2logs and also /etc/default/grub, so I can see how it is generated.
Thanks
Comment 9 Konstantin Voinov 2016-11-08 04:24:23 UTC
Created attachment 701029 [details]
y2log
Comment 10 Konstantin Voinov 2016-11-08 04:24:54 UTC
Created attachment 701030 [details]
/etc/default/grub
Comment 11 Josef Reidinger 2016-11-08 07:50:33 UTC
hmm, I do not even see call to grub2-mkconfig. Can you please also attach content of /etc/sysconfig/language and /boot/grub2/grub.cfg ? so we see what is system-wide locale and also target config, even if mkconfig is not called? Thanks
Now it looks like some escaping is missing.

Thanks
Comment 12 Konstantin Voinov 2016-11-08 08:24:46 UTC
Created attachment 701051 [details]
/etc/sysconfig/language
Comment 13 Konstantin Voinov 2016-11-08 08:25:13 UTC
Created attachment 701052 [details]
/boot/grub2/grub.cfg
Comment 14 Josef Reidinger 2016-11-08 08:31:05 UTC
Thanks for logs. Now I will do some testing of code as it looks properly generated.

The last think I notice is that it is menu in submenu, but only part of name is used. Can you please also attach output of `rpm -qa` so I see versions of packages? As maybe cfa_grub2 is older then I expect.
Comment 15 Konstantin Voinov 2016-11-08 08:40:13 UTC
Created attachment 701055 [details]
rpm -qa|grep grub
Comment 16 Konstantin Voinov 2016-11-08 08:44:22 UTC
Created attachment 701056 [details]
rpm -qa

Part of name?

I believe the problem is in symbol "с" (U+0441), when yast parsing menu entries.
Comment 17 Josef Reidinger 2016-11-08 09:01:47 UTC
I also thought it, but I do local testing with your grub.cfg and it works for all variants of that string from log:

"openSUSE Tumbleweed, с Linux 4.8.6-2-default"
"openSUSE Tumbleweed, \u0441 Linux 4.8.6-2-default"
"openSUSE Tumbleweed, \xD1\x81 Linux 4.8.6-2-default"

all of them works when testing locally.

but I will try to do more tests. Maybe somewhere in between something goes wrong and it is double escaped.
Comment 18 Forgotten User JqTMNXa92r 2017-01-26 11:19:03 UTC
Hi.
I've a windows boot manager in the yast (Tumbleweed).
It wrote "Windows Boot Manager (на /dev/sda2)". на(rus)=on(en)
and "openSUSE Tumbleweed, с Linux 4.9.4-1-default" "с"(rus)=with(en)
And I've got after OK:

Error
Internal error. Please report a bug report with logs.
Details: Unknown value "openSUSE Tumbleweed, \u0441 Linux 4.9.4-1-default"
Caller: /usr/share/YaST2/lib/bootloader/sections.rb:34:in `default='

\u0441 = russian "с"

===================================
Nick
Comment 19 Josef Reidinger 2017-03-15 15:31:05 UTC
*** Bug 1029307 has been marked as a duplicate of this bug. ***
Comment 20 Stefan Schubert 2018-09-07 13:38:12 UTC
I have been able to reproduce the error with 42.2 but not with 42.3 SLES12_SP3 SLES15 anymore, although the code of 42.2 and SLES12_SP3 is the same in that area. The problem is a simple string compare with these special strings which fails. I am assuming that it is ruby problem ( ruby 2.1.2p95(42.2) ruby 2.1.9p490 (SLE12_SP3))
Additional, in SLES15 and leap15 the code has changed. So the exception has been removed completely and cannot happen anymore.
https://github.com/yast/yast-bootloader/blob/8b8f06a952e2ec0323dfbbbb89cf798b0b103a5b/src/lib/bootloader/sections.rb#L34

As it is quite old we will not fix this issue ( or find a workaround of the ruby bug). Please update to newer releases.