Bug 812132

Summary: Review Request: python-lvm - Python module to use LVM
Product: [Fedora] Fedora Reporter: Andy Grover <agrover>
Component: Package ReviewAssignee: David Cantrell <dcantrell>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: agk, dcantrell, dlehman, notting, package-review, prajnoha
Target Milestone: ---Flags: dcantrell: fedora-review+
gwync: fedora-cvs+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2012-08-07 23:56:08 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Andy Grover 2012-04-12 20:16:50 UTC
Spec URL: http://fedorapeople.org/~grover/new/python-lvm.spec
SRPM URL: http://fedorapeople.org/~grover/new/python-lvm-1.0-1.el6.src.rpm
Description: Python module to allow the creation and use of LVM
logical volumes, physical volumes, and volume groups.

Comment 1 Bill Nottingham 2012-04-12 20:19:55 UTC
CC'ing authors of alternative python implementations that allow creation/use/modification of LVM to see if people want to share code.

Comment 2 Andy Grover 2012-04-12 20:25:38 UTC
I'm planning on using this module for a service I'm working on that will allow remote configuration of a storage appliance.

I'm the upstream maintainer (but not original author) for this module so I'm very open to collaboration -- I just need the functionality from Python :)

Comment 3 Andy Grover 2012-04-17 19:18:00 UTC
Updated.

Spec URL: http://fedorapeople.org/~grover/new/python-lvm.spec
SRPM URL: http://fedorapeople.org/~grover/new/python-lvm-1.1-1.fc17.src.rpm

changes:
- License field was wrong, corrected to LGPLv2+
- New upstream release

Comment 4 Andy Grover 2012-05-03 19:06:18 UTC
dcantrell: I looked at pyparted and saw the capability to create partitions with type 0x8e (LVM) but nothing to do with lvm PVs, VGs, or LVs specifically, right? I believe pyparted and python-lvm may be complimentary.

Still looking for a pkg reviewer..

Comment 5 David Cantrell 2012-05-04 13:59:43 UTC
Correct, pyparted exposes the libparted API to Python programs.  libparted just deals with creating partitions on physical devices.  Functionality beyond that, for example, things that build on top of LVM physical volumes, are out of scope for libparted.  Are pyparted and python-lvm complimentary, yes.  I'll try to work in a review today.

Comment 6 David Cantrell 2012-05-04 17:54:23 UTC
rpmlint output looks good:

[dcantrel@rawhide ~]$ rpmlint python-lvm-1.1-1.fc17.src.rpm 
1 packages and 0 specfiles checked; 0 errors, 0 warnings.

Comment 7 David Cantrell 2012-05-04 18:09:24 UTC
The package looks pretty clean, but I have some questions/concerns:

1) Is the github repo the upstream?

2) Having the source archive be a gzipped tar file but named "v1.1" is bad form.  Please correct this.  See https://fedoraproject.org/wiki/Packaging/SourceURL for more information on options here.  github presents a challenge because there is not a good way for us to reference tar.gz downloads and it is up to the maintainer to create those, though if you are also upstream I would recommend creating those.

3) The license in the spec file is correctly noted as LGPLv2+, but the source archive contains both a copy of the GPLv2+ and LGPLv2+.  Reading the code, I see no mention of GPL-only licensed code.  It's all LGPL.  I would recommend removing the GPLv2+ COPYING file and just keeping the LGPLv2+ file.  In fact, the FSF distributes that file as COPYING.LIB (see ftp://ftp.gnu.org/gnu/Licenses/), which is the name I recommend you use rather than COPYING.LESSER

4) The source archive unpacks to agrover-python-lvm-3363431, which is a little confusing.  If you are generating this archive, please make it %{name}-%{version}.

Comment 8 Andy Grover 2012-05-04 20:34:47 UTC
(In reply to comment #7)
> 1) Is the github repo the upstream?

Yes

> 2) Having the source archive be a gzipped tar file but named "v1.1" is bad
> form.  Please correct this.  See
> https://fedoraproject.org/wiki/Packaging/SourceURL for more information on
> options here.  github presents a challenge because there is not a good way for
> us to reference tar.gz downloads and it is up to the maintainer to create
> those, though if you are also upstream I would recommend creating those.

OK will do.

> 3) The license in the spec file is correctly noted as LGPLv2+, but the source
> archive contains both a copy of the GPLv2+ and LGPLv2+.  Reading the code, I
> see no mention of GPL-only licensed code.  It's all LGPL.  I would recommend
> removing the GPLv2+ COPYING file and just keeping the LGPLv2+ file.  In fact,
> the FSF distributes that file as COPYING.LIB (see
> ftp://ftp.gnu.org/gnu/Licenses/), which is the name I recommend you use rather
> than COPYING.LESSER

I went by this:

http://www.gnu.org/licenses/gpl-howto.html

which renames COPYING.LIB to COPYING.LESSER and recommends COPYING also included since COPYING.LESSER builds on COPYING.

I have left it as-is for now, but am fine with either way.

> 4) The source archive unpacks to agrover-python-lvm-3363431, which is a little
> confusing.  If you are generating this archive, please make it
> %{name}-%{version}.

Will do.

Updated:

Spec URL: http://fedorapeople.org/~grover/new/python-lvm.spec
SRPM URL: http://repos.fedorapeople.org/repos/grover/target/fedora-17/SRPMS/python-lvm-1.1.1-1.fc17.src.rpm

Comment 9 David Cantrell 2012-05-07 20:46:19 UTC
(In reply to comment #8)
> (In reply to comment #7)
> > 2) Having the source archive be a gzipped tar file but named "v1.1" is bad
> > form.  Please correct this.  See
> > https://fedoraproject.org/wiki/Packaging/SourceURL for more information on
> > options here.  github presents a challenge because there is not a good way for
> > us to reference tar.gz downloads and it is up to the maintainer to create
> > those, though if you are also upstream I would recommend creating those.
> 
> OK will do.

Much better now, thanks.

> > 3) The license in the spec file is correctly noted as LGPLv2+, but the source
> > archive contains both a copy of the GPLv2+ and LGPLv2+.  Reading the code, I
> > see no mention of GPL-only licensed code.  It's all LGPL.  I would recommend
> > removing the GPLv2+ COPYING file and just keeping the LGPLv2+ file.  In fact,
> > the FSF distributes that file as COPYING.LIB (see
> > ftp://ftp.gnu.org/gnu/Licenses/), which is the name I recommend you use rather
> > than COPYING.LESSER
> 
> I went by this:
> 
> http://www.gnu.org/licenses/gpl-howto.html
> 
> which renames COPYING.LIB to COPYING.LESSER and recommends COPYING also
> included since COPYING.LESSER builds on COPYING.
> 
> I have left it as-is for now, but am fine with either way.

Huh, well that page is new to me.  I find the FSF's suggestions on how to cram the GPL in to every piece of software is a little unnecessary.  If the license is LGPL, just include that text.  But that's just me.  I have no problems if you want to keep it this way.

> > 4) The source archive unpacks to agrover-python-lvm-3363431, which is a little
> > confusing.  If you are generating this archive, please make it
> > %{name}-%{version}.
> 
> Will do.
> 
> Updated:
> 
> Spec URL: http://fedorapeople.org/~grover/new/python-lvm.spec
> SRPM URL:
> http://repos.fedorapeople.org/repos/grover/target/fedora-17/SRPMS/python-lvm-1.1.1-1.fc17.src.rpm

Looks clean, will post updated rpmlint and build output.

Comment 10 David Cantrell 2012-05-07 20:47:20 UTC
Clean rpmlint:

[dcantrel@rawhide ~]$ rpmlint python-lvm-1.1.1-1.fc17.src.rpm 
1 packages and 0 specfiles checked; 0 errors, 0 warnings.

Comment 11 David Cantrell 2012-05-07 20:48:08 UTC
Clean build:

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.KoCoh7
+ umask 022
+ cd /home/dcantrel/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /home/dcantrel/rpmbuild/BUILD
+ rm -rf python-lvm-1.1.1
+ /usr/bin/tar -xf -
+ /usr/bin/gzip -dc /home/dcantrel/rpmbuild/SOURCES/python-lvm-1.1.1.tar.gz
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd python-lvm-1.1.1
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.KWgWfo
+ umask 022
+ cd /home/dcantrel/rpmbuild/BUILD
+ cd python-lvm-1.1.1
+ LANG=C
+ export LANG
+ unset DISPLAY
+ /usr/bin/python setup.py build
running build
running build_ext
building 'lvm' extension
creating build
creating build/temp.linux-x86_64-2.7
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.7 -c liblvm.c -o build/temp.linux-x86_64-2.7/liblvm.o
creating build/lib.linux-x86_64-2.7
gcc -pthread -shared -Wl,-z,relro build/temp.linux-x86_64-2.7/liblvm.o -L/usr/lib64 -llvm2app -lpython2.7 -o build/lib.linux-x86_64-2.7/lvm.so
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.yIzEzG
+ umask 022
+ cd /home/dcantrel/rpmbuild/BUILD
+ '[' /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64 '!=' / ']'
+ rm -rf /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64
++ dirname /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64
+ mkdir -p /home/dcantrel/rpmbuild/BUILDROOT
+ mkdir /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64
+ cd python-lvm-1.1.1
+ LANG=C
+ export LANG
+ unset DISPLAY
+ /usr/bin/python setup.py install --skip-build --root /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64
running install
running install_lib
creating /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr
creating /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/lib64
creating /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/lib64/python2.7
creating /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/lib64/python2.7/site-packages
copying build/lib.linux-x86_64-2.7/lvm.so -> /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/lib64/python2.7/site-packages
running install_egg_info
Writing /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/lib64/python2.7/site-packages/lvm-1.1.1-py2.7.egg-info
+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id /home/dcantrel/rpmbuild/BUILD/python-lvm-1.1.1
extracting debug info from /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/lib64/python2.7/site-packages/lvm.so
57 blocks
+ '[' '%{buildarch}' = noarch ']'
+ QA_CHECK_RPATHS=1
+ case "${QA_CHECK_RPATHS:-}" in
+ /usr/lib/rpm/check-rpaths
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
Bytecompiling .py files below /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/lib64/python2.7/ using /usr/bin/python2.7
+ /usr/lib/rpm/redhat/brp-python-hardlink
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: python-lvm-1.1.1-1.fc18.x86_64
Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.1QVaL3
+ umask 022
+ cd /home/dcantrel/rpmbuild/BUILD
+ cd python-lvm-1.1.1
+ DOCDIR=/home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/share/doc/python-lvm-1.1.1
+ export DOCDIR
+ /usr/bin/mkdir -p /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/share/doc/python-lvm-1.1.1
+ cp -pr COPYING COPYING.LESSER README /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64/usr/share/doc/python-lvm-1.1.1
+ exit 0
Provides: lvm.so()(64bit) python-lvm = 1.1.1-1.fc18 python-lvm(x86-64) = 1.1.1-1.fc18
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) liblvm2app.so.2.2()(64bit) liblvm2app.so.2.2(Base)(64bit) libpthread.so.0()(64bit) libpython2.7.so.1.0()(64bit) python(abi) = 2.7 rtld(GNU_HASH)
Processing files: python-lvm-debuginfo-1.1.1-1.fc18.x86_64
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64
Wrote: /home/dcantrel/rpmbuild/SRPMS/python-lvm-1.1.1-1.fc18.src.rpm
Wrote: /home/dcantrel/rpmbuild/RPMS/x86_64/python-lvm-1.1.1-1.fc18.x86_64.rpm
Wrote: /home/dcantrel/rpmbuild/RPMS/x86_64/python-lvm-debuginfo-1.1.1-1.fc18.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.VGw7hE
+ umask 022
+ cd /home/dcantrel/rpmbuild/BUILD
+ cd python-lvm-1.1.1
+ /usr/bin/rm -rf /home/dcantrel/rpmbuild/BUILDROOT/python-lvm-1.1.1-1.fc18.x86_64
+ exit 0

Comment 12 David Cantrell 2012-05-07 20:49:17 UTC
I approve, with the added comment that I personally don't feel it necessary to include the text of the GPL in a source release that's released under the LGPL.

Comment 13 Andy Grover 2012-05-08 22:17:32 UTC
New Package SCM Request
=======================
Package Name: python-lvm
Short Description: Python bindings for LVM
Owners: grover
Branches: f17
InitialCC:

Comment 14 Gwyn Ciesla 2012-05-09 12:32:08 UTC
Git done (by process-git-requests).

Comment 15 Alasdair Kergon 2012-06-14 10:32:29 UTC
(This looks to be a basic python wrapper around liblvm that we should probably distribute alongside liblvm itself in future, ensuring the two keep in sync with each other.)