1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
-- | 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 needed by a given machine, if there's a property
-- in here for your machine, you can simply use it.
--
-- You will need to configure the `Host` with the right `Architecture`
-- for the machines. 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
) 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
--
-- 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 (untested)
--
-- Wifi needs non-free firmware-brcm80211, whicn 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
-- | Olimex A10-OLinuXino-LIME (untested)
olimex_A10_OLinuXino_LIME :: Property (HasInfo + DebianLike)
olimex_A10_OLinuXino_LIME = FlashKernel.installed "Olimex A10-OLinuXino-LIME"
`requires` sunixi "A10-OLinuXino-Lime"
`requires` armmp
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
|