1 #!/bin/ksh
   2 
   3 # This file and its contents are supplied under the terms of the
   4 # Common Development and Distribution License ("CDDL"), version 1.0.
   5 # You may only use this file in accordance with the terms of version
   6 # 1.0 of the CDDL.
   7 #
   8 # A full copy of the text of the CDDL should have accompanied this
   9 # source. A copy of the CDDL is also available via the Internet at
  10 # http://www.illumos.org/license/CDDL.
  11 
  12 # Copyright 2019 OmniOS Community Edition (OmniOSce) Association.
  13 # Copyright 2019 Joyent, Inc.
  14 
  15 # A simple update script that extracts an Intel microcode download file
  16 # into the intel/ directory, and updates the hardlinks in the
  17 # system/kernel/platform manifest.
  18 
  19 set -e
  20 set -o pipefail
  21 
  22 [[ -z "$1" ]] || [[ ! -f "$1" ]] && {
  23         echo "Syntax: $0 <path to microcode tar>" >&2
  24         exit 1
  25 }
  26 
  27 ucodetar="$1"
  28 
  29 mf=../../pkg/manifests/system-microcode-intel.mf
  30 [[ -f $mf ]] || {
  31         echo "Run from usr/src/data/ucode" 2>&1
  32         exit 1
  33 }
  34 
  35 fw=platform/i86pc/ucode/GenuineIntel
  36 
  37 tmp=$(mktemp -d)
  38 mkdir $tmp/out
  39 
  40 gtar -C $tmp -xvf "$ucodetar"
  41 
  42 find $tmp/Intel-Linux-Processor-Microcode-Data*/intel-ucode*/ -type f \
  43     | while read f; do
  44         echo "Converting $(basename $f)"
  45         cp $f $tmp/intel-fw
  46         ucodeadm -i -R $tmp/out $tmp/intel-fw
  47         rm -f $tmp/intel-fw
  48 done
  49 
  50 pkgfmt -u $mf
  51 mv $mf $mf.tmp
  52 egrep -v "(file|hardlink) path=$fw" $mf.tmp > $mf
  53 rm -f $mf.tmp
  54 
  55 rm -f intel/*
  56 
  57 cp $tmp/Intel-Linux-Processor-Microcode-Data*/license intel/THIRDPARTYLICENSE
  58 echo Intel Processor Microcode Data Files > intel/THIRDPARTYLICENSE.descrip
  59 
  60 rm -f Makefile.links
  61 
  62 typeset -A seen
  63 typeset -A inodes
  64 typeset -A links
  65 
  66 for f in $tmp/out/*; do
  67         bf=$(basename $f)
  68         [[ -n "${seen[$bf]}" ]] && continue
  69         inode=$(stat -c %i $f)
  70         if [[ -n "${inodes[$inode]}" ]]; then
  71                 links[$bf]=${inodes[$inode]}
  72         else
  73                 inodes[$inode]=$bf
  74                 cp $f intel/$bf
  75         fi
  76         seen[$bf]=1
  77 done
 
 | 
   1 #!/bin/ksh
   2 
   3 # This file and its contents are supplied under the terms of the
   4 # Common Development and Distribution License ("CDDL"), version 1.0.
   5 # You may only use this file in accordance with the terms of version
   6 # 1.0 of the CDDL.
   7 #
   8 # A full copy of the text of the CDDL should have accompanied this
   9 # source. A copy of the CDDL is also available via the Internet at
  10 # http://www.illumos.org/license/CDDL.
  11 
  12 # Copyright 2019 OmniOS Community Edition (OmniOSce) Association.
  13 # Copyright 2020 Joyent, Inc.
  14 
  15 # A simple update script that extracts an Intel microcode download file
  16 # into the intel/ directory, and updates the hardlinks in the
  17 # system/kernel/platform manifest.
  18 
  19 set -e
  20 set -o pipefail
  21 
  22 # Remove this once we start using pkgfmt without it in the rest of -gate.
  23 export PKGFMT_OUTPUT=v1
  24 
  25 # Change me if the world evolves, but for now, this is the source of
  26 # truth for Intel microcode.
  27 REPOSOURCE="https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files"
  28 
  29 tmp=$(mktemp -d)
  30 mkdir $tmp/out
  31 mf=../../pkg/manifests/system-microcode-intel.mf
  32 [[ -f $mf ]] || {
  33         echo "Run from usr/src/data/ucode" 2>&1
  34         exit 1
  35 }
  36 
  37 fw=platform/i86pc/ucode/GenuineIntel
  38 
  39 if [[ -z "$1" ]]; then
  40         goback=`pwd`
  41         cd $tmp
  42         # Hope git is available if we need it...
  43         git clone $REPOSOURCE || {
  44                 echo "Git clone of $REPOSOURCE failed." 2>&1
  45                 exit 1
  46         }
  47         cd $goback
  48         # Change with REPOSOURCE name
  49         dir=$tmp/Intel-Linux-Processor-Microcode-Data-Files
  50 elif [[ -d "$1" ]]; then
  51         dir=$1
  52 else
  53         gtar -C $tmp -xvf "$1"
  54         # This will expand properly if the tarball appends a release
  55         # to the name.
  56         dir=$tmp/Intel-Linux-Processor-Microcode-Data-Files*
  57 fi
  58 
  59 find $dir/intel-ucode*/ -type f \
  60     | while read f; do
  61         echo "Converting $(basename $f)"
  62         cp $f $tmp/intel-fw
  63         ucodeadm -i -R $tmp/out $tmp/intel-fw
  64         rm -f $tmp/intel-fw
  65 done
  66 
  67 pkgfmt -u $mf
  68 mv $mf $mf.tmp
  69 egrep -v "(file|hardlink) path=$fw" $mf.tmp > $mf
  70 rm -f $mf.tmp
  71 
  72 rm -f intel/*
  73 
  74 cp $dir/license intel/THIRDPARTYLICENSE
  75 echo Intel Processor Microcode Data Files > intel/THIRDPARTYLICENSE.descrip
  76 
  77 rm -f Makefile.links
  78 
  79 typeset -A seen
  80 typeset -A inodes
  81 typeset -A links
  82 
  83 for f in $tmp/out/*; do
  84         bf=$(basename $f)
  85         [[ -n "${seen[$bf]}" ]] && continue
  86         inode=$(stat -c %i $f)
  87         if [[ -n "${inodes[$inode]}" ]]; then
  88                 links[$bf]=${inodes[$inode]}
  89         else
  90                 inodes[$inode]=$bf
  91                 cp $f intel/$bf
  92         fi
  93         seen[$bf]=1
  94 done
 
 |