Linux standalone: Add back the LOCPATH=/dev/null hack to avoid the system locale...
authorJoey Hess <joeyh@joeyh.name>
Tue, 4 Oct 2016 16:52:36 +0000 (12:52 -0400)
committerJoey Hess <joeyh@joeyh.name>
Tue, 4 Oct 2016 16:53:09 +0000 (12:53 -0400)
Version mismatches between the system locale-archive and the glibc in the
bundle have been observed to cause git crashes.

Unfortunately, this causes locales to not be used in the linux standalone
bundle, as was the case until version 6.20160419.

glibc hardcodes the path to /usr/lib/locale/locale-archive and does not
let an environment variable cause a different locale-archive file to be used.

The only other option to include locales in the bundle would be to include
exploded locale definition directories in the bundle for a number of
locales, generated by localedef. But these take at least 300 kb per locale,
and there are a great many locales; it would be hundreds of megabytes to
include them all.

(Hmm, we could include localdef in the bundle, and check LANG in runshell
and compile the locale directories on the fly. This would need
/usr/share/i18n/ and /usr/lib/locale-archive to be included in the bundle.
It's.. doable.)

I know this is going to once again cause users of the bundle to complain
that eg, ls doesn't show their unicode filenames right. Better than strange
crashes though.

Build/LinuxMkLibs.hs
CHANGELOG
doc/forum/git-annex_add_out_of_memory_error/comment_4_ef913a45e3d865d088cf11460cd88020._comment [new file with mode: 0644]
standalone/linux/skel/runshell

index 3bc79fed498a2bb54a8c64a4b60ba56e5f1c6e98..780cdea258c9f2b01c9955804facbf3e5475f8e2 100644 (file)
@@ -5,8 +5,6 @@
  - Licensed under the GNU GPL version 3 or higher.
  -}
 
-{-# LANGUAGE CPP #-}
-
 module Main where
 
 import System.Environment
@@ -48,6 +46,8 @@ mklibs top = do
        writeFile (top </> "libdirs") (unlines libdirs)
        writeFile (top </> "gconvdir")
                (parentDir $ Prelude.head $ filter ("/gconv/" `isInfixOf`) glibclibs)
+       writeFile (top </> "localedir")
+               (parentDir $ Prelude.head $ filter ("/locale/" `isInfixOf`) glibclibs)
        
        let linker = Prelude.head $ filter ("ld-linux" `isInfixOf`) libs'
        mapM_ (installLinkerShim top linker) exes
@@ -73,18 +73,6 @@ installLinkerShim top linker exe = do
                [ "#!/bin/sh"
                , "GIT_ANNEX_PROGRAMPATH=\"$0\""
                , "export GIT_ANNEX_PROGRAMPATH"
-#ifdef MIN_VERSION_GLASGOW_HASKELL
-#if ! MIN_VERSION_GLASGOW_HASKELL(7,10,0,0)
-#define NEED_LOCPATH_WORKAROUND
-#endif
-#else
-#define NEED_LOCPATH_WORKAROUND
-#endif
-#ifdef NEED_LOCPATH_WORKAROUND
-               -- workaround for https://ghc.haskell.org/trac/ghc/ticket/7695
-               , "LOCPATH=/dev/null"
-               , "export LOCPATH"
-#endif
                , "exec \"$GIT_ANNEX_DIR/" ++ exelink ++ "\" --library-path \"$GIT_ANNEX_LD_LIBRARY_PATH\" \"$GIT_ANNEX_DIR/shimmed/" ++ base ++ "/" ++ base ++ "\" \"$@\""
                ]
        modifyFileMode exe $ addModes executeModes
index 6f2627c98c999d65a791e6d7c66b30310354b9b3..edc018b06830e2a34f7159f4deb3816898b5475a 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -14,6 +14,12 @@ git-annex (6.20160924) UNRELEASED; urgency=medium
     external special remotes, because running multiple git-annex commands
     at the same time could already start multiple processes for the same
     external special remotes.
+  * Linux standalone: Add back the LOCPATH=/dev/null hack to avoid
+    the system locale-archive being read. Version mismatches between the
+    system locale-archive and the glibc in the bundle have been observed
+    to cause git crashes. Unfortunately, this causes locales to not be
+    used in the linux standalone bundle, reverting back to pre-6.20160419
+    behavior.
 
  -- Joey Hess <id@joeyh.name>  Mon, 26 Sep 2016 16:46:19 -0400
 
diff --git a/doc/forum/git-annex_add_out_of_memory_error/comment_4_ef913a45e3d865d088cf11460cd88020._comment b/doc/forum/git-annex_add_out_of_memory_error/comment_4_ef913a45e3d865d088cf11460cd88020._comment
new file mode 100644 (file)
index 0000000..e9b52c3
--- /dev/null
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2016-10-04T16:23:12Z"
+ content="""
+NFS was a red herring.
+
+We've tracked this down to the linux standalone tarball not including
+locale-archive, so it uses the system one, which may have a different
+format and so breaks glibc.
+
+I'm committing a fix that adds locale-archive to the linux standalone
+tarball.
+"""]]
index 874dc75f176ae8651b7d4df355060670c9026c45..d15aacbc896fdd86521df7a120863a090596f1dc 100755 (executable)
@@ -100,6 +100,11 @@ export ORIG_GCONV_PATH
 GCONV_PATH="$base/$(cat "$base/gconvdir")"
 export GCONV_PATH
 
+ORIG_LOCPATH="$LOCPATH"
+export ORIG_LOCPATH
+LOCPATH=/dev/null
+export LOCPATH
+
 ORIG_GIT_EXEC_PATH="$GIT_EXEC_PATH"
 export ORIG_GIT_EXEC_PATH
 GIT_EXEC_PATH="$base/git-core"