A Docker-like CLI and HTTP API for managing headless VMs

feat: add support for genisoimage as an alternative to xorriso for ISO generation

+45 -1
+45 -1
src/xorriso.ts
··· 121 121 }, 122 122 }); 123 123 124 + const runGenisoimage = Effect.tryPromise({ 125 + try: async () => { 126 + const genisoimage = new Deno.Command("genisoimage", { 127 + args: [ 128 + "-output", 129 + "seed.iso", 130 + "-volid", 131 + "cidata", 132 + "-joliet", 133 + "-rock", 134 + "seed", 135 + ], 136 + stdout: "inherit", 137 + stderr: "inherit", 138 + }).spawn(); 139 + 140 + const status = await genisoimage.status; 141 + 142 + if (!status.success) { 143 + throw new XorrisoError( 144 + status.code, 145 + `genisoimage failed with code ${status.code}. Please ensure ${ 146 + chalk.green( 147 + "genisoimage", 148 + ) 149 + } is installed and accessible in your PATH.`, 150 + ); 151 + } 152 + 153 + return status; 154 + }, 155 + catch: (error) => { 156 + if (error instanceof XorrisoError) return error; 157 + return new XorrisoError( 158 + null, 159 + `Unexpected error: ${ 160 + error instanceof Error ? error.message : String(error) 161 + }`, 162 + ); 163 + }, 164 + }); 165 + 124 166 export const createSeedIso = (seed: Seed) => 125 167 pipe( 126 168 createSeedDirectory, 127 169 Effect.flatMap(() => 128 170 Effect.all([writeMetaData(seed), writeUserData(seed)]) 129 171 ), 130 - Effect.flatMap(() => runXorriso), 172 + Effect.flatMap(() => 173 + Deno.build.os === "linux" ? runGenisoimage : runXorriso 174 + ), 131 175 ); 132 176 133 177 export default (seed: Seed) => Effect.runPromise(createSeedIso(seed));