Skip to content

'ghc-pkg update' fails due to bad file descriptor error

In the final part of installation when packages are registered, the following command fails

"inplace/bin/ghc-cabal" register libraries/ghc-prim dist-install "/home/pgrads/mp16005/linux/installed-ghc/lib/ghc-8.2.0.20170708/bin/ghc" "/home/pgrads/mp16005/linux/installed-ghc/lib/ghc-8.2.0.20170708/bin/ghc-pkg" "/home/pgrads/mp16005/linux/installed-ghc/lib/ghc-8.2.0.20170708" '' '/home/pgrads/mp16005/linux/installed-ghc' '/home/pgrads/mp16005/linux/installed-ghc/lib/ghc-8.2.0.20170708' '/home/pgrads/mp16005/linux/installed-ghc/share/doc/ghc-8.2.0.20170708/html/libraries' NO

with the following output

Registering library for ghc-prim-0.5.0.0..
ghc-cabal:
'/home/pgrads/mp16005/linux/installed-ghc/lib/ghc-8.2.0.20170708/bin/ghc-pkg'
exited with an error:
ghc-pkg: Couldn't open database
/home/pgrads/mp16005/linux/installed-ghc/lib/ghc-8.2.0.20170708/package.conf.d
for modification: {handle:
/home/pgrads/mp16005/linux/installed-ghc/lib/ghc-8.2.0.20170708/package.conf.d/package.cache.lock}:
hLock: invalid argument (Bad file descriptor)

It might be something to do with the permissions I have on my machine but I used to be able to install ghc if I gave it a suitable prefix other than /usr/local.

A workaround is to make sure that HAVE_FLOCK is not defined, the way I did this was commenting out the three relevant lines in libraries/base/configure.ac.

geekosaur suggests on IRC that the problem might be

what might be possible is that hLock uses fcntl locking, ghc-pkg opens a database r/o if it can't open it r/w, and it tried to acquire a write lock (which will fail with EBADF if the file descriptor is only open for read). and there is an SElinux context prohibiting your process opening the db for write

Edited by Ben Gamari
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information