cryogen-project / cryogen

A simple static site generator written in Clojure
http://cryogenweb.org/
Eclipse Public License 1.0
1.1k stars 96 forks source link

FreeBSD JavaVM Issues - Workarounds #208

Closed gotwf closed 4 years ago

gotwf commented 4 years ago

I was an early adopter. Life got in the way. More recently I cannot get Cryogen to run. Yet no issues? Anybody out there interested these days?

Yeah, I know there are other static blog engines but I kinda like Cryogen. Peace.

Edit: Ah, must have had a brain fart. Okay, not abandoned. Should also mention that I am on FreeBSD-12.1-RELEASE, OpenJDK8, Clojure 1.10.1 and leiningen is wanking about jruby and missing ~/.gems. Uh, sorry, no Ruby here so wtf?

Any IRC support these days?

lacarmen commented 4 years ago

Not abandoned, just "complete". People are generally happy with the tool so there hasn't been that many additional features.

Not on IRC but there is a #cryogen channel on the Clojurians Slack.

On Sun., Mar. 22, 2020, 3:03 p.m. gotwf, notifications@github.com wrote:

I was an early adopter. Life got in the way. More recently I cannot get Cryogen to run. Yet no issues? Anybody out there interested these days?

Yeah, I know there are other static blog engines but I kinda like Cryogen. Peace.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/cryogen-project/cryogen/issues/208, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCVYGFFY3SJPGV2GWCBUELRIZOJFANCNFSM4LRMWLNQ .

gotwf commented 4 years ago

% lein new cryogen my-blog.tld Generating fresh 'lein new' Cryogen project.

%cd my-blog.tld %lein ring server

Retrieving bunches 'o stuff.....

Retrieving clj-time/clj-time/0.11.0/clj-time-0.11.0.jar from clojars Retrieving ring/ring-core/1.6.1/ring-core-1.6.1.jar from clojars Retrieving ring/ring-jetty-adapter/1.6.1/ring-jetty-adapter-1.6.1.jar from clojars 2020-03-22 14:38:59.624:INFO::main: Logging initialized @1371ms loading module: Flexmark parser compiling assets... compiling sass copying theme resources themes/blue/css --> public/blog/css themes/blue/js --> public/blog/js themes/blue/html/404.html --> public/blog/404.html copying resources content/img --> public/blog/img content/md/posts --> public/blog/posts content/md/pages --> public/blog/pages compiling pages --> /blog/pages-output/about/ --> /blog/pages-output/another-page/ compiling posts --> /blog/posts-output/2016-01-07-docs/ --> /blog/posts-output/2014-11-04-second-post/ --> /blog/posts-output/2014-03-10-first-post/ compiling tags --> /blog/tags-output/cryogen/ --> /blog/tags-output/very fetch/ --> /blog/tags-output/not fetch/ compiling tags page compiling index compiling archives generating authors views compiling authors --> /blog/authors-output/Bob Bobbert/ generating site map generating main rss generating filtered rss --> /blog/cryogen.xml "Elapsed time: 753.130604 msecs" Exception in thread "main" Syntax error compiling at (/tmp/form-init6137036201721099449.clj:1:73). at clojure.lang.Compiler.load(Compiler.java:7647) at clojure.lang.Compiler.loadFile(Compiler.java:7573) at clojure.main$load_script.invokeStatic(main.clj:452) at clojure.main$init_opt.invokeStatic(main.clj:454) at clojure.main$init_opt.invoke(main.clj:454) at clojure.main$initialize.invokeStatic(main.clj:485) at clojure.main$null_opt.invokeStatic(main.clj:519) at clojure.main$null_opt.invoke(main.clj:516) at clojure.main$main.invokeStatic(main.clj:598) at clojure.main$main.doInvoke(main.clj:561) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.lang.Var.applyTo(Var.java:705) at clojure.main.main(main.java:37) Caused by: java.lang.UnsatisfiedLinkError: sun.nio.fs.LinuxWatchService.inotifyInit()I at sun.nio.fs.LinuxWatchService.inotifyInit(Native Method) at sun.nio.fs.LinuxWatchService.(LinuxWatchService.java:59) at sun.nio.fs.BsdFileSystem.newWatchService(BsdFileSystem.java:51) at hawk.watcher$fn153.invokeStatic(watcher.clj:128) at hawk.watcher$fn153.invoke(watcher.clj:127) at clojure.lang.MultiFn.invoke(MultiFn.java:229) at hawk.watcher$fn160.invokeStatic(watcher.clj:134) at hawk.watcher$fn160.invoke(watcher.clj:133) at clojure.lang.MultiFn.invoke(MultiFn.java:229) at hawk.core$watchBANG.invokeStatic(core.clj:62) at hawk.core$watchBANG.doInvoke(core.clj:59) at clojure.lang.RestFn.invoke(RestFn.java:410) at cryogen_core.watcher$start_watcherBANG.invokeStatic(watcher.clj:35) at cryogen_core.watcher$start_watcherBANG.invoke(watcher.clj:31) at cryogen.server$init.invokeStatic(server.clj:18) at cryogen.server$init.invoke(server.clj:14) at clojure.lang.Var.invoke(Var.java:380) at ring.server.standalone$serve.invokeStatic(standalone.clj:96) at ring.server.standalone$serve.doInvoke(standalone.clj:75) at clojure.lang.RestFn.invoke(RestFn.java:423) at ring.server.leiningen$serve.invokeStatic(leiningen.clj:19) at ring.server.leiningen$serve.invoke(leiningen.clj:16) at user$eval12427.invokeStatic(form-init6137036201721099449.clj:1) at user$eval12427.invoke(form-init6137036201721099449.clj:1) at clojure.lang.Compiler.eval(Compiler.java:7176) at clojure.lang.Compiler.eval(Compiler.java:7166) at clojure.lang.Compiler.load(Compiler.java:7635) ... 12 more Subprocess failed (exit code: 1)

% java -version
openjdk version "1.8.0_242" OpenJDK Runtime Environment (build 1.8.0_242-b07) OpenJDK 64-Bit Server VM (build 25.242-b07, mixed mode)

% uname -a FreeBSD loon.teamcool.net 12.1-RELEASE-p3 FreeBSD 12.1-RELEASE-p3 GENERIC amd64

% lein version Leiningen 2.9.3 on Java 1.8.0_242 OpenJDK 64-Bit Server VM

Not a Clojurian. Clue bats appreciated.

yogthos commented 4 years ago

It looks like it might be an issue with your version of the JVM.

gotwf commented 4 years ago

Hmm... that issue is closed as "fixed". I am running latest java8. jdk8 is recommended by leiningen but I also tested with 11 and 13. Each built from ports yesterday after a fresh update.

I am a competent and seasoned sysadmin/engineer. I cannot code Java, Clojure, etc. I switch platforms from time to time. Cannot recall if I was on Arch, Void, or FreeBSD last time I used Cryogen. So maybe this never did work on Unix?

One of my main criteria is Asciidoc support, as I strongly dislike Markdown. I just discovered Antora, which looks super sweet, at least for documentation centric site. Cryogen is "complete" but there's some great stuff there for some cross pollination if y'all get bored.

I lurk on #teamcool on Freenode. I can link to some pasties there. Some of the errors were whinging about ruby gems and jruby, looking in ~/.gem dir, wh/is nonexistent. I may have stipulated the asciidoc config then and it was looking for asciidoctor? Anyways, FreeBSD is a pretty popular OS and I expect serious issues with JDK would have been addressed? Especially java 8?

Lots of stuff is going Linux only these days, and even so far as Distro X being the only "officially supported" platform for Project Y. If Java itself is no going down that same road, it's no problem for me to look elsewhere so don't fret too much over this issue.

Thx.

yogthos commented 4 years ago

It appears to me that the issue is around the way the JVM works on freebsd, and specifically around the implementation of the LinuxWatchService method in the JVM distribution. So the issue is not really related to this project directly, but rather an issue with JVM compatibility across different platforms. I suspect that vast majority of people using Cryogen are Linux users, hence why this issue hasn't come up in the past. It sounds like freebsd is not a supported platform at the moment due to JVM incompatibility.

gotwf commented 4 years ago

I see. Would a MS Windows user also run into issues with "LinuxWatchService"? I am curious as, if so, then maybe warrants noting Linux as a requirement on cryogenweb.org

I'll use something else. Feel free to close this. Thx again. o/

yogthos commented 4 years ago

LinuxWatchService is JVM implementation specific implementation of WatchService interface in Java which is what's used here to do file watching. When last tried it on Windows it appeared to work with the underlying implementation, and I'm using it on MacOS right now as well without issues.

gotwf commented 4 years ago

Thx. I am moving on so no worries. I would be curious, however, if Cryogen has ever been tested on other unices, e.g. OpenSolaris. Peace.

yogthos commented 4 years ago

Just to be clear, the issue has nothing to do with Cryogen itself, but rather a bug in the JVM implementation on FreeBSD. Any JVM based app that uses the WatchService will run into the same problem. That said, I'm not sure what the state of the JVM runtimes is like on OpenSolaris. It works with Linux and MacOS kernels.

The issue I linked also mentions that it should be possible to add -Dsun.nio.fs.watchservice=polling JVM arg when running on FreeBSD. It'd be curious if that addresses it in your case, you could try it by adding the following line in project.clj after creating a new Cryogen project:

:jvm-opts ["-Dsun.nio.fs.watchservice=polling"]
gotwf commented 4 years ago

Thx. Done. This time lein run completes.

% lein ring server pukes thusly:

kvg@loon:~/Projects/Cryogen/my-blog.tld% lein ring server 2020-03-23 14:54:29.195:INFO::main: Logging initialized @1559ms loading module: Flexmark parser compiling assets... compiling sass copying theme resources themes/blue/css --> public/blog/css themes/blue/js --> public/blog/js themes/blue/html/404.html --> public/blog/404.html copying resources content/img --> public/blog/img content/md/posts --> public/blog/posts content/md/pages --> public/blog/pages compiling pages --> /blog/pages-output/about/ --> /blog/pages-output/another-page/ compiling posts --> /blog/posts-output/2016-01-07-docs/ --> /blog/posts-output/2014-11-04-second-post/ --> /blog/posts-output/2014-03-10-first-post/ compiling tags --> /blog/tags-output/cryogen/ --> /blog/tags-output/very fetch/ --> /blog/tags-output/not fetch/ compiling tags page compiling index compiling archives generating authors views compiling authors --> /blog/authors-output/Bob Bobbert/ generating site map generating main rss generating filtered rss --> /blog/cryogen.xml "Elapsed time: 895.622095 msecs" 2020-03-23 14:54:36.062:INFO:oejs.Server:main: jetty-9.2.21.v20170120 2020-03-23 14:54:36.082:INFO:oejs.ServerConnector:main: Started ServerConnector@6990aeaa{HTTP/1.1}{0.0.0.0:3000} 2020-03-23 14:54:36.082:INFO:oejs.Server:main: Started @8447ms Started server on port 3000 Exception in thread "main" Syntax error compiling at (/tmp/form-init2849132053454351607.clj:1:73). at clojure.lang.Compiler.load(Compiler.java:7647) at clojure.lang.Compiler.loadFile(Compiler.java:7573) at clojure.main$load_script.invokeStatic(main.clj:452) at clojure.main$init_opt.invokeStatic(main.clj:454) at clojure.main$init_opt.invoke(main.clj:454) at clojure.main$initialize.invokeStatic(main.clj:485) at clojure.main$null_opt.invokeStatic(main.clj:519) at clojure.main$null_opt.invoke(main.clj:516) at clojure.main$main.invokeStatic(main.clj:598) at clojure.main$main.doInvoke(main.clj:561) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.lang.Var.applyTo(Var.java:705) at clojure.main.main(main.java:37) Caused by: java.lang.UnsupportedOperationException: The BROWSE action is not supported on the current platform! at java.awt.Desktop.checkActionSupport(Desktop.java:221) at java.awt.Desktop.browse(Desktop.java:380) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:167) at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:102) at clojure.java.browse$open_url_in_browser.invokeStatic(browse.clj:52) at clojure.java.browse$browse_url.invokeStatic(browse.clj:74) at clojure.java.browse$browse_url.invoke(browse.clj:66) at ring.server.standalone$open_browser_to.invokeStatic(standalone.clj:38) at ring.server.standalone$open_browser_to.invoke(standalone.clj:37) at ring.server.standalone$serve$fn__4182.invoke(standalone.clj:107) at ring.server.standalone$try_port.invokeStatic(standalone.clj:16) at ring.server.standalone$try_port.invoke(standalone.clj:10) at ring.server.standalone$serve.invokeStatic(standalone.clj:100) at ring.server.standalone$serve.doInvoke(standalone.clj:75) at clojure.lang.RestFn.invoke(RestFn.java:423) at ring.server.leiningen$serve.invokeStatic(leiningen.clj:19) at ring.server.leiningen$serve.invoke(leiningen.clj:16) at user$eval12427.invokeStatic(form-init2849132053454351607.clj:1) at user$eval12427.invoke(form-init2849132053454351607.clj:1) at clojure.lang.Compiler.eval(Compiler.java:7176) at clojure.lang.Compiler.eval(Compiler.java:7166) at clojure.lang.Compiler.load(Compiler.java:7635) ... 12 more

Different from before and, again, likely FreeBSD platform issue. I am fine if you want to close the issue. I am also fine if, like me, you've a curious mind and interested in teasing out a bit more.

Please also feel free to change the title of this to something more appropriate.

Thanks again. Peace and stay healthy.

gotwf commented 4 years ago

Only as a data point for others who may cross this issue.

I just switched to config to test with asciidoc. This time lein run pukes thusly:

% lein run Retrieving cryogen-asciidoc/cryogen-asciidoc/0.1.2/cryogen-asciidoc-0.1.2.pom from clojars Retrieving cryogen-core/cryogen-core/0.1.25/cryogen-core-0.1.25.pom from clojars Retrieving clj-rss/clj-rss/0.2.0/clj-rss-0.2.0.pom from clojars Retrieving crouton/crouton/0.1.2/crouton-0.1.2.pom from clojars Retrieving org/jsoup/jsoup/1.7.1/jsoup-1.7.1.pom from central Retrieving cheshire/cheshire/5.5.0/cheshire-5.5.0.pom from clojars Retrieving com/fasterxml/jackson/core/jackson-core/2.5.3/jackson-core-2.5.3.pom from central Retrieving com/fasterxml/jackson/jackson-parent/2.5.1/jackson-parent-2.5.1.pom from central Retrieving com/fasterxml/oss-parent/19/oss-parent-19.pom from central Retrieving com/fasterxml/jackson/dataformat/jackson-dataformat-smile/2.5.3/jackson-dataformat-smile-2.5.3.pom from central Retrieving com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.5.3/jackson-dataformat-cbor-2.5.3.pom from central Retrieving io/aviso/pretty/0.1.18/pretty-0.1.18.pom from clojars Retrieving selmer/selmer/0.8.8/selmer-0.8.8.pom from clojars Retrieving joda-time/joda-time/2.8.1/joda-time-2.8.1.pom from central Retrieving pandect/pandect/0.5.2/pandect-0.5.2.pom from clojars Retrieving potemkin/potemkin/0.3.11/potemkin-0.3.11.pom from clojars Retrieving clj-tuple/clj-tuple/0.1.7/clj-tuple-0.1.7.pom from clojars Retrieving riddley/riddley/0.1.7/riddley-0.1.7.pom from clojars Retrieving org/bouncycastle/bcprov-jdk15on/1.51/bcprov-jdk15on-1.51.pom from central Retrieving clj-tagsoup/clj-tagsoup/0.3.0/clj-tagsoup-0.3.0.pom from clojars Retrieving org/clojure/data.xml/0.0.3/data.xml-0.0.3.pom from central Retrieving org/clojars/nathell/tagsoup/1.2.1/tagsoup-1.2.1.pom from clojars Retrieving net/java/dev/stax-utils/stax-utils/20040917/stax-utils-20040917.pom from central Retrieving org/asciidoctor/asciidoctorj/1.5.2/asciidoctorj-1.5.2.pom from central Retrieving org/jruby/jruby-complete/1.7.16.1/jruby-complete-1.7.16.1.pom from central Retrieving org/jruby/jruby-artifacts/1.7.16.1/jruby-artifacts-1.7.16.1.pom from central Retrieving org/jruby/jruby-parent/1.7.16.1/jruby-parent-1.7.16.1.pom from central Retrieving org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.pom from central Retrieving org/slf4j/slf4j-parent/1.7.7/slf4j-parent-1.7.7.pom from central Retrieving com/beust/jcommander/1.35/jcommander-1.35.pom from central Retrieving org/sonatype/oss/oss-parent/3/oss-parent-3.pom from central Retrieving org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.jar from central Retrieving com/beust/jcommander/1.35/jcommander-1.35.jar from central Retrieving org/jruby/jruby-complete/1.7.16.1/jruby-complete-1.7.16.1.jar from central Retrieving org/asciidoctor/asciidoctorj/1.5.2/asciidoctorj-1.5.2.jar from central Retrieving cryogen-asciidoc/cryogen-asciidoc/0.1.2/cryogen-asciidoc-0.1.2.jar from clojars loading module: AsciiDoc parser SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Exception in thread "main" Syntax error compiling at (core.clj:8:30). at clojure.lang.Compiler$StaticMethodExpr.eval(Compiler.java:1740) at clojure.lang.Compiler$DefExpr.eval(Compiler.java:457) at clojure.lang.Compiler.eval(Compiler.java:7181) at clojure.lang.Compiler.load(Compiler.java:7635) at clojure.lang.RT.loadResourceScript(RT.java:381) at clojure.lang.RT.loadResourceScript(RT.java:372) at clojure.lang.RT.load(RT.java:463) at clojure.lang.RT.load(RT.java:428) at clojure.core$load$fn6824.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn__6765.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.invoke(RestFn.java:408) at cryogen_core.plugins$load_plugin.invokeStatic(plugins.clj:9) at cryogen_core.plugins$load_plugin.invoke(plugins.clj:6) at cryogen_core.plugins$load_plugins.invokeStatic(plugins.clj:15) at cryogen_core.plugins$load_plugins.invoke(plugins.clj:12) at cryogen.core$_main.invokeStatic(core.clj:6) at cryogen.core$_main.invoke(core.clj:5) at clojure.lang.Var.invoke(Var.java:380) at user$eval140.invokeStatic(form-init349904441480860565.clj:1) at user$eval140.invoke(form-init349904441480860565.clj:1) at clojure.lang.Compiler.eval(Compiler.java:7176) at clojure.lang.Compiler.eval(Compiler.java:7166) at clojure.lang.Compiler.load(Compiler.java:7635) at clojure.lang.Compiler.loadFile(Compiler.java:7573) at clojure.main$load_script.invokeStatic(main.clj:452) at clojure.main$init_opt.invokeStatic(main.clj:454) at clojure.main$init_opt.invoke(main.clj:454) at clojure.main$initialize.invokeStatic(main.clj:485) at clojure.main$null_opt.invokeStatic(main.clj:519) at clojure.main$null_opt.invoke(main.clj:516) at clojure.main$main.invokeStatic(main.clj:598) at clojure.main$main.doInvoke(main.clj:561) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.lang.Var.applyTo(Var.java:705) at clojure.main.main(main.java:37) Caused by: org.jruby.exceptions.RaiseException: (Errno::ENOENT) /home/kvg/.gem/jruby/1.9 at org.jruby.RubyFileTest.file?(org/jruby/RubyFileTest.java:131) at RUBY.dirs(/usr/home/kvg/.m2/repository/org/jruby/jruby-complete/1.7.16.1/jruby-complete-1.7.16.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/defaults/jruby.rb:83) at org.jruby.RubyArray.collect(org/jruby/RubyArray.java:2407) at RUBY.dirs(/usr/home/kvg/.m2/repository/org/jruby/jruby-complete/1.7.16.1/jruby-complete-1.7.16.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/defaults/jruby.rb:82) at RUBY.stubs(/usr/home/kvg/.m2/repository/org/jruby/jruby-complete/1.7.16.1/jruby-complete-1.7.16.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/specification.rb:705) at RUBY.find_inactive_by_path(/usr/home/kvg/.m2/repository/org/jruby/jruby-complete/1.7.16.1/jruby-complete-1.7.16.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/specification.rb:897) at RUBY.try_activate(/usr/home/kvg/.m2/repository/org/jruby/jruby-complete/1.7.16.1/jruby-complete-1.7.16.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems.rb:183) at RUBY.require(/usr/home/kvg/.m2/repository/org/jruby/jruby-complete/1.7.16.1/jruby-complete-1.7.16.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:132) at RUBY.(root)( Githubissues.

  • Githubissues is a development platform for aggregating issues.