Bug 2091317 - Review Request: libeatmydata - A LD_PRELOAD library that disables fsync() and friends, and a script to run it
Summary: Review Request: libeatmydata - A LD_PRELOAD library that disables fsync() and...
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: All
OS: Linux
unspecified
medium
Target Milestone: ---
Assignee: Tom "spot" Callaway
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2022-05-28 20:10 UTC by Stewart Smith
Modified: 2023-05-19 07:43 UTC (History)
2 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2023-05-19 07:43:12 UTC
Type: ---
Embargoed:
spotrh: fedora-review+


Attachments (Terms of Use)

Description Stewart Smith 2022-05-28 20:10:54 UTC
Spec URL: https://github.com/stewartsmith/pkg-libeatmydata/blob/01d64b6/libeatmydata.spec
SRPM URL: https://download.copr.fedorainfracloud.org/results/trawets/libeatmydata/srpm-builds/04456284/libeatmydata-130-2.fc35.src.rpm
Description:

This package contains a small LD_PRELOAD library (libeatmydata) and a couple 
of helper utilities (eatmydata) designed to transparently disable fsync and
friends (like open(O_SYNC)). This has two side-effects: making software that
writes data safely to disk a lot quicker and making this software no longer 
crash safe.

Fedora Account System Username: trawets

Comment 1 Stewart Smith 2022-05-28 20:18:14 UTC
I am the upstream maintainer of this package.

This is my first package and will need a sponsor.

Successful builds:
https://copr.fedorainfracloud.org/coprs/trawets/libeatmydata/build/4456284/

Comment 2 Tom "spot" Callaway 2022-05-31 14:34:57 UTC
*blows dust off reviewer hat* Okay, lets see if I still remember how to do this.

*** PACKAGE REVIEW ***

- Need: BuildRequires: gcc
- You should not need to set defattr
- You should not need to explicitly set %attr to 755 for the binary and script (doesn't the Makefile install them with 755 perms?)
- You need to include a copy of the license: %license COPYING
- You have an unversioned library (libeatmydata.so) in the main libeatmydata package.
  AND
- You do not have a -devel package (that said, there don't really appear to be headers of any consequence here..)
  I think given the unique nature of this library, I would just recommend versioning it and having a -devel subpackage with the .so. You should not need to package up header files in -devel, but having a proper versioned library is helpful 
  in case the way it is used ever changes.

=========================================================================================================== rpmlint session starts ===========================================================================================================
rpmlint: 2.2.0
configuration:
    /usr/lib/python3.10/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/licenses.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 32, packages: 5

libeatmydata-debuginfo.x86_64: W: unstripped-binary-or-object /usr/lib/debug/usr/lib64/libeatmydata.so-130-2.fc36.x86_64.debug
libeatmydata.src: E: unknown-key a422e098
libeatmydata-debuginfo.x86_64: E: shared-library-without-dependency-information /usr/lib/debug/usr/lib64/libeatmydata.so-130-2.fc36.x86_64.debug
libeatmydata.x86_64: E: invalid-soname /usr/lib64/libeatmydata.so libeatmydata.so
eatmydata.noarch: E: explicit-lib-dependency libeatmydata
libeatmydata-debuginfo.x86_64: W: dangling-relative-symlink /usr/lib/debug/.build-id/10/3dd63c971bb4c9f1600e590879ab96caf8edbd ../../../.build-id/10/3dd63c971bb4c9f1600e590879ab96caf8edbd
============================================================================ 5 packages and 0 specfiles checked; 4 errors, 2 warnings, 4 badness; has taken 0.3 s ============================================================================

* rpmlint errors are either covered at top, or safe to ignore. Warnings on the debuginfo packages are safe to ignore.

[Y] package meets naming guidelines
[Y] package meets packaging guidelines
[Y] license (GPLv3) OK
[!]    license text in %license
[Y]    matches source
[Y] spec file legible, in am. english
[Y] source matches upstream (48731cd7e612ff73fd6339378fbbff38dd3bcf6c243593b0d9773ca0051541c0)
[Y] package compiles on Fedora 36 (x86_64)
[!] no missing BR
      gcc missing
[Y] no unnecessary BR
[Y] no locales
[Y] not relocatable
[Y] owns all directories that it creates
[Y] no duplicate files
[!] permissions ok
      permissions not wrong, just unnecessarily explicit
[Y] no %clean
[Y] macro use consistent
[Y] code, not content
[Y] no need for -docs
[Y] nothing in %doc affects runtime
[Y] no need for .desktop file
[!] missing devel package
      library unversioned

*****

Please fix issues noted and show me a -3 and I should be able to approve it (and sponsor you).

Comment 3 Stewart Smith 2022-05-31 19:11:28 UTC
Have the shared library be unversioned was a conscious choice a number of years back (OMG it's actually 9 years) as it doesn't really make any sense to version it as the use case is LD_PRELOAD rather than ever directly linking against. A major version bump would mean "We just threw out POSIX or broke kernel/userspace ABI" and minor bumps aren't visible as applications aren't linking directly with it.

libeatmydata is more like `fakeroot`, `libkeepalive`, `preeny`, and `trickle`, which are also LD_PRELOAD libraries packaged for Fedora which also do not have versioned libraries. Mind you, `libfaketime` is a packaged LD_PRELOAD library that *does* have a versioned library (just a .so.1). So I think that since (at least so far) the majority of LD_PRELOAD focused libraries packaged in Fedora have been erring on the side of having unversioned libraries, it should be okay for libeatmydata to also be this way.

I went with putting it in `libeatmydata` as a package rather than putting the .so in a devel package as it's not a library that's ever used for development, it's the Actual Thing you want to run. The `eatmydata` script just works out where `libeatmydata.so` is in order to LD_PRELOAD it. There seems to be a mix of existing LD_PRELOAD focused packages in Fedora where some have helper scripts and some don't. A least for `fakeroot` it is split between the `fakeroot` package with the helper script and `fakeroot-libs` with the libraries, although `libfaketime` just bundles everything in one.


So, I agree on %license, BuildRequires: gcc, and attr/defattr and will spin a -3, but think the library should remain unversioned and not be in a -devel package, instead remaining in the libeatmydata package.

Comment 4 Tom "spot" Callaway 2022-05-31 21:58:07 UTC
Okay. Your logic checks out. Show me the -3 with the other items fixed and I'll approve.

Comment 6 Tom "spot" Callaway 2022-06-02 13:25:45 UTC
Looks good to me. APPROVED.

I have sponsored you into the Fedora Packager group. Remember, with great power comes great responsibilities. If you're unsure if something is a good idea (or the right action), please feel free to ask me.

You can now continue the new package process from this step (it may take the accounts system a bit to see you in the packager group, so if it doesn't work immediately, come back later):

https://docs.fedoraproject.org/en-US/package-maintainers/New_Package_Process_for_New_Contributors/#add_package_to_source_code_management_scm_system_and_set_owner

Comment 7 Gwyn Ciesla 2022-06-03 14:09:22 UTC
(fedscm-admin):  The Pagure repository was created at https://src.fedoraproject.org/rpms/libeatmydata

Comment 8 Package Review 2023-05-19 07:43:12 UTC
Package is now in repositories, closing review.


Note You need to log in before you can comment on or make changes to this bug.