Bug 2383208

Summary: dash dependency disabled but rpmlint/checks/BashismsCheck.py still included
Product: [Fedora] Fedora EPEL Reporter: Ulrik Haugen <ulrik.haugen>
Component: rpmlintAssignee: Ulrik Haugen <fedora>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: epel10CC: fedora, j, mhroncok, spotrh, twoerner
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: rpmlint-2.7.0-6.el10_1 Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2025-08-06 01:04:55 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
Example package to reproduce the problem none

Description Ulrik Haugen 2025-07-24 11:18:14 UTC
Created attachment 2098085 [details]
Example package to reproduce the problem

Description of problem:
I'm packaging pontos (from https://github.com/greenbone/pontos) with pyproject-rpm-macros.

When trying to run rpmlint on the resulting package it (understandably) takes https://github.com/greenbone/pontos/blob/main/pontos/updateheader/templates/AGPL-3.0-or-later/template.sh and it's cousins for shell scripts and tries to check for bashisms resulting in:

% rpmlint -v --file .rpmlintrc pontos.spec rpmbuild/SRPMS/pontos-25.6.0-1liu1.el10.src.rpm rpmbuild/RPMS/noarch/pontos-25.6.0-1liu1.el10.noarch.rpm rpmbuild/RPMS/noarch/pontos-doc-25.6.0-1liu1.el10.noarch.rpm 
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
(none): E: fatal error while reading rpmbuild/RPMS/noarch/pontos-25.6.0-1liu1.el10.noarch.rpm: [Errno 2] No such file or directory: 'dash'
Traceback (most recent call last):
  File "/usr/bin/rpmlint", line 8, in <module>
    sys.exit(lint())
             ^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmlint/cli.py", line 176, in lint
    sys.exit(lint.run())
             ^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmlint/lint.py", line 108, in run
    return self._run()
           ^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmlint/lint.py", line 76, in _run
    self.validate_files(self.options['rpmfile'])
  File "/usr/lib/python3.12/site-packages/rpmlint/lint.py", line 246, in validate_files
    self.validate_file(pkg, pkg == packages[-1])
  File "/usr/lib/python3.12/site-packages/rpmlint/lint.py", line 272, in validate_file
    raise e
  File "/usr/lib/python3.12/site-packages/rpmlint/lint.py", line 265, in validate_file
    self.run_checks(pkg, is_last)
  File "/usr/lib/python3.12/site-packages/rpmlint/lint.py", line 281, in run_checks
    fn(pkg)
  File "/usr/lib/python3.12/site-packages/rpmlint/checks/AbstractCheck.py", line 17, in check
    return self.check_binary(pkg)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmlint/checks/AbstractCheck.py", line 60, in check_binary
    raise err
  File "/usr/lib64/python3.12/concurrent/futures/thread.py", line 59, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmlint/checks/BashismsCheck.py", line 39, in check_file
    self.file_cache[pkgfile.md5] = list(self.check_bashisms(pkg, filepath, filename))
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/rpmlint/checks/BashismsCheck.py", line 53, in check_bashisms
    r = subprocess.run(['dash', '-n', filepath],
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/subprocess.py", line 550, in run
    with Popen(*popenargs, **kwargs) as process:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/subprocess.py", line 1028, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib64/python3.12/subprocess.py", line 1963, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'dash'

Version-Release number of selected component (if applicable):
% rpmlint --version
2.7.0


How reproducible:
Always

Steps to Reproduce:
Run rpmlint (on epel10) on the attached rpm.


Actual results:
Complaints about:
(none): E: fatal error while reading rpmbuild/RPMS/noarch/pontos-25.6.0-1liu1.el10.noarch.rpm: [Errno 2] No such file or directory: 'dash'


Expected results:
Errors but no errors fatal to rpmlint.

Additional info:
grep dash /usr/lib/python3.12/site-packages/rpmlint/checks/BashismsCheck.py 
        Run dash and then checkbashism on file
            r = subprocess.run(['dash', '-n', filepath],

I presume the requirement on dash is disabled on rhel because dash isn't packaged for epel (https://bugzilla.redhat.com/show_bug.cgi?id=2335416) but then perhaps rpmlint/checks/BashismsCheck.py shouldn't be included either?

Comment 1 Miro Hrončok 2025-07-24 11:38:30 UTC
Yes, the check needs to be disabled.

Perhaps https://src.fedoraproject.org/rpms/rpmlint/c/1a851a987dbb855fd89988ed0b6d41a05d1ba189?branch=rawhide was not 100 % correct.

Will you be able to submit a PR for this?

Comment 2 Ulrik Haugen 2025-07-25 08:05:55 UTC
I could take a stab at it next week.

Comment 3 Ulrik Haugen 2025-07-28 09:38:49 UTC
I just created https://src.fedoraproject.org/rpms/rpmlint/pull-request/52, it's my first pull request to a Fedora package so i have some questions.

I created it against the rawhide branch, should it have been the epel10 branch instead?

I assumed you'd want to handle the release tag and changelog.

Despite waiting for a long time after adding an ssh key to Fas src.fedoraproject.org never stopped saying "You need to upload SSH key to be able to clone over SSH", in the end i made the changes through the web editor, do you happen to know what i should have done?

Comment 4 Ulrik Haugen 2025-07-28 09:59:27 UTC
Also the green "merge" button in my pull request concerns me somewhat, have i somehow gotten permissions to do that?

Comment 5 Miro Hrončok 2025-07-28 10:04:44 UTC
(In reply to Ulrik Haugen from comment #3)
> I just created https://src.fedoraproject.org/rpms/rpmlint/pull-request/52,
> it's my first pull request to a Fedora package so i have some questions.

Congratulations!

> I created it against the rawhide branch, should it have been the epel10
> branch instead?

Depends on the package in question. Here we have epel10 and rawhide branches more or less in sync, so it doesn't really matter. You can open 2 PR form the smwe branch, so the CI build runs on rawhide + EPEL and we can verify the results.

> I assumed you'd want to handle the release tag and changelog.

Nah, it's better if you add that to your PR.

> Despite waiting for a long time after adding an ssh key to Fas
> src.fedoraproject.org never stopped saying "You need to upload SSH key to be
> able to clone over SSH", in the end i made the changes through the web
> editor, do you happen to know what i should have done?

If you are not in the packager group, you cannot push via SSH, you need to push via HTTPS. See https://docs.fedoraproject.org/en-US/ci/pull-requests/#_you_are_not_a_packager

(In reply to Ulrik Haugen from comment #4)
> Also the green "merge" button in my pull request concerns me somewhat, have
> i somehow gotten permissions to do that?

I think this is just a Pagure UI fail, the merge button will unroll a set of options, and you will see none. See https://pagure.io/pagure/issue/5251

Comment 6 Ulrik Haugen 2025-07-28 10:28:01 UTC
(In reply to Miro Hrončok from comment #5)
> (In reply to Ulrik Haugen from comment #3)
> > I created it against the rawhide branch, should it have been the epel10
> > branch instead?
> 
> Depends on the package in question. Here we have epel10 and rawhide branches
> more or less in sync, so it doesn't really matter. You can open 2 PR form
> the smwe branch, so the CI build runs on rawhide + EPEL and we can verify
> the results.

Ok, i'll hold off on the second pull request until after lunch to see if i get some more feedback in the first one.

> > I assumed you'd want to handle the release tag and changelog.
> 
> Nah, it's better if you add that to your PR.

Ok, i added that just now.

> > Despite waiting for a long time after adding an ssh key to Fas
> > src.fedoraproject.org never stopped saying "You need to upload SSH key to be
> > able to clone over SSH", in the end i made the changes through the web
> > editor, do you happen to know what i should have done?
> 
> If you are not in the packager group, you cannot push via SSH, you need to
> push via HTTPS. See
> https://docs.fedoraproject.org/en-US/ci/pull-requests/
> #_you_are_not_a_packager

I see, thank you for the pointer!

Comment 7 Fedora Update System 2025-07-28 15:15:21 UTC
FEDORA-EPEL-2025-cedf160322 (rpmlint-2.7.0-6.el10_1) has been submitted as an update to Fedora EPEL 10.1.
https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2025-cedf160322

Comment 8 Fedora Update System 2025-07-29 04:11:41 UTC
FEDORA-EPEL-2025-cedf160322 has been pushed to the Fedora EPEL 10.1 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2025-cedf160322

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 9 Fedora Update System 2025-08-06 01:04:55 UTC
FEDORA-EPEL-2025-cedf160322 (rpmlint-2.7.0-6.el10_1) has been pushed to the Fedora EPEL 10.1 stable repository.
If problem still persists, please make note of it in this bug report.