Bug 1215537

Summary: YaST iSCSI Client Crashes with "Services can be only System Service"
Product: [openSUSE] openSUSE Distribution Reporter: Per Jessen <per>
Component: YaST2Assignee: E-mail List <yast2-maintainers>
Status: RESOLVED DUPLICATE QA Contact: Jiri Srain <jsrain>
Severity: Normal    
Priority: P5 - None CC: per
Version: Leap 15.5   
Target Milestone: ---   
Hardware: Other   
OS: Other   
Whiteboard:
Found By: --- Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---
Attachments: y2logs as saved by save_y2logs
gzipped y2log from "anton".

Description Per Jessen 2023-09-20 17:42:34 UTC
Created attachment 869627 [details]
y2logs as saved by save_y2logs

Trying to configure an iSCSI initiator, I get 

Internal error. Please report a bug report with logs.
Run save_y2logs to get complete logs.
Caller:
/usr/share/YaST2/lib/yast2/compound_service.rb:43:in
`initialize'
Details: Services can be only System Service
Comment 1 Stefan Hundhammer 2023-09-20 18:40:27 UTC
The rpm-qa file from that y2logs tarball says it's using

  yast2-iscsi-client-4.5.7-150500.1.1

https://github.com/yast/yast-iscsi-client/blob/SLE-15-SP5/package/yast2-iscsi-client.changes#L14-L20

which is not the latest version that I checked in just today.

https://github.com/yast/yast-iscsi-client/pull/125

which was the fix for bug #1214273 which failed with 'Services can be only System Service'. I am not sure if you can access that other bug since it was reported by a SLES business customer.
Comment 2 Stefan Hundhammer 2023-09-20 18:47:14 UTC
Per, if you feel like doing some experimenting, you could grab this file

https://github.com/yast/yast-iscsi-client/blob/SLE-15-SP5/src/modules/IscsiClient.rb

and copy it to your /usr/share/YaST2/modules directory and try again. It should work then.

Alternatively, you can also wait until this gets shipped as an official Leap 15.5 patch which might take a few days. But you could be an Open Source hero and proactively test it. The penguins are relying on your help! ;-)
Comment 3 Per Jessen 2023-09-21 07:21:02 UTC
(In reply to Stefan Hundhammer from comment #2)
> Per, if you feel like doing some experimenting, you could grab this file
> 
> https://github.com/yast/yast-iscsi-client/blob/SLE-15-SP5/src/modules/
> IscsiClient.rb
> 
> and copy it to your /usr/share/YaST2/modules directory and try again. It
> should work then.

Hi Stefan

I tried that, but I got another error:

Caller:
/usr/lib64/ruby/vendor_ruby/2.5.0/yast/yast.rb:186:in
`import_pure'
Details: undefined method `message' for nil:NilClass 

Looking at your pull request, I see:

"No iscsiuio systemd service running, so it couldn't be detected. The service was not running because the corresponding iscsiuio driver package was not installed, "

In my case, the system was installed without a Broadcom offload interface, so iscsiuio was not auto-selected.  Yesterday I then installed a Broadcom interface, but of course iscsiuio was not "automagically" installed :-)  
I expect it'll all work fine when I:

a) install iscsiuio
b) revert to the previous IscsiClient.rb
Comment 4 Stefan Hundhammer 2023-09-21 07:43:21 UTC
Yes, detecting that it's needed and installing the iscsiuio package in that case is what that pull request was all about.
Comment 5 Stefan Hundhammer 2023-09-21 07:45:48 UTC
Could you attach the latest /var/log/YaST/y2log that contains that latest backtrace, please? (No need for the full save_y2logs etc. in this case since we already have that part).
Comment 6 Per Jessen 2023-09-21 11:21:23 UTC
Created attachment 869652 [details]
gzipped y2log from "anton".
Comment 7 Stefan Hundhammer 2023-09-21 12:12:27 UTC
The last call of this module in that y2log from comment #6:

> 2023-09-21 09:13:06 <1> anton(18321) [Ruby] bin/y2start(<main>):22
>   y2base called with ["iscsi-client", "ncurses", "-name", "YaST2",
>   "-icon", "yast"]
> ...
> ...
> 2023-09-21 09:13:06 <1> anton(18321) [Ruby]
>   clients/iscsi-client.rb(main):44
>   IscsiClient module started
> .
> 2023-09-21 09:13:06 <3> anton(18321) [Y2Ruby]
>   binary/Y2RubyUtils.cc(y2_require):26
>   cannot require yast:undefined local variable or method `null'
>   for main:Object at /usr/share/YaST2/modules/IscsiClient.rb:1:in
>   `<top (required)>'
> .
> 2023-09-21 09:13:06 <3> anton(18321) [Ruby]
>   yast/wfm.rb(handle_exception):271 Client
>   /usr/share/YaST2/clients/iscsi-client.rb
>   failed with 'undefined method `message' for
>   nil:NilClass' (NoMethodError).
> .
> Backtrace:
> .
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/yast.rb:186:in `import_pure'
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/yast.rb:186:in `import'
> /usr/share/YaST2/include/iscsi-client/complex.rb:40:in `initialize_iscsi_client_complex'
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/yast.rb:159:in `include'
> /usr/share/YaST2/include/iscsi-client/wizards.rb:40:in `initialize_iscsi_client_wizards'
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/yast.rb:159:in `include'
> /usr/share/YaST2/clients/iscsi-client.rb:51:in `main'
> /usr/share/YaST2/clients/iscsi-client.rb:104:in `<top (required)>'
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:345:in `eval'
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:345:in `run_client'
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:206:in `call_builtin'
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:206:in `call_builtin_wrapper'
> /usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:195:in `CallFunction'
> /usr/lib/YaST2/bin/y2start:68:in `<main>'
Comment 8 Stefan Hundhammer 2023-09-21 15:35:23 UTC
That backtrace had me stunned for a while. Until I tried exactly what I asked you to do in comment #2: I right-clicked on that hyperlink and saved it with "Save linked content as...".

And promptly I got the same backtrace; because that actually saves a HTML file with lots of meta tags and hyperlinks and CSS references and whatnot, not valid Ruby code. Duh. ;-)

But there is a "download raw file" button on that page directly above the actual code. That should work much better.
Comment 9 Stefan Hundhammer 2023-09-21 15:38:38 UTC
And BTW in the meantime I did more testing on my machine despite not having any iSCSI targets. I made sure not to have package 'iscsiuio' installed and hacked up the code a bit to always execute that

  ... if IscsiClientLib.iscsiuio_relevant?

(it's in the code twice, once for the packages and once for the service)

...and it worked as expected, first prompting me to install the 'iscsiuio' package, installing it and then checking for the 'iscsiuio' service.
Comment 10 Stefan Hundhammer 2023-09-21 15:40:35 UTC
For your immediate needs, please do what you already suggested in comment #3: Install the 'iscsiuio' package and restore the IscsiClient.rb file.
Comment 11 Per Jessen 2023-09-21 17:44:10 UTC
(In reply to Stefan Hundhammer from comment #10)
> For your immediate needs, please do what you already suggested in comment
> #3: Install the 'iscsiuio' package and restore the IscsiClient.rb file.

Hi Stefan

yeah, that is what I have done so far. Don't worry, this is not an urgent problem, it is a new server I am preparing.  I am perfectly happy with the "manual" solution.  

However - may not be relevant to this report:  

I had the bnx2i interface configured with a static address - 10.42.8.70/21.  
Yast complained about not finding "ifconfig", and it still does.  I removed the static address, same problem. (obviously). 

2023-09-21 18:54:14 <1> anton(21674) [Ruby] modules/IscsiClientLib.rb(ip_addr):1786 GetOffloadItems cmd:LC_ALL=POSIX ifconfig eth4
2023-09-21 18:54:14 <3> anton(21674) [bash] ShellCommand.cc(shellcommand):78 sh: ifconfig: command not found
2023-09-21 18:54:14 <1> anton(21674) [Ruby] modules/IscsiClientLib.rb(ip_addr):1788 GetOffloadItems out:$["exit":127, "stderr":"sh: ifconfig: command not found\n", "stdout":""

I see it is available in "net-tools-deprecated" but ...
Comment 12 Per Jessen 2023-09-22 09:06:01 UTC
(In reply to Per Jessen from comment #11)

> 2023-09-21 18:54:14 <1> anton(21674) [Ruby]
> modules/IscsiClientLib.rb(ip_addr):1786 GetOffloadItems cmd:LC_ALL=POSIX
> ifconfig eth4

I had to smile when I saw the source code:

cmd = "LC_ALL=POSIX ifconfig #{dev_name.shellescape}" # FIXME: ifconfig is deprecated

Is it better if I open a separate ticket on that?
Comment 13 Stefan Hundhammer 2023-09-22 10:54:55 UTC
Yes, please let's keep that separate.
Comment 14 Stefan Hundhammer 2023-09-22 10:56:32 UTC
Duplicate of bug #1214273

*** This bug has been marked as a duplicate of bug 1214273 ***