问题
I'm trying to install and run Elasticsearch in Vagrant. The issue is that when I try to run elasticsearch I get the following error:
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch.log (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440)
at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
log4j:ERROR Either File or DatePattern options are not set for appender [file].
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_deprecation.log (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440)
at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
log4j:ERROR Either File or DatePattern options are not set for appender [deprecation_log_file].
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_index_indexing_slowlog.log (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440)
at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
log4j:ERROR Either File or DatePattern options are not set for appender [index_indexing_slow_log_file].
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_index_search_slowlog.log (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440)
at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
log4j:ERROR Either File or DatePattern options are not set for appender [index_search_slow_log_file].
Exception in thread "main" java.lang.IllegalStateException: Unable to access 'path.plugins' (/home/vagrant/elasticsearch-2.3.0/plugins)
Likely root cause: java.nio.file.AccessDeniedException: /home/vagrant/elasticsearch-2.3.0/plugins
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384)
at java.nio.file.Files.createDirectory(Files.java:674)
at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781)
at java.nio.file.Files.createDirectories(Files.java:767)
at org.elasticsearch.bootstrap.Security.ensureDirectoryExists(Security.java:337)
at org.elasticsearch.bootstrap.Security.addPath(Security.java:314)
at org.elasticsearch.bootstrap.Security.addFilePermissions(Security.java:246)
at org.elasticsearch.bootstrap.Security.createPermissions(Security.java:212)
at org.elasticsearch.bootstrap.Security.configure(Security.java:118)
at org.elasticsearch.bootstrap.Bootstrap.setupSecurity(Bootstrap.java:196)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
I think the problem is that it has no write permission. When I do install elastic through provision I get the following permissions:
drwxr-xr-x 2 root root 4096 Apr 3 09:26 bin
drwxr-xr-x 2 root root 4096 Apr 3 09:26 config
drwxr-xr-x 2 root root 4096 Apr 3 09:26 lib
-rw-rw-r-- 1 vagrant vagrant 11358 Jan 27 12:53 LICENSE.txt
drwxrwxr-x 5 vagrant vagrant 4096 Mar 29 08:04 modules
-rw-rw-r-- 1 vagrant vagrant 150 Jan 27 12:53 NOTICE.txt
-rw-rw-r-- 1 vagrant vagrant 8700 Jan 27 12:53 README.textile
But when I do the same manually:
drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 bin
drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 config
drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 lib
-rw-rw-r-- 1 vagrant vagrant 11358 Jan 27 12:53 LICENSE.txt
drwxrwxr-x 5 vagrant vagrant 4096 Mar 29 08:04 modules
-rw-rw-r-- 1 vagrant vagrant 150 Jan 27 12:53 NOTICE.txt
-rw-rw-r-- 1 vagrant vagrant 8700 Jan 27 12:53 README.textile
My Vagrantfile is:
Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise64"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install software-properties-common python-software-properties -y
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
sudo apt-get install oracle-java8-installer -y -q
wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.0/elasticsearch-2.3.0.tar.gz
tar -xzf elasticsearch-*.tar.gz
mv elasticsearch-2.3.0 elasticsearch
rm elasticsearch-*
SHELL
end
回答1:
When you run your provisioning from your file, it runs as root so the vagrant user will not have write access to your folder as you have seen.
The thumb of rule is
privileged: false
-> executed as vagrantprivileged: true
-> executed as root (default if privileged is omitted)
change your Vagrantfile to be
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise64"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install software-properties-common python-software-properties -y
apt-add-repository ppa:webupd8team/java
apt-get update
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
apt-get install oracle-java8-installer -y -q
SHELL
config.vm.provision "shell", privileged: false, inline: <<-SHELL
wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.0/elasticsearch-2.3.0.tar.gz
tar -xzf elasticsearch-*.tar.gz
mv elasticsearch-2.3.0 elasticsearch
rm elasticsearch-*
SHELL
end
In the first provisioning I removed all the sudo as its already the root user running the command.
The second provisioning block will be run by vagrant user and will install ElasticSearch in /home/vagrant from the vagrant user:
vagrant@precise64:~/elasticsearch/bin$ ./elasticsearch
[2016-04-03 10:55:01,423][INFO ][node ] [Araña] version[2.3.0], pid[6748], build[8371be8/2016-03-29T07:54:48Z]
[2016-04-03 10:55:01,424][INFO ][node ] [Araña] initializing ...
[2016-04-03 10:55:02,296][INFO ][plugins ] [Araña] modules [reindex, lang-expression, lang-groovy], plugins [], sites []
[2016-04-03 10:55:02,328][INFO ][env ] [Araña] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [35.1gb], net total_space [39.4gb], spins? [possibly], types [ext4]
[2016-04-03 10:55:02,328][INFO ][env ] [Araña] heap size [1015.6mb], compressed ordinary object pointers [true]
[2016-04-03 10:55:02,329][WARN ][env ] [Araña] max file descriptors [4096] for elasticsearch process likely too low, consider increasing to at least [65536]
[2016-04-03 10:55:05,107][INFO ][node ] [Araña] initialized
[2016-04-03 10:55:05,108][INFO ][node ] [Araña] starting ...
[2016-04-03 10:55:05,228][INFO ][transport ] [Araña] publish_address {127.0.0.1:9300}, bound_addresses {[::1]:9300}, {127.0.0.1:9300}
[2016-04-03 10:55:05,238][INFO ][discovery ] [Araña] elasticsearch/gf23pBqpSs2wDrLswVeSyQ
[2016-04-03 10:55:08,313][INFO ][cluster.service ] [Araña] new_master {Araña}{gf23pBqpSs2wDrLswVeSyQ}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
[2016-04-03 10:55:08,341][INFO ][http ] [Araña] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
[2016-04-03 10:55:08,342][INFO ][node ] [Araña] started
[2016-04-03 10:55:08,366][INFO ][gateway ] [Araña] recovered [0] indices into cluster_state
^C[2016-04-03 10:55:22,870][INFO ][node ] [Araña] stopping ...
[2016-04-03 10:55:22,884][INFO ][node ] [Araña] stopped
[2016-04-03 10:55:22,885][INFO ][node ] [Araña] closing ...
[2016-04-03 10:55:22,899][INFO ][node ] [Araña] closed
回答2:
From your Guest:
$ cd /home/vagrant/elasticsearch-2.3.0/
$ sudo chmod -R a+w logs
And for safety, you could also do...
$ sudo touch logs/elasticsearch.log logs/elasticsearch_deprecation.log logs/elasticsearch_index_indexing_slowlog.log logs/elasticsearch_index_search_slowlog.log
And then reboot and/or reprovision from Host
$ vagrant reload
or
$ vagrant reload --provision
or
$ vagrant halt && vagrant up --provision
With the last two commands ideally doing the same thing, although I have noticed some weirdness when running reload as opposed to halting/upping.
来源:https://stackoverflow.com/questions/36383664/how-to-install-and-run-elasticsearch-in-vagrant