[arch-general] does makechrootpkg -I handle provides() replaces() ?

David C. Rankin drankinatty at suddenlinkmail.com
Thu Mar 22 11:04:30 EDT 2012


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.


More information about the arch-general mailing list