diff --git a/Sources/APIServer/Kernel/KernelService.swift b/Sources/APIServer/Kernel/KernelService.swift index c85929b1..70b968e5 100644 --- a/Sources/APIServer/Kernel/KernelService.swift +++ b/Sources/APIServer/Kernel/KernelService.swift @@ -77,9 +77,8 @@ actor KernelService { .setDescription("Unpacking kernel") ]) let archiveReader = try ArchiveReader(file: tarFile) - try archiveReader.extractContents(to: tempDir) - let kernelPath = tempDir.appendingPathComponent(kernelFilePath).resolvingSymlinksInPath() - try self.installKernel(kernelFile: kernelPath, platform: platform) + let kernelFile = try archiveReader.extractFile(from: kernelFilePath, to: tempDir) + try self.installKernel(kernelFile: kernelFile, platform: platform) if !FileManager.default.fileExists(atPath: tar.absoluteString) { try FileManager.default.removeItem(at: tarFile) @@ -108,3 +107,14 @@ actor KernelService { return Kernel(path: defaultKernelPath, platform: platform) } } + +extension ArchiveReader { + fileprivate func extractFile(from: String, to directory: URL) throws -> URL { + let (_, data) = try self.extractFile(path: from) + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true, attributes: nil) + let fileName = URL(filePath: from).lastPathComponent + let fileURL = directory.appendingPathComponent(fileName) + try data.write(to: fileURL, options: .atomic) + return fileURL + } +} diff --git a/Sources/CLI/System/SystemStart.swift b/Sources/CLI/System/SystemStart.swift index 757b81ca..f29cb951 100644 --- a/Sources/CLI/System/SystemStart.swift +++ b/Sources/CLI/System/SystemStart.swift @@ -85,13 +85,13 @@ extension Application { ) } - var kernelConfigured: Bool = false + var kernelConfigured: Bool = true var missingDependencies: [Dependencies] = [] if await !initImageExists() { missingDependencies.append(.initFs) } if await !kernelExists() { - kernelConfigured = true + kernelConfigured = false missingDependencies.append(.kernel) } guard missingDependencies.count > 0 else { diff --git a/Sources/ContainerClient/XPC+.swift b/Sources/ContainerClient/XPC+.swift index 80fb95fa..aa06e4a7 100644 --- a/Sources/ContainerClient/XPC+.swift +++ b/Sources/ContainerClient/XPC+.swift @@ -94,7 +94,6 @@ public enum XPCKeys: String { case kernelTarURL case kernelFilePath case setDefault - case installedKernels case systemPlatform case kernelName }