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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
class syslinux (
String $kernel = 'linux',
String $efi_root = '/boot/efi',
String $bootentry = 'syslinux',
) {
$efi_dev = $facts['mountpoints'][$efi_root]
if ! $efi_dev {
fail("A device needs to be mounted on efi_root [${efi_root}]")
}
# $efi_dev['device']
ensure_packages ([
$kernel,
mkinitcpio,
syslinux,
efibootmgr,
], {
ensure => installed,
})
file { "/etc/mkinitcpio.d/${kernel}.preset":
ensure => file,
source => "puppet:///modules/${module_name}/mkinitcpio.${kernel}",
}
# cp -r /usr/lib/syslinux/efi64 ${efi_root}/EFI/syslinux
$device = $facts['mountpoints']['/']['device']
$partuuid = $facts['blkid'][$device]['PARTUUID']
file { "${efi_root}/EFI/syslinux/syslinux.cfg":
content => epp("${module_name}/syslinux.cfg.epp", {
'default' => 'arch',
'linux' => {
'arch' => {
'label' => 'Arch Linux',
'initrd' => 'initramfs-linux.img',
'args' => "root=PARTUUID=${partuuid} rw",
},
'arch-runlevel-1' => {
'label' => 'Arch Linux (Runlevel 1)',
'initrd' => 'initramfs-linux.img',
'args' => "root=PARTUUID=${partuuid} rw 1",
},
'archfallback' => {
'label' => 'Arch Linux fallback',
'initrd' => 'initramfs-linux-fallback.img',
'args' => "root=PARTUUID=${partuuid} rw",
}
},
'com32' => {
'hdt' => {
'label' => 'HDT (Hardware Detection Tool)',
'com' => 'hdt',
},
'reboot' => {
'label' => 'Reboot',
'com' => 'reboot',
},
'poweroff' => {
'label' => 'Poweroff',
'com' => 'poweroff',
}
}
})
}
file { "${efi_root}/EFI/arch":
ensure => directory,
}
$has_syslinux = $facts['efi']['boots'].any |$_, $value| {
$value == $bootentry
}
$partition = $facts['partinfo'][basename($efi_dev['device'])]
if ! $has_syslinux {
$efi_device = $partition['device']
$partid = $partition['partid']
exec { "efibootmgr --disk '/dev/${efi_device}' --part ${partid} --create --label '${bootentry}' --loader /EFI/syslinux/syslinux.efi":
path => [ '/usr/bin', '/bin', ],
}
}
file { '/usr/libexec':
ensure => directory,
}
file { '/usr/libexec/move-kernel':
ensure => file,
mode => '0555',
content => @("EOF"/$)
#!/bin/sh
IFS='\n' read data
cp "/\$data" "${efi_root}/EFI/arch/vmlinuz-${kernel}"
| EOF
}
pacman::hook { 'install-kernel':
priority => 60, # something less than /usr/share/libalpm/hooks/90-mkinitcpio-install.hook
trigger => {
type => 'Path',
operation => [ 'Install', 'Upgrade' ],
target => [ 'usr/lib/modules/*/vmlinuz', ],
},
description => 'Moving kernel to EFI',
when => 'PostTransaction',
exec => '/usr/libexec/move-kernel',
needsTargets => true ,
}
}
|