module Propellor.Property.Machine (
Marvell_SheevaPlug_BootDevice(..),
marvell_SheevaPlug,
cubietech_Cubietruck,
olimex_A10_OLinuXino_LIME,
lemaker_Banana_Pi,
cubietech_Cubieboard,
cubietech_Cubieboard2,
lemaker_Banana_Pro,
olimex_A10s_OLinuXino_Micro,
olimex_A20_OLinuXino_LIME,
olimex_A20_OLinuXino_LIME2,
olimex_A20_OLinuXino_Micro,
olimex_A20_SOM_EVB,
linkSprite_pcDuino3_Nano,
) where
import Propellor.Base
import Propellor.Types.Core
import qualified Propellor.Property.Apt as Apt
import qualified Propellor.Property.FlashKernel as FlashKernel
import qualified Propellor.Property.Uboot as Uboot
import Propellor.Property.DiskImage.PartSpec
data Marvell_SheevaPlug_BootDevice
= Marvell_SheevaPlug_SDCard
| Marvell_SheevaPlug_ESATA
marvell_SheevaPlug :: Marvell_SheevaPlug_BootDevice -> Property (HasInfo + DebianLike)
marvell_SheevaPlug bd = fk
`requires` marvell
`requires` hasPartition bootpart
where
fk = case bd of
Marvell_SheevaPlug_SDCard ->
FlashKernel.installed "Marvell SheevaPlug Reference Board"
Marvell_SheevaPlug_ESATA ->
FlashKernel.installed "Marvell eSATA SheevaPlug Reference Board"
bootpart :: PartSpec PartLocation
bootpart = partition EXT2
`mountedAt` "/boot"
`partLocation` Beginning
`addFreeSpace` MegaBytes 150
cubietech_Cubietruck :: Property (HasInfo + DebianLike)
cubietech_Cubietruck = FlashKernel.installed "Cubietech Cubietruck"
`requires` sunixi "Cubietruck"
`requires` lpae
cubietech_Cubieboard :: Property (HasInfo + DebianLike)
cubietech_Cubieboard = FlashKernel.installed "Cubietech Cubieboard"
`requires` sunixi "Cubieboard"
`requires` armmp
cubietech_Cubieboard2 :: Property (HasInfo + DebianLike)
cubietech_Cubieboard2 = FlashKernel.installed "Cubietech Cubieboard2"
`requires` sunixi "Cubieboard2"
`requires` lpae
lemaker_Banana_Pi :: Property (HasInfo + DebianLike)
lemaker_Banana_Pi = FlashKernel.installed "LeMaker Banana Pi"
`requires` sunixi "Bananapi"
`requires` lpae
lemaker_Banana_Pro :: Property (HasInfo + DebianLike)
lemaker_Banana_Pro = FlashKernel.installed "LeMaker Banana Pro"
`requires` sunixi "Bananapro"
`requires` lpae
olimex_A10_OLinuXino_LIME :: Property (HasInfo + DebianLike)
olimex_A10_OLinuXino_LIME = FlashKernel.installed "Olimex A10-OLinuXino-LIME"
`requires` sunixi "A10-OLinuXino-Lime"
`requires` armmp
olimex_A10s_OLinuXino_Micro :: Property (HasInfo + DebianLike)
olimex_A10s_OLinuXino_Micro = FlashKernel.installed "Olimex A10s-Olinuxino Micro"
`requires` sunixi "A10s-OLinuXino-M"
`requires` armmp
olimex_A20_OLinuXino_LIME :: Property (HasInfo + DebianLike)
olimex_A20_OLinuXino_LIME = FlashKernel.installed "Olimex A20-OLinuXino-LIME"
`requires` sunixi "A20-OLinuXino-Lime"
`requires` lpae
olimex_A20_OLinuXino_LIME2 :: Property (HasInfo + DebianLike)
olimex_A20_OLinuXino_LIME2 = FlashKernel.installed "Olimex A20-OLinuXino-LIME2"
`requires` sunixi "A20-OLinuXino-Lime2"
`requires` lpae
olimex_A20_OLinuXino_Micro :: Property (HasInfo + DebianLike)
olimex_A20_OLinuXino_Micro = FlashKernel.installed "Olimex A20-Olinuxino Micro"
`requires` sunixi "A20-OLinuXino-MICRO"
`requires` lpae
olimex_A20_SOM_EVB :: Property (HasInfo + DebianLike)
olimex_A20_SOM_EVB = FlashKernel.installed "Olimex A20-Olimex-SOM-EVB"
`requires` sunixi "A20-Olimex-SOM-EVB"
`requires` lpae
linkSprite_pcDuino3_Nano :: Property (HasInfo + DebianLike)
linkSprite_pcDuino3_Nano = FlashKernel.installed "LinkSprite pcDuino3 Nano"
`requires` sunixi "Linksprite_pcDuino3"
`requires` lpae
sunixi :: Uboot.BoardName -> Property (HasInfo + DebianLike)
sunixi boardname = Uboot.sunxi boardname
`requires` Apt.installed
[ "firmware-linux-free"
, "sunxi-tools"
]
armmp :: Property DebianLike
armmp = checkArchitecture [ARMHF, ARMEL] $
Apt.installed ["linux-image-armmp"]
lpae :: Property DebianLike
lpae = checkArchitecture [ARMHF, ARMEL] $
Apt.installed ["linux-image-armmp-lpae"]
marvell :: Property DebianLike
marvell = checkArchitecture [ARMEL] $
Apt.installed ["linux-image-marvell"]
checkArchitecture :: [Architecture] -> Property DebianLike -> Property DebianLike
checkArchitecture as p = withOS (getDesc p) $ \w o -> case o of
(Just (System _ arch)) | arch `elem` as -> ensureProperty w p
_ -> error $ "Machine needs architecture to be one of: " ++ show as