freedomofpress / dangerzone

Take potentially dangerous PDFs, office documents, or images and convert them to safe PDFs
https://dangerzone.rocks/
GNU Affero General Public License v3.0
3.61k stars 170 forks source link

Add Fedora 39 support (released Oct 24th) #606

Closed deeplow closed 8 months ago

deeplow commented 11 months ago

Fedora 39 will be released very soon we should add support for it.

deeplow commented 11 months ago

We'll have to add support for python 3.12 to support fedora-39

deeplow commented 11 months ago

And it looks like we can't really support python 3.12 at the moment because pyside6 is not compatible yet:

  - pyside6 requires Python <3.12,>=3.7, so it will not be satisfied for Python >=3.12,<3.13
sudwhiwdh commented 11 months ago

Fedora 39 was released today, the upgrade caused Dangerzone to be uninstalled for now.

deeplow commented 11 months ago

Fedora 39 was released today, the upgrade caused Dangerzone to be uninstalled for now.

That's quite unfortunate. I've been keeping an eye on Fedora 39 but it looks like Dangerzone needs something that Fedora 39 doesn't yet provide. I'm talking about the PySide2 package, the element that shows the graphical user interface of Dangerzone.

Until that's available, I'm not sure there's something we can do about it.

However, if you (or someone else reading this thread) has the technical skill to run from the source code, you can still do it on fedora 39. In this case it'll install pyside2 via poetry instead (the dependency management tool).

deeplow commented 11 months ago

Digging a bit more into this it looks like nobody stepped up to package PySide2 for Fedora 39 and so it's now retired. The maintainers state that:

Without upstream support, finding someone with the time and volition to package PySide6 seems to be the way forward.

This is an unfortunate state of affairs which will certainly make us reevaluate our Fedora support.

apyrgio commented 11 months ago

I took a look at how other packages are affected by the lack of python3-pyside2 in the Fedora 39 repos. First of all, here are the Fedora 38 packages that depend on python3-pyside2:

$ dnf repoquery --whatdepends  python3-pyside2
flent-0:2.1.1-2.fc38.noarch
freecad-1:0.20.2-3.fc38.x86_64
mygnuhealth-0:1.0.5-4.fc38.noarch
pico-wizard-0:0.1.0^git20220929.934dbcf-2.fc38.noarch
python3-qdarkstyle+example-0:3.0.3-2.fc38.noarch
python3-qdarkstyle-0:3.0.2-7.fc38.noarch
python3-usd-0:22.05b-24.fc38.x86_64
ubertooth-specan-ui-0:2020.12.R1-11.fc38.x86_64

And here are the dependencies of the same packages in Fedora 39:

$ for package in $(cat packages); do echo ">>> $package" && dnf repoquery --depends $package 2>/dev/null; done
>>> flent
/usr/bin/bash
/usr/bin/python3
fping
golang-github-heistp-irtt
netperf
python(abi) = 3.12
python3-QtPy
python3-matplotlib
python3-matplotlib-qt5
python3-pyside2
>>> freecad
>>> mygnuhealth
/usr/bin/python3
kf5-kirigami2
python(abi) = 3.12
python3-pyside2
python3.12dist(bcrypt)
python3.12dist(matplotlib)
python3.12dist(requests)
python3.12dist(tinydb)
>>> pico-wizard
>>> python3-qdarkstyle+example
/usr/bin/python3
python(abi) = 3.12
python3-qdarkstyle = 3.0.3-4.fc39
python3-qdarkstyle = 3.1-2.fc39
python3.12dist(pyqt5)
>>> python3-qdarkstyle
/usr/bin/python3
python(abi) = 3.12
python3-qdarkstyle+develop = 3.0.3-4.fc39
python3-qdarkstyle+develop = 3.1-2.fc39
python3.12dist(qtpy) >= 1.9
python3dist(helpdev)
>>> python3-usd
font(roboto)
font(robotoblack)
font(robotolight)
font(robotomono)
libboost_python312.so.1.81.0()(64bit)
libc.so.6(GLIBC_2.34)(64bit)
libgcc_s.so.1()(64bit)
libgcc_s.so.1(GCC_3.0)(64bit)
libgcc_s.so.1(GCC_3.3.1)(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libm.so.6(GLIBC_2.27)(64bit)
libm.so.6(GLIBC_2.29)(64bit)
libpython3.12.so.1.0()(64bit)
libstdc++.so.6()(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libstdc++.so.6(CXXABI_1.3.13)(64bit)
libstdc++.so.6(CXXABI_1.3.3)(64bit)
libstdc++.so.6(CXXABI_1.3.5)(64bit)
libstdc++.so.6(CXXABI_1.3.9)(64bit)
libstdc++.so.6(GLIBCXX_3.4)(64bit)
libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
libstdc++.so.6(GLIBCXX_3.4.14)(64bit)
libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
libstdc++.so.6(GLIBCXX_3.4.17)(64bit)
libstdc++.so.6(GLIBCXX_3.4.18)(64bit)
libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
libstdc++.so.6(GLIBCXX_3.4.22)(64bit)
libstdc++.so.6(GLIBCXX_3.4.26)(64bit)
libstdc++.so.6(GLIBCXX_3.4.29)(64bit)
libstdc++.so.6(GLIBCXX_3.4.30)(64bit)
libstdc++.so.6(GLIBCXX_3.4.32)(64bit)
libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
libtbb.so.2()(64bit)
libusd_ms.so.0.23.8()(64bit)
python(abi) = 3.12
python3dist(jinja2)
python3dist(pyopengl)
rtld(GNU_HASH)
>>> ubertooth-specan-ui
/usr/bin/python3
python(abi) = 3.12
python3-QtPy
python3-pyside2(x86-64)
ubertooth(x86-64) = 2020.12.R1-13.fc39

The interesting thing here is that some of the packages have switched to this project: https://pypi.org/project/QtPy/. If I get this right, this project can use either PySide6, PySide2, or PyQt5 under the hood. PyQt5 is probably the only thing that's working in Fedora 39 for now. Will give it a look and report back.

deeplow commented 11 months ago

The interesting thing here is that some of the packages have switched to this project: https://pypi.org/project/QtPy/. If I get this right, this project can use either PySide6, PySide2, or PyQt5 under the hood. PyQt5 is probably the only thing that's working in Fedora 39 for now. Will give it a look and report back.

Looks potentially interesting...

However something strikes me... My GNU Health has python3-pyside2 as a dependency, but that dep is not available on Fedora 39... I wonder what would happen if we install it :thinking:

apyrgio commented 11 months ago

Right, I forgot to mention this. As one can see, some package still depend on python3-pyside2. Most of them are broken:

# dnf install mygnuhealth
Error: 
 Problem: conflicting requests
  - nothing provides python3-pyside2 needed by mygnuhealth-1.0.5-6.fc39.noarch from fedora
(try to add '--skip-broken' to skip uninstallable packages)

(I think others have some sort of fallback or optional dependency, but I haven't looked much into it)

apyrgio commented 11 months ago

Replacing PySide2/6 with QtPy is the easy part. The problem though is that QtPy is just the shim. It still requires proper Qt bindings under the hood. In Fedora 39, if PySide2/6 are not available, this leaves us with PyQt5/6. The issue with these bindings is that they are GPL-licensed, whereas our project is MIT.

eloquence commented 10 months ago

FYI, there's a longstanding discussion on the SD Client side to move away from PyQt because they're not the officially supported bindings. (https://github.com/freedomofpress/securedrop-client/issues/1194)

apyrgio commented 9 months ago

I have some promising news for our Fedora 39 users: we are close to offering a PySide6 RPM of our own. You can read more in our GitHub repo for this package (https://github.com/apyrgio/python3-pyside6-rpm), and follow along the discussion on RedHat's review tracker: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=2255537

apyrgio commented 9 months ago

Hey @sudwhiwdh. Would you be willing to try out Dangerzone + PySide6 on Fedora 39? We have some candidate packages and we'd be happy to hear some feedback.

sudwhiwdh commented 9 months ago

@apyrgio Thank you for your request. How can I perform a test?

deeplow commented 9 months ago

Thank you for the willingness to help. We are have already wrapped up this week (we're working part-time) so most likely we'll follow up next with with some instructions. Although we already have the PySide6 dependency built, we'll have to build a test version for Fedora 39 since if you were to install Fedora 38 it would fail due to incompatibility with python3.11 and other dependencies (Fedora 39 ships with python 3.12).

apyrgio commented 9 months ago

Didn't expect such a quick reply, to be honest :star_struck: . Basically, we plan to include the PySide6 package to our YUM repo starting next week. Since you have it already configured, it should be readily available to you. Then, I can provide you with a Dangerzone .rpm through a GitHub branch, and you should be able to install it with dnf install /path/to/dangerzone.rpm .

If all works well, it should pull the PySide6 dependency, as well as some others, and you'll be able to use it. That's more of a smoke test though. The soak test would be to check if your system becomes degraded somehow, e.g., if other Qt apps misbehave, or if a graphical component crashes, etc. I don't expect this will be the case, but we want to be extra cautious and test under real conditions, since we don't use (pure) Fedora, as a daily driver.

apyrgio commented 9 months ago

While testing the PySide6 package on a new Fedora 39 system, as installed from a live CD, I see that only the following dependencies need to be installed:

$ sudo dnf install python3-pyside6-6.6.1-1.fc39.x86_64.rpm 
==============================================================================================================================================================================================================================================
 Package                                                           Architecture                                      Version                                                    Repository                                               Size
==============================================================================================================================================================================================================================================
Installing:
 python3-pyside6                                                   x86_64                                            6.6.1-1.fc39                                               @commandline                                            113 M
Installing dependencies:
 community-mysql-common                                            x86_64                                            8.0.35-1.fc39                                              updates                                                  76 k
 community-mysql-libs                                              x86_64                                            8.0.35-1.fc39                                              updates                                                 1.2 M
 libpq                                                             x86_64                                            15.3-1.fc39                                                fedora                                                  215 k
 unixODBC                                                          x86_64                                            2.3.11-4.fc39                                              fedora                                                  482 k

Transaction Summary
==============================================================================================================================================================================================================================================
Install  5 Packages

They seem DB-related, small in size, and most likely won't affect the user's system. Most importantly, there are no extra X11-related packages that the user needs to install. That's great, because it means that there are no Qt programs in our package that require something exotic.

sudwhiwdh commented 9 months ago

Since you have it already configured, it should be readily available to you. Then, I can provide you with a Dangerzone .rpm through a GitHub branch, and you should be able to install it with dnf install /path/to/dangerzone.rpm .

The package source is currently deactivated. You are welcome to write to me if I can test a new RPM version of Dangerzone.

apyrgio commented 9 months ago

Will do, I'm waiting on our infra team to enable the Fedora 39 repo. I'll soon be able to provide you with instructions :slightly_smiling_face:

apyrgio commented 9 months ago

Ok, the Fedora 39 repo should be functional now. Here are some quick instructions on how to install Dangerzone in Fedora 39:

From there on, you can use Dangerzone as you normally would. Of utmost importance is to let us know if you experience any issue with the graphic components, both in the Dangerzone GUI, as well as your system. If it goes well for a week or so, we'll start making it generally available.

Thanks again for helping us out here :slightly_smiling_face:

sudwhiwdh commented 9 months ago

This command should download some extra packages, such as python3-pyside6.

[user@fedora ~]$ sudo dnf install -y ~/Downloads/dangerzone-0.5.1-1.fc39.x86_64.rpm
[sudo] password for user: 
Fedora 39 - x86_64 - Updates                     61 kB/s |  19 kB     00:00    
Error: 
 Problem: conflicting requests
  - nothing provides python3.12dist(pyside6) needed by dangerzone-0.5.1-1.fc39.x86_64 from @commandline
(try to add '--skip-broken' to skip uninstallable packages)
apyrgio commented 9 months ago

Oh, I'm sorry, I should have mentioned that you need to enable our repo as well. Once you do so and retry the sudo dnf install -y ... command, you will be able to pull the python3-pyside6 package.

sudwhiwdh commented 8 months ago

@apyrgio

I have some initial feedback. Just not so many current occasions to test.

First of all: The installation went smoothly. dangerzone starts and the file conversion worked. So far, I haven't noticed any unusual effects on the rest of the system.

However, there are already some improvements compared to the posted issue at https://github.com/freedomofpress/dangerzone/issues/402:

p.s. Is the app called "dangerzone" or "Dangerzone"? I read different things in the app itself and wonder if clarity would be a good thing. What do you think?

apyrgio commented 8 months ago

Ok, the fact that your system is stable and Dangerzone does not break is what matters the most. And yeah, we are aware that GUI-wise, Dangerzone does not show up nicely. I can try to give it a check in a Fedora system, if time permits before the next release.

As for the naming it should be "Dangerzone", but I guess that the package name (dangerzone) somehow leaks to the user :confused:

Thanks a lot for the user testing @sudwhiwdh, and your thorough feedback :slightly_smiling_face:

deeplow commented 8 months ago

Thanks for testing!

Appropriate app icon is now also displayed in the window overview instead of the generic app icon.

That's this issue. https://github.com/freedomofpress/dangerzone/issues/645

sudwhiwdh commented 8 months ago

@deeplow

That's this issue. https://github.com/freedomofpress/dangerzone/issues/645

I have written that it IS displayed correctly in the window overview with the current test RPM ;)

sudwhiwdh commented 8 months ago

@apyrgio

And yeah, we are aware that GUI-wise, Dangerzone does not show up nicely.

I don't have any programming experience yet. Is this something I can learn to fix with your help? Also when I think of https://github.com/freedomofpress/dangerzone/issues/645.

apyrgio commented 8 months ago

We have to copy what the rest of the desktop applications in Fedora do. It's just finding an example repo that's not a mess, and see what we're missing. It might be a handful for a non-programmer, so we'll take care of it. Thanks a lot for stepping up though :slightly_smiling_face:

apyrgio commented 8 months ago

Heads up for those who can't install Dangerzone in Fedora 39 yet: we plan to release Dangerzone 0.6.0 in the coming days, and with that an RPM for Fedora 39. You should then be able to install it in your system. In the meantime, note that you can build a Dangerzone RPM locally by following our build instructions.

sudwhiwdh commented 8 months ago

@apyrgio I currently still have https://github.com/freedomofpress/dangerzone/issues/606#issuecomment-1881872097 installed. Do I then need anything else or will I automatically receive an update to the new 0.6.0?

apyrgio commented 8 months ago

You should get an update automatically, but do let us know if this is not the case.