Spec URL: http://people.redhat.com/nhorman/dpdk.spec SRPM URL: http://people.redhat.com/nhorman/dpdk-1.7.0-0.1.gitb20539d68.src.rpm Description: The DPDK is a set of user space libraries that assists in the creation of high speed networking appliances. Fedora Account System Username: nhorman
Just some spec file oddities: > Version: 1.7.0 > Release: 0.1.gitb20539d68 https://fedoraproject.org/wiki/Packaging:NamingGuidelines#Snapshot_packages > Summary: Intel(r) Data Plane Development Kit core > %description > Intel(r) DPDK core includes kernel modules, core libraries and tools. https://fedoraproject.org/wiki/Packaging:Guidelines#Trademarks_in_Summary_or_Description > Group: System Environment/Libraries There are no system libraries included yet. See further below about the %files section. > ExclusiveArch: i686, x86_64 https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Build_Failures > %define target %{_arch}-default-linuxapp-gcc > %define machine default https://fedoraproject.org/wiki/Packaging:Guidelines#.25global_preferred_over_.25define > %package devel https://fedoraproject.org/wiki/Packaging:Guidelines#Requiring_Base_Package > %install > rm -rf %{buildroot} https://fedoraproject.org/wiki/Packaging:Guidelines#BuildRoot_tag > %post > /sbin/ldconfig > /sbin/depmod > %postun > /sbin/ldconfig > /sbin/depmod > %files > %{_libdir}/%{name}-%{version} That directory is not in runtime linker's search path list, so running ldconfig is superfluous. > %doc %{docdir} Files below %_docdir are implicitly marked as %doc. See "rpm -E %__docdir_path".
new SPEC: http://people.redhat.com/nhorman/dpdk.spec new SRPM: https://people.redhat.com/nhorman/dpdk-1.7.0-0.1.20140513gitb20539d68.src.rpm Listed problems fixed. Thanks.
New spec and srpm to keep up with latest git updates: SPEC: http://people.redhat.com/nhorman/dpdk.spec SRPM: https://people.redhat.com/nhorman/dpdk-1.7.0-0.2.20140521git519f32279.src.rpm
As you use external configuration file, you don't need anymore the "machine" variable which was for configuration overriding. In next update, you'll need to use "native" target name. You'll be able to disable igb_uio compilation when VFIO patchset will be integrated, hopefully soon.
# # The DPDK is designed to optimize througput of network traffic using, among # other techniques, carefully crafted x86 assembly instructions. As such it # currently (and likely never will) run on non-x86 platforms # ExcludeArch: pp64 ExcludeARch: ppc Excludearch: s390x why not use ExclusiveArch: i386 x86_64 ? Also, there is a capital R in ExcludeARch: ppc line. This is a multi-license package, and the guidelines requires additional explanation: https://fedoraproject.org/wiki/Packaging:LicensingGuidelines#Multiple_Licensing_Scenarios ------8<------- In addition, the package must contain a comment explaining the multiple licensing breakdown. The actual implementation of this is left to the maintainer. Some suggested implementations include A comment right above the License: field: # The entire source code is GPLv2+ except foolib/ which is BSD License: GPLv2+ and BSD Including a file as %doc which contains the licensing breakdown for the packaged files, then using: # For a breakdown of the licensing, see PACKAGE-LICENSING Noting the license above the appropriate %files section: %files %doc Changes # Python %{_bindir}/cobra-util %{_bindir}/viper-util # LGPLv2+ %{_bindir}/gnu-util %{_bindir}/rms-util # BSD %{_bindir}/berkeley-util ------8<------- It misses BuildRequires: libpcap-devel Otherwise the package looks good to me.
Flavio, the ExcludeArch directive is because of this: https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support though, they do use an ExclusiveArch example right below it, and dpdk is never going to run on anything non-x86, so I may as well change it. As for the Dual licensing, All the items in DPDK that are GPL or LGPL licensed are actually out of tree kernel modules, that I've configured to not build (for obvious reasons). As such everything that makes it into the manifest is BSD licensed, but I can add a comment to that effect. Will update the buildrequires, thanks!
New Spec and srpm: SPEC: http://people.redhat.com/nhorman/dpdk.spec SRPM: http://people.redhat.com/nhorman/dpdk-1.7.0-0.3.20140603git5ebbb1728.fc19.src.rpm Fixed Flavios concerns, and a build break resulting from a an erroneous attempt to build an out of tree kernel module (disabled now in the build). Also fixed some other trivial issues found by the automated review package
Not too bad, but a few issues identified... Package Review ============== Legend: [x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated [ ] = Manual review needed Issues: ======= - Sources used to build the package match the upstream source, as provided in the spec URL. Note: Upstream MD5sum check error, diff is in /tmp/1097426-dpdk/diff.txt See: http://fedoraproject.org/wiki/Packaging/SourceURL Packaging is based on pre-release of 1.7.0. There actually is no snapshot at the specified URL. The automated download just gets a 404-style HTML page. - Static libraries in -static or -devel subpackage, providing -devel if present. Note: Package has .a files: dpdk. Illegal package name: dpdk. Does not provide -static: dpdk. See: http://fedoraproject.org/wiki/Packaging/Guidelines#StaticLibraries Needs something like the following in dpdk.spec: %package devel Provides: dpdk-static = %{version}-%{release} - Large documentation must go in a -doc subpackage. Large could be size (~1MB) or number of files. Note: Documentation size is 3328000 bytes in 286 files. See: http://fedoraproject.org/wiki/Packaging/Guidelines#PackageDocumentation Move /usr/share/doc/dpdk-1.7.0/* to dpdk-doc-1.7.0 package? - Comment above "License:" clause of dpdk.spec looks a bit garbled. Please note that the kni bits (not packaged) seem to be covered by GPL. ===== MUST items ===== C/C++: [x]: Package does not contain kernel modules. [x]: Package contains no static executables. [x]: Header files in -devel subpackage, if present. [x]: Package does not contain any libtool archives (.la) [x]: Rpath absent or only used for internal libs. Generic: [x]: Package is licensed with an open-source compatible license and meets other legal requirements as defined in the legal section of Packaging Guidelines. [x]: If (and only if) the source package includes the text of the license(s) in its own file, then that file, containing the text of the license(s) for the package is included in %doc. Tarball contains LICENSE.GPL and LICENSE.LGPL, but they do not apply to any packaged files. [x]: License field in the package spec file matches the actual license. Note: Checking patched sources after %prep for licenses. Licenses found: "BSD (3 clause) GPL (v2)", "Unknown or generated", "BSD (4 clause)", "BSD (3 clause) LGPL (v2.1)", "BSD (3 clause)", "BSD (2 clause)", "GPL (v2)". 58 files have unknown license. Detailed output of licensecheck in /tmp/1097426-dpdk/licensecheck.txt [x]: License file installed when any subpackage combination is installed. [x]: If the package is under multiple licenses, the licensing breakdown must be documented in the spec. [x]: %build honors applicable compiler flags or justifies otherwise. [x]: Package contains no bundled libraries without FPC exception. [x]: Changelog in prescribed format. [x]: Sources contain only permissible code or content. [x]: Package contains desktop file if it is a GUI application. This one is N/A. [x]: Development files must be in a -devel package [x]: Package uses nothing in %doc for runtime. [x]: Package consistently uses macros (instead of hard-coded directory names). [x]: Package is named according to the Package Naming Guidelines. [x]: Package does not generate any conflict. [x]: Package obeys FHS, except libexecdir and /usr/target. [x]: If the package is a rename of another package, proper Obsoletes and Provides are present. This one is N/A. [x]: Requires correct, justified where necessary. [x]: Spec file is legible and written in American English. [x]: Package contains systemd file(s) if in need. This one is N/A. [x]: Useful -debuginfo package or justification otherwise. [x]: Package is not known to require an ExcludeArch tag. [x]: Package complies to the Packaging Guidelines [x]: Package successfully compiles and builds into binary rpms on at least one supported primary architecture. [x]: Package installs properly. [x]: Rpmlint is run on all rpms the build produces. Note: There are rpmlint messages (see attachment). [x]: Package requires other packages for directories it uses. [x]: Package must own all directories that it creates. [x]: Package does not own files or directories owned by other packages. [x]: All build dependencies are listed in BuildRequires, except for any that are listed in the exceptions section of Packaging Guidelines. [x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT [x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the beginning of %install. [x]: Macros in Summary, %description expandable at SRPM build time. [x]: Package does not contain duplicates in %files. [x]: Permissions on files are set properly. [x]: Package use %makeinstall only when make install' ' DESTDIR=... doesn't work. [x]: Package is named using only allowed ASCII characters. [x]: Package do not use a name that already exist [x]: Package is not relocatable. [x]: Spec file name must match the spec package %{name}, in the format %{name}.spec. [x]: File names are valid UTF-8. [x]: Packages must not store files under /srv, /opt or /usr/local ===== SHOULD items ===== Generic: [!]: If the source package does not include license text(s) as a separate file from upstream, the packager SHOULD query upstream to include it. Have you pinged the 6wind guys about this? [!]: Final provides and requires are sane (see attachments). Missing Provides for dpdk-static as noted above. [x]: Package functions as described. [x]: Latest version is packaged. [x]: Package does not include license text files separate from upstream. [!]: Patches link to upstream bugs/comments/lists or are otherwise justified. Need a comment for dpdk-1.7.0-igb_uio_disable.patch [x]: Description and summary sections in the package spec file contains translations for supported Non-English languages, if available. This one is N/A. [!]: %check is present and all tests pass. No support from upstream. [x]: Packages should try to preserve timestamps of original installed files. [!]: Spec use %global instead of %define unless justified. Note: %define requiring justification: %define destdir %{buildroot}%{_prefix}, %define datadir %{_datadir}/%{name}-%{version}, %define docdir %{_docdir}/%{name}-%{version} [x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file [x]: Sources can be downloaded from URI in Source: tag [x]: Reviewer should test that the package builds in mock. [x]: Buildroot is not present [x]: Package has no %clean section with rm -rf %{buildroot} (or $RPM_BUILD_ROOT) [x]: Dist tag is present (not strictly required in GL). [x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin. [x]: Fully versioned dependency in subpackages if applicable. [x]: Uses parallel make %{?_smp_mflags} macro. [x]: SourceX is a working URL. [x]: Package should compile and build into binary rpms on all supported architectures. ===== EXTRA items ===== Generic: [!]: Large data in /usr/share should live in a noarch subpackage if package is arched. Note: Arch-ed rpms have a total of 3665920 bytes in /usr/share Consider making a -doc package that is noarch? [x]: Rpmlint is run on all installed packages. Note: There are rpmlint messages (see attachment). [x]: Spec file according to URL is the same as in SRPM. Rpmlint ------- Checking: dpdk-1.7.0-0.3.20140603git5ebbb1728.fc21.x86_64.rpm dpdk-devel-1.7.0-0.3.20140603git5ebbb1728.fc21.x86_64.rpm dpdk-1.7.0-0.3.20140603git5ebbb1728.fc21.src.rpm dpdk.x86_64: W: spelling-error %description -l en_US testpmd -> tested dpdk.x86_64: W: spelling-error %description -l en_US pktgen -> pkt gen, pkt-gen, Roentgen dpdk.x86_64: W: spelling-error %description -l en_US rumptcpip -> scrumptious dpdk.x86_64: W: incoherent-version-in-changelog 1.0.7-0.1.gitb20539d68 ['1.7.0-0.3.20140603git5ebbb1728.fc21', '1.7.0-0.3.20140603git5ebbb1728'] dpdk.x86_64: W: no-documentation dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/libethdev.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_cmdline.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_pmd_pcap.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_mempool.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_ring.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_mbuf.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_pmd_vmxnet3_uio.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_hash.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_power.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_pmd_ring.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_malloc.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_sched.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_meter.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_eal.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_pmd_virtio_uio.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_lpm.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_kvargs.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_timer.a dpdk.x86_64: W: no-manual-page-for-binary testpmd-1.7.0 dpdk-devel.x86_64: W: spelling-error %description -l en_US makefiles -> make files, make-files, filmmakers dpdk-devel.x86_64: W: spurious-executable-perm /usr/include/dpdk-1.7.0/exec-env/rte_kni_common.h dpdk-devel.x86_64: W: spurious-executable-perm /usr/include/dpdk-1.7.0/rte_timer.h dpdk.src: W: spelling-error %description -l en_US testpmd -> tested dpdk.src: W: spelling-error %description -l en_US pktgen -> pkt gen, pkt-gen, Roentgen dpdk.src: W: spelling-error %description -l en_US rumptcpip -> scrumptious dpdk.src:95: W: macro-in-comment %{datadir} dpdk.src:95: W: macro-in-comment %{target} 3 packages and 0 specfiles checked; 0 errors, 32 warnings. Rpmlint (installed packages) ---------------------------- # rpmlint dpdk-devel dpdk dpdk-devel.x86_64: W: spelling-error %description -l en_US makefiles -> make files, make-files, filmmakers dpdk-devel.x86_64: W: spurious-executable-perm /usr/include/dpdk-1.7.0/exec-env/rte_kni_common.h dpdk-devel.x86_64: W: spurious-executable-perm /usr/include/dpdk-1.7.0/rte_timer.h dpdk.x86_64: W: spelling-error %description -l en_US testpmd -> tested dpdk.x86_64: W: spelling-error %description -l en_US pktgen -> pkt gen, pkt-gen, Roentgen dpdk.x86_64: W: spelling-error %description -l en_US rumptcpip -> scrumptious dpdk.x86_64: W: incoherent-version-in-changelog 1.0.7-0.1.gitb20539d68 ['1.7.0-0.3.20140603git5ebbb1728.fc21', '1.7.0-0.3.20140603git5ebbb1728'] dpdk.x86_64: W: no-documentation dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/libethdev.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_cmdline.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_pmd_pcap.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_mempool.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_ring.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_mbuf.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_pmd_vmxnet3_uio.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_hash.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_power.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_pmd_ring.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_malloc.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_sched.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_meter.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_eal.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_pmd_virtio_uio.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_lpm.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_kvargs.a dpdk.x86_64: W: devel-file-in-non-devel-package /usr/lib64/dpdk-1.7.0/librte_timer.a dpdk.x86_64: W: no-manual-page-for-binary testpmd-1.7.0 2 packages and 0 specfiles checked; 0 errors, 27 warnings. # echo 'rpmlint-done:' Requires -------- dpdk-devel (rpmlib, GLIBC filtered): dpdk(x86-64) dpdk (rpmlib, GLIBC filtered): /bin/bash /usr/bin/python libc.so.6()(64bit) libdl.so.2()(64bit) libm.so.6()(64bit) libpcap.so.1()(64bit) libpthread.so.0()(64bit) librt.so.1()(64bit) rtld(GNU_HASH) Provides -------- dpdk-devel: dpdk-devel dpdk-devel(x86-64) dpdk: dpdk dpdk(x86-64) Source checksums ---------------- http://dpdk.org/browse/dpdk/snapshot/dpdk-1.7.0-0.3.20140603git5ebbb1728.tgz : CHECKSUM(SHA256) this package : cc8ee925adff04ef2f70488f945743764f3a7a9fb23948d2f6327c9852a79bbc CHECKSUM(SHA256) upstream package : 27e3fd3902d8025b06a3224883d5fd105dbad5325e2481d9ac27e26482efcbbe diff -r also reports differences Generated by fedora-review 0.5.1 (bb9bf27) last change: 2013-12-13 Command line :/usr/bin/fedora-review -b 1097426 -m fedora-rawhide-x86_64 Buildroot used: fedora-rawhide-x86_64 Active plugins: Generic, Shell-api, C/C++ Disabled plugins: Java, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP, Ruby Disabled flags: EXARCH, EPEL5, BATCH, DISTTAG
New packages: SPEC: http://people.redhat.com/nhorman/dpdk.spec SRPM: https://people.redhat.com/nhorman/dpdk-1.7.0-0.4.20140521git519f32279.src.rpm These should address all the issues you noted, John. The only ones not explicitly fixed according to your suggestions are the static library packaging, as it should all be a DSO build (which is now fixed), and the licensing issue (because I felt it was too large an undertaking to just fix up). I have sent a note upstream about sorting out licensing clarity however. Let me know what you think.
Sorry, had the wrong SRPM url above, should be: https://people.redhat.com/nhorman/dpdk-1.7.0-0.4.20140603git5ebbb1728.fc19.src.rpm
Grrrr, new python code slipped in. We don't need it. The igb_uio.py code is useless as we're not yet supporting igb drivers, plus we can just do uio detachment with scripts already available. The cpu_layout script functionality is already covered by the available lscpu utility. So just remove them. SPEC: http://people.redhat.com/nhorman/dpdk.spec SRPM: https://people.redhat.com/nhorman/dpdk-1.7.0-0.5.20140521git519f32279.src.rpm
https://people.redhat.com/nhorman/dpdk-1.7.0-0.5.20140603git5ebbb1728.fc19.src.rpm
New SRPM/SPEC fixing directory ownership issue: SPEC: http://people.redhat.com/nhorman/dpdk.spec SRPM: https://people.redhat.com/nhorman/dpdk-1.7.0-0.6.20140603git5ebbb1728.fc19.src.rpm
OK, overall it looks good to me. I would prefer to see a comment in the spec file about the git tag you are using, as described here: https://fedoraproject.org/wiki/Packaging:SourceURL?rd=Packaging/SourceURL Other than that, I'm satisfied that this is a PASS. Package Review ============== Legend: [x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated [ ] = Manual review needed Issues: ======= - Sources used to build the package match the upstream source, as provided in the spec URL. Note: Upstream MD5sum check error, diff is in /tmp/1097426-dpdk/diff.txt See: http://fedoraproject.org/wiki/Packaging/SourceURL Packaging is based on pre-release of 1.7.0. There actually is no snapshot at the specified URL. The automated download just gets a 404-style HTML page. ===== MUST items ===== C/C++: [x]: Package does not contain kernel modules. [x]: Package contains no static executables. [x]: Development (unversioned) .so files in -devel subpackage, if present. Note: Unversioned so-files in private %_libdir subdirectory (see attachment). Verify they are not in ld path. [x]: Header files in -devel subpackage, if present. [x]: Package does not contain any libtool archives (.la) [x]: Rpath absent or only used for internal libs. Generic: [x]: Package is licensed with an open-source compatible license and meets other legal requirements as defined in the legal section of Packaging Guidelines. [x]: If (and only if) the source package includes the text of the license(s) in its own file, then that file, containing the text of the license(s) for the package is included in %doc. Tarball contains LICENSE.GPL and LICENSE.LGPL, but they do not apply to any packaged files. [x]: License field in the package spec file matches the actual license. Note: Checking patched sources after %prep for licenses. Licenses found: "BSD (3 clause) GPL (v2)", "Unknown or generated", "BSD (4 clause)", "BSD (3 clause) LGPL (v2.1)", "BSD (3 clause)", "BSD (2 clause)", "GPL (v2)". 58 files have unknown license. Detailed output of licensecheck in /tmp/1097426-dpdk/licensecheck.txt [x]: License file installed when any subpackage combination is installed. Above is N/A. [x]: If the package is under multiple licenses, the licensing breakdown must be documented in the spec. [x]: %build honors applicable compiler flags or justifies otherwise. [x]: Package contains no bundled libraries without FPC exception. [x]: Changelog in prescribed format. [x]: Sources contain only permissible code or content. [x]: Package contains desktop file if it is a GUI application. Above is N/A. [x]: Development files must be in a -devel package [x]: Package uses nothing in %doc for runtime. [x]: Package consistently uses macros (instead of hard-coded directory names). [x]: Package is named according to the Package Naming Guidelines. [x]: Package does not generate any conflict. [x]: Package obeys FHS, except libexecdir and /usr/target. [x]: If the package is a rename of another package, proper Obsoletes and Provides are present. Above is N/A. [x]: Requires correct, justified where necessary. [x]: Spec file is legible and written in American English. [x]: Package contains systemd file(s) if in need. Above is N/A. [x]: Useful -debuginfo package or justification otherwise. [x]: Package is not known to require an ExcludeArch tag. [x]: Package complies to the Packaging Guidelines [x]: Package successfully compiles and builds into binary rpms on at least one supported primary architecture. [x]: Package installs properly. [x]: Rpmlint is run on all rpms the build produces. Note: There are rpmlint messages (see attachment). [x]: Package requires other packages for directories it uses. [x]: Package must own all directories that it creates. [x]: Package does not own files or directories owned by other packages. [x]: All build dependencies are listed in BuildRequires, except for any that are listed in the exceptions section of Packaging Guidelines. [x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT [x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the beginning of %install. [x]: Macros in Summary, %description expandable at SRPM build time. [x]: Package does not contain duplicates in %files. [x]: Permissions on files are set properly. [x]: Package use %makeinstall only when make install' ' DESTDIR=... doesn't work. [x]: Package is named using only allowed ASCII characters. [x]: Package do not use a name that already exist [x]: Package is not relocatable. [x]: Spec file name must match the spec package %{name}, in the format %{name}.spec. [x]: File names are valid UTF-8. [x]: Large documentation must go in a -doc subpackage. Large could be size (~1MB) or number of files. Note: Documentation size is 0 bytes in 0 files. [x]: Packages must not store files under /srv, /opt or /usr/local ===== SHOULD items ===== Generic: [x]: If the source package does not include license text(s) as a separate file from upstream, the packager SHOULD query upstream to include it. [x]: Final provides and requires are sane (see attachments). [x]: Package functions as described. [x]: Latest version is packaged. [x]: Package does not include license text files separate from upstream. [x]: Patches link to upstream bugs/comments/lists or are otherwise justified. [x]: Description and summary sections in the package spec file contains translations for supported Non-English languages, if available. Above is N/A. [x]: %check is present and all tests pass. No support from upstream. [x]: Packages should try to preserve timestamps of original installed files. [x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file [x]: Sources can be downloaded from URI in Source: tag [x]: Reviewer should test that the package builds in mock. [x]: Buildroot is not present [x]: Package has no %clean section with rm -rf %{buildroot} (or $RPM_BUILD_ROOT) [x]: Dist tag is present (not strictly required in GL). [x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin. [x]: Fully versioned dependency in subpackages if applicable. [x]: Uses parallel make %{?_smp_mflags} macro. [x]: SourceX is a working URL. [x]: Package should compile and build into binary rpms on all supported architectures. [x]: Spec use %global instead of %define unless justified. ===== EXTRA items ===== Generic: [x]: Rpmlint is run on all installed packages. Note: There are rpmlint messages (see attachment). [x]: Large data in /usr/share should live in a noarch subpackage if package is arched. [x]: Spec file according to URL is the same as in SRPM. Rpmlint ------- Checking: dpdk-1.7.0-0.6.20140603git5ebbb1728.fc21.x86_64.rpm dpdk-devel-1.7.0-0.6.20140603git5ebbb1728.fc21.x86_64.rpm dpdk-doc-1.7.0-0.6.20140603git5ebbb1728.fc21.noarch.rpm dpdk-1.7.0-0.6.20140603git5ebbb1728.fc21.src.rpm dpdk.x86_64: W: spelling-error %description -l en_US testpmd -> tested dpdk.x86_64: W: spelling-error %description -l en_US pktgen -> pkt gen, pkt-gen, Roentgen dpdk.x86_64: W: spelling-error %description -l en_US rumptcpip -> scrumptious dpdk.x86_64: W: incoherent-version-in-changelog 1.0.7-0.4.20140603git5ebbb1728 ['1.7.0-0.6.20140603git5ebbb1728.fc21', '1.7.0-0.6.20140603git5ebbb1728'] dpdk.x86_64: W: no-documentation dpdk.x86_64: W: no-manual-page-for-binary testpmd-1.7.0 dpdk-devel.x86_64: W: spelling-error %description -l en_US makefiles -> make files, make-files, filmmakers dpdk-devel.x86_64: W: no-documentation dpdk-devel.x86_64: W: spurious-executable-perm /usr/include/dpdk-1.7.0/rte_timer.h dpdk-devel.x86_64: W: spurious-executable-perm /usr/include/dpdk-1.7.0/exec-env/rte_kni_common.h dpdk.src: W: spelling-error %description -l en_US testpmd -> tested dpdk.src: W: spelling-error %description -l en_US pktgen -> pkt gen, pkt-gen, Roentgen dpdk.src: W: spelling-error %description -l en_US rumptcpip -> scrumptious dpdk.src:123: W: macro-in-comment %{datadir} dpdk.src:123: W: macro-in-comment %{target} 4 packages and 0 specfiles checked; 0 errors, 15 warnings. Rpmlint (installed packages) ---------------------------- # rpmlint dpdk-devel dpdk-doc dpdk dpdk-devel.x86_64: W: spelling-error %description -l en_US makefiles -> make files, make-files, filmmakers dpdk-devel.x86_64: W: no-documentation dpdk-devel.x86_64: W: spurious-executable-perm /usr/include/dpdk-1.7.0/rte_timer.h dpdk-devel.x86_64: W: spurious-executable-perm /usr/include/dpdk-1.7.0/exec-env/rte_kni_common.h dpdk.x86_64: W: spelling-error %description -l en_US testpmd -> tested dpdk.x86_64: W: spelling-error %description -l en_US pktgen -> pkt gen, pkt-gen, Roentgen dpdk.x86_64: W: spelling-error %description -l en_US rumptcpip -> scrumptious dpdk.x86_64: W: incoherent-version-in-changelog 1.0.7-0.4.20140603git5ebbb1728 ['1.7.0-0.6.20140603git5ebbb1728.fc21', '1.7.0-0.6.20140603git5ebbb1728'] dpdk.x86_64: W: no-documentation dpdk.x86_64: W: no-manual-page-for-binary testpmd-1.7.0 3 packages and 0 specfiles checked; 0 errors, 10 warnings. # echo 'rpmlint-done:' Requires -------- dpdk-devel (rpmlib, GLIBC filtered): dpdk(x86-64) dpdk-doc (rpmlib, GLIBC filtered): dpdk(x86-64) dpdk (rpmlib, GLIBC filtered): ld-linux-x86-64.so.2()(64bit) libc.so.6()(64bit) libdl.so.2()(64bit) libethdev.so()(64bit) libgcc_s.so.1()(64bit) libm.so.6()(64bit) libpcap.so.1()(64bit) libpthread.so.0()(64bit) librt.so.1()(64bit) librte_cmdline.so()(64bit) librte_eal.so()(64bit) librte_hash.so()(64bit) librte_kvargs.so()(64bit) librte_lpm.so()(64bit) librte_malloc.so()(64bit) librte_mbuf.so()(64bit) librte_mempool.so()(64bit) librte_meter.so()(64bit) librte_power.so()(64bit) librte_ring.so()(64bit) librte_sched.so()(64bit) librte_timer.so()(64bit) rtld(GNU_HASH) Provides -------- dpdk-devel: dpdk-devel dpdk-devel(x86-64) dpdk-doc: dpdk-doc dpdk: dpdk dpdk(x86-64) libethdev.so()(64bit) librte_cmdline.so()(64bit) librte_eal.so()(64bit) librte_hash.so()(64bit) librte_kvargs.so()(64bit) librte_lpm.so()(64bit) librte_malloc.so()(64bit) librte_mbuf.so()(64bit) librte_mempool.so()(64bit) librte_meter.so()(64bit) librte_pmd_pcap.so()(64bit) librte_pmd_ring.so()(64bit) librte_pmd_virtio_uio.so()(64bit) librte_pmd_vmxnet3_uio.so()(64bit) librte_power.so()(64bit) librte_ring.so()(64bit) librte_sched.so()(64bit) librte_timer.so()(64bit) Unversioned so-files -------------------- dpdk: /usr/lib64/dpdk-1.7.0/libethdev.so dpdk: /usr/lib64/dpdk-1.7.0/librte_cmdline.so dpdk: /usr/lib64/dpdk-1.7.0/librte_eal.so dpdk: /usr/lib64/dpdk-1.7.0/librte_hash.so dpdk: /usr/lib64/dpdk-1.7.0/librte_kvargs.so dpdk: /usr/lib64/dpdk-1.7.0/librte_lpm.so dpdk: /usr/lib64/dpdk-1.7.0/librte_malloc.so dpdk: /usr/lib64/dpdk-1.7.0/librte_mbuf.so dpdk: /usr/lib64/dpdk-1.7.0/librte_mempool.so dpdk: /usr/lib64/dpdk-1.7.0/librte_meter.so dpdk: /usr/lib64/dpdk-1.7.0/librte_pmd_pcap.so dpdk: /usr/lib64/dpdk-1.7.0/librte_pmd_ring.so dpdk: /usr/lib64/dpdk-1.7.0/librte_pmd_virtio_uio.so dpdk: /usr/lib64/dpdk-1.7.0/librte_pmd_vmxnet3_uio.so dpdk: /usr/lib64/dpdk-1.7.0/librte_power.so dpdk: /usr/lib64/dpdk-1.7.0/librte_ring.so dpdk: /usr/lib64/dpdk-1.7.0/librte_sched.so dpdk: /usr/lib64/dpdk-1.7.0/librte_timer.so Source checksums ---------------- http://dpdk.org/browse/dpdk/snapshot/dpdk-1.7.0-20140603git5ebbb1728.tgz : CHECKSUM(SHA256) this package : cc8ee925adff04ef2f70488f945743764f3a7a9fb23948d2f6327c9852a79bbc CHECKSUM(SHA256) upstream package : 772c705fee7d47488b4b17d8c6a95bc2f702b8c534453d44ac6524255687735b diff -r also reports differences Generated by fedora-review 0.5.1 (bb9bf27) last change: 2013-12-13 Command line :/usr/bin/fedora-review -b 1097426 -m fedora-rawhide-x86_64 Buildroot used: fedora-rawhide-x86_64 Active plugins: Generic, Shell-api, C/C++ Disabled plugins: Java, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP, Ruby Disabled flags: EXARCH, EPEL5, BATCH, DISTTAG
New Package SCM Request ======================= Package Name: dpdk Short Description: Data Plane Development Kit libraries Upstream URL: http://dpdk.org Owners: nhorman Branches: f20 InitialCC:
Git done (by process-git-requests).
Thank you!
dpdk-1.7.0-0.6.20140603git5ebbb1728.fc20 has been submitted as an update for Fedora 20. https://admin.fedoraproject.org/updates/dpdk-1.7.0-0.6.20140603git5ebbb1728.fc20
(In reply to John W. Linville from comment #14) > [x]: Useful -debuginfo package or justification otherwise. It's not useful, it's lacking sources. Further, as the build suppresses useful output it cannot be immediately seen from the build logs why that happens. Making the build verbose is a start (will submit a patch for that), and it reveals that the build is not done using $RPM_OPT_FLAGS at all, and it contains flags like -march which most likely aren't a good idea.
Created attachment 904575 [details] Don't suppress useful build output
Hmmm...my bad. I guess I could use some info on what makes a useful -debuginfo package...
Fixed in rawhide and F20
dpdk-1.7.0-0.6.20140603git5ebbb1728.fc20 has been pushed to the Fedora 20 stable repository.
(In reply to Neil Horman from comment #22) > Fixed in rawhide and F20 Nope, debuginfo still has no sources, $RPM_OPT_FLAGS are not being used, and there are still those problematic flags in use such as -march, SSE things etc. Additionally, the package has ExclusiveArch: i386 x86_64 which means it won't be built on our current 32-bit i686 Fedora at all, i386 should be replaced with %{ix86} to fix that.
Created attachment 913459 [details] dpdk-spec-optflags.patch Maybe this helps with the CFLAGS?
https://fedoraproject.org/wiki/Packaging:Debuginfo?rd=Packaging/Debuginfo Some info there on debuginfo packaging problems. It is a little impenetrable, but maybe you can find a tidbit there that I missed...
I won't be using RPM_OPT_FLAGS, because they override options that the dpdk has to set which will otherwise cause build failures/run time failures. Its not problematic, its just the way it builds. I'll look at the Exclusive arch and debug issues when I get a chance. It looks like a later git pull changed the way debug flags are passed into the build.
also note, dpdk doesn't build for i386 platforms. i686 and x86_64 are the only arches it builds on currently.
(In reply to Neil Horman from comment #27) > I won't be using RPM_OPT_FLAGS, because they override options that the dpdk > has to set which will otherwise cause build failures/run time failures. The proper way to do it is to use RPM_OPT_FLAGS (or more generally user set CFLAGS) as the basis, and append/override parts in them that need to be appended/overridden. http://fedoraproject.org/wiki/Packaging:Guidelines#Compiler_flags (In reply to Neil Horman from comment #28) > also note, dpdk doesn't build for i386 platforms. i686 and x86_64 are the > only arches it builds on currently. Nevertheless I suggest doing "ExclusiveArch: %{ix86} x86_64" which in practice in Fedora is the same as "ExclusiveArch: i686 x86_64" nowadays.
You should be able to remove the patches: - dpdk-link-using-cc.patch is already upstream: http://dpdk.org/browse/dpdk/commit/?id=21cdc2e77a - dpdk-debug.patch could be avoided by using EXTRA_CFLAGS, see "make help"
Yes, Thomas, I'm aware of both of these issues, the former patch will be removed when I next update the release tarball (at the 1.7.0 tag), and the latter I'm having issues with, I'm in the process of figuring out whats going on there.
The build is still not using RPM_OPT_FLAGS (including the security related ones) nor documenting why it is not doing so in the specfile. One of those is a MUST in the packaging guidelines, see link in comment 29. Also, the release tag of the latest revision makes it older than the previous one as far as rpm is concerned; instead of 0.9.1 it should have been e.g. 0.10: $ rpmdev-vercmp 1.0.7-0.9.20140603git5ebbb1728 1.0.7-0.9.1.20140603git5ebbb1728 1.0.7-0.9.20140603git5ebbb1728 > 1.0.7-0.9.1.20140603git5ebbb1728
Ville, please read comments before responding, I made specific note of why we're not using RPM_OPT_FLAGS in this, and I'm not changing that.
I have read the comments, and I see that the specfile now contains some mention of RPM_OPT_FLAGS. However I think that's not a real rationale, and it's _far_ from specific -- it doesn't even begin to explain why things like -O2 -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -mtune=generic would "conflict with flags the package sets" and why it is important to leave some of those out or override e.g. -O2 with -O3 for this package. Or why it for example builds with -march=core2 and all those things that look like they assume SSE/SSE2/SSE3/SSSE3 features being present (haven't checked the source on this though) when the target is i686 which includes things much older than core2 and where various SSE levels can't be assumed present.
Ville, go look at the dpdk site to understand what the library does and how it is put together please. I'm not saying its well designed, I'm just saying thats how it is. Until then, I'm done with this.
(In reply to Neil Horman from comment #35) > Ville, go look at the dpdk site to understand what the library does and how > it is put together please. No, that would be a waste of my time, and asking me to do that is proof that I haven't been able to communicate what the guidelines demand from packagers even by pointing them out and asking further specific questions in case they aren't clear, or that you don't seem to care. Either way continuing here would also feel a waste of my time, so I've escalated the issue to FESCo. https://fedorahosted.org/fesco/ticket/1323
Hi Ville and Neil, Maybe I can help with CFLAGS issue but I'm not sure to understand the problem. Please could you summarize it? Why the ticket is closed? Thanks
The ticket is closed because the package is integrated into fedora, so theres no need to keep it open any more. The CFLAGS issue is a tricky one. Ville wants me to do a few things, chief among them build the dpdk with the RPM_OPT_FLAGS macro. This is a large set of compiler flags that is used to enforce security policy in fedora built packages. Unfortunately doing so has several problems, among them the fact that several compiler flags in RPM_OPT_FLAGS conflict with compiler flags that the dpdk build sets internally. Add to that the EXTRA_CFLAGS macro doesn't seem to apply to all sources, and doesn't always parse properly, leading a large series of breaks in the build (both at compile time, and in the package). When Ville says I don't care, I'm really just not that worried about it, given that the Fedora DPDK is an unoptimized build for which there is general consensus that no one will build a product out of the package without a complete rebuild of the libraries anyway. I've not managed to compile a complete list of build breaks for adding RPM_OPT_FLAGS yet, but if you want to take a look, you are more than welcome to. I'm on vacation for the next week, but will be checking my email if you have questions on how to do anything. Otherwise I'll get back to this once I get home.
OK, I understand better. Patches would be better accepted if Ville was explaining this issue on the mailing list. So I strongly suggest Ville to join dev and explains his concern there. Thanks
Its not his responsibility to do so, its mine. He's just playing policeman. I'm just not worried about it yet, because no one will use the dpdk as its currently built in a production environment. We'll get it fixed eventually, Ville is just being a blowhard.
re: comment 34 Upstream DPDK is a performance-oriented project. By default, it uses a variety of compiler optimizations specific to the machine where it is built in order to squeeze as much performance from that machine as possible. In many ways, packaging for Fedora is an alien environment for DPDK. Fedora requires a generic package that runs generically on all machines of the same architecture (more or less). That is the source of the tension here. Most likely, no one will use a generic Fedora DPDK package for deploying an app. But they might use it for development. Since that is our target, we can live with more generic compiler options. Given that, I think we can use the EXTRA_CFLAGS option to include the %{optflags}. Also, we can specify CONFIG_RTE_MACHINE=default to build for a least-common-denominator machine. Unfortunately, I can not get i686 to build when specifying the machine type (default or otherwise) and using the Fedora build options. I am removing %{ix86} from the ExclusiveArch line in dpdk.spec. I'll attach a patch with my proposed changes to the package. I have done a scratch build here: http://koji.fedoraproject.org/koji/taskinfo?taskID=7159930 Please let me know ASAP if anyone has any severe problem with these changes...thanks!
Created attachment 918804 [details] proposed-guidline-fixups.patch Patch with proposed package overhaul to satisfy guidelines...
Created attachment 918861 [details] proposed-guidline-fixups.patch Post the correct/current version of the patch...
John, first, thanks for taking a look at this. Second, I'm fine with removing i686 if its just not building with optflags in place. lastly, i notice you removed the custom config files I had, which turned on several pmd's that were not otherwise enabled. Did you patch those config changes into the shipping configs? I didn't see that in your patch.
Created attachment 919088 [details] proposed-guideline-fixups.patch Retry...not sure what that last patch was...
Sorry about the busted patch posting -- not sure what happened, must have been in a hurry... I patch the config to turn-on the PCAP PMD and turn-off the hardware PMDs that require kernel support. I _think_ all the right libraries are there, but please do check to be sure!