From 75bbdb15e6f90d4f690b839f6db0cedfb61045be Mon Sep 17 00:00:00 2001 From: axtloss Date: Thu, 25 May 2023 21:42:55 +0200 Subject: Make the start command work I should rename this to "JHackIT", because this only consists of hacks lmao --- .../java/io/github/jshipit/ContainerManager.java | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src/main/java/io/github/jshipit/ContainerManager.java') 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 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() { -- cgit v1.2.3