From 3f50ca1e4407bb033155af529f50d28b05cab9c7d1bb2639549fe331eb75ea56 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Thu, 24 Jun 2021 06:34:00 +0000 Subject: [PATCH] Accepting request 901385 from home:StevenK:branches:devel:openSUSE:Factory:rpmlint - Update to require rpmlint >= 2. * Due to rpmlint now being a proper Python package, build a virtual environment, and copy all Python requirements into it. * Drop rpmlint-deps.txt as no longer required. * Lightly rewrite rpmlint.wrapper to support the new world order. - Drop the config snippets, they are not required with rpmlint 2. - Renumber Source numbers. - Filter some more warnings in rpmlint-mini.rpmlintrc. OBS-URL: https://build.opensuse.org/request/show/901385 OBS-URL: https://build.opensuse.org/package/show/devel:openSUSE:Factory:rpmlint/rpmlint-mini?expand=0&rev=138 --- _service | 12 -- _servicedata | 4 - appdata_checker.config | 1 - polkit-default-privs.config | 3 - rpmlint-deps.txt | 155 ------------------- rpmlint-mini.changes | 12 ++ rpmlint-mini.config | 20 --- rpmlint-mini.rpmlintrc | 5 +- rpmlint-mini.spec | 113 +++++--------- rpmlint-security-whitelistings-master.tar.xz | 3 - rpmlint.wrapper | 20 +-- whitelists.config | 2 - 12 files changed, 63 insertions(+), 287 deletions(-) delete mode 100644 _service delete mode 100644 _servicedata delete mode 100644 appdata_checker.config delete mode 100644 polkit-default-privs.config delete mode 100644 rpmlint-deps.txt delete mode 100644 rpmlint-mini.config delete mode 100644 rpmlint-security-whitelistings-master.tar.xz delete mode 100644 whitelists.config diff --git a/_service b/_service deleted file mode 100644 index 7ac2e07..0000000 --- a/_service +++ /dev/null @@ -1,12 +0,0 @@ - - - master - https://github.com/openSUSE/rpmlint-security-whitelistings - git - enable - - - xz - *.tar - - diff --git a/_servicedata b/_servicedata deleted file mode 100644 index c1d10cf..0000000 --- a/_servicedata +++ /dev/null @@ -1,4 +0,0 @@ - - - https://github.com/openSUSE/rpmlint-security-whitelistings - 202314af16e2bec213d879ad12e68a01825c7a8b \ No newline at end of file diff --git a/appdata_checker.config b/appdata_checker.config deleted file mode 100644 index aedd23c..0000000 --- a/appdata_checker.config +++ /dev/null @@ -1 +0,0 @@ -setOption("AppDataChecker", ("appstream-util", "--nonet", "validate-relax")) diff --git a/polkit-default-privs.config b/polkit-default-privs.config deleted file mode 100644 index 9b6deec..0000000 --- a/polkit-default-privs.config +++ /dev/null @@ -1,3 +0,0 @@ -# vim: syntax=python -setOption("PolkitPrivsFiles", [ "/opt/testing/share/rpmlint/data/polkit-default-privs.standard" ]) -setOption("PolkitRulesWhitelist", [ "/opt/testing/share/rpmlint/data/polkit-rules-whitelist.json" ]) diff --git a/rpmlint-deps.txt b/rpmlint-deps.txt deleted file mode 100644 index 94ac05e..0000000 --- a/rpmlint-deps.txt +++ /dev/null @@ -1,155 +0,0 @@ -abc.py -base64.py -bisect.py -_bootlocale.py -calendar.py -codecs.py -cp437.py -_collections_abc.py -collections/__init__.py -_compat_pickle.py -configparser.py -contextlib.py -copy.py -copyreg.py -datetime.py -dummy_threading.py -_dummy_thread.py -email/base64mime.py -email/charset.py -email/_encoded_words.py -email/encoders.py -email/errors.py -email/feedparser.py -email/header.py -email/__init__.py -email/iterators.py -email/message.py -email/_parseaddr.py -email/parser.py -email/_policybase.py -email/quoprimime.py -email/utils.py -encodings/aliases.py -encodings/ascii.py -encodings/__init__.py -encodings/latin_1.py -encodings/utf_8.py -enum.py -fnmatch.py -functools.py -__future__.py -genericpath.py -getopt.py -glob.py -hashlib.py -heapq.py -http/client.py -http/__init__.py -imp.py -importlib/__init__.py -importlib/machinery.py -importlib/util.py -io.py -json/decoder.py -json/scanner.py -json/encoder.py -json/__init__.py -json/tool.py -keyword.py -lib-dynload/array.cpython-3*-*-linux-gnu*.so -lib-dynload/_asyncio.cpython-3*-*-linux-gnu*.so -lib-dynload/audioop.cpython-3*-*-linux-gnu*.so -lib-dynload/binascii.cpython-3*-*-linux-gnu*.so -lib-dynload/_bisect.cpython-3*-*-linux-gnu*.so -lib-dynload/_blake2.cpython-3*-*-linux-gnu*.so -lib-dynload/cmath.cpython-3*-*-linux-gnu*.so -lib-dynload/_csv.cpython-3*-*-linux-gnu*.so -lib-dynload/_datetime.cpython-3*-*-linux-gnu*.so -lib-dynload/fcntl.cpython-3*-*-linux-gnu*.so -lib-dynload/grp.cpython-3*-*-linux-gnu*.so -lib-dynload/_heapq.cpython-3*-*-linux-gnu*.so -lib-dynload/_json.cpython-3*-*-linux-gnu*.so -lib-dynload/_lsprof.cpython-3*-*-linux-gnu*.so -lib-dynload/math.cpython-3*-*-linux-gnu*.so -lib-dynload/_md5.cpython-3*-*-linux-gnu*.so -lib-dynload/mmap.cpython-3*-*-linux-gnu*.so -lib-dynload/_multibytecodec.cpython-3*-*-linux-gnu*.so -lib-dynload/_multiprocessing.cpython-3*-*-linux-gnu*.so -lib-dynload/_opcode.cpython-3*-*-linux-gnu*.so -lib-dynload/ossaudiodev.cpython-3*-*-linux-gnu*.so -lib-dynload/parser.cpython-3*-*-linux-gnu*.so -lib-dynload/pyexpat.cpython-3*-*-linux-gnu*.so -lib-dynload/_posixsubprocess.cpython-3*-*-linux-gnu*.so -lib-dynload/_random.cpython-3*-*-linux-gnu*.so -lib-dynload/resource.cpython-3*-*-linux-gnu*.so -lib-dynload/select.cpython-3*-*-linux-gnu*.so -lib-dynload/_sha1.cpython-3*-*-linux-gnu*.so -lib-dynload/_sha256.cpython-3*-*-linux-gnu*.so -lib-dynload/_sha3.cpython-3*-*-linux-gnu*.so -lib-dynload/_sha512.cpython-3*-*-linux-gnu*.so -lib-dynload/_socket.cpython-3*-*-linux-gnu*.so -lib-dynload/spwd.cpython-3*-*-linux-gnu*.so -lib-dynload/_struct.cpython-3*-*-linux-gnu*.so -lib-dynload/syslog.cpython-3*-*-linux-gnu*.so -lib-dynload/termios.cpython-3*-*-linux-gnu*.so -lib-dynload/zlib.cpython-3*-*-linux-gnu*.so -linecache.py -locale.py -operator.py -os.py -pickle.py -posixpath.py -quopri.py -random.py -reprlib.py -re.py -selectors.py -shutil.py -signal.py -_sitebuiltins.py -site-packages/magic.py -site-packages/rpm/__init__.py -site-packages/rpm/_rpm*.so -site-packages/rpm/transaction.py -site.py -socket.py -sre_compile.py -sre_constants.py -sre_parse.py -stat.py -string.py -_strptime.py -struct.py -subprocess.py -_sysconfigdata_*_linux_*-linux-gnu*.py -sysconfig.py -tempfile.py -textwrap.py -threading.py -tokenize.py -token.py -traceback.py -types.py -urllib/error.py -urllib/__init__.py -urllib/parse.py -urllib/request.py -urllib/response.py -uu.py -warnings.py -weakref.py -_weakrefset.py -xml/dom/domreg.py -xml/dom/__init__.py -xml/dom/expatbuilder.py -xml/dom/minicompat.py -xml/dom/minidom.py -xml/dom/NodeFilter.py -xml/dom/xmlbuilder.py -xml/__init__.py -xml/parsers/expat.py -xml/parsers/__init__.py -xml/etree/ElementPath.py -xml/etree/ElementTree.py -zipfile.py diff --git a/rpmlint-mini.changes b/rpmlint-mini.changes index fa6952d..6c16dad 100644 --- a/rpmlint-mini.changes +++ b/rpmlint-mini.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Tue Jun 22 07:56:52 UTC 2021 - Steve Kowalik + +- Update to require rpmlint >= 2. + * Due to rpmlint now being a proper Python package, build a virtual + environment, and copy all Python requirements into it. + * Drop rpmlint-deps.txt as no longer required. + * Lightly rewrite rpmlint.wrapper to support the new world order. +- Drop the config snippets, they are not required with rpmlint 2. +- Renumber Source numbers. +- Filter some more warnings in rpmlint-mini.rpmlintrc. + ------------------------------------------------------------------- Thu Mar 25 09:24:35 UTC 2021 - Matthias Gerstner diff --git a/rpmlint-mini.config b/rpmlint-mini.config deleted file mode 100644 index 56495d7..0000000 --- a/rpmlint-mini.config +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/python3 - -import os, glob, Pkg - -configs = [ '/opt/testing/share/rpmlint/config' ] -if os.environ.get("RPMLINT_MINI_CONFIG", None): - configs += os.environ.get("RPMLINT_MINI_CONFIG", '').split(' ') -else: - configs += glob.glob("/home/abuild/rpmbuild/SOURCES/*rpmlintrc") - configs += glob.glob("/usr/src/packages/SOURCES/*rpmlintrc") -configs += glob.glob('/opt/testing/share/rpmlint/mini/*.config') -configs += glob.glob('/etc/rpmlint/factory-strict.config') - -for f in configs: - try: - exec(compile(open(f).read(), f, 'exec')) - except IOError: - pass - except Exception as e: - Pkg.warn('(none): W: error loading %s, skipping: %s' % (f, e)) diff --git a/rpmlint-mini.rpmlintrc b/rpmlint-mini.rpmlintrc index 646f5a8..7878e2e 100644 --- a/rpmlint-mini.rpmlintrc +++ b/rpmlint-mini.rpmlintrc @@ -1,3 +1,6 @@ +addFilter("wrong-script-interpreter") addFilter("library-without-ldconfig") addFilter("python-bytecode-without-source") -addFilter("devel-file-in-non-devel-package") +addFilter("files-duplicate") +addFilter("filelist-forbidden-opt") +addFilter("invalid-url") diff --git a/rpmlint-mini.spec b/rpmlint-mini.spec index bc4a1ef..62d3d33 100644 --- a/rpmlint-mini.spec +++ b/rpmlint-mini.spec @@ -17,31 +17,24 @@ Name: rpmlint-mini -Version: 1.10 +Version: 2.0 Release: 0 Summary: RPM file correctness checker License: GPL-2.0-or-later -Group: System/Packages URL: http://rpmlint.zarb.org/ -Source: desktop-file-utils-0.24.tar.xz -Source2: rpmlint-security-whitelistings-master.tar.xz -Source100: rpmlint-deps.txt -Source101: rpmlint.wrapper -Source102: rpmlint-mini.config -Source103: polkit-default-privs.config -Source104: appdata_checker.config -Source105: whitelists.config -Source1000: rpmlint-mini.rpmlintrc +Source0: desktop-file-utils-0.24.tar.xz +Source1: rpmlint.wrapper # need to fetch the file from there BuildRequires: checkbashisms BuildRequires: dash BuildRequires: glib2-devel BuildRequires: glib2-devel-static +BuildRequires: libedit-devel BuildRequires: libtool BuildRequires: pkgconfig BuildRequires: polkit-default-privs BuildRequires: polkit-whitelisting -BuildRequires: rpmlint +BuildRequires: rpmlint >= 2 #!BuildIgnore: rpmlint-mini Requires: cpio @@ -52,11 +45,6 @@ source packages can be checked. %prep %setup -q -n desktop-file-utils-0.24 [ -r COPYING ] -tar xf %{S:2} -# workaround rpmlintrc not being effective, because regular rpmlint is invoked -# instead of rpmlint-mini, see suse-build change here: -# https://github.com/openSUSE/obs-build/commit/1139134127373b058d3622bafb989c51e2ecc7b8 -cp %{SOURCE1000} $HOME/.rpmlintrc %build %configure @@ -65,78 +53,49 @@ make %{?_smp_mflags} desktop-file-validate V=1 DESKTOP_FILE_UTILS_LIBS="%{_libdi popd %install -# test if the rpmlint works at all +# Check that rpmlint works at all set +e -%{_bindir}/rpmlint rpmlint +%{_bindir}/rpmlint -i rpmlint test $? -gt 0 -a $? -lt 60 && exit 1 set -e -# okay, lets put it together -mkdir -p %{buildroot}/opt/testing/share/rpmlint -install -m 755 -D src/desktop-file-validate %{buildroot}/opt/testing/bin/desktop-file-validate +# Build a virtual env +python3 -m venv %{buildroot}/opt/testing +# We don't need pip, or activation +%{buildroot}/opt/testing/bin/pip uninstall -y pip +rm %{buildroot}/opt/testing/bin/activate* +# We need these available +cp -a src/desktop-file-validate %{buildroot}/opt/testing/bin cp -a %{_bindir}/dash %{_bindir}/checkbashisms %{buildroot}/opt/testing/bin -mkdir -p %{buildroot}/opt/testing/%{_lib} -cp -a %{_libdir}/libedit.so.0* %{buildroot}/opt/testing/%{_lib} -cp -a %{_datadir}/rpmlint/*.py %{buildroot}/opt/testing/share/rpmlint -# install config files -install -d -m 755 %{buildroot}/opt/testing/share/rpmlint/mini -for i in %{_sysconfdir}/rpmlint/{pie,licenses}.config "%{SOURCE103}" "%{SOURCE104}" "%{SOURCE105}"; do - cp $i %{buildroot}/opt/testing/share/rpmlint/mini -done -install -m 644 -D %{_datadir}/rpmlint/config %{buildroot}/opt/testing/share/rpmlint/config -install -m 644 "%{SOURCE102}" %{buildroot}/opt/testing/share/rpmlint -# extra data +cp -a %{_libdir}/libedit.so.0* %{buildroot}/opt/testing/lib +# Install config files +install -d -m 755 %{buildroot}/opt/testing/share +cp -a %{_sysconfdir}/xdg/rpmlint %{buildroot}/opt/testing/share +# Extra data install -m 755 -d %{buildroot}/opt/testing/share/rpmlint/data install -m 644 %{_sysconfdir}/polkit-default-privs.standard %{buildroot}/opt/testing/share/rpmlint/data install -m 644 %{_sysconfdir}/polkit-rules-whitelist.json %{buildroot}/opt/testing/share/rpmlint/data -install -m 644 rpmlint-security-whitelistings-master/*.json %{buildroot}/opt/testing/share/rpmlint/data -# -pushd %{_libdir}/python%{py3_ver}/ -for f in $(<%{SOURCE100}); do - find -path "*/$f" -exec install -D {} %{buildroot}/opt/testing/%{_lib}/python%{py3_ver}/{} \; -done -# ErlangCheck dependencies that are not under %_libdir but under /usr/lib :-( -cp -a %{python3_sitelib}/{construct,pybeam,six.py} %{buildroot}/opt/testing/%{_lib}/python%{py3_ver}/site-packages -install -D %{_bindir}/python3 %{buildroot}/opt/testing/bin/python3 -cp -a %{_libdir}/libpython%{py3_ver}*.so.* %{buildroot}/opt/testing/%{_lib} -cp -a %{_bindir}/rpmlint %{buildroot}/opt/testing/share/rpmlint/rpmlint.py -pushd %{buildroot}/opt/testing/share/rpmlint -PYTHONOPTIMIZE=1 python3 -O -m compileall -b *.py -rm *.py -popd -pushd %{buildroot}/opt/testing/%{_lib}/python%{py3_ver}/ -for f in `find -name \*.py | sort` ; do +# Python dependencies, along with the interpreter, and its library +cp -a %{python_sitearch}/{rpm,zstd}* %{buildroot}/opt/testing/lib/python%{py3_ver}/site-packages +cp -a %{python_sitelib} %{buildroot}/opt/testing/lib/python%{py3_ver} +cp -a %{_libdir}/libpython%{py3_ver}*.so.* %{buildroot}/opt/testing/lib +cp -a %{_bindir}/python3 %{buildroot}/opt/testing/bin +cp -a %{_bindir}/python%{py3_ver} %{buildroot}/opt/testing/bin +pushd %{buildroot}/opt/testing/lib/python%{py3_ver}/ +for f in $(find -name \*.py | sort) ; do PYTHONOPTIMIZE=1 python3 -O -m compileall -b $f rm $f done popd -find %{buildroot}/opt/testing/ -name __pycache__ -print -exec rm -Rf {} + +find %{buildroot}/opt/testing/ -name __pycache__ -exec rm -rf {} + +# We need to force the shebang to be under /opt/testing +sed -e 's,/usr,/opt/testing,' %{_bindir}/rpmlint > %{buildroot}/opt/testing/bin/rpmlint.real +chmod a+x %{buildroot}/opt/testing/bin/rpmlint.real rm -rf %{buildroot}/{usr,etc} -rm -f %{buildroot}/opt/testing/bin/rpmlint -install -m 755 -D %{SOURCE101} %{buildroot}/opt/testing/bin/rpmlint -# hackatlon -%define my_requires %{_builddir}/%{?buildsubdir}/%{name}-requires -cat << EOF > %{my_requires} -cat - > file.list -%{__find_requires} < file.list > requires.list -%{__find_provides} < file.list > provides.list -while read i; do - grep -F -v "\$i" requires.list > requires.list.new - mv requires.list.new requires.list -done < provides.list -cat requires.list -rm -f requires.list provides.list file.list -EOF -chmod +x %{my_requires} -%define _use_internal_dependency_generator 0 -%define __find_requires %{my_requires} -%define __find_provides %{nil} -# final run check to detect python dep changes -LD_LIBRARY_PATH=%{buildroot}/opt/testing/%{_lib} -PYTHONPATH=%{buildroot}/opt/testing/share/rpmlint -PYTHONHOME=%{buildroot}/opt/testing/ -export PYTHONPATH LD_LIBRARY_PATH PYTHONHOME -%{buildroot}/opt/testing/bin/python3 -tt -u -O %{buildroot}/opt/testing/share/rpmlint/rpmlint.pyc /.build.binaries/*.rpm 2>&1 || exit 1 -echo ".. ok" +install -m 755 -D %{SOURCE1} %{buildroot}/opt/testing/bin/rpmlint +# We don't want requirements of libraries, or the odd shebang +%define __requires_exclude (^lib.*|python3)$ +# We don't want to provide any libraries, or Python modules we ship +%define __provides_exclude ^(lib|python) %files /opt/testing diff --git a/rpmlint-security-whitelistings-master.tar.xz b/rpmlint-security-whitelistings-master.tar.xz deleted file mode 100644 index 33d91dc..0000000 --- a/rpmlint-security-whitelistings-master.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d854ee05f6c926c78e7a3afea307586a30d137c4a30e056663b9e797a771a138 -size 6056 diff --git a/rpmlint.wrapper b/rpmlint.wrapper index 346e18e..1c3b891 100644 --- a/rpmlint.wrapper +++ b/rpmlint.wrapper @@ -1,12 +1,14 @@ #!/bin/sh -if test -d /opt/testing/lib64; then - LD_LIBRARY_PATH=/opt/testing/lib64 -else - LD_LIBRARY_PATH=/opt/testing/lib -fi + +LD_LIBRARY_PATH=/opt/testing/lib PATH="/opt/testing/bin:$PATH" -rpmlintdir="/opt/testing/share/rpmlint" -PYTHONPATH="$rpmlintdir" +VIRTUAL_ENV=/opt/testing +XDG_CONFIG_HOME="/opt/testing/share" LC_ALL=en_US.utf-8 -export PYTHONPATH LD_LIBRARY_PATH LC_ALL -exec /opt/testing/bin/python3 -u -O "$rpmlintdir"/rpmlint.pyc -C "$rpmlintdir" -f "$rpmlintdir"/rpmlint-mini.config "$@" +export VIRTUAL_ENV LD_LIBRARY_PATH LC_ALL XDG_CONFIG_HOME +args="" +rpmlintrc=$(ls -1 /home/abuild/rpmbuild/SOURCES/*rpmlintrc 2>/dev/null) +if [ -n "$rpmlintrc" ]; then + args="-r $rpmlintrc" +fi +exec /opt/testing/bin/rpmlint.real $args $@ diff --git a/whitelists.config b/whitelists.config deleted file mode 100644 index 90d2aea..0000000 --- a/whitelists.config +++ /dev/null @@ -1,2 +0,0 @@ -# vim: syntax=python -setOption("WhitelistDataDir", [ "/opt/testing/share/rpmlint/data" ])