* Invalid nar signature @ 2014-12-15 2:22 David Thompson 2014-12-15 2:33 ` David Thompson 2014-12-15 17:19 ` Ludovic Courtès 0 siblings, 2 replies; 13+ messages in thread From: David Thompson @ 2014-12-15 2:22 UTC (permalink / raw) To: guix-devel Hello everyone, While working on a new guix command, called 'guix publish', I've run into a snag. The archives I've exported via export-paths in the (guix store) module are rejected by 'guix substitute-binary' due to the nar signature being invalid. The signature is a string containing "nix-archive-1" at the head of the file. I can clearly see that text there, but the read-string operation that happens in the restore-file procedure in (guix serialization) says otherwise. The output of the following code in the context of the (guix serialization) module is "\r", it should be "nix-archive-1": (with-input-from-file "some-nar-file" (lambda () (read-string (current-input-port)))) Does anyone know what I'm missing here? Thanks in advance. -- David Thompson Web Developer - Free Software Foundation - http://fsf.org GPG Key: 0FF1D807 Support the FSF: https://fsf.org/donate ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2014-12-15 2:22 Invalid nar signature David Thompson @ 2014-12-15 2:33 ` David Thompson 2014-12-15 17:19 ` Ludovic Courtès 1 sibling, 0 replies; 13+ messages in thread From: David Thompson @ 2014-12-15 2:33 UTC (permalink / raw) To: guix-devel David Thompson <dthompson2@worcester.edu> writes: > The output of the following code in the context of the > (guix serialization) module is "\r", it should be "nix-archive-1": > > (with-input-from-file "some-nar-file" > (lambda () > (read-string (current-input-port)))) Also, note that the following code *does* yield "nix-archive-1": (with-input-from-file "some-nar-file" (lambda () (read-int (current-input-port)) (read-string (current-input-port)))) So, if I remove the first 8 bytes of the file (which when read as an integer is 1), things look good. What's going on here? -- David Thompson Web Developer - Free Software Foundation - http://fsf.org GPG Key: 0FF1D807 Support the FSF: https://fsf.org/donate ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2014-12-15 2:22 Invalid nar signature David Thompson 2014-12-15 2:33 ` David Thompson @ 2014-12-15 17:19 ` Ludovic Courtès 2014-12-15 20:08 ` Thompson, David 1 sibling, 1 reply; 13+ messages in thread From: Ludovic Courtès @ 2014-12-15 17:19 UTC (permalink / raw) To: David Thompson; +Cc: guix-devel I think this is due to a subtly misleading file format variation. If you look at ‘export-paths’, it does: while there are files to write write-long-long 1 export-path file write-long-long 0 ‘restore-file-set’ does the opposite, which is to read that long-long to determine whether there’s data coming up, and then to call ‘restore-file’. HTH! Ludo’. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2014-12-15 17:19 ` Ludovic Courtès @ 2014-12-15 20:08 ` Thompson, David 2014-12-15 21:20 ` Ludovic Courtès 0 siblings, 1 reply; 13+ messages in thread From: Thompson, David @ 2014-12-15 20:08 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel On Mon, Dec 15, 2014 at 12:19 PM, Ludovic Courtès <ludo@gnu.org> wrote: > I think this is due to a subtly misleading file format variation. > > If you look at ‘export-paths’, it does: > > while there are files to write > write-long-long 1 > export-path file > write-long-long 0 > > ‘restore-file-set’ does the opposite, which is to read that long-long to > determine whether there’s data coming up, and then to call > ‘restore-file’. Thanks. I'm still a little confused, though. I'm not sure what change I need to make in order to satisfy the substituter. Do I need to write a variant of export-paths that leaves off the initial write-long-long call? - Dave ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2014-12-15 20:08 ` Thompson, David @ 2014-12-15 21:20 ` Ludovic Courtès 2014-12-15 21:24 ` Thompson, David 2014-12-15 22:49 ` David Thompson 0 siblings, 2 replies; 13+ messages in thread From: Ludovic Courtès @ 2014-12-15 21:20 UTC (permalink / raw) To: Thompson, David; +Cc: guix-devel "Thompson, David" <dthompson2@worcester.edu> skribis: > On Mon, Dec 15, 2014 at 12:19 PM, Ludovic Courtès <ludo@gnu.org> wrote: >> I think this is due to a subtly misleading file format variation. >> >> If you look at ‘export-paths’, it does: >> >> while there are files to write >> write-long-long 1 >> export-path file >> write-long-long 0 >> >> ‘restore-file-set’ does the opposite, which is to read that long-long to >> determine whether there’s data coming up, and then to call >> ‘restore-file’. > > Thanks. I'm still a little confused, though. I'm not sure what > change I need to make in order to satisfy the substituter. Do I need > to write a variant of export-paths that leaves off the initial > write-long-long call? For illustration purposes, here’s a normal sequence: --8<---------------cut here---------------start------------->8--- $ wget -O t.nar.bz2 http://hydra.gnu.org/nar/wy70n5zk8qinxjz0wdk9q2hh1zjfb32j-miscfiles-1.5 $ bunzip2 t.nar.bz2 $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (call-with-input-file "t.nar" (lambda (port) (restore-file port "restored")))' $ ls restored/ share --8<---------------cut here---------------end--------------->8--- ‘restore-file’ is what ‘guix substitute-binary --substitute’ uses. It expects a single store item–i.e., the variant /without/ the leading long-long, as you noticed. To produce that, use ‘write-file’ from (guix serialization): --8<---------------cut here---------------start------------->8--- $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (write-file "/gnu/store/wy70n5zk8qinxjz0wdk9q2hh1zjfb32j-miscfiles-1.5" (current-output-port))' > t.nar $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (call-with-input-file "t.nar" (lambda (port) (restore-file port "restored")))' $ ls restored/ share --8<---------------cut here---------------end--------------->8--- Sorry for the confusion! Ludo’. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2014-12-15 21:20 ` Ludovic Courtès @ 2014-12-15 21:24 ` Thompson, David 2014-12-15 22:49 ` David Thompson 1 sibling, 0 replies; 13+ messages in thread From: Thompson, David @ 2014-12-15 21:24 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel On Mon, Dec 15, 2014 at 4:20 PM, Ludovic Courtès <ludo@gnu.org> wrote: > "Thompson, David" <dthompson2@worcester.edu> skribis: > >> On Mon, Dec 15, 2014 at 12:19 PM, Ludovic Courtès <ludo@gnu.org> wrote: >>> I think this is due to a subtly misleading file format variation. >>> >>> If you look at ‘export-paths’, it does: >>> >>> while there are files to write >>> write-long-long 1 >>> export-path file >>> write-long-long 0 >>> >>> ‘restore-file-set’ does the opposite, which is to read that long-long to >>> determine whether there’s data coming up, and then to call >>> ‘restore-file’. >> >> Thanks. I'm still a little confused, though. I'm not sure what >> change I need to make in order to satisfy the substituter. Do I need >> to write a variant of export-paths that leaves off the initial >> write-long-long call? > > For illustration purposes, here’s a normal sequence: > > --8<---------------cut here---------------start------------->8--- > $ wget -O t.nar.bz2 http://hydra.gnu.org/nar/wy70n5zk8qinxjz0wdk9q2hh1zjfb32j-miscfiles-1.5 > $ bunzip2 t.nar.bz2 > $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (call-with-input-file "t.nar" (lambda (port) (restore-file port "restored")))' > $ ls restored/ > share > --8<---------------cut here---------------end--------------->8--- > > ‘restore-file’ is what ‘guix substitute-binary --substitute’ uses. It > expects a single store item–i.e., the variant /without/ the leading > long-long, as you noticed. > > To produce that, use ‘write-file’ from (guix serialization): > > --8<---------------cut here---------------start------------->8--- > $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (write-file "/gnu/store/wy70n5zk8qinxjz0wdk9q2hh1zjfb32j-miscfiles-1.5" (current-output-port))' > t.nar > $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (call-with-input-file "t.nar" (lambda (port) (restore-file port "restored")))' > $ ls restored/ > share > --8<---------------cut here---------------end--------------->8--- Perfect, thanks! - Dave ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2014-12-15 21:20 ` Ludovic Courtès 2014-12-15 21:24 ` Thompson, David @ 2014-12-15 22:49 ` David Thompson 2014-12-16 17:07 ` Ludovic Courtès 1 sibling, 1 reply; 13+ messages in thread From: David Thompson @ 2014-12-15 22:49 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Ludovic Courtès <ludo@gnu.org> writes: > To produce that, use ‘write-file’ from (guix serialization): > > --8<---------------cut here---------------start------------->8--- > $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (write-file "/gnu/store/wy70n5zk8qinxjz0wdk9q2hh1zjfb32j-miscfiles-1.5" (current-output-port))' > t.nar > $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (call-with-input-file "t.nar" (lambda (port) (restore-file port "restored")))' > $ ls restored/ > share > --8<---------------cut here---------------end--------------->8--- The above snippet works. However, 'guix substitute-binary' throws the following error: guix substitute-binary: error: invalid nar end-of-file marker Here's my nar rendering code: (define (render-nar store-item) "Render archive of the store path corresponding to STORE-ITEM." (let ((store-path (string-append %store-directory "/" store-item))) (values '((content-type . (text/x-nix-archive))) (lambda (port) (write-file store-path port))))) Thoughts? -- David Thompson Web Developer - Free Software Foundation - http://fsf.org GPG Key: 0FF1D807 Support the FSF: https://fsf.org/donate ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2014-12-15 22:49 ` David Thompson @ 2014-12-16 17:07 ` Ludovic Courtès 2015-01-15 2:38 ` David Thompson 0 siblings, 1 reply; 13+ messages in thread From: Ludovic Courtès @ 2014-12-16 17:07 UTC (permalink / raw) To: David Thompson; +Cc: guix-devel David Thompson <dthompson2@worcester.edu> skribis: > Ludovic Courtès <ludo@gnu.org> writes: > >> To produce that, use ‘write-file’ from (guix serialization): >> >> --8<---------------cut here---------------start------------->8--- >> $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (write-file "/gnu/store/wy70n5zk8qinxjz0wdk9q2hh1zjfb32j-miscfiles-1.5" (current-output-port))' > t.nar >> $ ./pre-inst-env guile -c '(use-modules (guix serialization)) (call-with-input-file "t.nar" (lambda (port) (restore-file port "restored")))' >> $ ls restored/ >> share >> --8<---------------cut here---------------end--------------->8--- > > The above snippet works. However, 'guix substitute-binary' throws the > following error: > > guix substitute-binary: error: invalid nar end-of-file marker > > Here's my nar rendering code: > > (define (render-nar store-item) > "Render archive of the store path corresponding to STORE-ITEM." > (let ((store-path (string-append %store-directory "/" store-item))) > (values '((content-type . (text/x-nix-archive))) > (lambda (port) > (write-file store-path port))))) Hmm, some ideas of things to try: 1. Add (force-output port) after (write-file ...). 2. Display the value of ‘x’ in ‘restore-file’ at the point where the exception is raised. 2. strace the substituter and/or ‘guix publish’ to see exactly what happens on the wire. Is the end-of-file marker string sent? Is it received? etc. Ludo’. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2014-12-16 17:07 ` Ludovic Courtès @ 2015-01-15 2:38 ` David Thompson 2015-01-15 9:51 ` Ludovic Courtès 0 siblings, 1 reply; 13+ messages in thread From: David Thompson @ 2015-01-15 2:38 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Back at this again after awhile. Ludovic Courtès <ludo@gnu.org> writes: > Hmm, some ideas of things to try: > > 1. Add (force-output port) after (write-file ...). No effect. > 2. Display the value of ‘x’ in ‘restore-file’ at the point where the > exception is raised. Haven't tried this yet. > 2. strace the substituter and/or ‘guix publish’ to see exactly what > happens on the wire. Is the end-of-file marker string sent? Is it > received? etc. Here's a snippet of the strace output: http://192.168.1.157/.../iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 94.1% of 127.5 KiB) = 104 read(10, "vector tox-max-status-message-le"..., 7728) = 117 read(10, " "..., 7611) = 1448 read(10, "t-last-online (unwrap-tox tox) f"..., 6163) = 1448 read(10, "tox tox) nospam))\n\n(define/unwra"..., 4715) = 1448 read(10, " friend-number group-number)))\n\n"..., 3267) = 1448 read(10, ")))\n (if (negative? result)\n "..., 1819) = 1819 http://192.168.1.157/.../iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 100.0% of 127.5 KiB) = 104 http://192.168.1.157/.../iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 100.0% of 127.5 KiB) = 104 brk(0x41875000) = 0x41875000 mmap(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3d2aaaf000 mremap(0x7f3d2aaaf000, 135168, 266240, MREMAP_MAYMOVE) = 0x7f3d2aa6e000 mremap(0x7f3d2aa6e000, 266240, 528384, MREMAP_MAYMOVE) = 0x7f3d2a9ed000 mremap(0x7f3d2a9ed000, 528384, 430080, MREMAP_MAYMOVE) = 0x7f3d2a9ed000 munmap(0x7f3d2a9ed000, 430080) = 0 http://192.168.1.157/.../iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 100.0% of 127.5 KiB) = 104 open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en_US.UTF-8/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en_US.utf8/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en_US/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en.UTF-8/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en.utf8/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) write(2, "guix substitute-binary: error: i"..., 62guix substitute-binary: error: invalid nar end-of-file marker ) = 62 exit_group(1) = ? +++ exited with 1 +++ I'm not sure what's going on here. I thought that maybe the substituter was getting tripped up by the Scheme code in the uncompressed nar, but I don't have any reason to believe that's true. Despite that, I tried to compress the nar with bzip2 just for fun, but I ran into another problem: warning: call to primitive-fork while multiple threads are running; further behavior unspecified. See "Processes" in the manual, for more information. I'm running a REPL server in addition to the web server, but I imagine the web server also spawns additional threads to handle requests, so either way 'filtered-output-port' won't work here. The return value of 'waitpid' for the bzip2 pid is: ((18764 . 256)) Thoughts on what to try next? I feel like I'm so close, but I keep running into walls that prevent me from making much progress. -- David Thompson Web Developer - Free Software Foundation - http://fsf.org GPG Key: 0FF1D807 Support the FSF: https://fsf.org/donate ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2015-01-15 2:38 ` David Thompson @ 2015-01-15 9:51 ` Ludovic Courtès 2015-01-15 13:39 ` Thompson, David 0 siblings, 1 reply; 13+ messages in thread From: Ludovic Courtès @ 2015-01-15 9:51 UTC (permalink / raw) To: David Thompson; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 3389 bytes --] David Thompson <dthompson2@worcester.edu> skribis: > Ludovic Courtès <ludo@gnu.org> writes: [...] >> 2. strace the substituter and/or ‘guix publish’ to see exactly what >> happens on the wire. Is the end-of-file marker string sent? Is it >> received? etc. > > Here's a snippet of the strace output: > > http://192.168.1.157/.../iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 94.1% of 127.5 KiB) = 104 > read(10, "vector tox-max-status-message-le"..., 7728) = 117 > read(10, " "..., 7611) = 1448 > read(10, "t-last-online (unwrap-tox tox) f"..., 6163) = 1448 > read(10, "tox tox) nospam))\n\n(define/unwra"..., 4715) = 1448 > read(10, " friend-number group-number)))\n\n"..., 3267) = 1448 > read(10, ")))\n (if (negative? result)\n "..., 1819) = 1819 > http://192.168.1.157/.../iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 100.0% of 127.5 KiB) = 104 > http://192.168.1.157/.../iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 100.0% of 127.5 KiB) = 104 > brk(0x41875000) = 0x41875000 > mmap(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3d2aaaf000 > mremap(0x7f3d2aaaf000, 135168, 266240, MREMAP_MAYMOVE) = 0x7f3d2aa6e000 > mremap(0x7f3d2aa6e000, 266240, 528384, MREMAP_MAYMOVE) = 0x7f3d2a9ed000 > mremap(0x7f3d2a9ed000, 528384, 430080, MREMAP_MAYMOVE) = 0x7f3d2a9ed000 > munmap(0x7f3d2a9ed000, 430080) = 0 > http://192.168.1.157/.../iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 100.0% of 127.5 KiB) = 104 > open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en_US.UTF-8/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) > open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en_US.utf8/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) > open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en_US/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) > open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en.UTF-8/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) > open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en.utf8/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) > open("/gnu/store/72qm7kc9phvsiw6j7xgn1ii0f6s9mx8i-guix-0.8.3b09332/share/locale/en/LC_MESSAGES/guix.mo", O_RDONLY) = -1 ENOENT (No such file or directory) > write(2, "guix substitute-binary: error: i"..., 62guix substitute-binary: error: invalid nar end-of-file marker > ) = 62 > exit_group(1) = ? > +++ exited with 1 +++ Normally, when the error happens, the substituter has already created at least one file in the target directory, /gnu/store/iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0. Could you apply the patch below, and then run: rm -rf foo ./pre-inst-env guix substitute-binary --substitute \ /gnu/store/iw3jn6a1avv78pp5v2cv42vyh0d8zi0g-guile-toxcore-0.1-6a9fbe0 \ $PWD/foo > stdout ls -lRa foo > ls-R and then send ‘stdout’ and ‘ls-R’? Could you also check if the files in ‘foo’ look corrupt or anything? [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: Type: text/x-patch, Size: 1387 bytes --] diff --git a/guix/serialization.scm b/guix/serialization.scm index 64eacf9..d3bdea3 100644 --- a/guix/serialization.scm +++ b/guix/serialization.scm @@ -292,19 +292,21 @@ Restore it as FILE." (define (read-eof-marker) (match (read-string port) (")" #t) - (x (raise + (x + (pk 'bad-eof x) + (raise (condition (&message (message "invalid nar end-of-file marker")) (&nar-read-error (port port) (file file) (token x))))))) (match (list (read-string port) (read-string port) (read-string port)) (("(" "type" "regular") - (call-with-output-file file (cut read-contents port <>)) + (call-with-output-file (pk 'reg file) (cut read-contents port <>)) (read-eof-marker)) (("(" "type" "symlink") (match (list (read-string port) (read-string port)) (("target" target) - (symlink target file) + (symlink target (pk 'symlink file)) (read-eof-marker)) (x (raise (condition @@ -312,7 +314,7 @@ Restore it as FILE." (&nar-read-error (port port) (file file) (token x))))))) (("(" "type" "directory") (let ((dir file)) - (mkdir dir) + (mkdir (pk 'dir dir)) (let loop ((prefix (read-string port))) (match prefix ("entry" [-- Attachment #3: Type: text/plain, Size: 623 bytes --] > Despite that, I tried to compress the nar with bzip2 just for fun, but I > ran into another problem: > > warning: call to primitive-fork while multiple threads are running; > further behavior unspecified. See "Processes" in the > manual, for more information. > > I'm running a REPL server in addition to the web server, but I imagine > the web server also spawns additional threads to handle requests, so > either way 'filtered-output-port' won't work here. (web server http) does not use threads so it should be OK. But we’ll see that afterwards. :-) Thanks, Ludo’. ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2015-01-15 9:51 ` Ludovic Courtès @ 2015-01-15 13:39 ` Thompson, David 2015-01-15 16:22 ` Ludovic Courtès 0 siblings, 1 reply; 13+ messages in thread From: Thompson, David @ 2015-01-15 13:39 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel On Thu, Jan 15, 2015 at 4:51 AM, Ludovic Courtès <ludo@gnu.org> wrote: > David Thompson <dthompson2@worcester.edu> skribis: > >> Despite that, I tried to compress the nar with bzip2 just for fun, but I >> ran into another problem: >> >> warning: call to primitive-fork while multiple threads are running; >> further behavior unspecified. See "Processes" in the >> manual, for more information. >> >> I'm running a REPL server in addition to the web server, but I imagine >> the web server also spawns additional threads to handle requests, so >> either way 'filtered-output-port' won't work here. > > (web server http) does not use threads so it should be OK. But we’ll > see that afterwards. :-) Ah, okay. Even so, requiring a single-threaded application in order to use compressed/decompressed ports makes hacking on 'guix publish' inconvenient, as it eliminates use of the REPL. But sure, we'll deal with this afterwards. - Dave ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2015-01-15 13:39 ` Thompson, David @ 2015-01-15 16:22 ` Ludovic Courtès 2015-01-15 17:23 ` Thompson, David 0 siblings, 1 reply; 13+ messages in thread From: Ludovic Courtès @ 2015-01-15 16:22 UTC (permalink / raw) To: Thompson, David; +Cc: guix-devel "Thompson, David" <dthompson2@worcester.edu> skribis: > On Thu, Jan 15, 2015 at 4:51 AM, Ludovic Courtès <ludo@gnu.org> wrote: >> David Thompson <dthompson2@worcester.edu> skribis: >> >>> Despite that, I tried to compress the nar with bzip2 just for fun, but I >>> ran into another problem: >>> >>> warning: call to primitive-fork while multiple threads are running; >>> further behavior unspecified. See "Processes" in the >>> manual, for more information. >>> >>> I'm running a REPL server in addition to the web server, but I imagine >>> the web server also spawns additional threads to handle requests, so >>> either way 'filtered-output-port' won't work here. >> >> (web server http) does not use threads so it should be OK. But we’ll >> see that afterwards. :-) > > Ah, okay. Even so, requiring a single-threaded application in order > to use compressed/decompressed ports makes hacking on 'guix publish' > inconvenient, as it eliminates use of the REPL. Agreed. We’ll probably need libbz2 bindings at some point. Ludo’. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Invalid nar signature 2015-01-15 16:22 ` Ludovic Courtès @ 2015-01-15 17:23 ` Thompson, David 0 siblings, 0 replies; 13+ messages in thread From: Thompson, David @ 2015-01-15 17:23 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel On Thu, Jan 15, 2015 at 11:22 AM, Ludovic Courtès <ludo@gnu.org> wrote: > "Thompson, David" <dthompson2@worcester.edu> skribis: > >> On Thu, Jan 15, 2015 at 4:51 AM, Ludovic Courtès <ludo@gnu.org> wrote: >>> (web server http) does not use threads so it should be OK. But we’ll >>> see that afterwards. :-) >> >> Ah, okay. Even so, requiring a single-threaded application in order >> to use compressed/decompressed ports makes hacking on 'guix publish' >> inconvenient, as it eliminates use of the REPL. > > Agreed. We’ll probably need libbz2 bindings at some point. I was about to go down that road last night. ;) - Dave ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2015-01-15 17:24 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-12-15 2:22 Invalid nar signature David Thompson 2014-12-15 2:33 ` David Thompson 2014-12-15 17:19 ` Ludovic Courtès 2014-12-15 20:08 ` Thompson, David 2014-12-15 21:20 ` Ludovic Courtès 2014-12-15 21:24 ` Thompson, David 2014-12-15 22:49 ` David Thompson 2014-12-16 17:07 ` Ludovic Courtès 2015-01-15 2:38 ` David Thompson 2015-01-15 9:51 ` Ludovic Courtès 2015-01-15 13:39 ` Thompson, David 2015-01-15 16:22 ` Ludovic Courtès 2015-01-15 17:23 ` Thompson, David
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).