diff options
| author | Sean Whitton <spwhitton@spwhitton.name> | 2017-11-19 12:04:26 -0700 |
|---|---|---|
| committer | Sean Whitton <spwhitton@spwhitton.name> | 2017-11-19 12:04:26 -0700 |
| commit | 05e5308ee7cef99b24b4f9d9755e5488f8d92a39 (patch) | |
| tree | 256b8f20bddf0f0701a3247228f9c2dd77be6e64 /src/Propellor/Property/Machine.hs | |
| parent | 38d039310e4db6ffaf5c8ca51c339421e6865eff (diff) | |
| parent | 12beba0367d14f9c52adf72dd36e9cf5a8e35761 (diff) | |
Merge branch 'master' of https://git.joeyh.name/git/propellor into sbuild-overhaul
Diffstat (limited to 'src/Propellor/Property/Machine.hs')
| -rw-r--r-- | src/Propellor/Property/Machine.hs | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/src/Propellor/Property/Machine.hs b/src/Propellor/Property/Machine.hs new file mode 100644 index 00000000..b4ffc008 --- /dev/null +++ b/src/Propellor/Property/Machine.hs @@ -0,0 +1,164 @@ +-- | Machine-specific properties. +-- +-- Many embedded computers have their own special configuration needed +-- to use them. Rather than needing to hunt down documentation about the +-- kernel, bootloader, etc for a given machine, if there's a property +-- in here for your machine, you can simply use it. +-- +-- Not all machine properties have been tested yet. If one flagged as +-- untested and you find it works, please let us know. +-- +-- You will need to configure the `Host` with the right `Architecture` +-- for the machine. These properties do test at runtime that a supported +-- Architecture was selected. +-- +-- Sometimes non-free firmware is needed to use a board. If the board won't +-- be functional at all without it, its property will include the non-free +-- firmware, but if the non-free firmware is only needed for non-critical +-- functionality, it won't be included. + +module Propellor.Property.Machine ( + -- * ARM boards + Marvell_SheevaPlug_BootDevice(..), + marvell_SheevaPlug, + cubietech_Cubietruck, + olimex_A10_OLinuXino_LIME, + -- * ARM boards (untested) + cubietech_Cubieboard, + cubietech_Cubieboard2, + lemaker_Banana_Pi, + 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 + +data Marvell_SheevaPlug_BootDevice + = Marvell_SheevaPlug_SDCard + | Marvell_SheevaPlug_ESATA + +-- | Marvel SheevaPlug +-- +-- Needs a small /boot partition formatted EXT2 +-- +-- Note that u-boot may need to be upgraded manually, and will need to be +-- configured to boot from the SD card or eSATA. See +-- https://www.cyrius.com/debian/kirkwood/sheevaplug/install/ +marvell_SheevaPlug :: Marvell_SheevaPlug_BootDevice -> Property (HasInfo + DebianLike) +marvell_SheevaPlug Marvell_SheevaPlug_SDCard = + FlashKernel.installed "Marvell SheevaPlug Reference Board" + `requires` marvell +marvell_SheevaPlug Marvell_SheevaPlug_ESATA = + FlashKernel.installed "Marvell eSATA SheevaPlug Reference Board" + `requires` marvell + +-- | Cubietech Cubietruck +-- +-- Wifi needs non-free firmware-brcm80211, which is not installed by +-- this property. Also, see https://bugs.debian.org/844056 +cubietech_Cubietruck :: Property (HasInfo + DebianLike) +cubietech_Cubietruck = FlashKernel.installed "Cubietech Cubietruck" + `requires` sunixi "Cubietruck" + `requires` lpae + +-- | Cubietech Cubieboard (untested) +cubietech_Cubieboard :: Property (HasInfo + DebianLike) +cubietech_Cubieboard = FlashKernel.installed "Cubietech Cubieboard" + `requires` sunixi "Cubieboard" + `requires` armmp + +-- | Cubietech Cubieboard2 (untested) +cubietech_Cubieboard2 :: Property (HasInfo + DebianLike) +cubietech_Cubieboard2 = FlashKernel.installed "Cubietech Cubieboard2" + `requires` sunixi "Cubieboard2" + `requires` lpae + +-- | LeMaker Banana Pi +lemaker_Banana_Pi :: Property (HasInfo + DebianLike) +lemaker_Banana_Pi = FlashKernel.installed "LeMaker Banana Pi" + `requires` sunixi "Bananapi" + `requires` lpae + +-- | LeMaker Banana Pro (untested) +lemaker_Banana_Pro :: Property (HasInfo + DebianLike) +lemaker_Banana_Pro = FlashKernel.installed "LeMaker Banana Pro" + `requires` sunixi "Bananapro" + `requires` lpae + +-- | Olimex A10-OLinuXino-LIME +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 (untested) +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 (untested) +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 (untested) +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 (untested) +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 (untested) +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 pcDuino Nano (untested) +-- +-- Needs non-free firmware, see +-- https://wiki.debian.org/InstallingDebianOn/Allwinner +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 |
