blob: 52ed8c0eb7b2d705240d99773846639d6208a6cd (
plain)
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
|
#!/bin/ksh
# This file and its contents are supplied under the terms of the
# Common Development and Distribution License ("CDDL"), version 1.0.
# You may only use this file in accordance with the terms of version
# 1.0 of the CDDL.
#
# A full copy of the text of the CDDL should have accompanied this
# source. A copy of the CDDL is also available via the Internet at
# http://www.illumos.org/license/CDDL.
# Copyright 2019 OmniOS Community Edition (OmniOSce) Association.
# Copyright 2019 Joyent, Inc.
# A simple update script that extracts an Intel microcode download file
# into the intel/ directory, and updates the hardlinks in the
# system/kernel/platform manifest.
set -e
set -o pipefail
[[ -z "$1" ]] || [[ ! -f "$1" ]] && {
echo "Syntax: $0 <path to microcode tar>" >&2
exit 1
}
ucodetar="$1"
mf=../../pkg/manifests/system-microcode-intel.mf
[[ -f $mf ]] || {
echo "Run from usr/src/data/ucode" 2>&1
exit 1
}
fw=platform/i86pc/ucode/GenuineIntel
tmp=$(mktemp -d)
mkdir $tmp/out
gtar -C $tmp -xvf "$ucodetar"
find $tmp/Intel-Linux-Processor-Microcode-Data*/intel-ucode*/ -type f \
| while read f; do
echo "Converting $(basename $f)"
cp $f $tmp/intel-fw
ucodeadm -i -R $tmp/out $tmp/intel-fw
rm -f $tmp/intel-fw
done
pkgfmt -u $mf
mv $mf $mf.tmp
egrep -v "(file|hardlink) path=$fw" $mf.tmp > $mf
rm -f $mf.tmp
rm -f intel/*
cp $tmp/Intel-Linux-Processor-Microcode-Data*/license intel/THIRDPARTYLICENSE
echo Intel Processor Microcode Data Files > intel/THIRDPARTYLICENSE.descrip
rm -f Makefile.links
typeset -A seen
typeset -A inodes
typeset -A links
for f in $tmp/out/*; do
bf=$(basename $f)
[[ -n "${seen[$bf]}" ]] && continue
inode=$(stat -c %i $f)
if [[ -n "${inodes[$inode]}" ]]; then
links[$bf]=${inodes[$inode]}
else
inodes[$inode]=$bf
cp $f intel/$bf
fi
seen[$bf]=1
done
for f in intel/*; do
bf=$(basename $f)
[[ $bf = THIRDPARTYLICENSE* ]] && continue
echo "file path=$fw/$bf group=sys mode=0444 reboot-needed=true" >> $mf
done
(
sed '/^$/q' < ../../prototypes/prototype.Makefile
echo 'INTEL_LINKS = \'
for i in "${!links[@]}"; do
echo "\t$i \\"
done | sed '$s/ .*//'
echo
) > Makefile.links
for i in "${!links[@]}"; do
echo "hardlink path=$fw/$i target=${links[$i]}" >> $mf
cat << EOM >> Makefile.links
\$(ROOTINTELDIR)/$i: \$(ROOTINTELDIR)/${links[$i]}
\$(RM) \$@; \$(LN) \$^ \$@
EOM
done
pkgfmt $mf
rm -rf $tmp
|