Definite's Extractor

My findings on Life, Linux, Open Source, and so on.

Category Archives: fedora

[COPR] Why my patches are missing from custom build

Custom build script in COPR is a versatile. With a couple sed commands, you can modify Fedora SPEC files and port it to RHEL/CentOS Stream with a little effort.

However, when I was porting the keepassxc-2.7.X a few days ago, COPR keeps complaining xcb.patch is missing. While I myself does not need the patch for Wayland, I am curious why other packages are fine but not this one.

Eventually, it is because Patch0: xcb.patch was in conditional, like:

%if 0%{?el8}
Patch0: xcb.patch
%endif

The SRPM maker did not run under el8, thus Patch0 is not in SRPM.

Since my repo contains just EL8 and EL9 packages, I can simply make the conditional always say yes. So I put down following like in the script:

sed -i -e '/^%if 0%{[?]el8}/ s/0%{[?]el8}/1/' $PKG.spec

This solved the problem.

Fedora Packaging: resolving /usr/bin/../bin/../lib/bfd-plugins/LLVMgold.so: wrong ELF class: ELFCLASS32

When I provide an update to barrier-2.4.0, I encountered:

/usr/bin/../bin/../lib/bfd-plugins/LLVMgold.so: wrong ELF class: ELFCLASS32

Barrier uses CMake to build. It called ar and ranlib during the build, however, wrong plugins was invoked and caused the above error.

While the above error can be avoided by adding option --plugin , however, CMake does not have an easy way to do that. Fortunately, gcc provides gcc-ar and gcc-ranlib wrappers that point to the correct plugins. So I inserted the commands that point to gcc-ar and gcc-ranlib in the section %prep with:

sed -i.use-gcc-ar -e '/include (CheckIncludeFiles)/ i set(CMAKE_AR "/usr/bin/gcc-ar")' CMakeLists.txt
sed -i.use-gcc-ranlib -e '/include (CheckIncludeFiles)/ i set(CMAKE_RANLIB "/usr/bin/gcc-ranlib")' CMakeLists.txt

The build worked.

How to get the active title of an X program

I have scripts that will utilise the SFDC case number, but why type it manually when the computer can do it?

Firstly, you need to have xdotool installed, for RHEL or CentOS Stream, it is in EPEL. I have tried xprop and xwininfo, but they do not accept search with WM_Class

Secondly, get the WM_Class of the X program, usually it is just the program name. If you are unsure, open that X program, then run xprog and click at the X program, then search WM_CLASS amongst the output.

Thirdly, for X program that has multiple tabs, make sure you activate the tab you want.

Now, to get the active title of firefox:

for i in $(xdotool search --onlyvisible --class firefox); do xdotool getwindowname $i; done

Two titles will be shown like:

Firefox
The actual title

For me, I am only interest in the number which are in the beginning of the title, so my command is:

for i in $(xdotool search --onlyvisible --class firefox); do xdotool getwindowname $i; done | sed -rne '/^[0-9]+/ s/^([0-9]+).*$/\1/p'

Barrier (Synergy) with Wacom Intuos BT M

I am looking for a more ergonomic pointing device. Thus, I borrow my daughter’s Wacom Intuos BT M drawing tablet a try.

Fedora 33 Gnome seems to recognize it out of the box, and the gnome-control-center Wacom interface show it properly. With RHEL 8, it also works as a mouse, but for Gnome to see it, I needed to install the following:

yum -y install libwacom

I mainly use KDE, so I also install

yum -y install kcm_wacomtablet

Gnome did not have the UI to bind the tablet button to mouse button like Mouse button 4 (Scroll Up), nor does it handle key combo binding properly. For example, Ctrl-Win-Left is recognized as Primary-Super-Hyper-Left; KDE, however, does support Mouse button 4~7 so I bind inner left tablet button as button 5 and inner right tablet button as button 4.

I use barrier, a keyboard/mouse sharing utility intensively. So I would also like to see how barrier handles Wacom. Unfortunately, with absolute position mode (the default), the pointer insisted it needed to be in the left edge of the client, I need to use barrier switchInDirection keyboard short keyboard to get away.

I also tried related position mode which make the tablet work more like a giant touchpad. It kinda of work, as the pointer in client act normally. However, that mode is very unpleasant to use, as I need to fully away the distant between stylus and tablet. Basically:

State 1: Stylus touch tablet: Mouse Left button click
State 2: Stylus hover tablet: Mouse move
State 3: Stylus leave tablet: Mouse No action

Switching between State 2 and State 3 is required for related position to work, that is unpleasant.

I tried USB on server, and BT on client as well, but Intuos only support single connection, that is, you have to disconnect USB to use BT, so no single-button-toggle target computers. 😦

Verdict: I would not a recommended Wacom over Barrier/Synergy setup, unless You are OK with relative position mode.

Build in epel8 branch with fedpkg

This article assumes you have commit right to the package, but you don’t have the epel8 branch in https://src.fedoraproject.org/rpms/YourPackage

  1. PKG=<YourPackage>
  2. fedpkg clone $PKG # if you have not done this
  3. cd $PKG # if you have not done this
  4. git branch epel8
  5. # Make the branch work with epel8
  6. git commit
  7. git push –set-upstream origin epel8
  8. fedpkg build
  9. Go to bodhi and create -> New update

Enjoy!

HOWTO: sign dkms kernel module for UEFI secure boot

If you are stuck with UEFI secure boot, and desperately need to build and install a custom kernel module, then you need to know how to sign your kernel module.

To sign a dkms custom kernel, please refer my Git repository: dkms-module-util

Fix NTFS “unsupported reparse point”

Reparse point is an application-defined data that associate with a file or directory.  So it can be anything from symbolic link to mount point, and many more.

A comment in ntfs: unsupported reparse point says that plugins from Advanced NTFS-3G Features fix the problem. My own experience: systcomp.zip works, but binary provided in onedrive.zip is not.

HOWTO: Unwatch packages in Fedora package source (src.fedoraproject.org)

If you don’t want to get messages from certain Fedora packages:

  1. Login  to https://src.fedoraproject.org
  2. Click Watchlist
  3. Click the package you want to unwatch, this will bring you to package Overview page
  4. There is an Unwatch  pull down which looks like the below picture. Click it and select Unwatch. Package Overview page

Note that you CANNOT unwatch the packages you maintained.

Legacy Python str.format() gotcha

In Python 2.7, str.format() works with empty string like:

python -c "print '{}'.format('')"

However, in Python < 2.6,  you will see:

ValueError: zero length field name in format

Workaround? Use %-formatting like:

python -c "print '%s' % ''"

 

Indent in Fedora-Flavored Markdown

I cannot find any documents about the indent in Fedora-Flavored Markdown. Yet I figure out following:

You need 4 spaces to indent. The rest is same with this Markdown Cheatsheet.

For example

- Upstream update to 1.10.0
    + Bug fixes:
        - Log to file defaults to unwritable location
        - Losing GUI config when restarting the OS

    + Enhancements:
        - CLI argument to control screen lock feature
        - Customizable size limit on clipboard sharing

- BuildRequires qt5-qtbase-devel

Becomes:

  • Upstream update to 1.10.0
    • Bug fixes:
      • Log to file defaults to unwritable location
      • Losing GUI config when restarting the OS
    • Enhancements:
      • CLI argument to control screen lock feature
      • Customizable size limit on clipboard sharing
  • BuildRequires qt5-qtbase-devel

See https://bodhi.fedoraproject.org/updates/synergy-1.10.0-1.el7 for the actual result.