haskus-system-build-0.7.0.0: src/apps/Haskus/Apps/System/Build/ISO.hs
module Haskus.Apps.System.Build.ISO
( isoMake
)
where
import Haskus.Apps.System.Build.Config
import Haskus.Apps.System.Build.Utils
import Haskus.Apps.System.Build.Disk
import Haskus.Apps.System.Build.Syslinux
import System.FilePath
import System.Directory
import qualified Data.Text as Text
import qualified Data.List as List
isoMake :: SystemConfig -> IO FilePath
isoMake config = do
wd <- getWorkDir
let
isoPath = wd </> "iso"
isoFile = isoPath </> Text.unpack (ramdiskInit (ramdiskConfig config)) <.> "iso"
-- get hybrid MBR file path
syslinuxpath <- syslinuxMain (syslinuxConfig config)
let mbrfile = syslinuxpath </> "bios" </> "mbr" </> "isohdpfx_c.bin"
createDirectoryIfMissing True isoPath
withDisk config $ \fp -> do
showStep "Building ISO image..."
shellWaitErr
(mconcat $ List.intersperse " "
[ "xorriso -as mkisofs"
, "-R -J" -- use rock-ridge/joliet extensions
, "-o ", isoFile
, "-c boot/syslinux/boot.cat" -- create boot catalog
, "-b boot/syslinux/isolinux.bin" -- bootable binary file
, "-no-emul-boot" -- don't use legacy floppy emulation
, "-boot-info-table" -- write additional boot info table
-- (required by Sylinux)
, "-boot-load-size 4"
, "-isohybrid-mbr", mbrfile
, fp
])
(failWith "Unable to create ISO image")
putStrLn $ "ISO image: " ++ isoFile
return isoFile