Title: A day as an OpenBSD developer | |
Author: Solène | |
Date: 19 February 2020 | |
Tags: life openbsd | |
Description: | |
This is a little story that happened a few days ago, it explains well | |
how I | |
usually get involved into ports in OpenBSD. | |
## 1 - Lurking into ports/graphics/ | |
At first, I was looking in various ports there are in the graphics | |
category, | |
searching for an image editor that would run correctly on my offline | |
laptop. | |
Grafx2 is laggy when using the zoom mode and GIMP won't run, so I just | |
open | |
ports randomly to read their pkg/DESCR file. | |
This way, I often find gems I reuse later, sometimes I have less luck | |
and I | |
only tried 20 ports which are useless to me. It happens I find issues | |
in ports | |
looking randomly like this... | |
## 2 - Find the port « comix » | |
Then, the second or third port I look at is « comix », here is the | |
DESCR file. | |
Comix is a user-friendly, customizable image viewer. It is | |
specifically | |
designed to handle comic books, but also serves as a generic | |
viewer. It | |
reads images in ZIP, RAR or tar archives (also gzip or bzip2 | |
compressed) | |
as well as plain image files. | |
That looked awesome, I have lot of books as PDF I want to read but it's | |
not | |
convenient in a "normal" PDF reader, so maybe comix would help! | |
## 3 - Using comix | |
Once comix was compiled (a mix of python and gtk), I start it and I get | |
errors | |
opening PDFs... I start it again from console, and in the output I get | |
the | |
explanation that PDF files are not usable in comix. | |
Then I read about the CBZ or CBT files, they are archives (zip or tar) | |
containing pictures, definitely not what a PDF is. | |
## 4 - mcomix > comix | |
After a few searches on the Internet, I find that comix last release is | |
from | |
2009 and it never supported PDF, so nothing wrong here, but I also | |
found comix | |
had a fork named mcomix. | |
mcomix forked a long time ago from comix to fix issues and add support | |
for new | |
features (like PDF support), while last release is from 2016, it works | |
and | |
still receive commits (last is from late 2019). I'm going for using | |
comix! | |
## 5 - Installing mcomix from ports | |
Best way to install a program on OpenBSD is to make a port, so it's | |
correctly | |
packaged, can be deinstalled and submit to ports@ mailing list later. | |
I did copy comix folder into mcomix, use a brain dead sed command to | |
replace all | |
occurrence of comix by mcomix, and it mostly worked! I won't explain | |
little | |
details, but I got mcomix to work within a few minutes and I was quite | |
happy! | |
Fun fact is that **comix** port Makefile was mentioning mcomix as a | |
suggestion | |
for upgrade. | |
## 6 - Enjoying a CBR reader | |
With mcomix installed, I was able to read some PDF, it was a good | |
experience | |
and I was pretty happy with it. I've spent a few hours reading, a few | |
moments | |
after mcomix was installed. | |
## 7 - mcomix works but not all the time | |
After reading 2 longs PDFs, I got issues with the third, some pages | |
were not | |
rendered and not displayed. After digging this issue a bit, I found | |
about | |
mcomix internals. Reading PDF is done by rendering every page of the | |
PDF using | |
**mutool** binary from **mupdf** software, this is quite CPU intensive, | |
and for | |
some reason in mcomix the command execution fails while I can do the | |
exact same | |
command a hundred time with no failure. Worse, the issue is not | |
reproducible in | |
mcomix, sometimes some pages will fail to be rendered, sometimes not! | |
## 8 - Time to debug some python | |
I really want to read those PDF so I take my favorite editor and start | |
debugging some python, adding more debug output (mcomix has a -W | |
parameter | |
to enable debug output, which is very nice), to try to understand why | |
it | |
fails at getting output of a working command. | |
Sadly, my python foo is too low and I wasn't able to pinpoint the | |
issue. I just | |
found it fail, sometimes, but I wasn't able to understand why. | |
## 9 - mcomix on PowerPC | |
While mcomix is clunky with PDF, I wanted to check if it was working on | |
PowerPC, it took some times to get all the dependencies installed on my | |
old | |
computer but finally I got mcomix displayed on the screen... and dying | |
on PDF | |
loading! Crash seems related to GTK and I don't want to touch that, | |
nobody will | |
want to patch GTK for that anyway so I've lost hope there. | |
## 10 - Looking for alternative | |
Once I knew about mcomix, I was able to search the Internet for | |
alternatives of | |
it and also CBR readers. A program named **zathura** seems well known | |
here and | |
we have it in the OpenBSD ports tree. | |
Weird thing is that it comes with two different PDF plugins, one named | |
**mupdf** and the other one **poppler**. I did try quickly on my amd64 | |
machine | |
and zathura was working. | |
## 11 - Zathura on PowerPC | |
As Zathura was working nice on my main computer, I installed it on the | |
PowerPC, | |
first with the **poppler** plugin, I was able to view PDF, but | |
installing this | |
plugin did pull so many packages dependencies it was a bit sad. I | |
deinstalled | |
the poppler PDF plugin and installed mupdf plugin. | |
I opened a PDF and... error. I tried again but starting zathura from | |
the | |
terminal, and I got the message that PDF is not a supported format, | |
with a lot | |
of lines related to mupdf.so file not being usable. The mupdf plugin | |
work on | |
amd64 but is not usable on powerpc, this is a bug I need to report, I | |
don't | |
understand why this issue happens but it's here. | |
## 12 - Back to square one | |
It seems that reading PDF is a mess, so why couldn't I convert the PDF | |
to CBT | |
files and then use any CBT reader out there and not having to deal with | |
that | |
PDF madness!! | |
## 13 - Use big calibre for the job | |
I have found on the Internet that Calibre is the most used tool to | |
convert a | |
PDF into CBT files (or into something else but I don't really care | |
here). I | |
installed calibre, which is not lightweight, started it and wanted to | |
change | |
the default library path, the software did hang when it displayed the | |
file | |
dialog. This won't stop me, I restart calibre and keep the default | |
path, I | |
click on « Add a book » and then it hang again on file dialog. I did | |
report | |
this issue on ports@ mailing list, but it didn't solve the issue and | |
this mean | |
calibre is not usable. | |
## 14 - Using the command line | |
After all, CBT files are images in a tar file, it should be easy to | |
reproduce | |
the mcomix process involving mutool to render pictures and make a tar | |
of that. | |
**IT WORKED.** | |
I found two ways to proceed, one is extremely fast but may not make | |
pages in | |
the correct order, the second requires CPU time. | |
#### Making CBT files - easiest process | |
The first way is super easy, it requires **mutool** (from mupdf | |
package) and it | |
will extract the pictures from the PDF, given it's not a vector PDF, | |
not sure | |
what would happen on those. The issue is that in the PDF, the embedded | |
pictures | |
have a name (which is a number from the few examples I found), and it's | |
not | |
necessarily in the correct order. I guess this depend how the PDF is | |
made. | |
$ mutool extract The_PDF_file.pdf | |
$ tar cvf The_PDF_file.tar *jpg | |
That's all you need to have your CBT file. In my PDF there was jpg | |
files in it, | |
but it may be png in others, I'm not sure. | |
#### Making CBT files - safest process (slow) | |
The other way of making pictures out of the PDF is the one used in | |
mcomix, call | |
**mutool** for rendering each page as a PNG file using width/height/DPI | |
you | |
want. That's the tricky part, you may not want to produce pictures with | |
larger | |
resolution than the original pictures (and mutool won't automatically | |
help you | |
for this) because you won't get any benefit. This is the same for the | |
DPI. I | |
think this could be done automatically using a correct script checking | |
each PDF | |
page resolution and using mutool to render the page with the exact same | |
resolution. | |
As a rule of thumb, it seems that rendering using the same width as | |
your screen | |
is enough to produce picture of the correct size. If you use large | |
values, it's | |
not really an issue, but it will create bigger files and take more time | |
for | |
rendering. | |
$ mutool draw -w 1920 -o page%d.png The_PDF_file.pdf | |
$ tar cvf The_PDF_file.tar page*.png | |
You will get PNG files for each page, correctly numbered, with a width | |
of 1920 | |
pixels. Note that instead of tar, you can use zip to create a zip file. | |
## 15 - Finally reading books again | |
After all this LONG process, I was finally able to read my PDF with any | |
CBR | |
reader out there (even on phone), and once the process is done, it uses | |
no cpu | |
for viewing files at the opposite of mcomix rendering all the pages | |
when you | |
open a file. | |
I have to use zathura on PowerPC, even if I like it less due to the | |
continuous | |
pages display (can't be turned off), but mcomix definitely work great | |
when not | |
dealing with PDF. I'm still unsure it's worth committing mcomix to the | |
ports | |
tree if it fails randomly on random pages with PDF. | |
## 16 - Being an open source activist is exhausting | |
All I wanted was to read a PDF book with a warm cup of tea at hand. | |
It ended into learning new things, debugging code, making ports, | |
submitting | |
bugs and writing a story about all of this. |