I expect you talked about the nonfree section since it's proprietary (the namespace is set as appropriate). You can use NoSource: 0 (After Source0) instead of using with conditional to avoid producing src.rpm with the Source0 in it. (it will be named nosrc.rpm instead). Unfortunately, it will not work at all with mock since you expect the whole content to be provided and even less with koji since it expect no internet access (you might have access to the cache source at least). To be tested on scratch build... The other point is that you cannot have a different source/binary content. So koji will now allows to build the binary with the .src.rpm once, then the "nosrc.rpm" on the second build and only keep the former binary and the later no source rpm. About pre-built binaries. You only need to use: %define debug_package %{nil} %define __strip /bin/true Please avoid to redefine __os_install_post Please drop # Selinux versioned requires ExclusiveArch: x86_64 armv7hl Uses: Requires: java > 1:1.8.0 https://fedoraproject.org/wiki/Packaging:Java#BuildRequires_and_Requires Why Conflicts: unifi-controller ? Can this be avoided ? %ghost is availabe with EL6. I don't understand why you think it was not. What is available with newer OS is that it does not require the file to be pre-created (so you need to use touch for EL6). %pre , you are probably missing the proper consition to only move the logs files only on upgrade on installation. Why this move is needed probably need to be stated as a comment. It doesn't look acceptable to edit the selinux configuration on post installation. First you need not to assume selinux might not run at all on the end-user system. Second you should better the needed changes to the targeted policy instead. execstack need to be modified in %install step, not %post or you will break rpm -V About the init_t in permissive, this is not at all acceptable either. You are really changing a system wide setting in the back of end-users. https://bugzilla.redhat.com/show_bug.cgi?id=1358476#c20