[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MirageOS-devel] Building mirage-www fails



On 22 Oct 2014, at 18:13, Nik Sultana <ns441@xxxxxxxxx> wrote:

> Thanks Anil, I could build the Ubuntu 14.04 (Trusty) container following your 
> instructions, with one modification: referencing "avsm/docker-opam" instead 
> of "avsm/docker".

Sorry, my typo.

> 
> I haven't tested the other containers since I don't have ready access to a 
> CentOS box. This patch will work if the other distributions use a version of 
> sh that's compatible to that used in Trusty.
> 

To be clear: the point of the Docker container is to give you a CentOS 
environment.  You can just use the CentOS tag, even from an Ubuntu host.

> I tested the problem with the semantics of && under -e by replacing the line
>  make configure && make depend && make build
> with
>  false && make configure && make depend && make build
> and verified that I still got "MIRAGE WORKS" printed at the end after running
>  ./build.sh ubuntu-trusty-4.01.0 mirage-skeleton
> 
> Then I unfolded
>  false && make configure && make depend && make build
> into
>  false
>  make configure
>  make depend
>  make build
> and reran, and verified that I did NOT get "MIRAGE WORKS" printed at the end.
> 
> Finally I removed "false", and reran.
> I did get "MIRAGE WORKS" printed at the end.
> 
> At the risk of asking an over-asked question: what's the procedure for the 
> PR, do I need to quote an issue number etc, or can I just go ahead and create 
> a PR from a fork?

Just go ahead and send a pull request to the mirage/is-mirage-broken repo from 
your fork.  Getting the code fixed always takes priority over the form of the 
patch :-)

thanks!
Anil


> 
> Nik
> 
> On 2014-10-22 14:03, Anil Madhavapeddy wrote:
>> CCing the devel list so everyone knows how this works.
>> If you have a Linux box with Docker installed, you can clone the
>> precise environment by:
>> $ sudo docker pull avsm/docker
>> This gives you access to a number of 'tags' (which are predefined
>> builds of OPAM/OCaml on various filesystems). Full list of tags are:
>> https://registry.hub.docker.com/u/avsm/docker-opam/tags/manage/
>> You can use a tag directly via:
>> $ sudo docker build -t avsm/docker:ubuntu-trusty-4.01.0 <cmd>
>> The scripts referenced below already do this, and are all in:
>> https://github.com/mirage/is-mirage-broken
>> The cron.sh is the one that's run regularly and sync with the
>> Docker registry and builds every combination.
>> To recreate one of them, just run build.sh directly; e.g.
>> ./build.sh ubuntu-trusty-4.01.0 mirage-skeleton
>> If you already have a suitable environment with OPAM and OCaml
>> installed system-wide, you can just run the shell scripts in
>> is-mirage-broken/scripts/ directly to fix them.
>> -anil
>> On 22 Oct 2014, at 13:55, Nik Sultana <ns441@xxxxxxxxx> wrote:
>>> Hi Anil, is this something I can try locally to see if the modified script 
>>> works, or do I need to run the script on a build server somewhere? Feel 
>>> free to point me to any "BUILD" notes i could use for this, in case I can 
>>> test it and make a PR, if it's still an open issue.
>>> Best,
>>> Nik
>>> On 2014-10-21 16:18, Richard Mortier wrote:
>>>> if you read the docs i quoted, that's exactly as documented:
>>>>>>>>>       • The -e setting shall be ignored when executing the compound 
>>>>>>>>> list
>>>>>>>>> following the while, until, if, or elif reserved word, a pipeline
>>>>>>>>> beginning with the ! reserved word, or any command of an AND-OR list
>>>>>>>>> other than the last.
>>>> it might be rather counter-intuitive and of dubious merit, but it's
>>>> the documented behaviour...
>>>> On 21 Oct 2014, at 16:01, Nik Sultana <ns441@xxxxxxxxx> wrote:
>>>>> I think Richard might be right. The semantics of && seems to be a bit
>>>>> counterintuitive in this case. Consider this script:
>>>>> #!/bin/sh
>>>>> set -e #line1
>>>>> false && echo hello #line2
>>>>> echo hello2
>>>>> false #line4
>>>>> echo world
>>>>> It gives the output:
>>>>> hello2
>>>>> which is odd, because we expect the script to be terminated at line2 --
>>>>> the line "echo hello2" should never be reached. Instead, the script
>>>>> continues on and is only terminated at line4.
>>>>> Just to test the effect of "set -e", commenting line1 and running the
>>>>> script gives the output:
>>>>> hello2
>>>>> world
>>>>> On 2014-10-21 15:49, Anil Madhavapeddy wrote:
>>>>>> The && should catch that failure.  Consider:
>>>>>> #!/bin/sh -ex
>>>>>> exit 1 && echo hello
>>>>>> echo world
>>>>>> Executing that:
>>>>>> $ ./test.sh
>>>>>> + exit 1
>>>>>> If the make depend fails, I'd expect the && to fail, and the resulting
>>>>>> non-zero exit code to cause the whole shell to exit.
>>>>>> -anil
>>>>>> On 21 Oct 2014, at 15:37, Richard Mortier
>>>>>> <Richard.Mortier@xxxxxxxxxxxxxxxx> wrote:
>>>>>>> but isn't it the "make depend" step that's failing as far as the
>>>>>>> is-mirage-broken/scripts/mirage-www script is concerned -- hence it
>>>>>>> won't exit according to point 2. below (-e is ignored if it's any
>>>>>>> command of an AND-OR list other than the last).
>>>>>>> with -e on, seems expected practice is to issue the commands
>>>>>>> individually i.e.
>>>>>>> make depend
>>>>>>> make configure
>>>>>>> make build
>>>>>>> ...and let the -e fail them if required. (assuming you don't want to
>>>>>>> accumulate info about failures of depend/configure on other platforms
>>>>>>> before bailing out.)
>>>>>>> On 21 Oct 2014, at 15:18, Anil Madhavapeddy <anil@xxxxxxxxxx> wrote:
>>>>>>>> It's here:
>>>>>>>> https://github.com/mirage/is-mirage-broken/blob/master/scripts/mirage-www
>>>>>>>> And the `make` invocations do seem to exit with a non-zero exit code.
>>>>>>>> -ani
>>>>>>>> On 21 Oct 2014, at 15:02, Richard Mortier
>>>>>>>> <Richard.Mortier@xxxxxxxxxxxxxxxx> wrote:
>>>>>>>>> not sure precisely where the script being executed actually is but
>>>>>>>>> could it be because it's a command in a multi-command pipeline?
>>>>>>>>> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
>>>>>>>>> -e
>>>>>>>>> When this option is on, when any command fails (for any of the
>>>>>>>>> reasons listed in Consequences of Shell Errors or by returning an
>>>>>>>>> exit status greater than zero), the shell immediately shall exit
>>>>>>>>> with the following exceptions:
>>>>>>>>>       • The failure of any individual command in a multi-command 
>>>>>>>>> pipeline
>>>>>>>>> shall not cause the shell to exit. Only the failure of the pipeline
>>>>>>>>> itself shall be considered.
>>>>>>>>>       • The -e setting shall be ignored when executing the compound 
>>>>>>>>> list
>>>>>>>>> following the while, until, if, or elif reserved word, a pipeline
>>>>>>>>> beginning with the ! reserved word, or any command of an AND-OR list
>>>>>>>>> other than the last.
>>>>>>>>>       • If the exit status of a compound command other than a subshell
>>>>>>>>> command was the result of a failure while -e was being ignored, then
>>>>>>>>> -e shall not apply to this command.
>>>>>>>>> This requirement applies to the shell environment and each subshell
>>>>>>>>> environment separately. For example, in:
>>>>>>>>> set -e; (false; echo one) | cat; echo two
>>>>>>>>> the false command causes the subshell to exit without executing echo
>>>>>>>>> one; however, echo two is executed because the exit status of the
>>>>>>>>> pipeline (false; echo one) | cat is zero.
>>>>>>>>> On 21 Oct 2014, at 14:31, Anil Madhavapeddy <anil@xxxxxxxxxx> wrote:
>>>>>>>>>> Great!  For the rest of the list, it looks like mirage-dev is
>>>>>>>>>> working with the external OPAM solver (aspcud, on Ubuntu-trusty),
>>>>>>>>>> but not with the internal one (CentOS builds):
>>>>>>>>>> https://github.com/mirage/is-mirage-broken/tree/master/logs
>>>>>>>>>> This is probably due to our excessive use of depopts; I will
>>>>>>>>>> replace those with explicit virtual packages (e.g. dns-mirage) that
>>>>>>>>>> encode all the dependencies they need.
>>>>>>>>>> More mysteriously, the `set -e` in the shell script isn't causing
>>>>>>>>>> it to terminate early, so the `MIRAGE WORKS` string is always
>>>>>>>>>> printed.  We need a is-mirage-working-working script to fix our
>>>>>>>>>> is-mirage-working script :-)
>>>>>>>>>> -anil
>>>>>>>>>> On 20 Oct 2014, at 15:09, Luke Dunstan <lukedunstan81@xxxxxxxxx>
>>>>>>>>>> wrote:
>>>>>>>>>>> Thanks, I was able to compile and run mirage-www on a Docker image
>>>>>>>>>>> with 4.01.
>>>>>>>>>>> Luke
>>>>>>>>>>> On 20 October 2014 09:28, Anil Madhavapeddy <anil@xxxxxxxxxx>
>>>>>>>>>>> wrote:
>>>>>>>>>>> On 19 Oct 2014, at 03:17, Luke Dunstan <lukedunstan81@xxxxxxxxx>
>>>>>>>>>>> wrote:
>>>>>>>>>>>> Hi,
>>>>>>>>>>>> I tried to build mirage-www as per
>>>>>>>>>>>> http://openmirage.org/wiki/mirage-www
>>>>>>>>>>>> $ env NET=socket FS=crunch mirage configure --unix
>>>>>>>>>>>> (success)
>>>>>>>>>>>> $ make depend
>>>>>>>>>>>> (success*)
>>>>>>>>>>>> $ make
>>>>>>>>>>>> camlbuild -classic-display -use-ocamlfind -pkgs
>>>>>>>>>>>> lwt.syntax,conduit.mirage,cow.syntax,cowabloga,cstruct,io-page,io-page.unix,lwt,mirage-console.unix,mirage-fs-unix,mirage-http,mirage-types,mirage-types.lwt,tcpip.stack-socket
>>>>>>>>>>>> -tags "syntax(camlp4o),annot,bin_annot,strict_sequence,principal"
>>>>>>>>>>>> -cflag -g -lflags -g,-linkpkg main.native
>>>>>>>>>>>> ocamlfind ocamlc -c -g -annot -bin-annot -principal
>>>>>>>>>>>> -strict-sequence -package tcpip.stack-socket -package
>>>>>>>>>>>> mirage-types.lwt -package mirage-types -package mirage-http
>>>>>>>>>>>> -package mirage-fs-unix -package mirage-console.unix -package lwt
>>>>>>>>>>>> -package io-page.unix -package io-page -package cstruct -package
>>>>>>>>>>>> cowabloga -package cow.syntax -package conduit.mirage -package
>>>>>>>>>>>> lwt.syntax -syntax camlp4o -o main.cmo main.ml
>>>>>>>>>>>> + ocamlfind ocamlc -c -g -annot -bin-annot -principal
>>>>>>>>>>>> -strict-sequence -package tcpip.stack-socket -package
>>>>>>>>>>>> mirage-types.lwt -package mirage-types -package mirage-http
>>>>>>>>>>>> -package mirage-fs-unix -package mirage-console.unix -package lwt
>>>>>>>>>>>> -package io-page.unix -package io-page -package cstruct -package
>>>>>>>>>>>> cowabloga -package cow.syntax -package conduit.mirage -package
>>>>>>>>>>>> lwt.syntax -syntax camlp4o -o main.cmo main.ml
>>>>>>>>>>>> File "main.ml", line 98, characters 2-13:
>>>>>>>>>>>> Error: Unbound module OS
>>>>>>>>>>>> Command exited with code 2.
>>>>>>>>>>>> make: *** [main.native] Error 10
>>>>>>>>>>>> To try to ensure that this was reproducible I also tried starting
>>>>>>>>>>>> from the "avsm/docker-opam:ubuntu-trusty-4.01.0" Docker image and
>>>>>>>>>>>> got the same error. However, I had to change the ounit package
>>>>>>>>>>>> URL because forge.ocamlcore.org is apparently down.
>>>>>>>>>>>> Also, I had to "apt-get install libssl-dev" to get past the
>>>>>>>>>>>> "configure" / "make depend" step because it was apparently
>>>>>>>>>>>> required to compile ssl-0.4.7, so maybe that is related to the
>>>>>>>>>>>> problem?
>>>>>>>>>>> Hi Luke,
>>>>>>>>>>> Thanks for the bug report, and bonus points for trying the Docker
>>>>>>>>>>> repository out.  I've fixed the underlying issue that was causing
>>>>>>>>>>> the unbound OS module to show up -- it's because of some recent
>>>>>>>>>>> shuffling of dependencies in console handling, and this resulted
>>>>>>>>>>> in mirage-unix no longer being implicitly depended on.  I've
>>>>>>>>>>> modified the mirage tool to explicitly add the dependency in.
>>>>>>>>>>> In order to help keep things working across the increasing number
>>>>>>>>>>> of distributions, I've also created a couple of cron jobs that
>>>>>>>>>>> automatically build things and publish the logs
>>>>>>>>>>> - The Docker registry now has OPAM tags for Ubuntu/CentOS on OCaml
>>>>>>>>>>> 4.01 and 4.02:
>>>>>>>>>>> https://registry.hub.docker.com/u/avsm/docker-opam/builds_history/15669/
>>>>>>>>>>> https://github.com/avsm/docker-opam has the sources
>>>>>>>>>>> - https://github.com/mirage/is-mirage-broken runs as a cronjob
>>>>>>>>>>> (cron.sh) on blobs.openmirage.org daily and pushes the logs to the
>>>>>>>>>>> logs/ directory in this repo.  When that's completed running (and
>>>>>>>>>>> we've fixed the build breakages!), it should be easy to get it on
>>>>>>>>>>> the website as a badge so we can see the status of repos at a
>>>>>>>>>>> glance.
>>>>>>>>>>> About to hop on a flight now, so I've left the cron job running
>>>>>>>>>>> and will check it out tomorrow.  If anyone else can test out the
>>>>>>>>>>> Docker images in the meanwhile, feel free...
>>>>>>>>>>> -anil
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> MirageOS-devel mailing list
>>>>>>>>>>> MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
>>>>>>>>>>> http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
>>>>>>>>>> _______________________________________________
>>>>>>>>>> MirageOS-devel mailing list
>>>>>>>>>> MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
>>>>>>>>>> http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
>>>>>>>>> --
>>>>>>>>> Cheers,
>>>>>>>>> R.
>>>>>>>>> _______________________________________________
>>>>>>>>> MirageOS-devel mailing list
>>>>>>>>> MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
>>>>>>>>> http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
>>>>>>> --
>>>>>>> Cheers,
>>>>>>> R.
>>>>>>> _______________________________________________
>>>>>>> MirageOS-devel mailing list
>>>>>>> MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
>>>>>>> http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
>>>>>> _______________________________________________
>>>>>> MirageOS-devel mailing list
>>>>>> MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
>>>>>> http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
> 


_______________________________________________
MirageOS-devel mailing list
MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.