we use dh_python3 to define subvar of ${python3:Depends} as a part
of the runtime dependencies of python3 packages, like,
ceph-mgr modules named "ceph-mgr-*", python3 bindings named "python3-*".
but unlike python3 bindings of Ceph APIs, the ceph-mgr modules are
not packaged in a typical python way. in other words, they do not
ship a "dist-info" or an "egg-info" directory. instead, we just
install the python scripts into a directory which can be found by
ceph-mgr, by default it is /usr/share/ceph/mgr/dashboard/plugins.
this does not follow the convention of python packaging or
debian packaging policies related to python package. but it
still makes to put these files in this non-convention place, as
they are not supposed to be python packages consumed by the
outer world -- they are but plugins. and should always work
with the same version of ceph-mgr.
the problem is, despite that we have ${python3:Depends} in
the "Depends" field of packages like ceph-mgr-dashboard, dh_python3
is not able to figure out the dependencies by looking at the
installed files. for instance, we have following "Depends" of
ceph-mgr-dashboard:
Depends: ceph-mgr (=
17.0.0-12481-g805d2320-1focal), python3-cherrypy3, python3-jwt, python3-bcrypt, python3-werkzeug, python3-routes
and in the debian/control file we have:
Depends: ceph-mgr (= ${binary:Version}),
python3-cherrypy3,
python3-jwt,
python3-bcrypt,
python3-werkzeug,
python3-routes,
${misc:Depends},
${python:Depends},
${shlibs:Depends},
apparently, none of the subvar is materialized to
a non-empty string.
to improve the packaging, in this change:
* drop all subvars from ceph-mgr-*, as they
are all implemented in pure python.
* add debian/ceph-mgr-*.requires, it's content
is replicated with the corresponding requirements.txt
files.
* add python3-distutils for distutils, as debian
and its derivatives package non-essetial part of
distutils into a separate package, see
https://packages.debian.org/stable/python3-distutils
* add ${python3:Depends} so dh_python3
can extract the deps from debian/ceph-mgr-*.pydist
* update the rule for "override_dh_python3" target,
so dh_python3 can pick up the dependencies specified
in .requires file.
* remove the python3 dependencies not used by
ceph-mgr from ceph-mgr's "Depends"
Signed-off-by: Kefu Chai <tchaikov@gmail.com>
--- /dev/null
+CherryPy
+asyncssh
+cryptography
+Jinja2
--- /dev/null
+bcrypt
+CherryPy
+more-itertools
+PyJWT
+pyopenssl
+requests
+Routes
+prettytable
+pytest
+pyyaml
+ceph-common
--- /dev/null
+numpy
+scipy
+scikit-learn
--- /dev/null
+pyyaml
+kubernetes
--- /dev/null
+natsort
+CherryPy
+pecan
+werkzeug
+requests
+python-dateutil
--- /dev/null
+kubernetes
+jsonpatch
--- /dev/null
+pyOpenSSL
+cephfs
+ceph-argparse
+pyyaml
+distutils
Architecture: linux-any
Depends: ceph-base (= ${binary:Version}),
ceph-mgr-modules-core (= ${binary:Version}),
- python3-bcrypt,
- python3-cherrypy3,
- python3-natsort,
- python3-distutils,
- python3-jwt,
- python3-openssl,
- python3-pecan,
- python3-requests,
- python3-werkzeug,
${misc:Depends},
${python3:Depends},
${shlibs:Depends},
Package: ceph-mgr-dashboard
Architecture: all
Depends: ceph-mgr (= ${binary:Version}),
- python3-cherrypy3,
- python3-jwt,
- python3-bcrypt,
- python3-werkzeug,
- python3-routes,
- ${misc:Depends},
- ${python:Depends},
- ${shlibs:Depends},
+ ${python3:Depends}
Description: dashboard module for ceph-mgr
Ceph is a massively scalable, open-source, distributed
storage system that runs on commodity hardware and delivers object,
Package: ceph-mgr-diskprediction-local
Architecture: all
Depends: ceph-mgr (= ${binary:Version}),
- python3-numpy,
- python3-scipy,
- python3-sklearn,
- ${misc:Depends},
- ${python:Depends},
- ${shlibs:Depends},
+ ${python3:Depends}
Description: diskprediction-local module for ceph-mgr
Ceph is a massively scalable, open-source, distributed
storage system that runs on commodity hardware and delivers object,
Architecture: all
Depends: ${misc:Depends},
${python3:Depends},
- ${shlibs:Depends},
- python3-dateutil,
- python3-openssl,
Replaces: ceph-mgr (<< 15.1.0)
Breaks: ceph-mgr (<< 15.1.0)
Description: ceph manager modules which are always enabled
Package: ceph-mgr-rook
Architecture: all
Depends: ceph-mgr (= ${binary:Version}),
- python3-jsonpatch
${misc:Depends},
${python3:Depends},
${shlibs:Depends},
cephfs python3-cephfs; PEP386
+ceph_argparse python3-ceph-argparse
+ceph_common python3-ceph-common
+distutils python3-distutils
for binding in rados cephfs rbd rgw; do \
dh_python3 -p python3-$$binding; \
done
+ for pkg in $(basename $(notdir $(wildcard debian/*.requires))); do \
+ dh_python3 -p $$pkg --requires=debian/$$pkg.requires; \
+ done
dh_python3 -p python3-ceph-argparse
dh_python3 -p python3-ceph-common
dh_python3 -p cephfs-shell