Brief description of the problem :
Connecting a particular model of USB stick to the machine causes a Web-UI error.
Stick model : “SanDisk UltraFit USB 3.2 64GB” (tried 4 of them)(brand new sticks)
Of course, impossible to install Rockstor to this disk : webUI won’t work…
Rockstor version : 5.0.9-0 (Leap 15.6)
Detailed step by step instructions to reproduce the problem
On any machine running Rockstor, just plug a USB stick of this model and go to the Web-UI in Storage > Disks > Rescan.
You will get the following message : “Houston, we have a problem : […] not enough values to unpack (expected 2, got 1)”.
(then, if you remove this USB stick and click “Rescan” again, everything goes well)
Web-UI screenshot
Error Traceback provided on the Web-UI
Traceback (most recent call last):
File “/opt/rockstor/src/rockstor/rest_framework_custom/generic_view.py”, line 41, in _handle_exception
yield
File “/opt/rockstor/src/rockstor/storageadmin/views/disk.py”, line 418, in post
return self._update_disk_state()
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib64/python3.11/contextlib.py”, line 81, in inner
return func(*args, **kwds)
^^^^^^^^^^^^^^^^^^^
File “/opt/rockstor/src/rockstor/storageadmin/views/disk.py”, line 115, in _update_disk_state
attached_disks = scan_disks(MIN_DISK_SIZE)
^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/rockstor/src/rockstor/system/osi.py”, line 330, in scan_disks
blk_dev_properties: dict = {
^
File “/opt/rockstor/src/rockstor/system/osi.py”, line 336, in
for key, value in (
^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 1)
Analysis :
Looking at the code in “/opt/rockstor/src/rockstor/system/osi.py” around line 330 as said in the traceback, I saw the issue comes when it tries to parse the output of the “LSBLK” command, so I ran it myself and found out what makes the Web-UI bug :
- In the LSBLK output line about my USB stick, the VENDOR field is :
VENDOR=" USB " - In the “osi.py” file, line 336, the code is
for key, value in (
key_value.split(“=”) for key_value in line.strip().split('" ')
)
As this USB stick has its “VENDOR” field starting with a whitespace, the split('" '") function does a “wrong split”, cutting in the middle of this “VENDOR” field, which causes the error.
Workaround :
As a workaround, I changed the above line.strip().split(‘" ‘) in “osi.py” into re.findall(r’\S+=“{1}[^”]*"{1}’, line) and made a reboot of the system.
It works like a charm now !
For beginners having this problem, you can :
- on the Web-UI, go to System > Services, and turn on the “Shell in a box” service
- open the “System shell” in the Web-UI
- login with your admin account
- type
suto continue with root privileges. When password is asked, type the root password. - run
nano /opt/rockstor/src/rockstor/system/osi.py - use [Ctrl] + [Shift] + [-] keys to open the “Go To Line” tool and go to line 336
- do the above changes in the code
Note : if you copy/paste code from above, be aware of the quotes : use only “straight” quotes, not “round” quotes as the forum automatically displays
- use [Ctrl] + [o] to save changes
- use [Ctrl] + [x] to exit Nano editor
- type
rebootto reboot the system
Hope this may help people having the same problem, and hope it may help developpers to remove this issue in the next versions.
Regards,
David
