de.flapdoodle.embed.mongo: EmbeddedMongo on /tmp directory has not execution permission
Hi I’ve an issue with mongo embedded. I’ve fedora 32 SO with kernel “Linux fedora-desktop 5.11.22-100.fc32.x86” set up this dependency on maven:
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<version>3.4.8</version>
<scope>test</scope>
</dependency>`
And this is my test code:
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import de.flapdoodle.embed.mongo.MongodExecutable;
import de.flapdoodle.embed.mongo.MongodProcess;
import de.flapdoodle.embed.mongo.MongodStarter;
import de.flapdoodle.embed.mongo.config.MongodConfig;
import de.flapdoodle.embed.mongo.config.Net;
import de.flapdoodle.embed.mongo.distribution.Version;
import de.flapdoodle.embed.process.runtime.Network;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import java.io.IOException;
public class EmbMongotest {
public static void main(String[] args) throws IOException {
MongodStarter starter = MongodStarter.getDefaultInstance();
int port = Network.getFreeServerPort();
MongodConfig mongodConfig = MongodConfig.builder()
.version(Version.Main.PRODUCTION)
.net(new Net(port, Network.localhostIsIPv6()))
.build();
MongodExecutable mongodExecutable = null;
try {
mongodExecutable = starter.prepare(mongodConfig);
MongodProcess mongod = mongodExecutable.start();
try (MongoClient mongo = MongoClients.create("mongodb://localhost:"+port)) {
SimpleMongoClientDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(mongo,"testDB");
MongoDatabase db = mongo.getDatabase("testDB");
MongoTemplate template = new MongoTemplate(factory);
template.save(new TClass("variable"));
} catch (Exception exception) {
exception.printStackTrace();
}
} finally {
if (mongodExecutable != null)
mongodExecutable.stop();
}
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
static class TClass {
private String testVar;
}
}
This is the issue that I encountered:
2022-09-12 09:48:16 fedora-desktop ERROR AbstractProcess:116 - failed to call start()
java.io.IOException: Cannot run program "/tmp/extract-35fba5ae-5537-4e2a-8505-cf700f548460extractmongod": error=13, Permesso negato
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at de.flapdoodle.embed.process.runtime.ProcessControl.start(ProcessControl.java:165)
at de.flapdoodle.embed.process.runtime.AbstractProcess.<init>(AbstractProcess.java:96)
at de.flapdoodle.embed.mongo.AbstractMongoProcess.<init>(AbstractMongoProcess.java:53)
at de.flapdoodle.embed.mongo.MongodProcess.<init>(MongodProcess.java:50)
at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:44)
at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:34)
at de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:109)
at com.fw.EmbMongotest.main(EmbMongotest.java:39)
Caused by: java.io.IOException: error=13, Permesso negato
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(ProcessBuilder.java:1107)
... 9 common frames omitted
I have tried to set system properties flapdoodle directory to another dir with all permission but it not works too. Only if I launch the java application with root permission I can run this code without errors.
I have had this error since 1 month ago. Before the mongoembedded worked great.
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Reactions: 3
- Comments: 16 (10 by maintainers)
@filirnd with the latest release i extract all binaries to some directory in home folder and checking the hash of the content to ensure that the right version is used … so /tmp is not used for that anymore.