Giter Site home page Giter Site logo

erikvl87 / docker-languagetool Goto Github PK

View Code? Open in Web Editor NEW
419.0 419.0 57.0 100 KB

Dockerfile for LanguageTool server - configurable

Home Page: https://hub.docker.com/r/erikvl87/languagetool

License: GNU Lesser General Public License v2.1

Dockerfile 46.66% Shell 53.34%
docker dockerfile languagetool languagetool-server

docker-languagetool's People

Contributors

blizzy78 avatar dependabot-preview[bot] avatar dependabot[bot] avatar erikvl87 avatar etkecc avatar lsmith77 avatar notetiene avatar oggnimodd avatar oyale avatar peterdavehello avatar py-crash avatar thomas-mc-work avatar weisisheng avatar zeusdev02 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

docker-languagetool's Issues

Way too much IO

Hi,

I am not sure if it is the Docker setup or LT uses way too much IO. Here I ran "Iotop -a" for like 10 mins and you can see it already read like many GBs. This happens during the day all day, this is just a snapshot.

The thing is that this whole this time while consuming IO like this, the browser client thinks the server is dead or unaccessible. I am the only user with couple browser clients, I do not know why it needs to read hundreds of GBs a day so that it can complete couple words.

nxplayer bin_41vfB3xtbq

This is how I run it on Debian Testing x64


docker run  -d --name=languagetool \
        --restart unless-stopped \
        -e langtool_languageModel=/ngrams \
        -e Java_Xms=1000m \
        -e Java_Xmx=2000m \
        -v /media/docker/languagetool/ngram:/ngrams \
        -p 8010:8010 \
        erikvl87/languagetool


API error

When use /v2/world API to access server,I got some unexpected errors.When I set the apikey parameter or the username parameter to null, I get a 500 status code. This means that the server side parsed the values of these two parameters, but parsed them incorrectly. This creates a possible security issue, such as an injection. So I think the server should be more strict with the formatting of the parameters and not parse the special values, but return 4xx, indicating that the user has a request construction error.

API PATH

/v2/words

Method

GET

Can't release LanguageTool 5.2 due to unsecure command execution.

The following output is given by our Release Github Action:

Run echo "::set-env name=DOCKER_TAG::$(echo refs/tags/v5.2 | grep -oP '(?<=refs/tags/v).*')"
Error: Unable to process command '::set-env name=DOCKER_TAG::5.2' successfully.
Error: The `set-env` command is disabled. Please upgrade to using Environment Files or opt into unsecure command execution by setting the `ACTIONS_ALLOW_UNSECURE_COMMANDS` environment variable to `true`. For more information see: https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/

This blocks the release of the v5.2 docker container.

After the latest update the container throws an error and stops

Here is the relvant line from the logs:

languagetool | Caused by: java.lang.UnsatisfiedLinkError: Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /home/languagetool/.cache/JNA/temp/jna8961190279417234313.tmp)

Any more info I can supply?

II've been happily using your image for a couple of months and have set it to auto-update via watchtower so I know it stopped working after the last update.

Automatic POST every 30s

If I run the docker image, it does an automatic POST request every 30s.
I want to run the image on my Synology NAS and these POST request prevents the hard disks to go in hibernation state. I tried the image on my Windows machine with the same outcome.

If I run the LanguageTool server without the docker image on my Windows machine with java, there are no requests sent.

Screenshot 2022-06-25 134406

docker not working

The following configuration is passed to LanguageTool:

  • java -Xms256m -Xmx512m -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8010 --public --allow-origin '*' --config config.properties
    languageModel=/ngrams
    2021-01-15 21:48:36 -0800 INFO org.languagetool.server.DatabaseAccess Not setting up database access, dbDriver is not configured
    2021-01-16 05:48:36 +0000 WARNING: running in HTTP mode, consider running LanguageTool behind a reverse proxy that takes care of encryption (HTTPS)

2021-01-16 05:48:36 +0000 WARNING: running in public mode, LanguageTool API can be accessed without restrictions!

2021-01-16 05:48:37 +0000 Setting up thread pool with 10 threads
2021-01-16 05:48:37 +0000 Starting LanguageTool 5.2 (build date: 2020-12-30 14:55, eb572bf) server on http://localhost:8010...
2021-01-16 05:48:37 +0000 Server started
2021-01-15 21:48:44 -0800 ERROR org.languagetool.server.LanguageToolHttpHandler An error has occurred: 'This is the LanguageTool API. You have not specified any parameters. Please see https://languagetool.org/http-api/swagger-ui/#/default', sending HTTP code 400. Access from 192.168.1.10, HTTP user agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75, User agent param: null, Referrer: null, language: en-us, h: 1, r: 1, time: 2m: ALL, l: DEFAULT, Stacktrace follows:java.lang.IllegalArgumentException: This is the LanguageTool API. You have not specified any parameters. Please see https://languagetool.org/http-api/swagger-ui/#/default

at org.languagetool.server.LanguageToolHttpHandler.handle(LanguageToolHttpHandler.java:190)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)
at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)
at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

LanguageTool tests fail on version 5.2

After a 30 minute run where all tests seem to succeed, the test host process seems to crash with the following output:

2020-12-30 08:59:45 +0000 Stopping server...
2020-12-30 08:59:50 +0000 Server stopped
Error:  Failed to execute goal on project languagetool-office-extension: Could not resolve dependencies for project org.languagetool:languagetool-office-extension:jar:5.2: Failed to collect dependencies at org.openoffice:ridl:jar:4.1.2: Failed to read artifact descriptor for org.openoffice:ridl:jar:4.1.2: Could not transfer artifact org.openoffice:ridl:pom:4.1.2 from/to central (https://repo.maven.apache.org/maven2): Connection timed out (Read failed) -> [Help 1]
Error:  
Error:  To see the full stack trace of the errors, re-run Maven with the -e switch.
Error:  Re-run Maven using the -X switch to enable full debug logging.
Error:  
Error:  For more information about the errors and possible solutions, please read the following articles:
Error:  [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
Error:  
Error:  After correcting the problems, you can resume the build with the command
Error:    mvn <goals> -rf :languagetool-office-extension
Error: Process completed with exit code 1.

In previous successful runs, the output would be:

2020-10-15 18:37:55 +0000 Stopping server...
2020-10-15 18:38:00 +0000 Server stopped
Oct 15, 2020 6:53:39 PM org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute
INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://repo.maven.apache.org:443: Connection timed out (Read failed)
Oct 15, 2020 6:53:39 PM org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute
INFO: Retrying request to {s}->https://repo.maven.apache.org:443
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.
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.
Unexpected line format: expected three tab-separated columns: 'just a text', skipping
Running query: +fieldLowercase:move +fieldLowercase:/forth|back/
Check done in 121/8/109ms (LT creation/Lucene/matching) for 1 docs
Running query: +fieldLowercase:back +fieldLowercase:and +fieldLowercase:fourth
Check done in 2/1/72ms (LT creation/Lucene/matching) for 1 docs
Running query: +fieldLowercase:eye +fieldLowercase:/_lemma_(brow|lash|sight|sore|lid)/
Check done in 2/0/5ms (LT creation/Lucene/matching) for 1 docs
Running query: +fieldLowercase:all +fieldLowercase:over +fieldLowercase:the +fieldLowercase:word
Check done in 2/0/0ms (LT creation/Lucene/matching) for 0 docs
Running query: +fieldLowercase:how
Check done in 116/4/61ms (LT creation/Lucene/matching) for 1 docs
Running query: +fieldLowercase:move +fieldLowercase:back
Check done in 126/1/72ms (LT creation/Lucene/matching) for 1 docs
Running query: +fieldLowercase:bleed +fieldLowercase:' +fieldLowercase:s
Check done in 119/8/56ms (LT creation/Lucene/matching) for 1 docs
Running query: +fieldLowercase:bleed +fieldLowercase:' +fieldLowercase:x
Check done in 113/1/0ms (LT creation/Lucene/matching) for 0 docs
Running query: +fieldLowercase:move +fieldLowercase:/forth|back/
Check done in 124/1/58ms (LT creation/Lucene/matching) for 1 docs
Oct 15, 2020 6:54:34 PM com.carrotsearch.randomizedtesting.ThreadLeakControl checkThreadLeaks
WARNING: Will linger awaiting termination of 9 leaked thread(s).
Comparing result 1 (1 matches) to result 2 (1 matches), step 1
Comparing result 1 (1 matches) to result 2 (1 matches), step 2
Comparing result 1 (1 matches) to result 2 (1 matches), step 1
Comparing result 1 (1 matches) to result 2 (1 matches), step 2
Comparing result 1 (1 matches) to result 2 (0 matches), step 1
Comparing result 1 (1 matches) to result 2 (0 matches), step 2
Comparing result 1 (1 matches) to result 2 (1 matches), step 1
Comparing result 1 (1 matches) to result 2 (1 matches), step 2
Comparing result 1 (0 matches) to result 2 (1 matches), step 1
Comparing result 1 (0 matches) to result 2 (1 matches), step 2
Comparing result 1 (1 matches) to result 2 (1 matches), step 1
Comparing result 1 (1 matches) to result 2 (1 matches), step 2
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/LanguageDetectionMinLengthEval$DetectionException.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/LanguageDetectionMinLengthEval.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/LanguageDetectionTrainer.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/CLD2Identifier.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/RealWordCorpusEvaluatorTest.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/AfterTheDeadlineEvaluatorTest.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/LanguageDetectionEval.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/LanguageDetectionEval$DetectionException.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/LanguageDetectionEval2.class, does not match *.txt
Ignoring /languagetool/languagetool-dev/target/test-classes/org/languagetool/dev/eval/lang, does not match *.txt
  Position mismatch: 0-7 != 5-7

Crash using the ARM64 build with ngram configuration

Originally posted by @anetschka in #15 (comment)

Hi there, I have tried building the image with the supplied dockerfile and and arm64-workaround, using docker-compose. The only difference is that I added ngram data to a folder within my image. The image builds and the container starts up normally, but when I actually post (German) text to LanguageTool, it seems that Hunspell is still not properly initialised:

languagetoolservice_1 | java.io.IOException: Read-only file system languagetoolservice_1 | at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method) languagetoolservice_1 | at java.base/java.io.File.createTempFile(File.java:2129) languagetoolservice_1 | at java.base/java.io.File.createTempFile(File.java:2175) languagetoolservice_1 | at org.bridj.Platform.createTempDir(Platform.java:710) languagetoolservice_1 | at org.bridj.Platform.<clinit>(Platform.java:227) languagetoolservice_1 | at org.bridj.Pointer.<clinit>(Pointer.java:208) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.DumontsHunspellDictionary.<init>(DumontsHunspellDictionary.java:37) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.Hunspell.getDictionary(Hunspell.java:50) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.HunspellRule.init(HunspellRule.java:488) languagetoolservice_1 | at org.languagetool.rules.de.GermanSpellerRule.init(GermanSpellerRule.java:1244) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.HunspellRule.ensureInitialized(HunspellRule.java:462) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.HunspellRule.match(HunspellRule.java:155) languagetoolservice_1 | at org.languagetool.JLanguageTool.checkAnalyzedSentence(JLanguageTool.java:1295) languagetoolservice_1 | at org.languagetool.JLanguageTool$TextCheckCallable.getOtherRuleMatches(JLanguageTool.java:1846) languagetoolservice_1 | at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1765) languagetoolservice_1 | at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1736) languagetoolservice_1 | at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:1226) languagetoolservice_1 | at org.languagetool.JLanguageTool.checkInternal(JLanguageTool.java:970) languagetoolservice_1 | at org.languagetool.JLanguageTool.check2(JLanguageTool.java:908) languagetoolservice_1 | at org.languagetool.server.TextChecker.getPipelineResults(TextChecker.java:762) languagetoolservice_1 | at org.languagetool.server.TextChecker.getRuleMatches(TextChecker.java:711) languagetoolservice_1 | at org.languagetool.server.TextChecker.access$000(TextChecker.java:56) languagetoolservice_1 | at org.languagetool.server.TextChecker$1.call(TextChecker.java:427) languagetoolservice_1 | at org.languagetool.server.TextChecker$1.call(TextChecker.java:420) languagetoolservice_1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) languagetoolservice_1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) languagetoolservice_1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) languagetoolservice_1 | at java.base/java.lang.Thread.run(Thread.java:829) languagetoolservice_1 | 2021-11-19 17:11:26.422 +0000 ERROR org.languagetool.server.LanguageToolHttpHandler An error has occurred: 'java.lang.RuntimeException: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>Die Deutsche Bank kรผndigte den Abbau von 18.000 Stellen an.</sentcontent>, detected: de-DE', sending HTTP code 500. Access from 192.168.208.3, HTTP user agent: Python-urllib/3.8, User agent param: null, Referrer: null, language: de-DE, h: 1, r: 1, time: 5494text length: 59, m: ALL, l: DEFAULT, Stacktrace follows:java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>Die Deutsche Bank kรผndigte den Abbau von 18.000 Stellen an.</sentcontent>, detected: de-DE languagetoolservice_1 | at org.languagetool.server.TextChecker.checkText(TextChecker.java:457) languagetoolservice_1 | at org.languagetool.server.ApiV2.handleCheckRequest(ApiV2.java:162) languagetoolservice_1 | at org.languagetool.server.ApiV2.handleRequest(ApiV2.java:76) languagetoolservice_1 | at org.languagetool.server.LanguageToolHttpHandler.handle(LanguageToolHttpHandler.java:182) languagetoolservice_1 | at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77) languagetoolservice_1 | at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82) languagetoolservice_1 | at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80) languagetoolservice_1 | at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:692) languagetoolservice_1 | at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77) languagetoolservice_1 | at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:664) languagetoolservice_1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) languagetoolservice_1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) languagetoolservice_1 | at java.base/java.lang.Thread.run(Thread.java:829) languagetoolservice_1 | Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>Die Deutsche Bank kรผndigte den Abbau von 18.000 Stellen an.</sentcontent> languagetoolservice_1 | at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) languagetoolservice_1 | at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) languagetoolservice_1 | at org.languagetool.server.TextChecker.checkText(TextChecker.java:438) languagetoolservice_1 | ... 12 more languagetoolservice_1 | Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>Die Deutsche Bank kรผndigte den Abbau von 18.000 Stellen an.</sentcontent> languagetoolservice_1 | at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:1230) languagetoolservice_1 | at org.languagetool.JLanguageTool.checkInternal(JLanguageTool.java:970) languagetoolservice_1 | at org.languagetool.JLanguageTool.check2(JLanguageTool.java:908) languagetoolservice_1 | at org.languagetool.server.TextChecker.getPipelineResults(TextChecker.java:762) languagetoolservice_1 | at org.languagetool.server.TextChecker.getRuleMatches(TextChecker.java:711) languagetoolservice_1 | at org.languagetool.server.TextChecker.access$000(TextChecker.java:56) languagetoolservice_1 | at org.languagetool.server.TextChecker$1.call(TextChecker.java:427) languagetoolservice_1 | at org.languagetool.server.TextChecker$1.call(TextChecker.java:420) languagetoolservice_1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) languagetoolservice_1 | ... 3 more languagetoolservice_1 | Caused by: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>Die Deutsche Bank kรผndigte den Abbau von 18.000 Stellen an.</sentcontent> languagetoolservice_1 | at org.languagetool.JLanguageTool$TextCheckCallable.getOtherRuleMatches(JLanguageTool.java:1883) languagetoolservice_1 | at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1765) languagetoolservice_1 | at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1736) languagetoolservice_1 | at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:1226) languagetoolservice_1 | ... 11 more languagetoolservice_1 | Caused by: java.lang.RuntimeException: Could not create hunspell instance. Please note that LanguageTool supports only 64-bit platforms (Linux, Windows, Mac) and that it requires a 64-bit JVM (Java). languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.DumontsHunspellDictionary.<init>(DumontsHunspellDictionary.java:45) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.Hunspell.getDictionary(Hunspell.java:50) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.HunspellRule.init(HunspellRule.java:488) languagetoolservice_1 | at org.languagetool.rules.de.GermanSpellerRule.init(GermanSpellerRule.java:1244) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.HunspellRule.ensureInitialized(HunspellRule.java:462) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.HunspellRule.match(HunspellRule.java:155) languagetoolservice_1 | at org.languagetool.JLanguageTool.checkAnalyzedSentence(JLanguageTool.java:1295) languagetoolservice_1 | at org.languagetool.JLanguageTool$TextCheckCallable.getOtherRuleMatches(JLanguageTool.java:1846) languagetoolservice_1 | ... 14 more languagetoolservice_1 | Caused by: java.lang.UnsatisfiedLinkError: 'int org.bridj.Platform.sizeOf_ptrdiff_t()' languagetoolservice_1 | at org.bridj.Platform.sizeOf_ptrdiff_t(Native Method) languagetoolservice_1 | at org.bridj.Platform.<clinit>(Platform.java:232) languagetoolservice_1 | at org.bridj.Pointer.<clinit>(Pointer.java:208) languagetoolservice_1 | at org.languagetool.rules.spelling.hunspell.DumontsHunspellDictionary.<init>(DumontsHunspellDictionary.java:37) languagetoolservice_1 | ... 21 more languagetoolservice_1 |

Reduce Amount of Suggestions

On languagetool.org a maximum of 5 suggestions is returned via the api, but we sometimes get 80 or more from this container and our frontend is unable decide which ones are the best. Is there a way to limit the amount on server side?

With langtool_maxSpellingSuggestions no suggestions are returned at all when the limit is breached.

Thank you for your time.

Container is not receiving Ctrl-C signals

First of all, thank you for providing this Dockerfile. The app in the container is working well, however, it is not receiving signals (in particular, Ctrl-C is ignored), so it is not possible to shutdown the container. As a workaround, it is necessary to run docker stop <name> , which is not so convenient.

I was wondering if it is possible to change the way in which languagetool is launched so that the server can be shutdown gracefully after pressing Ctrl-C. I tried well-known approaches (e.g. adding --init to the docker run command or building the image using Tini), however, docker build . throws warnings for Illegal reflective access.

Just in case it is relevant, I'm following the most straightforward instructions on Ubuntu 22.04.1:

docker pull erikvl87/languagetool
docker run --rm -p 8010:8010 erikvl87/languagetool

Thanks

DetectedLanguage is incorrect

Even though I set the "language" body parameter to en-US, when I pass the same request body into the public LangTool api it correctly detects the language as English. However, passing the same request body to this docker instance, it returns the detected language as Tagalog and therefore misses lots of errors.

Version 5.3 and above always crash (fasttext)

erikvl87/languagetool:5.2 works fine:

The following configuration is passed to LanguageTool:
fasttextBinary=/fasttext/fasttext
fasttextModel=/fasttext/lid.176.bin
languageModel=/ngrams
+ java -Xms512m -Xmx2g -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8010 --public --allow-origin '*' --config config.properties
2021-10-15 21:53:06 +0000 INFO  org.languagetool.server.DatabaseAccess Not setting up database access, dbDriver is not configured
2021-10-15 21:53:06 +0000 WARNING: running in HTTP mode, consider running LanguageTool behind a reverse proxy that takes care of encryption (HTTPS)
2021-10-15 21:53:06 +0000 WARNING: running in public mode, LanguageTool API can be accessed without restrictions!
2021-10-15 21:53:07 +0000 INFO  org.languagetool.language.LanguageIdentifier Started fasttext process for language identification: Binary /fasttext/fasttext with model @ /fasttext/lid.176.bin
2021-10-15 21:53:07 +0000 Setting up thread pool with 10 threads
2021-10-15 21:53:07 +0000 Starting LanguageTool 5.2 (build date: 2020-12-30 14:55, eb572bf) server on http://localhost:8010...
2021-10-15 21:53:07 +0000 Server started

But newer versions already crash :(

fasttextBinary=/fasttext/fasttext
fasttextModel=/fasttext/lid.176.bin
languageModel=/ngrams
fasttextBinary=/fasttext/fasttext
fasttextModel=/fasttext/lid.176.bin
languageModel=/ngrams
fasttextBinary=/fasttext/fasttext
fasttextModel=/fasttext/lid.176.bin
languageModel=/ngrams
fasttextBinary=/fasttext/fasttext
fasttextModel=/fasttext/lid.176.bin
languageModel=/ngrams
fasttextBinary=/fasttext/fasttext
fasttextModel=/fasttext/lid.176.bin
languageModel=/ngrams
fasttextBinary=/fasttext/fasttext
fasttextModel=/fasttext/lid.176.bin
languageModel=/ngrams
fasttextBinary=/fasttext/fasttext
fasttextModel=/fasttext/lid.176.bin
languageModel=/ngrams
+ java -Xms512m -Xmx2g -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8010 --public --allow-origin '*' --config config.properties
2021-10-15 22:01:37.371 +0000 INFO  org.languagetool.server.DatabaseAccess Not setting up database access, dbDriver is not configured
2021-10-15 22:01:37 +0000 WARNING: running in HTTP mode, consider running LanguageTool behind a reverse proxy that takes care of encryption (HTTPS)
2021-10-15 22:01:37 +0000 WARNING: running in public mode, LanguageTool API can be accessed without restrictions!
Exception in thread "main" java.lang.RuntimeException: Could not start LanguageTool HTTP server on localhost, port 8010
	at org.languagetool.server.HTTPServer.main(HTTPServer.java:153)
Caused by: org.languagetool.server.PortBindingException: LanguageTool HTTP server could not be started on host "null", port 8010.
Maybe something else is running on that port already?
	at org.languagetool.server.HTTPServer.<init>(HTTPServer.java:119)
	at org.languagetool.server.HTTPServer.main(HTTPServer.java:147)
Caused by: java.lang.RuntimeException: Could not start fasttext process for language identification @ /fasttext/fasttext with model @ /fasttext/lid.176.bin
	at org.languagetool.language.LanguageIdentifier.enableFasttext(LanguageIdentifier.java:118)
	at org.languagetool.server.TextChecker.<init>(TextChecker.java:109)
	at org.languagetool.server.V2TextChecker.<init>(V2TextChecker.java:45)
	at org.languagetool.server.LanguageToolHttpHandler.<init>(LanguageToolHttpHandler.java:74)
	at org.languagetool.server.HTTPServer.<init>(HTTPServer.java:105)
	... 1 more
Caused by: java.io.IOException: Cannot run program "/fasttext/fasttext": error=2, No such file or directory
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
	at org.languagetool.language.FastText.<init>(FastText.java:43)
	at org.languagetool.language.LanguageIdentifier.enableFasttext(LanguageIdentifier.java:115)
	... 5 more
Caused by: java.io.IOException: error=2, No such file or directory
	at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
	at java.base/java.lang.ProcessBuilder.start(Process

I built fasttext from here and downloaded, probably, lid.176.bin from here.
My docker runner:

docker run -d --name="Languagetool" \
-p 8081:8010/tcp \
-e Java_Xms=512m \
-e Java_Xmx=2g \
-e langtool_languageModel=/ngrams \
-e langtool_fasttextModel=/fasttext/lid.176.bin \
-e langtool_fasttextBinary=/fasttext/fasttext \
-v "/mnt/hdd1/languagetool/ngrams":"/ngrams" \
-v "/mnt/hdd1/languagetool/fasttext":"/fasttext" \
--restart=unless-stopped \
erikvl87/languagetool:5.2

docker version:

Client:
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.8
 Git commit:        20.10.7-0ubuntu1~20.04.2
 Built:             Fri Oct  1 14:07:06 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.8
  Git commit:       20.10.7-0ubuntu1~20.04.2
  Built:            Fri Oct  1 03:27:17 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.5.2-0ubuntu1~20.04.3
  GitCommit:        
 runc:
  Version:          1.0.0~rc95-0ubuntu1~20.04.2
  GitCommit:        
 docker-init:
  Version:          0.19.0
  GitCommit:        

So, what am I doing wrong?

Error: codec footer mismatch

I'm running the provided docker-compose.yml file on my local system, with downloaded n-grams dataset.

---

version: "3"

services:
  languagetool:
    image: erikvl87/languagetool
    container_name: languagetool
    ports:
      - 8710:8010                        # Using default port from the image
    environment:
      - langtool_languageModel=/ngrams   # OPTIONAL: Using ngrams data
      - Java_Xms=2g                    # OPTIONAL: Setting a minimal Java heap size of 512 mib
      - Java_Xmx=4g                      # OPTIONAL: Setting a maximum Java heap size of 1 Gib
    volumes:
      - ./ngrams:/ngrams     # OPTIONAL: The location of ngrams data on the local machine

When trying out an API call to the check endpoint, i'm seeing the below given error.
API call:

curl --location --request POST 'http://localhost:8710/v2/check' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'text=<my text data>' \
--data-urlencode 'language=en-GB'

Error->

Error: Internal Error: java.lang.RuntimeException: org.apache.lucene.index.CorruptIndexException: codec footer mismatch (file truncated?): actual footer=0 vs expected footer=-1071082520 (resource=MMapIndexInput(path="/ngrams/en/3grams/_1e4_Lucene50_0.tim")), detected: en-US

Could use some guidance regarding diagnosing and resolving this issue.

Thanks.


Update:
When i comment out - langtool_languageModel=/ngrams, the API call goes through successfully.

Make available for armv7l

When trying to set up on an ARM device like Raspberry Pi, I get the notification:

ERROR: no matching manifest for linux/arm/v7 in the manifest list entries

Could you make it available for those widely used devices as well, please?
Appreciate your work nevertheless!

Personal dictionary not syncing across browsers

Is this feature supported by the docker image? If so, how do I activate it. All browsers using the same http link.

Related... the specific sites permitted for LT access differ between browsers.

Thanks for your help!

no arm build

Hey,

could you please add the arm64 build to the docker hub?

proper ngrams mounting?

Hi

Are we mounting the zip file, or unzip folder or "en" (for english) inside the zip folder, or the sub [1,2,3]grams folder inside that?

thanks

Error with 'Step 16/30 : RUN bash -c "./bridj.sh"'

I'm not sure if this is addressed elsewhere but I'm getting the following build error:

Processing triggers for libc-bin (2.28-10+deb10u2) ...
Cloning into '/BridJ'...
error: patch failed: BuildNative:29
error: BuildNative: patch does not apply
error: patch failed: pom.xml:87
error: pom.xml: patch does not apply
The command '/bin/sh -c bash -c "./bridj.sh"' returned a non-zero code: 1

Any advice on what is going on here would be great. Thanks!

Full install log:

Sending build context to Docker daemon  223.7kB
Step 1/30 : ARG LANGUAGETOOL_VERSION=5.9
Step 2/30 : FROM debian:buster as build
 ---> be82c627fbdb
Step 3/30 : ENV DEBIAN_FRONTEND=noninteractive
 ---> Using cache
 ---> a076375641d1
Step 4/30 : RUN apt-get update -y     && apt-get install -y     locales     bash     libgomp1     openjdk-11-jdk-headless     git     maven     unzip     xmlstarlet     && apt-get clean
 ---> Using cache
 ---> 0fec56666baa
Step 5/30 : RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen &&     dpkg-reconfigure --frontend=noninteractive locales &&     update-locale LANG=en_US.UTF-8
 ---> Using cache
 ---> 04efffe05191
Step 6/30 : ENV LANG en_US.UTF-8
 ---> Using cache
 ---> 3d711906bdce
Step 7/30 : ARG LANGUAGETOOL_VERSION
 ---> Using cache
 ---> 2f74eaceb2e3
Step 8/30 : RUN git clone https://github.com/languagetool-org/languagetool.git --depth 1 -b v${LANGUAGETOOL_VERSION}
 ---> Using cache
 ---> bb40481f1999
Step 9/30 : WORKDIR /languagetool
 ---> Using cache
 ---> c812b319be61
Step 10/30 : RUN ["mvn", "--projects", "languagetool-standalone", "--also-make", "package", "-DskipTests", "--quiet"]
 ---> Using cache
 ---> f79993b17272
Step 11/30 : RUN LANGUAGETOOL_DIST_VERSION=$(xmlstarlet sel -N "x=http://maven.apache.org/POM/4.0.0" -t -v "//x:project/x:properties/x:revision" pom.xml) && unzip /languagetool/languagetool-standalone/target/LanguageTool-${LANGUAGETOOL_DIST_VERSION}.zip -d /dist
 ---> Using cache
 ---> 958a0efd54ee
Step 12/30 : RUN LANGUAGETOOL_DIST_FOLDER=$(find /dist/ -name 'LanguageTool-*') && mv $LANGUAGETOOL_DIST_FOLDER /dist/LanguageTool
 ---> Using cache
 ---> 5e07b835c7fd
Step 13/30 : WORKDIR /
 ---> Using cache
 ---> 17fae86fab91
Step 14/30 : COPY arm64-workaround/. .
 ---> Using cache
 ---> 1b3140c03eff
Step 15/30 : RUN chmod +x ./bridj.sh ./hunspell.sh
 ---> Using cache
 ---> dbf1c4cea8af
Step 16/30 : RUN bash -c "./bridj.sh"
 ---> Running in c248f5d4b0c4
Applying arm64 workaround.
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  binutils binutils-aarch64-linux-gnu binutils-common bzip2 cpp cpp-8 dirmngr
  dpkg-dev fakeroot file g++ g++-8 gcc gcc-8 gnupg gnupg-l10n gnupg-utils gpg
  gpg-agent gpg-wks-client gpg-wks-server gpgconf gpgsm libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libassuan0
  libatomic1 libbinutils libc-dev-bin libc6-dev libcc1-0 libdpkg-perl
  libfakeroot libfile-fcntllock-perl libgcc-8-dev libisl19 libitm1 libksba8
  liblocale-gettext-perl liblsan0 libmagic-mgc libmagic1 libmpc3 libmpfr6
  libnpth0 libpython-stdlib libpython2-stdlib libpython2.7-minimal
  libpython2.7-stdlib libreadline7 libstdc++-8-dev libtsan0 libubsan1
  linux-libc-dev lsb-base make manpages manpages-dev mercurial-common
  mime-support pinentry-curses python python-minimal python2 python2-minimal
  python2.7 python2.7-minimal readline-common xz-utils
Suggested packages:
  binutils-doc bzip2-doc cpp-doc gcc-8-locales dbus-user-session
  libpam-systemd pinentry-gnome3 tor debian-keyring gcc-8-doc libstdc++6-8-dbg
  gcc-multilib autoconf automake libtool flex bison gdb gcc-doc libgcc1-dbg
  libgomp1-dbg libitm1-dbg libatomic1-dbg libasan5-dbg liblsan0-dbg
  libtsan0-dbg libubsan1-dbg libmpx2-dbg libquadmath0-dbg parcimonie
  xloadimage scdaemon glibc-doc bzr libstdc++-8-doc make-doc man-browser
  kdiff3 | kdiff3-qt | kompare | meld | tkcvs | mgdiff qct python-mysqldb
  python-openssl python-pygments wish pinentry-doc python-doc python-tk
  python2-doc python2.7-doc binfmt-support readline-doc
The following NEW packages will be installed:
  binutils binutils-aarch64-linux-gnu binutils-common build-essential bzip2
  cpp cpp-8 dirmngr dpkg-dev fakeroot file g++ g++-8 gcc gcc-8 gnupg
  gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf
  gpgsm libalgorithm-diff-perl libalgorithm-diff-xs-perl
  libalgorithm-merge-perl libasan5 libassuan0 libatomic1 libbinutils
  libc-dev-bin libc6-dev libcc1-0 libdpkg-perl libfakeroot
  libfile-fcntllock-perl libgcc-8-dev libisl19 libitm1 libksba8
  liblocale-gettext-perl liblsan0 libmagic-mgc libmagic1 libmpc3 libmpfr6
  libnpth0 libpython-stdlib libpython2-stdlib libpython2.7-minimal
  libpython2.7-stdlib libreadline7 libstdc++-8-dev libtsan0 libubsan1
  linux-libc-dev lsb-base make manpages manpages-dev mercurial
  mercurial-common mime-support pinentry-curses python python-minimal python2
  python2-minimal python2.7 python2.7-minimal readline-common wget xz-utils
  zip
0 upgraded, 75 newly installed, 0 to remove and 0 not upgraded.
Need to get 60.0 MB of archives.
After this operation, 218 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian buster/main arm64 libpython2.7-minimal arm64 2.7.16-2+deb10u1 [395 kB]
Get:2 http://deb.debian.org/debian buster/main arm64 python2.7-minimal arm64 2.7.16-2+deb10u1 [1,292 kB]
Get:3 http://deb.debian.org/debian buster/main arm64 python2-minimal arm64 2.7.16-1 [41.4 kB]
Get:4 http://deb.debian.org/debian buster/main arm64 python-minimal arm64 2.7.16-1 [21.0 kB]
Get:5 http://deb.debian.org/debian buster/main arm64 mime-support all 3.62 [37.2 kB]
Get:6 http://deb.debian.org/debian buster/main arm64 readline-common all 7.0-5 [70.6 kB]
Get:7 http://deb.debian.org/debian buster/main arm64 libreadline7 arm64 7.0-5 [134 kB]
Get:8 http://deb.debian.org/debian buster/main arm64 libpython2.7-stdlib arm64 2.7.16-2+deb10u1 [1,890 kB]
Get:9 http://deb.debian.org/debian buster/main arm64 python2.7 arm64 2.7.16-2+deb10u1 [305 kB]
Get:10 http://deb.debian.org/debian buster/main arm64 libpython2-stdlib arm64 2.7.16-1 [20.8 kB]
Get:11 http://deb.debian.org/debian buster/main arm64 libpython-stdlib arm64 2.7.16-1 [20.8 kB]
Get:12 http://deb.debian.org/debian buster/main arm64 python2 arm64 2.7.16-1 [41.6 kB]
Get:13 http://deb.debian.org/debian buster/main arm64 python arm64 2.7.16-1 [22.8 kB]
Get:14 http://deb.debian.org/debian buster/main arm64 liblocale-gettext-perl arm64 1.07-3+b4 [18.8 kB]
Get:15 http://deb.debian.org/debian-security buster/updates/main arm64 bzip2 arm64 1.0.6-9.2~deb10u2 [47.8 kB]
Get:16 http://deb.debian.org/debian buster/main arm64 libmagic-mgc arm64 1:5.35-4+deb10u2 [242 kB]
Get:17 http://deb.debian.org/debian buster/main arm64 libmagic1 arm64 1:5.35-4+deb10u2 [115 kB]
Get:18 http://deb.debian.org/debian buster/main arm64 file arm64 1:5.35-4+deb10u2 [66.5 kB]
Get:19 http://deb.debian.org/debian buster/main arm64 manpages all 4.16-2 [1,295 kB]
Get:20 http://deb.debian.org/debian buster/main arm64 wget arm64 1.20.1-1.1 [888 kB]
Get:21 http://deb.debian.org/debian buster/main arm64 xz-utils arm64 5.2.4-1+deb10u1 [182 kB]
Get:22 http://deb.debian.org/debian buster/main arm64 binutils-common arm64 2.31.1-16 [2,073 kB]
Get:23 http://deb.debian.org/debian buster/main arm64 libbinutils arm64 2.31.1-16 [455 kB]
Get:24 http://deb.debian.org/debian buster/main arm64 binutils-aarch64-linux-gnu arm64 2.31.1-16 [2,129 kB]
Get:25 http://deb.debian.org/debian buster/main arm64 binutils arm64 2.31.1-16 [56.7 kB]
Get:26 http://deb.debian.org/debian-security buster/updates/main arm64 libc-dev-bin arm64 2.28-10+deb10u2 [271 kB]
Get:27 http://deb.debian.org/debian-security buster/updates/main arm64 linux-libc-dev arm64 4.19.260-1 [1,522 kB]
Get:28 http://deb.debian.org/debian-security buster/updates/main arm64 libc6-dev arm64 2.28-10+deb10u2 [2,325 kB]
Get:29 http://deb.debian.org/debian buster/main arm64 libisl19 arm64 0.20-2 [535 kB]
Get:30 http://deb.debian.org/debian buster/main arm64 libmpfr6 arm64 4.0.2-1 [746 kB]
Get:31 http://deb.debian.org/debian buster/main arm64 libmpc3 arm64 1.1.0-1 [38.0 kB]
Get:32 http://deb.debian.org/debian buster/main arm64 cpp-8 arm64 8.3.0-6 [7,400 kB]
Get:33 http://deb.debian.org/debian buster/main arm64 cpp arm64 4:8.3.0-1 [19.4 kB]
Get:34 http://deb.debian.org/debian buster/main arm64 libcc1-0 arm64 8.3.0-6 [45.0 kB]
Get:35 http://deb.debian.org/debian buster/main arm64 libitm1 arm64 8.3.0-6 [24.0 kB]
Get:36 http://deb.debian.org/debian buster/main arm64 libatomic1 arm64 8.3.0-6 [8,820 B]
Get:37 http://deb.debian.org/debian buster/main arm64 libasan5 arm64 8.3.0-6 [327 kB]
Get:38 http://deb.debian.org/debian buster/main arm64 liblsan0 arm64 8.3.0-6 [118 kB]
Get:39 http://deb.debian.org/debian buster/main arm64 libtsan0 arm64 8.3.0-6 [262 kB]
Get:40 http://deb.debian.org/debian buster/main arm64 libubsan1 arm64 8.3.0-6 [111 kB]
Get:41 http://deb.debian.org/debian buster/main arm64 libgcc-8-dev arm64 8.3.0-6 [835 kB]
Get:42 http://deb.debian.org/debian buster/main arm64 gcc-8 arm64 8.3.0-6 [7,879 kB]
Get:43 http://deb.debian.org/debian buster/main arm64 gcc arm64 4:8.3.0-1 [5,212 B]
Get:44 http://deb.debian.org/debian buster/main arm64 libstdc++-8-dev arm64 8.3.0-6 [1,502 kB]
Get:45 http://deb.debian.org/debian buster/main arm64 g++-8 arm64 8.3.0-6 [8,176 kB]
Get:46 http://deb.debian.org/debian buster/main arm64 g++ arm64 4:8.3.0-1 [1,624 B]
Get:47 http://deb.debian.org/debian buster/main arm64 make arm64 4.2.1-1.2 [333 kB]
Get:48 http://deb.debian.org/debian buster/main arm64 libdpkg-perl all 1.19.8 [1,415 kB]
Get:49 http://deb.debian.org/debian buster/main arm64 dpkg-dev all 1.19.8 [1,776 kB]
Get:50 http://deb.debian.org/debian buster/main arm64 build-essential arm64 12.6 [7,576 B]
Get:51 http://deb.debian.org/debian buster/main arm64 libassuan0 arm64 2.5.2-1 [47.1 kB]
Get:52 http://deb.debian.org/debian buster/main arm64 gpgconf arm64 2.2.12-1+deb10u2 [504 kB]
Get:53 http://deb.debian.org/debian buster/main arm64 lsb-base all 10.2019051400 [28.4 kB]
Get:54 http://deb.debian.org/debian-security buster/updates/main arm64 libksba8 arm64 1.3.5-2+deb10u1 [96.5 kB]
Get:55 http://deb.debian.org/debian buster/main arm64 libnpth0 arm64 1.6-1 [17.6 kB]
Get:56 http://deb.debian.org/debian buster/main arm64 dirmngr arm64 2.2.12-1+deb10u2 [694 kB]
Get:57 http://deb.debian.org/debian buster/main arm64 libfakeroot arm64 1.23-1 [42.1 kB]
Get:58 http://deb.debian.org/debian buster/main arm64 fakeroot arm64 1.23-1 [83.3 kB]
Get:59 http://deb.debian.org/debian buster/main arm64 gnupg-l10n all 2.2.12-1+deb10u2 [1,009 kB]
Get:60 http://deb.debian.org/debian buster/main arm64 gnupg-utils arm64 2.2.12-1+deb10u2 [824 kB]
Get:61 http://deb.debian.org/debian buster/main arm64 gpg arm64 2.2.12-1+deb10u2 [827 kB]
Get:62 http://deb.debian.org/debian buster/main arm64 pinentry-curses arm64 1.1.0-2 [62.7 kB]
Get:63 http://deb.debian.org/debian buster/main arm64 gpg-agent arm64 2.2.12-1+deb10u2 [601 kB]
Get:64 http://deb.debian.org/debian buster/main arm64 gpg-wks-client arm64 2.2.12-1+deb10u2 [478 kB]
Get:65 http://deb.debian.org/debian buster/main arm64 gpg-wks-server arm64 2.2.12-1+deb10u2 [472 kB]
Get:66 http://deb.debian.org/debian buster/main arm64 gpgsm arm64 2.2.12-1+deb10u2 [586 kB]
Get:67 http://deb.debian.org/debian buster/main arm64 gnupg all 2.2.12-1+deb10u2 [715 kB]
Get:68 http://deb.debian.org/debian buster/main arm64 libalgorithm-diff-perl all 1.19.03-2 [47.9 kB]
Get:69 http://deb.debian.org/debian buster/main arm64 libalgorithm-diff-xs-perl arm64 0.04-5+b1 [11.6 kB]
Get:70 http://deb.debian.org/debian buster/main arm64 libalgorithm-merge-perl all 0.08-3 [12.7 kB]
Get:71 http://deb.debian.org/debian buster/main arm64 libfile-fcntllock-perl arm64 0.22-3+b5 [35.5 kB]
Get:72 http://deb.debian.org/debian buster/main arm64 manpages-dev all 4.16-2 [2,232 kB]
Get:73 http://deb.debian.org/debian buster/main arm64 mercurial-common all 4.8.2-1+deb10u1 [2,523 kB]
Get:74 http://deb.debian.org/debian buster/main arm64 mercurial arm64 4.8.2-1+deb10u1 [283 kB]
Get:75 http://deb.debian.org/debian buster/main arm64 zip arm64 3.0-11+b1 [225 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 60.0 MB in 6s (9,525 kB/s)
Selecting previously unselected package libpython2.7-minimal:arm64.
(Reading database ... 13919 files and directories currently installed.)
Preparing to unpack .../00-libpython2.7-minimal_2.7.16-2+deb10u1_arm64.deb ...
Unpacking libpython2.7-minimal:arm64 (2.7.16-2+deb10u1) ...
Selecting previously unselected package python2.7-minimal.
Preparing to unpack .../01-python2.7-minimal_2.7.16-2+deb10u1_arm64.deb ...
Unpacking python2.7-minimal (2.7.16-2+deb10u1) ...
Selecting previously unselected package python2-minimal.
Preparing to unpack .../02-python2-minimal_2.7.16-1_arm64.deb ...
Unpacking python2-minimal (2.7.16-1) ...
Selecting previously unselected package python-minimal.
Preparing to unpack .../03-python-minimal_2.7.16-1_arm64.deb ...
Unpacking python-minimal (2.7.16-1) ...
Selecting previously unselected package mime-support.
Preparing to unpack .../04-mime-support_3.62_all.deb ...
Unpacking mime-support (3.62) ...
Selecting previously unselected package readline-common.
Preparing to unpack .../05-readline-common_7.0-5_all.deb ...
Unpacking readline-common (7.0-5) ...
Selecting previously unselected package libreadline7:arm64.
Preparing to unpack .../06-libreadline7_7.0-5_arm64.deb ...
Unpacking libreadline7:arm64 (7.0-5) ...
Selecting previously unselected package libpython2.7-stdlib:arm64.
Preparing to unpack .../07-libpython2.7-stdlib_2.7.16-2+deb10u1_arm64.deb ...
Unpacking libpython2.7-stdlib:arm64 (2.7.16-2+deb10u1) ...
Selecting previously unselected package python2.7.
Preparing to unpack .../08-python2.7_2.7.16-2+deb10u1_arm64.deb ...
Unpacking python2.7 (2.7.16-2+deb10u1) ...
Selecting previously unselected package libpython2-stdlib:arm64.
Preparing to unpack .../09-libpython2-stdlib_2.7.16-1_arm64.deb ...
Unpacking libpython2-stdlib:arm64 (2.7.16-1) ...
Selecting previously unselected package libpython-stdlib:arm64.
Preparing to unpack .../10-libpython-stdlib_2.7.16-1_arm64.deb ...
Unpacking libpython-stdlib:arm64 (2.7.16-1) ...
Setting up libpython2.7-minimal:arm64 (2.7.16-2+deb10u1) ...
Setting up python2.7-minimal (2.7.16-2+deb10u1) ...
Setting up python2-minimal (2.7.16-1) ...
Selecting previously unselected package python2.
(Reading database ... 14727 files and directories currently installed.)
Preparing to unpack .../python2_2.7.16-1_arm64.deb ...
Unpacking python2 (2.7.16-1) ...
Setting up python-minimal (2.7.16-1) ...
Selecting previously unselected package python.
(Reading database ... 14760 files and directories currently installed.)
Preparing to unpack .../00-python_2.7.16-1_arm64.deb ...
Unpacking python (2.7.16-1) ...
Selecting previously unselected package liblocale-gettext-perl.
Preparing to unpack .../01-liblocale-gettext-perl_1.07-3+b4_arm64.deb ...
Unpacking liblocale-gettext-perl (1.07-3+b4) ...
Selecting previously unselected package bzip2.
Preparing to unpack .../02-bzip2_1.0.6-9.2~deb10u2_arm64.deb ...
Unpacking bzip2 (1.0.6-9.2~deb10u2) ...
Selecting previously unselected package libmagic-mgc.
Preparing to unpack .../03-libmagic-mgc_1%3a5.35-4+deb10u2_arm64.deb ...
Unpacking libmagic-mgc (1:5.35-4+deb10u2) ...
Selecting previously unselected package libmagic1:arm64.
Preparing to unpack .../04-libmagic1_1%3a5.35-4+deb10u2_arm64.deb ...
Unpacking libmagic1:arm64 (1:5.35-4+deb10u2) ...
Selecting previously unselected package file.
Preparing to unpack .../05-file_1%3a5.35-4+deb10u2_arm64.deb ...
Unpacking file (1:5.35-4+deb10u2) ...
Selecting previously unselected package manpages.
Preparing to unpack .../06-manpages_4.16-2_all.deb ...
Unpacking manpages (4.16-2) ...
Selecting previously unselected package wget.
Preparing to unpack .../07-wget_1.20.1-1.1_arm64.deb ...
Unpacking wget (1.20.1-1.1) ...
Selecting previously unselected package xz-utils.
Preparing to unpack .../08-xz-utils_5.2.4-1+deb10u1_arm64.deb ...
Unpacking xz-utils (5.2.4-1+deb10u1) ...
Selecting previously unselected package binutils-common:arm64.
Preparing to unpack .../09-binutils-common_2.31.1-16_arm64.deb ...
Unpacking binutils-common:arm64 (2.31.1-16) ...
Selecting previously unselected package libbinutils:arm64.
Preparing to unpack .../10-libbinutils_2.31.1-16_arm64.deb ...
Unpacking libbinutils:arm64 (2.31.1-16) ...
Selecting previously unselected package binutils-aarch64-linux-gnu.
Preparing to unpack .../11-binutils-aarch64-linux-gnu_2.31.1-16_arm64.deb ...
Unpacking binutils-aarch64-linux-gnu (2.31.1-16) ...
Selecting previously unselected package binutils.
Preparing to unpack .../12-binutils_2.31.1-16_arm64.deb ...
Unpacking binutils (2.31.1-16) ...
Selecting previously unselected package libc-dev-bin.
Preparing to unpack .../13-libc-dev-bin_2.28-10+deb10u2_arm64.deb ...
Unpacking libc-dev-bin (2.28-10+deb10u2) ...
Selecting previously unselected package linux-libc-dev:arm64.
Preparing to unpack .../14-linux-libc-dev_4.19.260-1_arm64.deb ...
Unpacking linux-libc-dev:arm64 (4.19.260-1) ...
Selecting previously unselected package libc6-dev:arm64.
Preparing to unpack .../15-libc6-dev_2.28-10+deb10u2_arm64.deb ...
Unpacking libc6-dev:arm64 (2.28-10+deb10u2) ...
Selecting previously unselected package libisl19:arm64.
Preparing to unpack .../16-libisl19_0.20-2_arm64.deb ...
Unpacking libisl19:arm64 (0.20-2) ...
Selecting previously unselected package libmpfr6:arm64.
Preparing to unpack .../17-libmpfr6_4.0.2-1_arm64.deb ...
Unpacking libmpfr6:arm64 (4.0.2-1) ...
Selecting previously unselected package libmpc3:arm64.
Preparing to unpack .../18-libmpc3_1.1.0-1_arm64.deb ...
Unpacking libmpc3:arm64 (1.1.0-1) ...
Selecting previously unselected package cpp-8.
Preparing to unpack .../19-cpp-8_8.3.0-6_arm64.deb ...
Unpacking cpp-8 (8.3.0-6) ...
Selecting previously unselected package cpp.
Preparing to unpack .../20-cpp_4%3a8.3.0-1_arm64.deb ...
Unpacking cpp (4:8.3.0-1) ...
Selecting previously unselected package libcc1-0:arm64.
Preparing to unpack .../21-libcc1-0_8.3.0-6_arm64.deb ...
Unpacking libcc1-0:arm64 (8.3.0-6) ...
Selecting previously unselected package libitm1:arm64.
Preparing to unpack .../22-libitm1_8.3.0-6_arm64.deb ...
Unpacking libitm1:arm64 (8.3.0-6) ...
Selecting previously unselected package libatomic1:arm64.
Preparing to unpack .../23-libatomic1_8.3.0-6_arm64.deb ...
Unpacking libatomic1:arm64 (8.3.0-6) ...
Selecting previously unselected package libasan5:arm64.
Preparing to unpack .../24-libasan5_8.3.0-6_arm64.deb ...
Unpacking libasan5:arm64 (8.3.0-6) ...
Selecting previously unselected package liblsan0:arm64.
Preparing to unpack .../25-liblsan0_8.3.0-6_arm64.deb ...
Unpacking liblsan0:arm64 (8.3.0-6) ...
Selecting previously unselected package libtsan0:arm64.
Preparing to unpack .../26-libtsan0_8.3.0-6_arm64.deb ...
Unpacking libtsan0:arm64 (8.3.0-6) ...
Selecting previously unselected package libubsan1:arm64.
Preparing to unpack .../27-libubsan1_8.3.0-6_arm64.deb ...
Unpacking libubsan1:arm64 (8.3.0-6) ...
Selecting previously unselected package libgcc-8-dev:arm64.
Preparing to unpack .../28-libgcc-8-dev_8.3.0-6_arm64.deb ...
Unpacking libgcc-8-dev:arm64 (8.3.0-6) ...
Selecting previously unselected package gcc-8.
Preparing to unpack .../29-gcc-8_8.3.0-6_arm64.deb ...
Unpacking gcc-8 (8.3.0-6) ...
Selecting previously unselected package gcc.
Preparing to unpack .../30-gcc_4%3a8.3.0-1_arm64.deb ...
Unpacking gcc (4:8.3.0-1) ...
Selecting previously unselected package libstdc++-8-dev:arm64.
Preparing to unpack .../31-libstdc++-8-dev_8.3.0-6_arm64.deb ...
Unpacking libstdc++-8-dev:arm64 (8.3.0-6) ...
Selecting previously unselected package g++-8.
Preparing to unpack .../32-g++-8_8.3.0-6_arm64.deb ...
Unpacking g++-8 (8.3.0-6) ...
Selecting previously unselected package g++.
Preparing to unpack .../33-g++_4%3a8.3.0-1_arm64.deb ...
Unpacking g++ (4:8.3.0-1) ...
Selecting previously unselected package make.
Preparing to unpack .../34-make_4.2.1-1.2_arm64.deb ...
Unpacking make (4.2.1-1.2) ...
Selecting previously unselected package libdpkg-perl.
Preparing to unpack .../35-libdpkg-perl_1.19.8_all.deb ...
Unpacking libdpkg-perl (1.19.8) ...
Selecting previously unselected package dpkg-dev.
Preparing to unpack .../36-dpkg-dev_1.19.8_all.deb ...
Unpacking dpkg-dev (1.19.8) ...
Selecting previously unselected package build-essential.
Preparing to unpack .../37-build-essential_12.6_arm64.deb ...
Unpacking build-essential (12.6) ...
Selecting previously unselected package libassuan0:arm64.
Preparing to unpack .../38-libassuan0_2.5.2-1_arm64.deb ...
Unpacking libassuan0:arm64 (2.5.2-1) ...
Selecting previously unselected package gpgconf.
Preparing to unpack .../39-gpgconf_2.2.12-1+deb10u2_arm64.deb ...
Unpacking gpgconf (2.2.12-1+deb10u2) ...
Selecting previously unselected package lsb-base.
Preparing to unpack .../40-lsb-base_10.2019051400_all.deb ...
Unpacking lsb-base (10.2019051400) ...
Selecting previously unselected package libksba8:arm64.
Preparing to unpack .../41-libksba8_1.3.5-2+deb10u1_arm64.deb ...
Unpacking libksba8:arm64 (1.3.5-2+deb10u1) ...
Selecting previously unselected package libnpth0:arm64.
Preparing to unpack .../42-libnpth0_1.6-1_arm64.deb ...
Unpacking libnpth0:arm64 (1.6-1) ...
Selecting previously unselected package dirmngr.
Preparing to unpack .../43-dirmngr_2.2.12-1+deb10u2_arm64.deb ...
Unpacking dirmngr (2.2.12-1+deb10u2) ...
Selecting previously unselected package libfakeroot:arm64.
Preparing to unpack .../44-libfakeroot_1.23-1_arm64.deb ...
Unpacking libfakeroot:arm64 (1.23-1) ...
Selecting previously unselected package fakeroot.
Preparing to unpack .../45-fakeroot_1.23-1_arm64.deb ...
Unpacking fakeroot (1.23-1) ...
Selecting previously unselected package gnupg-l10n.
Preparing to unpack .../46-gnupg-l10n_2.2.12-1+deb10u2_all.deb ...
Unpacking gnupg-l10n (2.2.12-1+deb10u2) ...
Selecting previously unselected package gnupg-utils.
Preparing to unpack .../47-gnupg-utils_2.2.12-1+deb10u2_arm64.deb ...
Unpacking gnupg-utils (2.2.12-1+deb10u2) ...
Selecting previously unselected package gpg.
Preparing to unpack .../48-gpg_2.2.12-1+deb10u2_arm64.deb ...
Unpacking gpg (2.2.12-1+deb10u2) ...
Selecting previously unselected package pinentry-curses.
Preparing to unpack .../49-pinentry-curses_1.1.0-2_arm64.deb ...
Unpacking pinentry-curses (1.1.0-2) ...
Selecting previously unselected package gpg-agent.
Preparing to unpack .../50-gpg-agent_2.2.12-1+deb10u2_arm64.deb ...
Unpacking gpg-agent (2.2.12-1+deb10u2) ...
Selecting previously unselected package gpg-wks-client.
Preparing to unpack .../51-gpg-wks-client_2.2.12-1+deb10u2_arm64.deb ...
Unpacking gpg-wks-client (2.2.12-1+deb10u2) ...
Selecting previously unselected package gpg-wks-server.
Preparing to unpack .../52-gpg-wks-server_2.2.12-1+deb10u2_arm64.deb ...
Unpacking gpg-wks-server (2.2.12-1+deb10u2) ...
Selecting previously unselected package gpgsm.
Preparing to unpack .../53-gpgsm_2.2.12-1+deb10u2_arm64.deb ...
Unpacking gpgsm (2.2.12-1+deb10u2) ...
Selecting previously unselected package gnupg.
Preparing to unpack .../54-gnupg_2.2.12-1+deb10u2_all.deb ...
Unpacking gnupg (2.2.12-1+deb10u2) ...
Selecting previously unselected package libalgorithm-diff-perl.
Preparing to unpack .../55-libalgorithm-diff-perl_1.19.03-2_all.deb ...
Unpacking libalgorithm-diff-perl (1.19.03-2) ...
Selecting previously unselected package libalgorithm-diff-xs-perl.
Preparing to unpack .../56-libalgorithm-diff-xs-perl_0.04-5+b1_arm64.deb ...
Unpacking libalgorithm-diff-xs-perl (0.04-5+b1) ...
Selecting previously unselected package libalgorithm-merge-perl.
Preparing to unpack .../57-libalgorithm-merge-perl_0.08-3_all.deb ...
Unpacking libalgorithm-merge-perl (0.08-3) ...
Selecting previously unselected package libfile-fcntllock-perl.
Preparing to unpack .../58-libfile-fcntllock-perl_0.22-3+b5_arm64.deb ...
Unpacking libfile-fcntllock-perl (0.22-3+b5) ...
Selecting previously unselected package manpages-dev.
Preparing to unpack .../59-manpages-dev_4.16-2_all.deb ...
Unpacking manpages-dev (4.16-2) ...
Selecting previously unselected package mercurial-common.
Preparing to unpack .../60-mercurial-common_4.8.2-1+deb10u1_all.deb ...
Unpacking mercurial-common (4.8.2-1+deb10u1) ...
Selecting previously unselected package mercurial.
Preparing to unpack .../61-mercurial_4.8.2-1+deb10u1_arm64.deb ...
Unpacking mercurial (4.8.2-1+deb10u1) ...
Selecting previously unselected package zip.
Preparing to unpack .../62-zip_3.0-11+b1_arm64.deb ...
Unpacking zip (3.0-11+b1) ...
Setting up libksba8:arm64 (1.3.5-2+deb10u1) ...
Setting up lsb-base (10.2019051400) ...
Setting up mime-support (3.62) ...
Setting up wget (1.20.1-1.1) ...
Setting up libmagic-mgc (1:5.35-4+deb10u2) ...
Setting up libfile-fcntllock-perl (0.22-3+b5) ...
Setting up libalgorithm-diff-perl (1.19.03-2) ...
Setting up manpages (4.16-2) ...
Setting up binutils-common:arm64 (2.31.1-16) ...
Setting up libmagic1:arm64 (1:5.35-4+deb10u2) ...
Setting up linux-libc-dev:arm64 (4.19.260-1) ...
Setting up libnpth0:arm64 (1.6-1) ...
Setting up file (1:5.35-4+deb10u2) ...
Setting up libassuan0:arm64 (2.5.2-1) ...
Setting up bzip2 (1.0.6-9.2~deb10u2) ...
Setting up libfakeroot:arm64 (1.23-1) ...
Setting up fakeroot (1.23-1) ...
update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode
Setting up libasan5:arm64 (8.3.0-6) ...
Setting up zip (3.0-11+b1) ...
Setting up make (4.2.1-1.2) ...
Setting up libmpfr6:arm64 (4.0.2-1) ...
Setting up gnupg-l10n (2.2.12-1+deb10u2) ...
Setting up xz-utils (5.2.4-1+deb10u1) ...
update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode
Setting up libmpc3:arm64 (1.1.0-1) ...
Setting up libatomic1:arm64 (8.3.0-6) ...
Setting up libdpkg-perl (1.19.8) ...
Setting up libubsan1:arm64 (8.3.0-6) ...
Setting up libisl19:arm64 (0.20-2) ...
Setting up libbinutils:arm64 (2.31.1-16) ...
Setting up cpp-8 (8.3.0-6) ...
Setting up libc-dev-bin (2.28-10+deb10u2) ...
Setting up libalgorithm-diff-xs-perl (0.04-5+b1) ...
Setting up readline-common (7.0-5) ...
Setting up libcc1-0:arm64 (8.3.0-6) ...
Setting up liblocale-gettext-perl (1.07-3+b4) ...
Setting up liblsan0:arm64 (8.3.0-6) ...
Setting up libitm1:arm64 (8.3.0-6) ...
Setting up libreadline7:arm64 (7.0-5) ...
Setting up libalgorithm-merge-perl (0.08-3) ...
Setting up gnupg-utils (2.2.12-1+deb10u2) ...
Setting up libtsan0:arm64 (8.3.0-6) ...
Setting up pinentry-curses (1.1.0-2) ...
Setting up manpages-dev (4.16-2) ...
Setting up binutils-aarch64-linux-gnu (2.31.1-16) ...
Setting up binutils (2.31.1-16) ...
Setting up dpkg-dev (1.19.8) ...
Setting up libpython2.7-stdlib:arm64 (2.7.16-2+deb10u1) ...
Setting up libgcc-8-dev:arm64 (8.3.0-6) ...
Setting up cpp (4:8.3.0-1) ...
Setting up gpgconf (2.2.12-1+deb10u2) ...
Setting up libc6-dev:arm64 (2.28-10+deb10u2) ...
Setting up gpg (2.2.12-1+deb10u2) ...
Setting up libstdc++-8-dev:arm64 (8.3.0-6) ...
Setting up gcc-8 (8.3.0-6) ...
Setting up gpg-agent (2.2.12-1+deb10u2) ...
Setting up python2.7 (2.7.16-2+deb10u1) ...
Setting up libpython2-stdlib:arm64 (2.7.16-1) ...
Setting up gpgsm (2.2.12-1+deb10u2) ...
Setting up python2 (2.7.16-1) ...
Setting up gcc (4:8.3.0-1) ...
Setting up dirmngr (2.2.12-1+deb10u2) ...
Setting up libpython-stdlib:arm64 (2.7.16-1) ...
Setting up gpg-wks-server (2.2.12-1+deb10u2) ...
Setting up g++-8 (8.3.0-6) ...
Setting up python (2.7.16-1) ...
Setting up gpg-wks-client (2.2.12-1+deb10u2) ...
Setting up mercurial-common (4.8.2-1+deb10u1) ...
Setting up g++ (4:8.3.0-1) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
Setting up gnupg (2.2.12-1+deb10u2) ...
Setting up build-essential (12.6) ...
Setting up mercurial (4.8.2-1+deb10u1) ...

Creating config file /etc/mercurial/hgrc.d/hgext.rc with new version
Processing triggers for libc-bin (2.28-10+deb10u2) ...
Cloning into '/BridJ'...
error: patch failed: BuildNative:29
error: BuildNative: patch does not apply
error: patch failed: pom.xml:87
error: pom.xml: patch does not apply
The command '/bin/sh -c bash -c "./bridj.sh"' returned a non-zero code: 1

Is this project free and open-source?

This project doesn't have any licence file attached to it. This makes the source code fall under your exclusive copyright, which means that others aren't really allowed to freely use, modify, or share this (source).

Was this your intention? If not, please add an open-source licence file to this repo. I suggest GNU LGPLv3 to somewhat mirror the licence of LanguageTool itself (which is the compatible LGPLv2.1), but you're free to choose since you, as far as I unserstand, aren't reusing any code from them.

Investigate why the tests fail on GitHub's hosted test runner `ubuntu-20.04`

The tests suddenly fail when testing the LanguageTool embedded HTTP server. This seems to be related to the ubuntu-latest image which is one of the hosted test runners provided by GitHub.

The tests succeed when running on ubuntu-18.04 but fail when running ubuntu-latest or ubuntu-20.04.

Investigate what is different between those versions that make the tests fail.

The appropriate release notes:

502 with high request rate

We are sending a large number of requests per second to this server and receiving a lot of 502 errors. The server itself doesn't log any errors. We are running this with 128 threads, pipeline cache is enabled. I have tried increasing all the timeouts to no avail.

Ideally we want to send around 1000 rps, but regardless of server resource, the server doesn't seem to be able to handle any more than 300/s.

It looks like the connection is prematurely closing. Any help would be appreciated.

Not able to set HTTPServerConfig properties

Setting LanguageTool configuration using the langtool_ prefix in environment variables writes the settings into a configuration file which is given to LanguageTool.

While writing these settings to the file, an error occurs:

start.sh: line 6: config.properties: Permission denied
The following configuration is passed to LanguageTool:

This is probably caused/introduced by this commit: f02abaf

On 4.8 this can be reproduced with:
docker run --rm -it -p 8010:8010 --env langtool_pipelinePrewarming=true languagetool

Access to premium account

When running this Docker image on a remote Ubuntu instance server I see the following error:

Error: org.languagetool.server.AuthException: This is the endpoint for the basic version of LanguageTool. When using 'username' and 'apiKey' to access the premium version, use api.languagetoolplus.com instead

Does this Docker image support premium accounts?

LT server not accessible with Firefox add-on

I already created an issue in the main LanguageTool repo, so apologies for duplicating, but I figured I'd open an issue here as well, in case anyone else is having hte same problem (or has before).

When trying to use my self-hosted LT server with the Firefox LT add-on, I get the following error from the LT pop-up: Cannot connect to https://grammar.my.domain/v2/check - please check your internet connection or try again in a minute (#1, code=0). However, when I try using the LT extension in Chromium with the same self-hosted LT server I don't have any problems. I am trying this using a fresh install of Firefox with no additional extensions installed and only the standard browser security setting.

I am running the LT server using this docker image reverse proxied using NGINX. I've tried building the image locally using the flag --allow-origin "*" instead of --allow-origin '*' since one of the LT devs mentioned that was an issue for them, but it hasn't made any difference. I start my container using a docker-compose yml with the following settings:

services:
  languagetool:
    image: erikvl87/languagetool
    container_name: languagetool
    ports:
        - 8010:8010 
    environment:
        - langtool_languageModel=/ngrams
        - Java_Xms=512m
        - Java_Xmx=2818m
        - langtool_pipelinePrewarming=true
        - langtool_pipelineCaching=true
    volumes:
        - /home/xthursdayx/languagetool/ngrams:/ngrams

I can't figure out why this is working in Chromium but not Firefox after having spent most of the afternoon loading and reloading websites, reading the browser console log, and adding and removing NGINX headers. It seems like this issue might be related to one (or both) of these two questions on StackOverflow: https://stackoverflow.com/questions/40185123/error-content-security-policy-the-page-s-settings-blocked-the-loading-of-a-res and https://stackoverflow.com/questions/56386307/loading-of-a-resource-blocked-by-content-security-policy but I'm not sure.

Any ideas how to troubleshoot this? Thanks!

Question about rules

I have set up and running LanguageTool in Docker, it works great.

One thing I am not sure about, I found out that some rules are disabled by default, example. It is somehow possible to enable these rules, or they require premium subscription?

Make API call using "auto" language detection leads to an error

I have the following issue when trying to make /v2/check API call with language set to auto:

2023-02-27 08:40:38.181 +0000 ERROR org.languagetool.server.LanguageToolHttpHandler An error has occurred: 'java.lang.NoClassDefFoundError: Could not initialize class dumonts.hunspell.bindings.HunspellLibrary, detected: pt-PT', sending HTTP code 500. Access from 172.17.0.1, HTTP user agent: python-requests/2.28.2, User agent param: null, Referrer: null, language: auto, h: 1, r: 14018, time: 154text length: 3, m: ALL, l: DEFAULT, Stacktrace follows:java.lang.RuntimeException: java.lang.NoClassDefFoundError: Could not initialize class dumonts.hunspell.bindings.HunspellLibrary, detected: pt-PT
	at org.languagetool.server.TextChecker.checkText(TextChecker.java:507)
	at org.languagetool.server.ApiV2.handleCheckRequest(ApiV2.java:172)
	at org.languagetool.server.ApiV2.handleRequest(ApiV2.java:83)
	at org.languagetool.server.LanguageToolHttpHandler.handle(LanguageToolHttpHandler.java:185)
	at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
	at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82)
	at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80)
	at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:848)
	at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
	at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:817)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class dumonts.hunspell.bindings.HunspellLibrary
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.languagetool.server.TextChecker.checkText(TextChecker.java:489)
	... 12 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class dumonts.hunspell.bindings.HunspellLibrary
	at dumonts.hunspell.Hunspell.<init>(Hunspell.java:21)
	at org.languagetool.rules.spelling.hunspell.DumontsHunspellDictionary.<init>(DumontsHunspellDictionary.java:33)
	at org.languagetool.rules.spelling.hunspell.Hunspell.getDictionary(Hunspell.java:46)
	at org.languagetool.rules.spelling.hunspell.HunspellRule.init(HunspellRule.java:584)
	at org.languagetool.rules.spelling.hunspell.HunspellRule.ensureInitialized(HunspellRule.java:558)
	at org.languagetool.rules.spelling.hunspell.HunspellRule.match(HunspellRule.java:220)
	at org.languagetool.JLanguageTool.checkAnalyzedSentence(JLanguageTool.java:1370)
	at org.languagetool.JLanguageTool.access$1500(JLanguageTool.java:74)
	at org.languagetool.JLanguageTool$TextCheckCallable.getOtherRuleMatches(JLanguageTool.java:1950)
	at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1862)
	at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1833)
	at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:1294)
	at org.languagetool.JLanguageTool.checkInternal(JLanguageTool.java:991)
	at org.languagetool.JLanguageTool.check2(JLanguageTool.java:918)
	at org.languagetool.server.TextChecker.getPipelineResults(TextChecker.java:802)
	at org.languagetool.server.TextChecker.getRuleMatches(TextChecker.java:751)
	at org.languagetool.server.TextChecker.lambda$checkText$5(TextChecker.java:472)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	... 3 more

2023-02-27 08:40:38.182 +0000 INFO  org.languagetool.server.LanguageToolHttpHandler Handled request in 155ms; sending code 500

Any suggestion on how that could be fixed?

Dockerfile Optimisation

Seeing as there are a few things that should only be run on ARM builds, I've taken the liberty of looking at the Dockerfile to see if I could optimise it with buildkit for my fork.

I thought I'd put it here as well in case it's useful:

Note: This is largely untested currently.

Any thoughts on it would be greatly appreciated. Cheers!

# syntax = docker/dockerfile:latest

FROM debian:bookworm as base

ARG LANGUAGETOOL_VERSION=6.2
ARG TARGETARCH
LABEL maintainer='modem7'

FROM base AS base-amd64

FROM base AS base-arm64

FROM base-${TARGETARCH}${TARGETVARIANT} as build

ENV DEBIAN_FRONTEND=noninteractive

RUN <<EOF
    set -x
    if [ "$TARGETARCH" = "arm64" ]
    then
        echo "Installing additional packages for ARM"
        apt-get update -y
        apt-get install -y \
            build-essential    \
            cmake              \
            git                \
            mercurial          \
            texlive            \
            wget               \
            zip
    else
        echo "Not installing ARM packages"
    fi
EOF

RUN <<EOF
    set -x
    apt-get update -y
    apt-get install -y          \
        bash                    \
        libgomp1                \
        locales                 \
        maven                   \
        openjdk-17-jdk-headless \
        unzip                   \
        xmlstarlet
EOF

RUN <<EOF
    set -x
    sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
    dpkg-reconfigure --frontend=noninteractive locales
    update-locale LANG=en_US.UTF-8
EOF

ENV LANG en_US.UTF-8

ARG LANGUAGETOOL_VERSION
ADD --link --keep-git-dir=true https://github.com/languagetool-org/languagetool.git#v${LANGUAGETOOL_VERSION} /languagetool

WORKDIR /languagetool

RUN <<EOF
    set -x
    mvn --projects languagetool-standalone --also-make package -DskipTests -Daether.dependencyCollector.impl=bf --quiet
    LANGUAGETOOL_DIST_VERSION=$(xmlstarlet sel -N "x=http://maven.apache.org/POM/4.0.0" -t -v "//x:project/x:properties/x:revision" pom.xml)
    unzip /languagetool/languagetool-standalone/target/LanguageTool-${LANGUAGETOOL_DIST_VERSION}.zip -d /dist
    LANGUAGETOOL_DIST_FOLDER=$(find /dist/ -name 'LanguageTool-*')
    mv $LANGUAGETOOL_DIST_FOLDER /dist/LanguageTool
EOF

# Execute workarounds for ARM64 architectures.
# https://github.com/languagetool-org/languagetool/issues/4543
WORKDIR /

COPY --link --chmod=755 arm64-workaround/bridj.sh arm64-workaround/bridj.sh
COPY --link --chmod=755 arm64-workaround/hunspell.sh arm64-workaround/hunspell.sh

RUN <<EOF
    set -x
    if [ "$TARGETARCH" = "arm64" ]
    then
        echo "Implementing ARM workarounds"
        # chmod +x arm64-workaround/bridj.sh
        bash -c "arm64-workaround/bridj.sh"
        # chmod +x arm64-workaround/hunspell.sh
        bash -c "arm64-workaround/hunspell.sh"
    else
        echo "Not implementing ARM workarounds"
    fi
EOF

WORKDIR /languagetool

# Note: When changing the base image, verify that the hunspell.sh workaround is
# downloading the matching version of `libhunspell`. The URL may need to change.
FROM alpine:3.18.4

RUN <<EOF
    set -x
    apk add --no-cache \
        bash           \
        curl           \
        libc6-compat   \
        libstdc++      \
        openjdk17-jre-headless
EOF

# https://github.com/Erikvl87/docker-languagetool/issues/60
RUN <<EOF
    set -x
    ln -s /lib64/ld-linux-x86-64.so.2 /lib/ld-linux-x86-64.so.2
    addgroup -S languagetool && adduser -S languagetool -G languagetool
EOF

COPY --chown=languagetool --from=build /dist .

WORKDIR /LanguageTool

RUN <<EOF
    set -x
    mkdir /nonexistent
    touch /nonexistent/.languagetool.cfg
EOF

COPY --chown=languagetool start.sh config.properties .

USER languagetool

EXPOSE 8010

HEALTHCHECK --timeout=10s --start-period=5s CMD curl --fail --data "language=en-US&text=a simple test" http://localhost:8010/v2/check || exit 1

CMD [ "bash", "start.sh" ]

Happy to put in a PR if it's deemed useful.

Error loading shared library libhunspell.so: No such file or directory

I am trying to use the languagetool to check the spelling in a webform (language is de-de). Spelling mistake deise -> diese. The result is the following server error:

languagetool  | 	at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:1298)
languagetool  | 	at org.languagetool.JLanguageTool.checkInternal(JLanguageTool.java:991)
languagetool  | 	at org.languagetool.JLanguageTool.check2(JLanguageTool.java:918)
languagetool  | 	at org.languagetool.server.TextChecker.getPipelineResults(TextChecker.java:802)
languagetool  | 	at org.languagetool.server.TextChecker.getRuleMatches(TextChecker.java:751)
languagetool  | 	at org.languagetool.server.TextChecker.lambda$checkText$5(TextChecker.java:472)
languagetool  | 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
languagetool  | 	... 3 more
languagetool  | Caused by: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>deise</sentcontent>
languagetool  | 	at org.languagetool.JLanguageTool$TextCheckCallable.getOtherRuleMatches(JLanguageTool.java:1993)
languagetool  | 	at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1866)
languagetool  | 	at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1833)
languagetool  | 	at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:1294)
languagetool  | 	... 9 more
languagetool  | Caused by: java.lang.RuntimeException: Could not create hunspell instance. Please note that LanguageTool supports only 64-bit platforms (Linux, Windows, Mac) and that it requires a 64-bit JVM (Java).
languagetool  | 	at org.languagetool.rules.spelling.hunspell.DumontsHunspellDictionary.<init>(DumontsHunspellDictionary.java:35)
languagetool  | 	at org.languagetool.rules.spelling.hunspell.Hunspell.getDictionary(Hunspell.java:46)
languagetool  | 	at org.languagetool.rules.spelling.hunspell.HunspellRule.init(HunspellRule.java:584)
languagetool  | 	at org.languagetool.rules.de.GermanSpellerRule.init(GermanSpellerRule.java:1557)
languagetool  | 	at org.languagetool.rules.spelling.hunspell.HunspellRule.ensureInitialized(HunspellRule.java:558)
languagetool  | 	at org.languagetool.rules.spelling.hunspell.HunspellRule.match(HunspellRule.java:220)
languagetool  | 	at org.languagetool.rules.de.GermanSpellerRule.match(GermanSpellerRule.java:1475)
languagetool  | 	at org.languagetool.JLanguageTool.checkAnalyzedSentence(JLanguageTool.java:1370)
languagetool  | 	at org.languagetool.JLanguageTool.access$1500(JLanguageTool.java:74)
languagetool  | 	at org.languagetool.JLanguageTool$TextCheckCallable.getOtherRuleMatches(JLanguageTool.java:1950)
languagetool  | 	... 12 more
languagetool  | Caused by: java.lang.UnsatisfiedLinkError: Unable to load library 'hunspell':
languagetool  | Error loading shared library libhunspell.so: No such file or directory
languagetool  | Error loading shared library libhunspell.so: No such file or directory
languagetool  | Native library (linux-aarch64/libhunspell.so) not found in resource path (languagetool-server.jar)
languagetool  | 	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:307)
languagetool  | 	at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:467)
languagetool  | 	at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:409)
languagetool  | 	at dumonts.hunspell.bindings.HunspellLibrary.<clinit>(HunspellLibrary.java:16)
languagetool  | 	at dumonts.hunspell.Hunspell.<init>(Hunspell.java:21)
languagetool  | 	at org.languagetool.rules.spelling.hunspell.DumontsHunspellDictionary.<init>(DumontsHunspellDictionary.java:33)
languagetool  | 	... 21 more
languagetool  | 	Suppressed: java.lang.UnsatisfiedLinkError: Error loading shared library libhunspell.so: No such file or directory
languagetool  | 		at com.sun.jna.Native.open(Native Method)
languagetool  | 		at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:197)
languagetool  | 		... 26 more
languagetool  | 	Suppressed: java.lang.UnsatisfiedLinkError: Error loading shared library libhunspell.so: No such file or directory
languag

System: Raspberry PI4 arm64; Linux 6.0.0-5-arm64 #1 SMP Debian 6.0.10-2 (2022-12-01) aarch64 GNU/Linux
Docker Image: image: erikvl87/languagetool:latest

What's wrong here? Why is libhunspell.so not loaded? It is present in /LanguageTool/libs/hunspell.jar

Running as https, under nginx or custom domain

Hey,

how can I run this with https enabled, either via nginx or a custom domain? I found no information regarding this in the readme.

Do I need to change the Dockerfile to use the nginx alpine image? And what would I do next?

Random occurrences of wrong language

Running the latest docker on Debian. Language set to English. 95% of the time the spell checker works as expected, but occasionally it indicates correctly spelled words for correction, and offers Italian choices.

Generally this reverts to English after a page refresh. Frequency is multiple times a week.

Here's my docker compose:

version: "3"
services:
  languagetool:
    image: erikvl87/languagetool:latest
    container_name: languagetool
    environment:
      - langtool_languageModel=/ngrams
      - Java_Xms=512m
      - Java_Xmx=1g
    networks:
      - languagetool_default
    ports:
      - 8010:8010
    restart: unless-stopped
    user: languagetool
    volumes:
      - /home/user1/docker/languagetool/ngrams:/ngrams
networks:
  languagetool_default:
    name: languagetool

Any suggestions?

Using ngrams as described lets container crash

Hey there,
First of all - thanks for the great work :)

I am trying to make the language tool work with the ngram data set.
I created the ngram directories as described and the container starts normally.

But when i try to use the web extension/browser client the connection can't be established since the container on my Host machine crashes.

Command used:
docker run --network=proxy --rm -it -d --restart always -p 8010:8010 -e langtool_languageModel=/ngrams -v home/user/ngrams:/ngrams erikvl87/languagetool

Without the ngrams -leaving everything else as is- everything works perfectly fine.

I already tried to play around with different Java Heap Sizes - but that didn't help so far.
( Java_Xms=512m AND Java_Xmx=2g; Java-Xms=256m -Java_Xmx=2816m; etc...)
Maybe i just didn't find the appropiate values.

Recommendations for appropriate Java Heap Sizes when using ngrams would be helpful here. Or a completey different workaround if other people experience instabilities when using ngram as well.

Best regards,
Max

run on 0.0.0.0

I need to run it on 0.0.0.0 to allow external connections to the docker, i tried this
docker run --rm -p 8010:8010 --env langtool_setServerURL="0.0.0.0" erikvl87/languagetool

but it still started the server on localhost, which is 127.0.0.1 and that is only for internal machine ip.

Could you help

Add `fasttext` to `README.md`

Some LanguageTool guides recommend adding fasttext to system and set fasttextModel/fasttextBinary settings.

Does it really useful?

Should we add a guide? Or maybe add at least fasttext binary to Docker image?

Checksum error since 5.7

Hi, Using the container linux/amd64 (5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux) latest output a checksum error related to ngrams (whichever the language is requested). Reverting to 5.6-dockerupdate-3 work just fine.

Example on 5.6 (working) :
CleanShot 2022-04-01 at 00 59 31

On 5.7 :

At first I tought my french ngrams were corrupted, but the result is the same in english, and I redownloaded all ngrams just in case.

CleanShot 2022-04-01 at 01 02 13

The following configuration is passed to LanguageTool:
languageModel=/ngrams
+ java -Xms512m -Xmx1g -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8010 --public --allow-origin '*' --config config.properties
2022-03-31 23:00:54.436 +0000 INFO  org.languagetool.server.DatabaseAccessOpenSource Not setting up database access, dbDriver is not configured
2022-03-31 23:00:54 +0000 WARNING: running in HTTP mode, consider running LanguageTool behind a reverse proxy that takes care of encryption (HTTPS)
2022-03-31 23:00:54 +0000 WARNING: running in public mode, LanguageTool API can be accessed without restrictions!
2022-03-31 23:00:54 +0000 Setting up thread pool with 10 threads
2022-03-31 23:00:55 +0000 Starting LanguageTool 5.7 (build date: 2022-03-30 13:58:36 +0000, 35d0d40) server on http://localhost:8010...
2022-03-31 23:00:55 +0000 Server started
2022-03-31 23:00:57.496 +0000 INFO  org.languagetool.server.LanguageToolHttpHandler Handling POST /v2/check
2022-03-31 23:01:02.143 +0000 ERROR org.languagetool.server.LanguageToolHttpHandler An error has occurred: 'java.lang.RuntimeException: org.apache.lucene.index.CorruptIndexException: checksum failed (hardware problem?) : expected=97ec8ffc actual=901b5b3c (resource=BufferedChecksumIndexInput(MMapIndexInput(path="/ngrams/fr/1grams/_16.fdx"))), detected: fr', sending HTTP code 500. Access from 172.18.0.1, HTTP user agent: curl/7.74.0, User agent param: null, Referrer: null, language: fr, h: 1, r: 1, time: 4656text length: 8, m: ALL, l: DEFAULT, Stacktrace follows:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.lucene.index.CorruptIndexException: checksum failed (hardware problem?) : expected=97ec8ffc actual=901b5b3c (resource=BufferedChecksumIndexInput(MMapIndexInput(path="/ngrams/fr/1grams/_16.fdx"))), detected: fr
        at org.languagetool.server.TextChecker.checkText(TextChecker.java:496)
        at org.languagetool.server.ApiV2.handleCheckRequest(ApiV2.java:173)
        at org.languagetool.server.ApiV2.handleRequest(ApiV2.java:84)
        at org.languagetool.server.LanguageToolHttpHandler.handle(LanguageToolHttpHandler.java:185)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
        at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:730)
        at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
        at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:699)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.apache.lucene.index.CorruptIndexException: checksum failed (hardware problem?) : expected=97ec8ffc actual=901b5b3c (resource=BufferedChecksumIndexInput(MMapIndexInput(path="/ngrams/fr/1grams/_16.fdx")))
        at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
        at org.languagetool.server.TextChecker.checkText(TextChecker.java:477)
        ... 12 more
Caused by: java.lang.RuntimeException: org.apache.lucene.index.CorruptIndexException: checksum failed (hardware problem?) : expected=97ec8ffc actual=901b5b3c (resource=BufferedChecksumIndexInput(MMapIndexInput(path="/ngrams/fr/1grams/_16.fdx")))
        at org.languagetool.languagemodel.LuceneSingleIndexLanguageModel.getCachedLuceneSearcher(LuceneSingleIndexLanguageModel.java:186)
        at org.languagetool.languagemodel.LuceneSingleIndexLanguageModel.addIndex(LuceneSingleIndexLanguageModel.java:118)
        at org.languagetool.languagemodel.LuceneSingleIndexLanguageModel.<init>(LuceneSingleIndexLanguageModel.java:93)
        at org.languagetool.languagemodel.LuceneLanguageModel.<init>(LuceneLanguageModel.java:65)
        at org.languagetool.Language.initLanguageModel(Language.java:180)
        at org.languagetool.language.French.getLanguageModel(French.java:149)
        at org.languagetool.JLanguageTool.activateLanguageModelRules(JLanguageTool.java:594)
        at org.languagetool.server.Pipeline.activateLanguageModelRules(Pipeline.java:103)
        at org.languagetool.server.PipelinePool.createPipeline(PipelinePool.java:121)
        at org.languagetool.server.PipelinePool.getPipeline(PipelinePool.java:78)
        at org.languagetool.server.TextChecker.getPipelineResults(TextChecker.java:789)
        at org.languagetool.server.TextChecker.getRuleMatches(TextChecker.java:743)
        at org.languagetool.server.TextChecker.lambda$checkText$4(TextChecker.java:460)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        ... 3 more
Caused by: org.apache.lucene.index.CorruptIndexException: checksum failed (hardware problem?) : expected=97ec8ffc actual=901b5b3c (resource=BufferedChecksumIndexInput(MMapIndexInput(path="/ngrams/fr/1grams/_16.fdx")))
        at org.apache.lucene.codecs.CodecUtil.checkFooter(CodecUtil.java:334)
        at org.apache.lucene.codecs.CodecUtil.checkFooter(CodecUtil.java:364)
        at org.apache.lucene.codecs.compressing.CompressingStoredFieldsReader.<init>(CompressingStoredFieldsReader.java:140)
        at org.apache.lucene.codecs.compressing.CompressingStoredFieldsFormat.fieldsReader(CompressingStoredFieldsFormat.java:121)
        at org.apache.lucene.codecs.lucene50.Lucene50StoredFieldsFormat.fieldsReader(Lucene50StoredFieldsFormat.java:173)
        at org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:117)
        at org.apache.lucene.index.SegmentReader.<init>(SegmentReader.java:65)
        at org.apache.lucene.index.StandardDirectoryReader$1.doBody(StandardDirectoryReader.java:58)
        at org.apache.lucene.index.StandardDirectoryReader$1.doBody(StandardDirectoryReader.java:50)
        at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:731)
        at org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:50)
        at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:63)
        at org.languagetool.languagemodel.LuceneSingleIndexLanguageModel$LuceneSearcher.<init>(LuceneSingleIndexLanguageModel.java:241)
        at org.languagetool.languagemodel.LuceneSingleIndexLanguageModel$LuceneSearcher.<init>(LuceneSingleIndexLanguageModel.java:229)
        at org.languagetool.languagemodel.LuceneSingleIndexLanguageModel.getCachedLuceneSearcher(LuceneSingleIndexLanguageModel.java:182)
        ... 16 more

2022-03-31 23:01:02.171 +0000 INFO  org.languagetool.server.LanguageToolHttpHandler Handled request in 4685ms; sending code 500

libstdc++.so.6 missing

Trying to use a language other than en-US (such as de-DE with the word autohaus) will result in the following server error:

 # BridJ: dlopen error when loading /tmp/BridJExtractedLibraries277612737966416782/libhunspell.so : Error loading shared library libstdc++.so.6: No such file or directory (needed by /tmp/BridJExtractedLibraries277612737966416782/libhunspell.so)
2021-03-05 12:31:00 +0000 ERROR org.languagetool.server.LanguageToolHttpHandler An error has occurred: 'java.lang.RuntimeException: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sent
     at org.languagetool.server.TextChecker.checkText(TextChecker.java:397)
     at org.languagetool.server.ApiV2.handleCheckRequest(ApiV2.java:148)
     at org.languagetool.server.ApiV2.handleRequest(ApiV2.java:73)
     at org.languagetool.server.LanguageToolHttpHandler.handle(LanguageToolHttpHandler.java:180)
     at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
     at jdk.httpserver/sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:82)
     at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80)
     at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:692)
     at jdk.httpserver/com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
     at jdk.httpserver/sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:664)
     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
     at java.base/java.lang.Thread.run(Thread.java:834)
 Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>autohaus</sentcontent>
     at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
     at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
     at org.languagetool.server.TextChecker.checkText(TextChecker.java:378)
     ... 12 more
 Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>autohaus</sentcontent>
     at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:1186)
     at org.languagetool.JLanguageTool.check(JLanguageTool.java:930)
     at org.languagetool.server.TextChecker.getPipelineResults(TextChecker.java:645)
     at org.languagetool.server.TextChecker.getRuleMatches(TextChecker.java:594)
     at org.languagetool.server.TextChecker.access$000(TextChecker.java:56)
     at org.languagetool.server.TextChecker$1.call(TextChecker.java:371)
     at org.languagetool.server.TextChecker$1.call(TextChecker.java:364)
     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
     ... 3 more
 Caused by: java.lang.RuntimeException: Could not check sentence (language: German (Germany)): <sentcontent>autohaus</sentcontent>
     at org.languagetool.JLanguageTool$TextCheckCallable.getOtherRuleMatches(JLanguageTool.java:1830)
     at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1724)
     at org.languagetool.JLanguageTool$TextCheckCallable.call(JLanguageTool.java:1696)
     at org.languagetool.JLanguageTool.performCheck(JLanguageTool.java:1182)
     ... 10 more
 Caused by: java.lang.RuntimeException: Could not create hunspell instance. Please note that LanguageTool supports only 64-bit platforms (Linux, Windows, Mac) and that it requires a 64-bit JVM (Java).
     at org.languagetool.rules.spelling.hunspell.Hunspell.<init>(Hunspell.java:51)
     at org.languagetool.rules.spelling.hunspell.Hunspell.getInstance(Hunspell.java:62)
     at org.languagetool.rules.spelling.hunspell.HunspellRule.init(HunspellRule.java:368)
     at org.languagetool.rules.de.GermanSpellerRule.init(GermanSpellerRule.java:1065)
     at org.languagetool.rules.spelling.hunspell.HunspellRule.ensureInitialized(HunspellRule.java:342)
     at org.languagetool.rules.spelling.hunspell.HunspellRule.match(HunspellRule.java:122)
     at org.languagetool.JLanguageTool.checkAnalyzedSentence(JLanguageTool.java:1255)
     at org.languagetool.JLanguageTool$TextCheckCallable.getOtherRuleMatches(JLanguageTool.java:1803)
     ... 13 more
 Caused by: java.lang.UnsatisfiedLinkError: 'long dumonts.hunspell.bindings.HunspellLibrary.Hunspell_create(long, long)'
     at dumonts.hunspell.bindings.HunspellLibrary.Hunspell_create(Native Method)
     at dumonts.hunspell.bindings.HunspellLibrary.Hunspell_create(HunspellLibrary.java:25)
     at org.languagetool.rules.spelling.hunspell.Hunspell.<init>(Hunspell.java:45)
     ... 20 more

It seems that the library libstdc++.so.6 is missing from the distribution.

P.S.: Thanks for the project!

Synonym support?

Does this docker image support synonym discovery?

I cannot seem to activate that, though the Firefox extension

suggests it does.

Regularly crashing :(

Debian Testing X64, Docker Run

docker run  -d --name=languagetool \
        --restart unless-stopped \
        -e langtool_languageModel=/ngrams \
        -e Java_Xmx=1400m \
        --memory 1024m --memory-swap 1300m \
        -e EXTRAOPTIONS="-Xmx582M" \
        -v /media//languagetool/ngram:/ngrams \
        -p 8010:8010 \
        erikvl87/languagetool


2021-07-23 08:05:15.639 +0000 WARN  org.languagetool.language.LanguageIdentifier Cannot consider noopLanguages because not in fastText mode: [en, es]                                                                                         
2021-07-23 08:06:30.277 +0000 INFO  org.languagetool.server.TextChecker Check done: 278 chars, en-US[auto], requestId: null, #279, null, 2 matches, 2339632ms, agent:webextension-chrome-ng, v:4.0.7, sent, q:112, h:10, dH:1, m:!tlo         
2021-07-23 08:06:30.280 +0000 WARN  org.languagetool.language.LanguageIdentifier Cannot consider noopLanguages because not in fastText mode: [en, es]                                                                                         
2021-07-23 08:06:30.367 +0000 INFO  org.languagetool.server.TextChecker Check done: 365 chars, en-US[auto], requestId: null, #280, null, 0 matches, 89ms, agent:webextension-chrome-ng, v:4.0.7, sent, q:111, h:10, dH:1, m:tlo               
2021-07-23 08:06:30.369 +0000 WARN  org.languagetool.language.LanguageIdentifier Cannot consider noopLanguages because not in fastText mode: [en, es]                                                                                         
2021-07-23 08:11:07.448 +0000 INFO  org.languagetool.server.TextChecker Check done: 278 chars, en-US[auto], requestId: null, #276, null, 2 matches, 2439416ms, agent:webextension-chrome-ng, v:4.0.7, sent, q:112, h:10, dH:1, m:!tlo         
2021-07-23 08:11:07.450 +0000 WARN  org.languagetool.language.LanguageIdentifier Cannot consider noopLanguages because not in fastText mode: [en, es]
2021-07-23 08:16:02.186 +0000 INFO  org.languagetool.server.TextChecker Check done: 366 chars, en-US[auto], requestId: null, #277, null, 0 matches, 294737ms, agent:webextension-chrome-ng, v:4.0.7, notSent: Broken pipe, q:112, h:10, dH:1, 
m:tlo
2021-07-23 08:16:35.247 +0000 WARN  org.languagetool.language.LanguageIdentifier Cannot consider noopLanguages because not in fastText mode: [en, es]
start.sh: line 18:     8 Killed                  java -Xms$Xms -Xmx$Xmx -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8010 --public --allow-origin '*' --config config.properties

LanguageTool releases can contain mismatched versions

LanguageTool could create a (patch) release that potentially doesn't affect the standalone version. In that case they won't always update the version of the release inside the languagetool-standalone directory.
See languagetool-org/languagetool#3659

This breaks the current build of the Dockerfile since it assumes the same version in the languagtool-standalone directory. This blocked the Docker release of 5.1.1 and 5.1.2.

To prevent checking the changelog on every release if it affects the standalone version, the Dockerfile needs to be updated to be able to fall back on whatever version is being shipped inside that folder.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.