首页 > 解决方案 > 无法安装 search-guard -“错误:插件 zip 中缺少 `elasticsearch` 目录”

问题描述

正如主题所述,我在尝试为我的 ELK 堆栈安装 search-guard 插件时遇到问题:

[XXX@XXXX bin]$ ./elasticsearch-plugin install -b file:///home/xxxx/search-guard-6-6.2.1-21.0.zip
-> Downloading file:///home/xxxx/search-guard-6-6.2.1-21.0.zip
[=================================================] 100%  
ERROR: `elasticsearch` directory is missing in the plugin zip

然后,我尝试从自定义目录执行此操作,然后在家中按照此答案进行操作,但没有帮助。当我解压缩存档时,我可以看到那里有一个名为“elasticsearch”的目录:

有没有人有任何建议如何进行?

标签: elasticsearchelastic-stack

解决方案


该错误来自 lib\plugin-cli-xxxjar 中的 InstallPluginCommand.class ,这正是所说的。这是代码的剪辑部分,因为它正在读取 zip 文件中的条目:

ZipInputStream zipInput = new ZipInputStream(Files.newInputStream(zip));

try {
    ZipEntry entry;
    while((entry = zipInput.getNextEntry()) != null) {
        if (entry.getName().startsWith("elasticsearch/")) {
            hasEsDir = true;
            ...
    }

}

if (!hasEsDir) {
    throw new UserException(2, "`elasticsearch` directory is missing in the plugin zip");
}

我意识到这对你没有多大帮助,但作为最后的努力,如果你无法找到问题的根本原因,我做的一件事就是让我克服障碍,就是从 zip 中复制文件文件到 es plugins 目录(/usr/share/elasticsearch/plugins在我们的例子中)。它们位于 /plugins 中,但位于一个目录下,这是 Elasticsearch 知道插件的名称。

唯一的两个陷阱是:

  1. 您需要知道要在 /plugins 下创建的目录名称。
  2. 您需要知道 plugin-descriptor.properties 文件的替换值。

如果你能做到这一点,你可以启动 ES,它应该可以正常加载所有内容。


推荐阅读