Brewtarget / brewtarget

Main brewtarget source code repository.
GNU General Public License v3.0
310 stars 134 forks source link

nothing provides 'libqt5core5 >= 5.9.5' #777

Open safrye opened 8 months ago

safrye commented 8 months ago

Hi, I tried to install the RPM-version 3.0.9 on Opensuse Tumbleweed but get the error: Problem: nothing provides 'libqt5core5 >= 5.9.5' needed by the to be installed brewtarget-3.0.9-1.x86_64 Solution 1: do not install brewtarget-3.0.9-1.x86_64 Solution 2: break brewtarget-3.0.9-1.x86_64 by ignoring some of its dependencies I have libQt5Core5 installed. i+ | libQt5Core5 | package | 5.15.11+kde138-2.1 | x86_64 | openSUSE:Tumbleweed May it be that the version check does only see "5.1" instead of "5.15"? I remember having a similar problem with another program. Cheers, sAf

matty0ung commented 8 months ago

Hi, Sorry to hear you're having problems. I'd be surprised if the package manager didn't understand 5.15.11 > 5.9.5 when it comes to version numbers. I'm wondering if the issue is case sensitivity of package names (per https://unix.stackexchange.com/questions/192859/why-are-there-capital-letters-in-opensuse-packages). I'll see if we can try specifying libQt5Core5 instead of libqt5core5 for our RPM dependency.

penguinpee commented 8 months ago

That's more a question for the SuSE folks. I know in RPM there's also something like an epoch. It precedes the version. If the epoch on the lower version number is higher, it will still sort above the higher version number. I'm not familiar enough (anymore) with the SuSE tools for querying the package database to give more advice.

I'd go for option 2 to see if Brewtarget just finds the lib it needs. If not you need to hunt down what package exactly provides libqt5core5. It's also worth filing a bug against the package and call in the help of the maintainer.

safrye commented 7 months ago

I'd go for option 2 to see if Brewtarget just finds the lib it needs. If not you need to hunt down what package exactly provides libqt5core5. It's also worth filing a bug against the package and call in the help of the maintainer.

I tried option 2, broke the requirement and ignored the signature verification failure.

Problem: nothing provides 'libqt5core5 >= 5.9.5' needed by the to be installed brewtarget-3.0.9-1.x86_64
 Solution 1: do not install brewtarget-3.0.9-1.x86_64
 Solution 2: break brewtarget-3.0.9-1.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or cancel [1/2/c/d/?] (c): 2
Resolving dependencies...
Resolving package dependencies...

The following NEW package is going to be installed:
  brewtarget

1 new package to install.
Overall download size: 5,6 MiB. Already cached: 0 B. After the operation, additional 12,0 MiB will be used.
Continue? [y/n/v/...? shows all options] (y): 
Retrieving: brewtarget-3.0.9-1.x86_64 (Plain RPM files cache)                               (1/1),   5,6 MiB    
brewtarget-3.0.9-2.x86_64.rpm:
    Package header is not signed!

brewtarget-3.0.9-1.x86_64 (Plain RPM files cache): Signature verification failed [6-File is unsigned]
Abort, retry, ignore? [a/r/i] (a): i

Checking for file conflicts: .............................................................................[done]
(1/1) Installing: brewtarget-3.0.9-1.x86_64 ..............................................................[done]
Running post-transaction scripts .........................................................................[done]

I can start Brewtarget and the GUI pops up with the question about adding recipes to the database but after clicking yes or no the program crashes with the following error message.

[13:34:04.926] (1dv6pbxuww) ERROR : void ObjectStore::impl::wrapAndUnmapAsNeeded(const ObjectStore::TableDefinition&, const ObjectStore::TableField&, QVariant&) Unexpected type # 10 = QString in QVariant for property forcedCarbonation , field type FieldType # 0 : ( "ObjectStore::FieldType::Bool" ) , value QVariant(QString, "false") , table recipe , column forced_carb  [database/ObjectStore.cpp:697]
[13:34:04.928] (1dv6pbxuww) ERROR : void ObjectStore::impl::wrapAndUnmapAsNeeded(const ObjectStore::TableDefinition&, const ObjectStore::TableField&, QVariant&) Call stack is: 
Stacktrace:
 0# Logging::getStackTrace() in brewtarget
 1# ObjectStore::impl::wrapAndUnmapAsNeeded(ObjectStore::TableDefinition const&, ObjectStore::TableField const&, QVariant&) in brewtarget
 2# ObjectStore::loadAll(Database*) in brewtarget
 3# __pthread_once_slow in /lib64/libc.so.6
 4# ObjectStoreTyped<Recipe>::getInstance() in brewtarget
 5# BtTreeModel::BtTreeModel(BtTreeView*, BtTreeModel::TypeMasks) in brewtarget
 6# BtTreeView::BtTreeView(QWidget*, BtTreeModel::TypeMasks) in brewtarget
 7# RecipeTreeView::RecipeTreeView(QWidget*) in brewtarget
 8# Ui_mainWindow::setupUi(QMainWindow*) in brewtarget
 9# MainWindow::MainWindow(QWidget*) in brewtarget
10# 0x0000560CD24D2FA2 in brewtarget
11# __pthread_once_slow in /lib64/libc.so.6
12# MainWindow::instance() in brewtarget
13# Application::run() in brewtarget
14# main in brewtarget
15# __libc_start_call_main in /lib64/libc.so.6
16# __libc_start_main@@GLIBC_2.34 in /lib64/libc.so.6
17# _start in brewtarget
  [database/ObjectStore.cpp:702]
[13:34:04.928] (1dv6pbxuww) ERROR : ASSERT: "false" in file ../src/database/ObjectStore.cpp, line 704  [database/ObjectStore.cpp:704]
[1]    6970 IOT instruction (core dumped)  brewtarget

I don't know if this error is related to libqt5core5. Any ideas?

matty0ung commented 7 months ago

The good news is that the crash is nothing to do with libqt5core5. It's just some mildly problematic data in the database. You can either fix the data in the DB (quick if you know what you are doing with SQL) or I can extend the list of "safe to ignore database problems" that the software knows about.

When the program reads in data from the database, it sanity checks that the data types of the fields its reading in are as expected (eg we didn't try to store a string in a numeric field). If you have a Brewtarget database from an older version of the software, it may have a few instances where fields are not as they should be because we were less strict about things in the past. Where the "not strictly correct" field type is harmless then we've added it to a "known problems that it is safe to ignore" list.

In this particular instance, the error message is saying that the forced_carb boolean column of the recipe table it tried to read in from the database holds a string instead of an integer. We can add this to the exceptions list so that the code will interpret "true" and "false" strings from the column instead of the 1 and 0 values it is expecting.

I will make the change, but I won't be able to get to it for about ten days as I'm on a trip.

safrye commented 7 months ago

It worked. I opened the database.sqlite file with sqlitebrowser and edited in the table recipe the forced_carb values which had the value false to 0. The recipes that had the false value were quite old, from 2013. But this changes were not enough. Brewtarget complained about table instruction , column hasTimer and table instruction , column completed having false values. So after changing some 50 values to 0 the database was finally accepted by the new version of Brewtarget. I is probably a good idea to let Brewtarget ignore these kind of problems or automatically transpose false to 0. Thanks for the help.

matty0ung commented 7 months ago

Glad you got it working. Sorry it took so many edits. It's a fair point that the software should do more of this for you. Probably the right thing is to change the error to a warning log. I think I was overly-optimistic in expecting to be able to say "It's only columns X, Y and Z on tables P, Q and R that are known problems and we can treat any other occurrences as hard errors"!

safrye commented 7 months ago

No problem. I appreciate the help and many thanks for keeping my favourite brewing software free and alive.