summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar erics <erics@web>2017-11-01 19:19:52 +0000
committerGravatar admin <admin@branchable.com>2017-11-01 19:19:52 +0000
commit9c732a2fd1b6e6ba056bde0a27656212caab01e2 (patch)
tree89cb23bab687867a9785c661405001cbad3f4596
parenta17d478eddf9414cd4d2d368afab02d42b06d3d8 (diff)
Added a comment: Adventures with stack
-rw-r--r--doc/install/fromsource/comment_66_849c4c2cfc34991c13d55495e391cce3._comment78
1 files changed, 78 insertions, 0 deletions
diff --git a/doc/install/fromsource/comment_66_849c4c2cfc34991c13d55495e391cce3._comment b/doc/install/fromsource/comment_66_849c4c2cfc34991c13d55495e391cce3._comment
new file mode 100644
index 000000000..3f7dcacad
--- /dev/null
+++ b/doc/install/fromsource/comment_66_849c4c2cfc34991c13d55495e391cce3._comment
@@ -0,0 +1,78 @@
+[[!comment format=mdwn
+ username="erics"
+ avatar="http://cdn.libravatar.org/avatar/6e5f74c742128e5d98fd672ed6ea4865"
+ subject="Adventures with stack"
+ date="2017-11-01T19:19:51Z"
+ content="""
+I've played with git-annex before, but never used it seriously. Building it from source for the first time, to get the latest and greatest, I ran into a few stumbling blocks. I've got them sorted out now; this is to (a) document them, and (b) ask which if any of these should be considered bugs -- in which case I'll file bug reports about them.
+
+I'm a complete Haskell newbie, and don't want to dive into that right now, so I'm using *stack*, since I like the sound of
+> Using stack automates nearly everything, will work on many systems, and avoids build failures due to fast-changing haskell libraries.
+
+I'm working with Ubuntu 16.04 LTS, stack 1.5.1, ghc 8.0.2 (courtesy of stack), and git-annex 6.20171026.
+
+So, here's how things went.
+
+*Almost* following the *stack* section of [[install/fromsource]], after `stack setup` I did `stack build` instead of`stack install`, so that I could (a) run the tests before installing, and (b) install into /usr/local as root.
+
+Issue #1: **`stack test` doesn't run the tests**. It took me a while to find `git annex test`. This isn't a bug, just something for people to be aware of.
+
+Issue #2: **`stack build` doesn't create the *git-annex* and *git-annex-shell* symlinks**. Which means that the *ssh remote* tests fail.
+
+Issue #3: **Unless they don't**. If *./git-annex-shell* doesn't exist, the tests use whatever copy they find on $PATH. Which lets them run -- but it's not testing the code you think it's testing. This could lead to either false negatives or false positives under different circumstances.
+
+I'd noticed the Makefile, but dismissed it after a failed attempt to set `BUILDER=stack`, especially since it's undocumented. Turns out it does important stuff -- like creating those symlinks. So I dug more deeply. The magic incantation is:
+
+ make BUILDER=stack GHC=\"stack ghc --\" [target]
+
+The \"--\" is the unobvious bit.
+
+There's even a `make test`.
+
+Issue #4: The Makefile does good and useful things, but **I can find no mention of it in [[install/fromsource]]**.
+
+OK, so at this point I've got the thing built, and the tests passing (legitimately, using the correct version of *git-annex-shell*). Time to install it.
+
+Issue #5: **`sudo make install` doesn't work**. *stack* refuses to run, complaining:
+
+> You are not the owner of '/home/erics/.stack/'. Aborting to protect file permissions.
+> Retry with '--allow-different-user' to disable this precaution.
+
+See <https://github.com/commercialhaskell/stack/issues/471> for what this is about.
+
+Three ways to add that option:
+
+1. Hack the Makefile -- add another `if [ $BUILDER = stack ]` section
+
+2. Add this line to git-annex's *stack.yaml* (or to *~/.stack/config.yaml* if you want it as a global setting):
+
+ allow-different-user: true
+
+ (It's a standalone entry, so should have *no* leading whitespace)
+
+3. For installing, use a variant of the above magic incantation:
+
+ sudo make BUILDER=\"stack --allow-different-user\" GHC=\"stack ghc --\" install
+
+I did #2, but #3 is probably safest, since it means you're only allow(ing)-different-user when you actually need to.
+
+However you do it, be aware that if *stack* decides, at make-install time, to create any files under the source tree, of course it will create them as root, so subsequent builds as non-root will find them unwritable. I presume that's what stack's error message, \"... to protect file permissions\", is talking about.
+
+Issue #6: **`make install` does indeed cause stack to create more files**. Specifically, it builds *Build/InstallDesktopFile*. It would make sense to build that at `make all` time, so that it gets done as the non-root user. This wouldn't guarantee not to pollute the source tree with root-owned files -- but as it is now, that's pretty much guaranteed *to* happen.
+
+After all those gripes, one very very good thing: I didn't have to apt-get any Haskell things at all! Stack downloaded everything it needed, including the compiler. Nice!
+
+Questions for @Joey:
+
+A. Is the Makefile undocumented because you don't really intend anyone else to use it, or is that just an oversight?
+
+B. Are any of the above issues legitimate bugs? (Prime candidates, to my mind: #3 and #6)
+
+C. Given all the dependency grief in the comments from Cabal users, and that for all my troubles I experienced *none* of that ... maybe *stack* should be the recommended approach, even if you don't use it yourself?
+
+D. What's the preferred way to submit patches? I have a couple of cosmetic ones for Makefile, besides the (trivial) fix for #6
+
+I'll edit the *stack* section of [[install/fromsource]] (the only part I'm competent to talk about), once I know which direction to go (i.e. the answer to (A)).
+
+
+"""]]