[arch-general] does makechrootpkg -I handle provides() replaces() ?
Guys, I'm having difficulty with makechrootpkg not allowing replacement of current packages in the chroot even though then new packages are built with provides() and replaces() to handle the conflict. Specifically the trinity project provides source for sip4 that has additional hooks in the package for the tqt interface. I have modeled the PKGBUILD on the existing sip PKGBUILD to build split packages for both python and python2. In the build I call my version of sip 'tde-sip' and my version of python2-sip 'tde-sip4-tqt'. In the split package build I do: package_tde-sip() { pkgdesc="The TDE SIP C/C++ Bindings Generator for Python3 - Trinity upstream GIT version" depends=('python') provides=('sip' 'python-sip') replaces=('sip' 'python-sip') cd "${srcdir}/sipPy3" make DESTDIR="${pkgdir}" install install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" } However, when I go to install the package in the chroot with: sudo makechrootpkg -r $CHROOT -I tde-sip-3513_tqt-2-x86_64.pkg.tar.xz I get: error: failed to commit transaction (conflicting files) tde-sip: /usr/bin/sip exists in filesystem tde-sip: /usr/include/python3.2mu/sip.h exists in filesystem tde-sip: /usr/lib/python3.2/site-packages/sip.so exists in filesystem tde-sip: /usr/lib/python3.2/site-packages/sipconfig.py exists in filesystem tde-sip: /usr/lib/python3.2/site-packages/sipdistutils.py exists in filesystem Errors occurred, no packages were upgraded. The same error occurs with the python2-sip replacement. I know those files conflict with files in the tde-sip package. That's why I did provides=('sip' 'python-sip') and replaces=('sip' 'python-sip'). Is this just one of the limitations of the chroot install process? Is the solution to start-over by cleaning the chroot and insure that tde-sip is installed before any other package that pulls sip in as a dependency? Thanks for any help you can offer. How the provides() and replaces() work in the archroot is a bit of a mystery to me. -- David C. Rankin, J.D.,P.E.
On 23/03/12 01:04, David C. Rankin wrote:
Guys,
I'm having difficulty with makechrootpkg not allowing replacement of current packages in the chroot even though then new packages are built with provides() and replaces() to handle the conflict.
Specifically the trinity project provides source for sip4 that has additional hooks in the package for the tqt interface. I have modeled the PKGBUILD on the existing sip PKGBUILD to build split packages for both python and python2. In the build I call my version of sip 'tde-sip' and my version of python2-sip 'tde-sip4-tqt'. In the split package build I do:
package_tde-sip() { pkgdesc="The TDE SIP C/C++ Bindings Generator for Python3 - Trinity upstream GIT version" depends=('python') provides=('sip' 'python-sip') replaces=('sip' 'python-sip')
cd "${srcdir}/sipPy3" make DESTDIR="${pkgdir}" install
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" }
However, when I go to install the package in the chroot with:
sudo makechrootpkg -r $CHROOT -I tde-sip-3513_tqt-2-x86_64.pkg.tar.xz
I get:
error: failed to commit transaction (conflicting files) tde-sip: /usr/bin/sip exists in filesystem tde-sip: /usr/include/python3.2mu/sip.h exists in filesystem tde-sip: /usr/lib/python3.2/site-packages/sip.so exists in filesystem tde-sip: /usr/lib/python3.2/site-packages/sipconfig.py exists in filesystem tde-sip: /usr/lib/python3.2/site-packages/sipdistutils.py exists in filesystem Errors occurred, no packages were upgraded.
The same error occurs with the python2-sip replacement. I know those files conflict with files in the tde-sip package. That's why I did provides=('sip' 'python-sip') and replaces=('sip' 'python-sip').
Is this just one of the limitations of the chroot install process? Is the solution to start-over by cleaning the chroot and insure that tde-sip is installed before any other package that pulls sip in as a dependency? Thanks for any help you can offer. How the provides() and replaces() work in the archroot is a bit of a mystery to me.
provides/replaces/conflicts usually come in a set. Allan
On 03/22/2012 03:20 PM, Allan McRae wrote:
provides/replaces/conflicts usually come in a set.
Hmm.. I thought provides-conflicts were mutually exclusive for the same package name. I have tried all the variations of: package_tde-sip() { pkgdesc="The TDE SIP C/C++ Bindings Generator for Python3 - Trinity upstream GIT version" depends=('python') provides=('sip' 'python-sip') replaces=('sip' 'python-sip') conflicts=('sip') python-sip isn't installed, sip is the problem. Trying the conficts=('sip'), I get a fatal conflict error that can't be satisfied. I thought that was due to trying to provide 'sip' while saying 'sip' conflicted. The man page isn't explicit here and the wiki added a bit of confusion with [conflicts] "An array of package names that may cause problems with this package if installed. Package with this name and all packages which provides virtual packages with this name will be removed" This is where I got the idea that you can't 'provides=('foo') at the same time you conflicts=('foo'). Foo got it :) -- David C. Rankin, J.D.,P.E.
participants (2)
-
Allan McRae
-
David C. Rankin