diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4c2c59b..43fc0a2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for Common Smartgears
+## [v3.1.6-SNAPSHOT]
+
+- Added Linux distribution version [#22933]
+
## [v3.1.5] - 2022-04-20
- Added roles to ExternalService Info on request handler verification
diff --git a/pom.xml b/pom.xml
index 4b72490..5c7fb16 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
org.gcube.core
common-smartgears
- 3.1.5
+ 3.1.6-SNAPSHOT
SmartGears
@@ -19,7 +19,7 @@
org.gcube.distribution
gcube-bom
- 2.0.1
+ 2.1.0
pom
import
@@ -115,6 +115,14 @@
3.0.1
provided
+
+
+
+ javax.xml.bind
+ jaxb-api
+ provided
+
+
diff --git a/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/LinuxDistributionInfo.java b/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/LinuxDistributionInfo.java
new file mode 100644
index 0000000..8fe8bc2
--- /dev/null
+++ b/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/LinuxDistributionInfo.java
@@ -0,0 +1,93 @@
+package org.gcube.smartgears.handlers.container.lifecycle;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Luca Frosini (ISTI-CNR)
+ */
+public class LinuxDistributionInfo {
+
+ private static final Logger logger = LoggerFactory.getLogger(LinuxDistributionInfo.class);
+
+ public static final String LSB_RELEASE_COMMAND = "lsb_release -a";
+ public static final String OS_RELEASE_FILE_PATH = "/etc/os-release";
+
+ protected Map info;
+
+ protected Map getInfoViaLsbReleaseCommand() throws IOException {
+ logger.trace("Going to exec {}", LSB_RELEASE_COMMAND);
+ Process process = Runtime.getRuntime().exec(LSB_RELEASE_COMMAND);
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ Map map = parseBufferedReader(bufferedReader);
+ bufferedReader.close();
+ return map;
+ }
+
+ private Map parseBufferedReader(BufferedReader bufferedReader) throws IOException {
+ Map map = new HashMap<>();
+ String line = "";
+ while ((line = bufferedReader.readLine()) != null) {
+ String[] nameValue = parseLine(line);
+ map.put(nameValue[0], nameValue[1]);
+ }
+ return map;
+ }
+
+ private String[] parseLine(String line) {
+ String[] splitted = line.split("=");
+ if (splitted.length < 2) {
+ splitted = line.split(":");
+ }
+ String[] ret = new String[2];
+ ret[0] = splitted[0].trim();
+ ret[1] = splitted[1].trim().replace("\"", "");
+ return ret;
+ }
+
+ private Map getInfoViaFile(File file) throws IOException {
+ logger.trace("Going to read file {}", file.getAbsolutePath());
+ BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
+ Map map = parseBufferedReader(bufferedReader);
+ bufferedReader.close();
+ return map;
+
+ }
+
+ protected Map getInfoViaOsReleaseFile() throws IOException {
+ File osReleaseFile = new File(OS_RELEASE_FILE_PATH);
+ return getInfoViaFile(osReleaseFile);
+ }
+
+ private Map retriveInfo() {
+ try {
+ return getInfoViaLsbReleaseCommand();
+ } catch (IOException e) {
+
+ }
+
+ try {
+ return getInfoViaOsReleaseFile();
+ }catch (IOException e) {
+
+ }
+
+ return null;
+ }
+
+ public Map getInfo() {
+ if (info == null) {
+ info = retriveInfo();
+ }
+ return info;
+ }
+
+}
diff --git a/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/ProfileBuilder.java b/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/ProfileBuilder.java
index 05c5ec6..3f1ac67 100644
--- a/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/ProfileBuilder.java
+++ b/src/main/java/org/gcube/smartgears/handlers/container/lifecycle/ProfileBuilder.java
@@ -282,6 +282,15 @@ public class ProfileBuilder {
*/
+ String osVersion = System.getProperty("os.name");
+ if(osVersion.compareToIgnoreCase("Linux")==0) {
+ LinuxDistributionInfo linuxDistributionInfo = new LinuxDistributionInfo();
+ Map info = linuxDistributionInfo.getInfo();
+ for(String key : info.keySet()) {
+ variables.add().keyAndValue(key, info.get(key));
+ }
+ }
+
variables.add().keyAndValue("Java", System.getProperty("java.version"));
SmartGearsConfiguration config = ProviderFactory.provider().smartgearsConfiguration();