diff --git a/pom.xml b/pom.xml
index 6b6b208..3e16ee4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,6 +14,111 @@
UTF-8
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 1.4
+
+
+ package
+
+ shade
+
+
+
+
+
+
+ *:*
+
+ module-info.class
+ JDOMAbout*class
+ META-INF/*.SF
+ META-INF/*.DSA
+ META-INF/*.RSA
+
+
+
+
+
+
+ ru.kirillius.mktbk.App
+
+
+
+ true
+
+ shaded
+
+
+
+
+
+ com.akathist.maven.plugins.launch4j
+ launch4j-maven-plugin
+ 2.1.2
+
+
+ l4j-wrapper
+ package
+
+ launch4j
+
+
+ console
+ https://aws.amazon.com/ru/corretto/
+ target/mktbk.exe
+
+ ${project.build.directory}/${project.artifactId}-${project.version}-shaded.jar
+
+
+
+ ru.kirillius.mktbk.App
+ false
+ anything
+
+
+
+ ./data
+ ${maven.compiler.source}
+
+
+
+
+ ${project.version}
+ ${project.version}
+ mktbk
+ copy left
+ ${project.version}
+ ${project.version}
+ mktbk
+ Y U SO SRS?
+ mktbk
+ mktbk.exe
+ ENGLISH_US
+
+
+
+
+
+
+
+
+
+
+
kirillius
diff --git a/src/main/java/ru/kirillius/mktbk/App.java b/src/main/java/ru/kirillius/mktbk/App.java
index 928e68b..f3d8461 100644
--- a/src/main/java/ru/kirillius/mktbk/App.java
+++ b/src/main/java/ru/kirillius/mktbk/App.java
@@ -1,14 +1,12 @@
package ru.kirillius.mktbk;
import me.legrange.mikrotik.MikrotikApiException;
-import net.schmizz.sshj.sftp.SFTPException;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
import org.apache.commons.compress.archivers.tar.TarConstants;
import ru.kirillius.utils.logging.SystemLogger;
import java.io.*;
-import java.rmi.RemoteException;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
@@ -115,10 +113,10 @@ public class App {
var layerFile = new File(container.getGuid());
var outputFile = new File("backup_of_" + container.getComment() + ".tar");
- if (!layerFile.exists()) {
- var files = findFiles(container);
- downloadFiles(container, files, layerFile);
- }
+
+ var files = findFiles(container);
+ downloadFiles(container, files, layerFile);
+
SystemLogger.message("Building docker image " + outputFile.getName(), LOG_CONTEXT);
var builder = new DockerImageBuilder(container);
@@ -141,10 +139,11 @@ public class App {
}
private void downloadFiles(ContainerMetadata container, List files, File outputFile) throws IOException {
+ SystemLogger.message("Building image layer from remote files", LOG_CONTEXT);
var sftp = deviceContext.getSftpClient();
try (var outputStream = new FileOutputStream(outputFile)) {
try (var tar = new TarArchiveOutputStream(outputStream)) {
- tar.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
+ tar.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
var status = new DownloadStatus("Downloading", files.size());
for (var file : files) {
try {
@@ -190,26 +189,14 @@ public class App {
private List findFiles(ContainerMetadata container) throws IOException, InterruptedException {
SystemLogger.message("Reading container filesystem metadata...", LOG_CONTEXT);
- var filterContents = List.of("/sys/", "/proc/", "/dev/", "/mnt/", "/run/", "/tmp/");
- var files = deviceContext.listFilesystem(container).stream().filter(f -> filterContents.contains(f.getPath()) || filterContents.stream().noneMatch(s -> f.getPath().startsWith(s))).toList();
+ var systemDirs = List.of("/sys/", "/proc/", "/dev/", "/mnt/", "/run/", "/tmp/");
+ var filterFiles = List.of("/.type");
+ var files = deviceContext.listFilesystem(container).stream().filter(fileMetadata -> !filterFiles.contains(fileMetadata.getPath())).filter(f -> systemDirs.contains(f.getPath()) || systemDirs.stream().noneMatch(s -> f.getPath().startsWith(s))).toList();
SystemLogger.message("Found " + files.size() + " files", LOG_CONTEXT);
return files;
}
-// private void openSSH() throws TransportException, ConnectionException {
-// session = client.startSession();
-// }
-
-
-// private void openSFTP() throws IOException {
-// sftpClient = client.newSFTPClient();
-// for (var info : sftpClient.ls("/")) {
-// System.out.println(info.getPath());
-// }
-//
-// }
-
private DeviceContext deviceContext;
private void auth() {
diff --git a/src/main/java/ru/kirillius/mktbk/DeviceContext.java b/src/main/java/ru/kirillius/mktbk/DeviceContext.java
index d609578..d2db4d7 100644
--- a/src/main/java/ru/kirillius/mktbk/DeviceContext.java
+++ b/src/main/java/ru/kirillius/mktbk/DeviceContext.java
@@ -8,11 +8,10 @@ import net.schmizz.sshj.sftp.SFTPClient;
import net.schmizz.sshj.transport.verification.PromiscuousVerifier;
import ru.kirillius.utils.logging.SystemLogger;
-import java.io.*;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.StringJoiner;
-import java.util.function.Predicate;
import java.util.regex.Pattern;
public class DeviceContext implements Closeable {
@@ -94,7 +93,10 @@ public class DeviceContext implements Closeable {
String line;
String directory = null;
while ((line = reader.readLine()) != null) {
- if (line.startsWith(LIST_COMMAND)) {
+ if (line.trim().endsWith(LIST_COMMAND)) {
+ continue;
+ }
+ if (line.contains(BEGIN_PATTERN)) {
continue;
}
if (line.endsWith(END_PATTERN)) {
diff --git a/src/main/java/ru/kirillius/mktbk/DownloadStatus.java b/src/main/java/ru/kirillius/mktbk/DownloadStatus.java
index 48f877f..3a4d1b6 100644
--- a/src/main/java/ru/kirillius/mktbk/DownloadStatus.java
+++ b/src/main/java/ru/kirillius/mktbk/DownloadStatus.java
@@ -41,18 +41,18 @@ public class DownloadStatus {
if (bytes < 1024) {
return bytes + " B";
} else if (bytes < 1048576L) {
- return Math.floor((float) bytes / 1024L) + " KB";
+ return Math.floor((float) bytes / 102.4f) / 10f + " KB";
} else if (bytes < 1073741824L) {
- return Math.floor((float) bytes / 1048576L) + " MB";
+ return Math.floor((float) bytes / 104857.6f) / 10f + " MB";
} else if (bytes < 1099511627776L) {
- return Math.floor((float) bytes / 1073741824L) + " GB";
+ return Math.floor((float) bytes / 107374182.4f) / 10f + " GB";
} else {
- return Math.floor((float) bytes / 1099511627776L) + " TB";
+ return Math.floor((float) bytes / 109951162777.6f) / 10f + " TB";
}
}
public void update() {
- if (System.currentTimeMillis() - lastUpdate < 1000) {
+ if (System.currentTimeMillis() - lastUpdate < 250) {
return;
}
clear();
@@ -69,7 +69,7 @@ public class DownloadStatus {
}
}
- public void finish(){
+ public void finish() {
lastUpdate = 0;
update();
}