aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authoraxtloss <axtlos@getcryst.al>2023-05-25 20:00:54 +0200
committeraxtloss <axtlos@getcryst.al>2023-05-25 20:00:54 +0200
commit9c7f48af6e8b43960e0f51a9d1bca249421be685 (patch)
tree392ee954befa8eedea48593524bb9c0d320bf600 /src/main
parent44ea7455e1f440a8df4070604213b390c21e7a3d (diff)
downloadjshipit-9c7f48af6e8b43960e0f51a9d1bca249421be685.tar.gz
jshipit-9c7f48af6e8b43960e0f51a9d1bca249421be685.tar.bz2
Change mount function and add chmod
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/io/github/jshipit/BlobDownloader.java2
-rw-r--r--src/main/java/io/github/jshipit/ContainerManager.java5
-rwxr-xr-xsrc/main/java/io/github/jshipit/DockerAPIHelper.java1
-rw-r--r--src/main/java/io/github/jshipit/Mount.java48
-rw-r--r--src/main/java/io/github/jshipit/SysUtils.java34
-rw-r--r--src/main/java/io/github/jshipit/TarManager.java2
6 files changed, 39 insertions, 53 deletions
diff --git a/src/main/java/io/github/jshipit/BlobDownloader.java b/src/main/java/io/github/jshipit/BlobDownloader.java
index 850e1ac..7303cd3 100644
--- a/src/main/java/io/github/jshipit/BlobDownloader.java
+++ b/src/main/java/io/github/jshipit/BlobDownloader.java
@@ -31,7 +31,6 @@ public class BlobDownloader extends Thread {
URL url_obj = null;
try {
url_obj = new URI(this.url).toURL();
- System.out.println(url_obj);
} catch(URISyntaxException | MalformedURLException e) {
System.out.println("URISyntaxException | MalformedURLException");
e.printStackTrace();
@@ -52,7 +51,6 @@ public class BlobDownloader extends Thread {
System.out.println("Error: " + con.getResponseCode());
throw new RuntimeException("Failed : HTTP error code : "
+ con.getResponseCode());
- } else {
}
} catch (IOException e) {
System.out.println("Failed to connect");
diff --git a/src/main/java/io/github/jshipit/ContainerManager.java b/src/main/java/io/github/jshipit/ContainerManager.java
index c8a0b96..cacf313 100644
--- a/src/main/java/io/github/jshipit/ContainerManager.java
+++ b/src/main/java/io/github/jshipit/ContainerManager.java
@@ -43,6 +43,7 @@ public class ContainerManager {
new File(containerDirectory + "/containerOverlay").mkdirs();
new File(containerDirectory + "/root").mkdirs();
+ new File(containerDirectory+"/work").mkdirs();
}
public void startContainer() {
@@ -61,9 +62,9 @@ public class ContainerManager {
}
assert layers.size() > 0;
- Mount mount = new Mount();
+ SysUtils sysUtils = new SysUtils();
String[] diffs = layers.toArray(new String[0]);
- mount.overlayMount(diffs, containerDirectory + "/containerOverlay", containerDirectory + "/root");
+ sysUtils.overlayMount(diffs, containerDirectory + "/containerOverlay", containerDirectory + "/root", containerDirectory + "/work");
}
diff --git a/src/main/java/io/github/jshipit/DockerAPIHelper.java b/src/main/java/io/github/jshipit/DockerAPIHelper.java
index 7ebde24..ae0e536 100755
--- a/src/main/java/io/github/jshipit/DockerAPIHelper.java
+++ b/src/main/java/io/github/jshipit/DockerAPIHelper.java
@@ -21,7 +21,6 @@ public class DockerAPIHelper {
private final String tag;
public DockerAPIHelper(String apiRepo, String repository, String image, String tag) {
- System.out.println("DockerAPIHelper constructor");
if (apiRepo.contains("registry.docker.io")) {
apiRepo = apiRepo.replace("registry", "registry-1"); // Docker is just funny like that
}
diff --git a/src/main/java/io/github/jshipit/Mount.java b/src/main/java/io/github/jshipit/Mount.java
deleted file mode 100644
index 63b60dd..0000000
--- a/src/main/java/io/github/jshipit/Mount.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package io.github.jshipit;
-
-import com.sun.jna.Library;
-import com.sun.jna.Native;
-import com.sun.jna.Platform;
-
-public class Mount {
- public interface CLibrary extends Library {
- int mount(String source, String target,
- String filesystemtype, int mountflags,
- String data);
-
- int umount(String target);
- }
-
- public void mount(String source, String target,
- String filesystemtype, int mountflags,
- String data) {
- CLibrary libc;
-
- if (Platform.isLinux()) {
- libc = Native.load("c", CLibrary.class);
- int result = libc.mount(source, target, filesystemtype, mountflags, data);
- if (result == 0) {
- System.out.println("Device mounted successfully.");
- } else {
- System.out.println("Device mount failed.");
- }
- }
- }
-
- public void overlayMount(String[] lower, String upper, String target) {
- CLibrary libc;
-
- if (Platform.isLinux()) {
- libc = Native.load("c", CLibrary.class);
- int result = libc.mount("overlay", target, "overlay", 0, "lowerdir="+String.join(":", lower)+",upperdir="+upper+",workdir="+target+"/work");
- if (result == 0) {
- System.out.println("Device mounted successfully.");
- } else {
- System.out.println("Device mount failed.");
- }
- } else {
- System.out.println("Platform not supported.");
- System.out.println("mount -t overlay overlay -o lowerdir="+String.join(":", lower)+",upperdir="+upper+",workdir="+target+"/work "+target);
- }
- }
-}
diff --git a/src/main/java/io/github/jshipit/SysUtils.java b/src/main/java/io/github/jshipit/SysUtils.java
new file mode 100644
index 0000000..3ea48fb
--- /dev/null
+++ b/src/main/java/io/github/jshipit/SysUtils.java
@@ -0,0 +1,34 @@
+package io.github.jshipit;
+
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.Platform;
+
+public class SysUtils {
+
+ interface CLibrary extends Library {
+ public int chmod(String path, int mode);
+ }
+
+ public void chmod(String path, int mode) {
+ CLibrary libc = (CLibrary) Native.load("c", CLibrary.class);
+ libc.chmod(path, mode);
+ }
+ public void overlayMount(String[] lower, String upper, String target, String work) {
+ if (Platform.isLinux()) {
+
+ ProcessBuilder pb = new ProcessBuilder("unshare", "--user", "--map-root-user", "--mount", "mount", "-t", "overlay", "overlay", "-o", "lowerdir="+String.join(":", lower)+",upperdir="+upper+",workdir="+work, target);
+ pb.inheritIO();
+ try {
+ Process p = pb.start();
+ p.waitFor();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ } else {
+ System.out.println("Platform not supported.");
+ System.out.println("mount -t overlay overlay -o lowerdir="+String.join(":", lower)+",upperdir="+upper+",workdir="+work+" "+target);
+ }
+ }
+}
diff --git a/src/main/java/io/github/jshipit/TarManager.java b/src/main/java/io/github/jshipit/TarManager.java
index 40db71d..41577a9 100644
--- a/src/main/java/io/github/jshipit/TarManager.java
+++ b/src/main/java/io/github/jshipit/TarManager.java
@@ -26,6 +26,7 @@ public class TarManager {
}
public void untar(String in, File out) throws IOException {
+ SysUtils chmod = new SysUtils();
try (TarArchiveInputStream fin = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(in)))){
TarArchiveEntry entry;
while ((entry = fin.getNextTarEntry()) != null) {
@@ -37,6 +38,7 @@ public class TarManager {
if (!parent.exists()) {
parent.mkdirs();
}
+ chmod.chmod(curfile.getPath(), entry.getMode());
IOUtils.copy(fin, new FileOutputStream(curfile));
}
}