I found a project to expand my skillset some for Devember2020!
Plex seemingly doesn’t have a player client on Fedora or RPM packages, and I want to change that.
What do I know:
Basically nothing about coding and/or packages or how to make one.
Some scripting in bash and powershell.
A mediocre amount of Sever knowledge which won’t be any help in this project.
Lots of fun historical facts, equally useless
What do I want to learn:
How to make a package, how to deploy it on different systems and how to maintain it.
Well firstly I use plex and fedora, so it seems prudent to actually stop using the web version and start using the client. Not because it’s inherently better, but because it’s inherently easier for my kid and girlfriend to use.
Secondly, I want to know what goes into making a package, deploying and testing it.
Project link here
1: Find information on past projects or other helpful resources
I found out i’ll need to deploy this package via RPM Fusion, since this is how Fedora handles non bundled packages.
I also found an older forum post where this user made a package for fedora 28 but stopped for lack of users. This will probably be an invaluable resource on what i’m going to have to to. Link
Found his project on COPR which has the details of how he build his package and I am getting some very valuable information out of it. This is where open source really shines. Details
2: find requirements for making a package and how it actually works
So I’m using the old package as a base to build on, and i was able to install all the build dependencies with dnfbuild-dep and the spec file. The dependencies haven’t changed much since the old version.
I’m now trying to run the .spec file and troubleshooting the errors I run into.
I’m also starting to understand how the spec file is made up and what it does, which is great! I’m able to read things that seemed like gibberish to me just last week.
I also added a github page, so people can check in on what’s happening.
So now I’m also learning GIT to do the github thing. As this is something I’ve only ever done in tiny amounts or far small things using a GUI, this is also a new notch I can add to my stick after this project.
3: make a package and see what it takes to actually make it work
So after all this preamble, checking out guides on things like GIT, rpmbuild, plexmediaplayer,… I was finally able to start building a package using the latest version of the source code. The sheer elation and joy I felt when the process actually started instead of prompting an error or just stopping immediately is hard to describe. Of course I got an error in the build process, but this means that at least I’m there! the build process.
I’m running into an issue with the QT verion, just like the github page for PMP said I would. Fedora ships with version 5.15 and i need 5.10,5.1 or preferably 5.9.5. So i’m now looking at how to fix these issues so it can be installed on a fedora f33 system. The plot thickens…
4: test on multiple machines
5: deploy in a way other people can get and use the package
6: get a nice beer because I did it and i deserve a reward!
Props on getting into packaging! Packing is really important imo, and I also have been wanting to get into it properly.
I wonder if you considered other package formats than RPM?
Did you consider using any of the new “distro independent” package managers like snap, flatpak, nix?
I haven’t really considered those, but you might be onto something there…
The issue I ran into didn’t seem to easy to solve, and QT versioning seemed to me a pain to deal with even though it’s pretty OK documented on the QT wiki.
snap, flatpak and nix actually might be a fantastic solution to that issue, so tomorrow I will look in to that! thanks for the tip.
snap, flatpak and nix actually might be a fantastic solution to
that issue, so tomorrow I will look in to that! thanks for the tip.
I just noticed that nix already has packages for the plex server and media player - so the other two might be a better bet for making something of use
either way, I will be following this thread.