diff options
author | axtloss <axtlos@getcryst.al> | 2023-05-25 21:42:55 +0200 |
---|---|---|
committer | axtloss <axtlos@getcryst.al> | 2023-05-25 21:42:55 +0200 |
commit | 75bbdb15e6f90d4f690b839f6db0cedfb61045be (patch) | |
tree | 2ae2184baeb3786239f1298098c810f769a37fce /src/main/java/io/github/jshipit/ContainerManager.java | |
parent | fda79997703823e7d65e9f639a3247119a97e5b3 (diff) | |
download | jshipit-75bbdb15e6f90d4f690b839f6db0cedfb61045be.tar.gz jshipit-75bbdb15e6f90d4f690b839f6db0cedfb61045be.tar.bz2 |
Make the start command work
I should rename this to "JHackIT", because this only consists of hacks
lmao
Diffstat (limited to 'src/main/java/io/github/jshipit/ContainerManager.java')
-rw-r--r-- | src/main/java/io/github/jshipit/ContainerManager.java | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/main/java/io/github/jshipit/ContainerManager.java b/src/main/java/io/github/jshipit/ContainerManager.java index c22d51b..8a3ecc7 100644 --- a/src/main/java/io/github/jshipit/ContainerManager.java +++ b/src/main/java/io/github/jshipit/ContainerManager.java @@ -52,7 +52,7 @@ public class ContainerManager { new File(containerDirectory+"/work").mkdirs(); } - public void startContainer() { + public String startContainer(boolean getCommand) { String containerDirectory = dataStore.getContainerPath(this.containerName); List<String> content = null; @@ -70,14 +70,13 @@ public class ContainerManager { SysUtils sysUtils = new SysUtils(); String[] diffs = layers.toArray(new String[0]); - sysUtils.overlayMount(diffs, containerDirectory + "/containerOverlay", containerDirectory + "/root", containerDirectory + "/work"); + return sysUtils.overlayMount(diffs, containerDirectory + "/containerOverlay", containerDirectory + "/root", containerDirectory + "/work", !getCommand); } public void runCommand(String command) { String containerDirectory = dataStore.getContainerPath(this.containerName); String dataStorePath = dataStore.getPath(); - startContainer(); File configPath = new File(dataStorePath + "/" + this.containerImage + "/" + this.containerTag + "/config"); String content = null; @@ -114,10 +113,21 @@ public class ContainerManager { bwrapCommand.add("--ro-bind "+containerDirectory+"/root / --chdir /"); bwrapCommand.add("--share-net"); - bwrapCommand.add("--hostname "+ (!hostname.isBlank() ? hostname : this.containerName+"-"+this.containerImage)); - bwrapCommand.add(cmd); + bwrapCommand.add("--unshare-uts --hostname "+ (!hostname.isBlank() ? hostname : this.containerName+"-"+this.containerImage)); + bwrapCommand.add("/bin/sh -c "+cmd); SysUtils sysUtils = new SysUtils(); - sysUtils.execInBwrap(bwrapCommand.toArray(new String[0])); + String bwrapCMD = sysUtils.execInBwrap(bwrapCommand.toArray(new String[0]), false); + String mountCMD = startContainer(true); + + String CMD = "unshare --user --map-root-user --mount bash -c \""+mountCMD+";"+bwrapCMD+";"+command+"\""; // I am starting to realize that this project was not a good idea + ProcessBuilder pb = new ProcessBuilder("bash", "-c", CMD); + pb.inheritIO(); + try { + Process p = pb.start(); + p.waitFor(); + } catch (IOException | InterruptedException e) { + throw new RuntimeException(e); + } } public String genContainerID() { |