Spec URL: http://fedorapeople.org/~jomara/openstack-tuskar-ui.spec SRPM URL: http://fedorapeople.org/~jomara/openstack-tuskar-ui-0.1.0-1.fc20.src.rpm Description: tuskar-ui is a user interface for Tuskar, a management API for OpenStack deployments. It is a plugin for OpenStack Horizon. Fedora Account System Username: jomara Some rpmlint warnings: 0 Rpmlint 171 ------- 172 Checking: openstack-tuskar-ui-0.1.0-1.fc20.noarch.rpm 173 openstack-tuskar-ui-0.1.0-1.fc20.src.rpm 174 openstack-tuskar-ui.noarch: W: non-standard-group Application/System 175 openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.pyc 176 openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.pyo 177 openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.py this python file is the plugin configuration for hrozion 178 openstack-tuskar-ui.src: W: non-standard-group Application/System 179 openstack-tuskar-ui.src: W: invalid-url Source0: http://fedorapeople.org/~jomara/tuskar/tuskar-ui-0.1.0.tar.gz HTTP Error 404: Not Found 180 2 packages and 0 specfiles checked; 0 errors, 6 warnings. I'll upload a tarball to this location, but this isn't really a good long term spot. i'll see where the team wants to host this long term
Hi Jordan, you need to patch the rpm to remove the runtime dependency on pbr. You'll have to provide a patch to remove the runtime requirement. See our other OpenStack packages for examples of this, (e.g. in glance there is a patch called 0002-Remove-runtime-dep-on-python-pbr.patch) Otherwise, apache tracebacks with the following: [Thu Mar 27 15:39:15.092255 2014] [:error] [pid 25293] [remote 192.168.122.1:148] mod_wsgi (pid=25293): Exception occurred processing WSGI script '/usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi'. [Thu Mar 27 15:39:15.092469 2014] [:error] [pid 25293] [remote 192.168.122.1:148] Traceback (most recent call last): [Thu Mar 27 15:39:15.092668 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 187, in __call__ [Thu Mar 27 15:39:15.092841 2014] [:error] [pid 25293] [remote 192.168.122.1:148] self.load_middleware() [Thu Mar 27 15:39:15.092936 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 49, in load_middleware [Thu Mar 27 15:39:15.093064 2014] [:error] [pid 25293] [remote 192.168.122.1:148] mw_instance = mw_class() [Thu Mar 27 15:39:15.093170 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/middleware/locale.py", line 24, in __init__ [Thu Mar 27 15:39:15.093320 2014] [:error] [pid 25293] [remote 192.168.122.1:148] for url_pattern in get_resolver(None).url_patterns: [Thu Mar 27 15:39:15.093423 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/core/urlresolvers.py", line 346, in url_patterns [Thu Mar 27 15:39:15.093533 2014] [:error] [pid 25293] [remote 192.168.122.1:148] patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) [Thu Mar 27 15:39:15.093625 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/core/urlresolvers.py", line 341, in urlconf_module [Thu Mar 27 15:39:15.093748 2014] [:error] [pid 25293] [remote 192.168.122.1:148] self._urlconf_module = import_module(self.urlconf_name) [Thu Mar 27 15:39:15.094078 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module [Thu Mar 27 15:39:15.094178 2014] [:error] [pid 25293] [remote 192.168.122.1:148] __import__(name) [Thu Mar 27 15:39:15.094262 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/../../openstack_dashboard/urls.py", line 38, in <module> [Thu Mar 27 15:39:15.094359 2014] [:error] [pid 25293] [remote 192.168.122.1:148] url(r'', include(horizon.urls)) [Thu Mar 27 15:39:15.094443 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 27, in include [Thu Mar 27 15:39:15.094548 2014] [:error] [pid 25293] [remote 192.168.122.1:148] patterns = getattr(urlconf_module, 'urlpatterns', urlconf_module) [Thu Mar 27 15:39:15.094619 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/utils/functional.py", line 213, in inner [Thu Mar 27 15:39:15.094734 2014] [:error] [pid 25293] [remote 192.168.122.1:148] self._setup() [Thu Mar 27 15:39:15.094818 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/utils/functional.py", line 298, in _setup [Thu Mar 27 15:39:15.094911 2014] [:error] [pid 25293] [remote 192.168.122.1:148] self._wrapped = self._setupfunc() [Thu Mar 27 15:39:15.094994 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/horizon/base.py", line 733, in url_patterns [Thu Mar 27 15:39:15.095104 2014] [:error] [pid 25293] [remote 192.168.122.1:148] return self._urls()[0] [Thu Mar 27 15:39:15.095171 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/horizon/base.py", line 767, in _urls [Thu Mar 27 15:39:15.095279 2014] [:error] [pid 25293] [remote 192.168.122.1:148] url(r'^%s/' % dash.slug, include(dash._decorated_urls))) [Thu Mar 27 15:39:15.095345 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/horizon/base.py", line 464, in _decorated_urls [Thu Mar 27 15:39:15.095453 2014] [:error] [pid 25293] [remote 192.168.122.1:148] url(r'^%s/' % url_slug, include(panel._decorated_urls))) [Thu Mar 27 15:39:15.095518 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/horizon/base.py", line 234, in _decorated_urls [Thu Mar 27 15:39:15.095623 2014] [:error] [pid 25293] [remote 192.168.122.1:148] urlpatterns = self._get_default_urlpatterns() [Thu Mar 27 15:39:15.095711 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/horizon/base.py", line 87, in _get_default_urlpatterns [Thu Mar 27 15:39:15.095804 2014] [:error] [pid 25293] [remote 192.168.122.1:148] urls_mod = import_module('.urls', package_string) [Thu Mar 27 15:39:15.095869 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module [Thu Mar 27 15:39:15.095981 2014] [:error] [pid 25293] [remote 192.168.122.1:148] __import__(name) [Thu Mar 27 15:39:15.096072 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/tuskar_ui/infrastructure/nodes/urls.py", line 17, in <module> [Thu Mar 27 15:39:15.096170 2014] [:error] [pid 25293] [remote 192.168.122.1:148] from tuskar_ui.infrastructure.nodes import views [Thu Mar 27 15:39:15.096236 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/tuskar_ui/infrastructure/nodes/views.py", line 23, in <module> [Thu Mar 27 15:39:15.096344 2014] [:error] [pid 25293] [remote 192.168.122.1:148] from tuskar_ui import api [Thu Mar 27 15:39:15.096407 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/tuskar_ui/api.py", line 30, in <module> [Thu Mar 27 15:39:15.096514 2014] [:error] [pid 25293] [remote 192.168.122.1:148] from tuskar_ui.test.test_data import tuskar_data [Thu Mar 27 15:39:15.096579 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/tuskar_ui/test/test_data/tuskar_data.py", line 19, in <module> [Thu Mar 27 15:39:15.096691 2014] [:error] [pid 25293] [remote 192.168.122.1:148] from ironicclient.v1 import node [Thu Mar 27 15:39:15.096757 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/ironicclient/__init__.py", line 19, in <module> [Thu Mar 27 15:39:15.096865 2014] [:error] [pid 25293] [remote 192.168.122.1:148] __version__ = pbr.version.VersionInfo('python-ironicclient').version_string() [Thu Mar 27 15:39:15.096948 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/pbr/version.py", line 72, in version_string [Thu Mar 27 15:39:15.097057 2014] [:error] [pid 25293] [remote 192.168.122.1:148] for part in self.release_string().split('.'): [Thu Mar 27 15:39:15.097127 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/pbr/version.py", line 64, in release_string [Thu Mar 27 15:39:15.097233 2014] [:error] [pid 25293] [remote 192.168.122.1:148] self.release = self._get_version_from_pkg_resources() [Thu Mar 27 15:39:15.097314 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/pbr/version.py", line 57, in _get_version_from_pkg_resources [Thu Mar 27 15:39:15.097404 2014] [:error] [pid 25293] [remote 192.168.122.1:148] return packaging.get_version(self.package) [Thu Mar 27 15:39:15.097469 2014] [:error] [pid 25293] [remote 192.168.122.1:148] File "/usr/lib/python2.7/site-packages/pbr/packaging.py", line 822, in get_version [Thu Mar 27 15:39:15.097572 2014] [:error] [pid 25293] [remote 192.168.122.1:148] raise Exception("Versioning for this project requires either an sdist" [Thu Mar 27 15:39:15.097675 2014] [:error] [pid 25293] [remote 192.168.122.1:148] Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository. Are you sure that git is installed?
@james - i didn't experience any of those issues with PBR, but that doesn't mean they're not valid. How should I proceed? Also, a new version of the RPM that supports adding the infrastructure files into the horizon install: srpm: http://fedorapeople.org/~jomara/openstack-tuskar-ui-0.1.0-2.fc20.src.rpm spec: http://fedorapeople.org/~jomara/openstack-tuskar-ui.spec
BTW I see that horizon itself still has Requires: python-pbr which would be good to remove if possible too. For reference here's what I did a few days ago for neutron: http://pkgs.fedoraproject.org/cgit/openstack-neutron.git/commit/?id=f6328558 Anyway this is a nice to have but not blocking
Package Review ============== Legend: [x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated [ ] = Manual review needed Issues: ======= - The upstream source tarball does not match the source tarball in the srpm - Extra unneeded Requires? - No provided egg info - Use of deprecated %{__python} macro - No %check section for tests - Use of 'mv' does not preserve timestamps - Group should be "Applications/System", not "Application/System" (note extra 's') ===== MUST items ===== 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]: License field in the package spec file matches the actual license. [?]: Package requires other packages for directories it uses. Note: No known owner of /usr/share/openstack- dashboard/openstack_dashboard/local/enabled, /etc/openstack- dashboard/enabled I don't know why this is getting flagged. Those are owned by openstack-dashboard and that is appropriately required. This can be ignored I think. [?]: Package must own all directories that it creates. Note: Directories without known owners: /etc/openstack-dashboard/enabled, /usr/share/openstack-dashboard/openstack_dashboard/local/enabled Same as above. [x]: Package contains no bundled libraries without FPC exception. [x]: Changelog in prescribed format. [x]: Sources contain only permissible code or content. [-]: Package contains desktop file if it is a GUI application. [-]: 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. [-]: If the package is a rename of another package, proper Obsoletes and Provides are present. [!]: Requires correct, justified where necessary. Do you need to explicitly require the client libraries for all of the openstack components here? At a glance it looks like some of them aren't used (e.g. keystone, cinder, neutron) [x]: Spec file is legible and written in American English. [-]: Package contains systemd file(s) if in need. [x]: Package is not known to require an ExcludeArch tag. [x]: Large documentation must go in a -doc subpackage. Large could be size (~1MB) or number of files. Note: Documentation size is 20480 bytes in 2 files. [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]: 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. [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 Python: [x]: Python eggs must not download any dependencies during the build process. [!]: A package which is used by another package via an egg interface should provide egg info. [!]: Package meets the Packaging Guidelines::Python Use of deprecated %{__python} macro; use %{__python2} instead. [x]: Package contains BR: python2-devel or python3-devel [x]: Binary eggs must be removed in %prep ===== 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. [!]: Final provides and requires are sane (see attachments). See previous note on Requires [ ]: Package functions as described. [!]: Latest version is packaged. Probably not, since the tarballs do not match. [x]: Package does not include license text files separate from upstream. [-]: Description and summary sections in the package spec file contains translations for supported Non-English languages, if available. [x]: Package should compile and build into binary rpms on all supported architectures. [!]: %check is present and all tests pass. No %check section [!]: Packages should try to preserve timestamps of original installed files. Use install -p instead of mv [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]: SourceX is a working URL. [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]: Spec file according to URL is the same as in SRPM. Rpmlint ------- Checking: openstack-tuskar-ui-0.1.0-2.fc21.noarch.rpm openstack-tuskar-ui-0.1.0-2.fc21.src.rpm openstack-tuskar-ui.noarch: W: non-standard-group Application/System openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.pyc openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.pyo openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.py openstack-tuskar-ui.src: W: non-standard-group Application/System openstack-tuskar-ui.src: W: file-size-mismatch tuskar-ui-0.1.0.tar.gz = 429322, http://fedorapeople.org/~jomara/tuskar/tuskar-ui-0.1.0.tar.gz = 436462 2 packages and 0 specfiles checked; 0 errors, 6 warnings. Rpmlint (installed packages) ---------------------------- # rpmlint openstack-tuskar-ui openstack-tuskar-ui.noarch: W: non-standard-group Application/System openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.pyc openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.pyo openstack-tuskar-ui.noarch: W: non-conffile-in-etc /etc/openstack-dashboard/enabled/_50_tuskar.py 1 packages and 0 specfiles checked; 0 errors, 4 warnings. # echo 'rpmlint-done:' Requires -------- openstack-tuskar-ui (rpmlib, GLIBC filtered): Django openstack-dashboard python(abi) python-ceilometerclient python-cinderclient python-django python-django-compressor python-django-openstack-auth python-eventlet python-glanceclient python-heatclient python-ironicclient python-iso8601 python-keystoneclient python-kombu python-lockfile python-netaddr python-neutronclient python-novaclient python-oslo-config python-pbr python-swiftclient python-tuskarclient pytz Provides -------- openstack-tuskar-ui: openstack-tuskar-ui Source checksums ---------------- http://fedorapeople.org/~jomara/tuskar/tuskar-ui-0.1.0.tar.gz : CHECKSUM(SHA256) this package : 2c0ef6b35e07be0666a3858f114b242bc04cfd197ccc12f096404d6659bee57b CHECKSUM(SHA256) upstream package : c216a4080f3a586e7270de27f0b960587bed9e84af480ec6ad3cf09d31a17cd6 diff -r also reports differences Generated by fedora-review 0.5.1 (a430ece) last change: 2014-03-05 Command line :./try-fedora-review -b 1079436 -m fedora-rawhide-x86_64 -L ./repo/ Buildroot used: fedora-rawhide-x86_64 Active plugins: Python, Generic, Shell-api Disabled plugins: Java, C/C++, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP, Ruby Disabled flags: EXARCH, EPEL5, BATCH, DISTTAG Built with local dependencies: /data/git/FedoraReview/./repo/python-ironicclient-0.1.2-5.fc21.noarch.rpm /data/git/FedoraReview/./repo/python-tuskarclient-0.1.3-1.fc21.noarch.rpm
- the *client imports are all mapped from requirements.txt - python2 macros updated - changed oslo version to use %{version} - i am providing .egg-info. why is this getting flagged? SHOULD: - i will hassle upstream to rebuild this, i am ahead of the curve right now (with 0.1.0) - skipping %check for now - skipping move/install switch for now spec:http://fedorapeople.org/~jomara/openstack-tuskar-ui.spec srpm: http://fedorapeople.org/~jomara/openstack-tuskar-ui-0.1.0-4.fc20.src.rpm
egg-info: you need to remove the provided egg-info in %prep. It will be re-created during build. I'm a bit worried about: # Move static files to horizon. These require that you compile them again # post install { python manage.py compress } What do you mean by that? Given that upstream moves to node.js again, (thanks to some voices calling for replacing lesscpy with node.js), that will require to have node.js installed at each horizon host, to re-run the compress step.
(In reply to Pádraig Brady from comment #3) > BTW I see that horizon itself still has Requires: python-pbr > which would be good to remove if possible too. > For reference here's what I did a few days ago for neutron: > http://pkgs.fedoraproject.org/cgit/openstack-neutron.git/commit/?id=f6328558 > Anyway this is a nice to have but not blocking Ideally, this will be solved upstream. FWIW, I filed https://bugs.launchpad.net/horizon/+bug/1304253
Based on irc convo with mrunge, we're not going to solve the compression issue in this package right at this moment. Updated spec, removes egg-info in %prep: spec: http://fedorapeople.org/~jomara/openstack-tuskar-ui.spec srpm: http://fedorapeople.org/~jomara/openstack-tuskar-ui-0.1.0-5.fc20.src.rpm
Added unit tests It now buildrequires python-ironicclient and python-tuskarclient which are not in rawhide proper yet and thus the fedora-review package is not happy. However, the only added sections were the %check and a minor modification to %install where i copy, instead of move, static files. spec: http://fedorapeople.org/~jomara/openstack-tuskar-ui.spec srpm: http://fedorapeople.org/~jomara/openstack-tuskar-ui-0.1.0-6.fc20.src.rpm
Had an issue with upstream source challenges, corrected below + rebuild for rawhide srpm: http://fedorapeople.org/~jomara/openstack-tuskar-ui-0.1.0-8.fc21.src.rpm spec: http://fedorapeople.org/~jomara/openstack-tuskar-ui.spec
Previous issues: - The upstream source tarball does not match the source tarball in the srpm Looks good - Extra unneeded Requires? You reviewed and said it's ok, so fine by me - No provided egg info This was originally correct, I messed up. - Use of deprecated %{__python} macro Fixed, looks good. - No %check section for tests %check added, tests pass - Use of 'mv' does not preserve timestamps There's still one use of 'mv' in the spec file, but it's just to use the .example file into place as config. For this purpose the original timestamp of the example file doesn't really matter, so I'm fine with it staying like this. - Group should be "Applications/System", not "Application/System" (note extra 's') This is still incorrect I think the Group is the only remaining packaging nit. I still need to actually test the thing out and make sure it at least functionally works for me.
Applications corrected! srpm: http://fedorapeople.org/~jomara/openstack-tuskar-ui-0.1.0-9.fc21.src.rpm spec: http://fedorapeople.org/~jomara/openstack-tuskar-ui.spec
Fixed a problem with MANIFEST.in not reporting HTML files, requires patch: srpm: http://fedorapeople.org/~jomara/openstack-tuskar-ui-0.1.0-10.fc21.src.rpm spec: http://fedorapeople.org/~jomara/openstack-tuskar-ui.spec patch0: http://fedorapeople.org/~jomara/0001-Fixing-manifest.in.patch
I am marking this approved, with the disclaimer that I do not have a suitable environment with which to test the functionality of the package. Jordan assures me it functions as described.
New Package SCM Request ======================= Package Name: openstack-tuskar-ui Short Description: tuskar-ui is a user interface for Tuskar, a management API for OpenStack deployments. It is a plugin for OpenStack Horizon. Owners: jomara Branches: f20 epel7 InitialCC: jomara
Git done (by process-git-requests).