drop rb_safe_level() from ruby-curses to fix irqtop from missing symbols and deprecation warnings

Bug #1907932 reported by Ferdinand Postema
12
This bug affects 1 person
Affects Status Importance Assigned to Milestone
ruby-curses (Debian)
Fix Released
Unknown
ruby-curses (Ubuntu)
Fix Released
Undecided
Unassigned
Focal
Fix Released
Medium
Matthew Ruffell
Jammy
Fix Released
Medium
Matthew Ruffell

Bug Description

[Impact]

rb_safe_level() had been marked for deprecation for some time, and was finally removed in Ruby 3.0.

ruby-curses uses rb_safe_level(), and it causes issues with its rdepends, most notably irqtop.

irqtop is unusuable on Jammy, with it failing to start due to not finding the rb_safe_level symbol.

$ sudo irqtop
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/3.0.0/curses.so: undefined symbol: rb_safe_level - /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/3.0.0/curses.so (LoadError)
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/lib/ruby/vendor_ruby/curses.rb:18:in `rescue in <top (required)>'
 from /usr/lib/ruby/vendor_ruby/curses.rb:14:in `<top (required)>'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/bin/irqtop:9:in `<main>'

On Focal, irqtop fills the screen with deprecation warnings making the tool unusable.

/usr/bin/irqtop:545: warning: rb_safe_level will be removed in Ruby 3.0

[Testcase]

$ sudo apt install irqtop
$ sudo irqtop

On Jammy:
Check to see if the tool launches, and you no longer get the "undefined symbol: rb_safe_level - /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/3.0.0/curses.so (LoadError)" error.

on Focal:
Launch the tool, press enter several times to refresh the results. There should be no mention of "/usr/bin/irqtop:545: warning: rb_safe_level will be removed in Ruby 3.0", and the tool should be readable.

Test packages are available in the following ppa:

https://launchpad.net/~mruffell/+archive/ubuntu/sf385554-test

If you install the test packages, irqtop will function normally.

[Where Problems Could Occur]

We are removing a long deprecated string safety check, which I assure you, does not change the security of the tools using the ruby-curses library, due to most levels being disabled already in ruby itself.

As for the effect on the programs that depend on ruby-curses, ruby-curses only has 2 redepends, one of which is irqtop:

$ apt rdepends ruby-curses
ruby-curses
Reverse Depends:
  Depends: irqtop
  Depends: ruby-blade

If a regression were to occur, it would only impact irqtop and ruby-blade users. Users could downgrade ruby-curses while a fix is developed.

[Other Info]

This was fixed in the below commit, in version 1.3.2:

commit a9b9db9b5d5a4b52e3d0e0eaf0fbb2be839a3c29
From: Eric Wong <email address hidden>
Date: Sat, 30 Nov 2019 01:45:21 +0000
Subject: drop rb_safe_level check
Link: https://github.com/ruby/curses/commit/a9b9db9b5d5a4b52e3d0e0eaf0fbb2be839a3c29

Both Focal and Jammy required a backport. Only window and mouse events are implemented in 1.2.4, so I removed the hunks that targeted events that were implemented later.

Revision history for this message
Axel Beckert (xtaran) wrote :

This is an issue in ruby-curses, not irqtop. See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=958973

Interestingly this no more happens on Debian Unstable/Testing. This seems to have fixed upstream a few months ago:

commit df3f52a6331f1a47af9933b77311a8650727d8d1
  Author: nagachika <email address hidden>
  Date: 2020-09-29 22:43:25 +0900

    merge revision(s) 996af2ce086249e904b2ce95ab2fcd1de7d757be: [Backport #16345] [Backport #17000]

            Disable deprecation warning by the default [Feature #16345]

            And `-w` option turns it on.

That commit likely made it into ruby 2.7.2, which hit Debian Unstable in mid-October 2020.

Nevertheless this obviously needs to be fixed in ruby-curses.

Revision history for this message
Axel Beckert (xtaran) wrote :

Note: The cited commit and "fix" was in the package ruby, but the problem in ruby-curses still exists as ruby only silenced the deprecation warnings by default.

summary: - irqtop emits a warning
+ ruby-curses: Emits warning: "rb_safe_level will be removed in Ruby 3.0",
+ affects at least irqtop
Changed in ruby-curses (Debian):
status: Unknown → Confirmed
Changed in ruby-curses (Debian):
status: Confirmed → Fix Released
Revision history for this message
Erik Meitner (eamuwmath) wrote : Re: ruby-curses: Emits warning: "rb_safe_level will be removed in Ruby 3.0", affects at least irqtop

Problem does not seem to be solved as now irqtop fails completely.

root@hongkong:~# irqtop
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/3.0.0/curses.so: undefined symbol: rb_safe_level - /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/3.0.0/curses.so (LoadError)
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/lib/ruby/vendor_ruby/curses.rb:18:in `rescue in <top (required)>'
 from /usr/lib/ruby/vendor_ruby/curses.rb:14:in `<top (required)>'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/bin/irqtop:9:in `<main>'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- 3.0/curses.so (LoadError)
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/lib/ruby/vendor_ruby/curses.rb:16:in `<top (required)>'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/bin/irqtop:9:in `<main>'

root@hongkong:~# dpkg -l irqtop ruby-curses
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-=============-============-=============================================
ii irqtop 2.6-2ubuntu1 all Observe IRQ and SoftIRQ in a top-like fashion
ii ruby-curses 1.2.4-1build3 amd64 curses binding for Ruby

root@hongkong:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"

Revision history for this message
Farshid Tavakolizadeh (farshidtz) wrote :

This is reportedly fixed on the newer versions of ruby-curses. Here is the bug report for Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=958973

Ubuntu Jammy (22.04) is still on ruby-curses 1.2.4 which is makes irqtop nonfunctional. Newer versions of Ubuntu are not affected.

no longer affects: iptables-netflow (Ubuntu)
Changed in ruby-curses (Ubuntu):
status: New → In Progress
importance: Undecided → Medium
assignee: nobody → Matthew Ruffell (mruffell)
tags: added: focal jammy sts
Changed in ruby-curses (Ubuntu):
status: In Progress → Fix Released
importance: Medium → Undecided
assignee: Matthew Ruffell (mruffell) → nobody
Changed in ruby-curses (Ubuntu Focal):
status: New → In Progress
Changed in ruby-curses (Ubuntu Jammy):
status: New → In Progress
Changed in ruby-curses (Ubuntu Focal):
importance: Undecided → Medium
Changed in ruby-curses (Ubuntu Jammy):
importance: Undecided → Medium
Changed in ruby-curses (Ubuntu Focal):
assignee: nobody → Matthew Ruffell (mruffell)
Changed in ruby-curses (Ubuntu Jammy):
assignee: nobody → Matthew Ruffell (mruffell)
Revision history for this message
Matthew Ruffell (mruffell) wrote :

Attached is a debdiff for jammy which solves this issue.

summary: - ruby-curses: Emits warning: "rb_safe_level will be removed in Ruby 3.0",
- affects at least irqtop
+ drop rb_safe_level() from ruby-curses to fix irqtop from missing symbols
+ and deprecation warnings
description: updated
Revision history for this message
Matthew Ruffell (mruffell) wrote :

Attached is a debdiff which solves this issue for focal.

Revision history for this message
Heitor Alves de Siqueira (halves) wrote :

Thanks for the debdiffs, Matthew! Changes and basic testing look good, thank you for the backport notes.

Sponsored for F/J.

Revision history for this message
Timo Aaltonen (tjaalton) wrote : Please test proposed package

Hello Ferdinand, or anyone else affected,

Accepted ruby-curses into focal-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/ruby-curses/1.2.4-1ubuntu0.20.04.1 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, what testing has been performed on the package and change the tag from verification-needed-focal to verification-done-focal. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-focal. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

Changed in ruby-curses (Ubuntu Focal):
status: In Progress → Fix Committed
tags: added: verification-needed verification-needed-focal
Changed in ruby-curses (Ubuntu Jammy):
status: In Progress → Fix Committed
tags: added: verification-needed-jammy
Revision history for this message
Timo Aaltonen (tjaalton) wrote :

Hello Ferdinand, or anyone else affected,

Accepted ruby-curses into jammy-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/ruby-curses/1.2.4-1ubuntu0.22.04.1 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, what testing has been performed on the package and change the tag from verification-needed-jammy to verification-done-jammy. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-jammy. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

Revision history for this message
Matthew Ruffell (mruffell) wrote :

Performing verification for Jammy.

I started a fresh jammy VM, and installed irqtop 2.6-2ubuntu3 with ruby-curses 1.2.4-1build3, from -updates.

I then ran:

$ sudo irqtop
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/3.0.0/curses.so: undefined symbol: rb_safe_level - /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/3.0.0/curses.so (LoadError)
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/lib/ruby/vendor_ruby/curses.rb:18:in `rescue in <top (required)>'
 from /usr/lib/ruby/vendor_ruby/curses.rb:14:in `<top (required)>'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/bin/irqtop:9:in `<main>'
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- 3.0/curses.so (LoadError)
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/lib/ruby/vendor_ruby/curses.rb:16:in `<top (required)>'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
 from /usr/bin/irqtop:9:in `<main>'

irqtop fails to start with "undefined symbol: rb_safe_level - /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/3.0.0/curses.so (LoadError)".

I then enabled -proposed, and installed ruby-curses 1.2.4-1ubuntu0.22.04.1 and tried:

jammy-test - irqtop - 2024-06-16 07:06:25 +0000
              CPU0 CPU1 CPU2 CPU3
  cpuUtil: 0.0 0.0 0.0 0.0 total CPU utilization %
     %irq: 0.0 0.0 0.0 0.0 hardware IRQ CPU util%
    %sirq: 0.0 0.0 0.0 0.0 software IRQ CPU util%
 irqTotal: 4 5 2 6 total hardware IRQs
i 34: . . . 0 PCI-MSI 524289-edge virtio0-input.0
i 36: . 0 . . PCI-MSI 524290-edge virtio0-output.0
i 37: 0 . . . PCI-MSI 2097153-edge virtio2-req.0
i 38: . 0 . . PCI-MSI 2097154-edge virtio2-req.1
i 39: . . 0 . PCI-MSI 2097155-edge virtio2-req.2
i LOC: 3 4 1 5 Local timer interrupts
i RES: 0 0 0 0 Rescheduling interrupts
i CAL: 1 1 0 0 Function call interrupts
s TIMER: 2 1 1 4
s NET_RX: 0 0 0 0
s TASKLET: 0 0 0 0
s SCHED: 2 2 1 4
s RCU: 0 0 0 1

Everything now works correctly. I poked around and tried various features of irqtop, and display refresh works correctly, as well as various command line parameters.

The package in -proposed fixes the issue. Happy to mark verified for Jammy.

tags: added: verification-done-jammy
removed: verification-needed-jammy
Revision history for this message
Matthew Ruffell (mruffell) wrote :

Performing verification for Focal.

I started a fresh focal VM, and installed irqtop 2.4-2ubuntu0.5 and ruby-curses 1.2.4-1build1 from -updates.

I then started irqtop:

$ sudo irqtop
/usr/bin/irqtop:598: warning: rb_safe_level will be removed in Ruby 3.0
                                                                                                                             /usr/bin/irqtop:613: warning: rb_safe_level will be removed in Ruby 3.0
                 6 9 /usr/bin/irqtop:598: warning: rb_safe_level will be removed in Ruby 3.0
                                                                                                                    /usr/bin/irqtop:613: warning: rb_safe_level will be removed in Ruby 3.0
                                    /usr/bin/irqtop:598: warning: rb_safe_level will be removed in Ruby 3.0
                                      1 /usr/bin/irqtop:613: warning: rb_safe_level
will be removed in Ruby 3.0 0

My screen is filled with nonsense, mostly of the warning of "/usr/bin/irqtop:598: warning: rb_safe_level will be removed in Ruby 3.0" between every new character in the irqtop output. I can't read anything, and irqtop is quite useless.

I then enabled -proposed, and installed ruby-curses 1.2.4-1ubuntu0.20.04.1.

Now when I run irqtop:

$ sudo irqtop
focal-test - irqtop - 2024-06-16 07:14:58 +0000
              CPU0 CPU1 CPU2 CPU3
  cpuUtil: 0.0 0.2 0.0 0.0 total CPU utilization %
     %irq: 0.0 0.0 0.0 0.0 hardware IRQ CPU util%
    %sirq: 0.0 0.0 0.0 0.0 software IRQ CPU util%
 irqTotal: 6 4 3 2 total hardware IRQs
i 42: . . . 0 PCI-MSI 2097156-edge virtio2-req.3
i 44: . . . 0 PCI-MSI 524289-edge virtio0-input.0
i 45: . . 0 . PCI-MSI 524290-edge virtio0-output.0
i LOC: 4 3 1 1 Local timer interrupts
i RES: 1 0 1 0 Rescheduling interrupts
s TIMER: 1 3 1 1
s NET_RX: 0 0 0 0
s TASKLET: 0 0 0 0
s SCHED: 3 3 0 1
s RCU: 0 1 1 0

That looks much better. The output is readable, and irqtop is now usable.

The package in -proposed fixes the issue. Happy to mark verified for Focal.

tags: added: verification-done-focal
removed: verification-needed verification-needed-focal
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package ruby-curses - 1.2.4-1ubuntu0.22.04.1

---------------
ruby-curses (1.2.4-1ubuntu0.22.04.1) jammy; urgency=medium

  * Drop calls to rb_safe_level() to prevent depreciation warnings
    from filling the screen, making tools like irqtop unusuable.
    (LP: #1907932)
    - d/p/lp1907932-drop-rb_safe_level-check.patch

 -- Matthew Ruffell <email address hidden> Fri, 17 May 2024 14:19:51 +0200

Changed in ruby-curses (Ubuntu Jammy):
status: Fix Committed → Fix Released
Revision history for this message
Łukasz Zemczak (sil2100) wrote : Update Released

The verification of the Stable Release Update for ruby-curses has completed successfully and the package is now being released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package ruby-curses - 1.2.4-1ubuntu0.20.04.1

---------------
ruby-curses (1.2.4-1ubuntu0.20.04.1) focal; urgency=medium

  * Drop calls to rb_safe_level() to prevent depreciation warnings
    from filling the screen, making tools like irqtop unusuable.
    (LP: #1907932)
    - d/p/lp1907932-drop-rb_safe_level-check.patch

 -- Matthew Ruffell <email address hidden> Fri, 17 May 2024 14:42:58 +0200

Changed in ruby-curses (Ubuntu Focal):
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.