#!/bin/bash # # Script to prepare source code and binary distribution files of rEFInd. # By Rod Smith, 3/11/2012 # Updated 11/8/2012 to do more things automatically # Updated 12/6/2012 to sign binaries with the rEFInd MOK # # Usage: ./mkdistrib version [--nosign] # where "version" is a version number # MUST be run from an x86-64 system, on which the TianoCore build # includes both X64 and IA32 build support ("TARGET_ARCH = IA32 X64" # in Conf/target.txt). The MOK files must be available from a disk # partition to be mounted via /etc/fstab at /mnt/refind. if [[ $2 == "--nosign" ]] ; then SignIt=0 else SignIt=1 fi StartDir=`pwd` SBSign=`which sbsign 2> /dev/null` KeysDir=/mnt/refind KeysInfo=`df $KeysDir 2> /dev/null | grep $KeysDir` if [[ ! -n $SBSign && $SignIt == 1 ]] ; then echo "Can't find sbsign binary! Aborting!" exit 1 fi if [[ ! -n $KeysInfo && $SignIt == 1 ]] ; then mount /mnt/refind if [[ $? -ne 0 ]] ; then echo "Error mounting $KeysDir! Aborting!" echo "" exit 1 fi fi # From here on, if there's an error, abort immediately. set -e make clean # Remove temporary files from the "debian" subdirectory rm -rf debian/refind debian/*.log # Convert man pages to HTML form man2html docs/man/mkrlconf.8 > docs/refind/mkrlconf.html man2html docs/man/mvrefind.8 > docs/refind/mvrefind.html man2html docs/man/refind-install.8 > docs/refind/refind-install.html # Prepare a place and copy files there.... mkdir -p ../snapshots/$1/refind-$1/icons/licenses ../snapshots/$1/refind-$1/icons/svg cp --preserve=timestamps icons/*png icons/README ../snapshots/$1/refind-$1/icons/ cp --preserve=timestamps -r icons/licenses/* ../snapshots/$1/refind-$1/icons/licenses/ cp --preserve=timestamps -r icons/svg/* ../snapshots/$1/refind-$1/icons/svg/ cp -a debian docs images keys fonts banners include EfiLib libeg mok net refind filesystems gptsync refind.spec refind-install mkrlconf mvrefind mountesp CREDITS.txt NEWS.txt BUILDING.txt COPYING.txt LICENSE.txt README.txt refind.inf Make.tiano Make.common Makefile refind.conf-sample ../snapshots/$1/refind-$1 # Go there and prepare a souce code tarball.... cd ../snapshots/$1/ rm -f refind-src-$1.tar.gz tar cvf refind-src-$1.tar refind-$1 gzip -9 refind-src-$1.tar # Remove SVG files, since they aren't needed for binary packages.... rm -rf refind-$1/icons/svg # Build the IA32 binaries cd refind-$1 ARCH=ia32 make -j1 ARCH=ia32 make fs mkdir -p refind-bin-$1/refind/drivers_ia32 cp --preserve=timestamps drivers_ia32/*_ia32.efi refind-bin-$1/refind/drivers_ia32/ cp --preserve=timestamps filesystems/LICENSE*txt refind-bin-$1/refind/drivers_ia32/ cp refind/refind_ia32.efi refind-bin-$1/refind/refind_ia32.efi cp refind/refind_ia32.efi $StartDir/ mkdir -p refind-bin-$1/refind/tools_ia32 cp --preserve=timestamps gptsync/gptsync_ia32.efi refind-bin-$1/refind/tools_ia32/ # Build the X64 binaries make clean make -j1 make fs mkdir -p refind-bin-$1/refind/drivers_x64 cp -a icons refind-bin-$1/refind/ if [[ $SignIt == 1 ]] ; then for File in `ls drivers_x64/*_x64.efi` ; do $SBSign --key $KeysDir/refind.key --cert $KeysDir/refind.crt --output refind-bin-$1/refind/$File $File done else cp --preserve=timestamps drivers_x64/*_x64.efi refind-bin-$1/refind/drivers_x64/ fi cp --preserve=timestamps filesystems/LICENSE*txt refind-bin-$1/refind/drivers_x64/ cp --preserve=timestamps refind.conf-sample refind-bin-$1/refind/ if [[ $SignIt == 1 ]] ; then $SBSign --key $KeysDir/refind.key --cert $KeysDir/refind.crt --output refind-bin-$1/refind/refind_x64.efi refind/refind_x64.efi else cp refind/refind_x64.efi refind-bin-$1/refind/refind_x64.efi fi mkdir -p refind-bin-$1/refind/tools_x64 if [[ $SignIt == 1 ]] ; then $SBSign --key $KeysDir/refind.key --cert $KeysDir/refind.crt --output refind-bin-$1/refind/tools_x64/gptsync_x64.efi gptsync/gptsync_x64.efi else cp --preserve=timestamps gptsync/gptsync_x64.efi refind-bin-$1/refind/tools_x64/ fi cp refind-bin-$1/refind/refind_x64.efi $StartDir cp -a docs keys banners fonts COPYING.txt LICENSE.txt README.txt CREDITS.txt NEWS.txt refind-install mkrlconf mvrefind mountesp refind-bin-$1 # Prepare the final .zip file zip -9r ../refind-bin-$1.zip refind-bin-$1 # Prepare a variant with the x86-64 version built with GNU-EFI.... make clean make -j1 gnuefi if [[ $SignIt == 1 ]] ; then $SBSign --key $KeysDir/refind.key --cert $KeysDir/refind.crt --output refind-bin-$1/refind/refind_x64.efi refind/refind_x64.efi else cp refind/refind_x64.efi refind-bin-$1/refind/refind_x64.efi fi zip -9r ../refind-bin-gnuefi-$1.zip refind-bin-$1 # Clean up.... cd .. rm -r refind-$1 # Prepare the RPM & Debian package files cp refind-src-$1.tar.gz ~/rpmbuild/SOURCES/ rpmbuild -ba $StartDir/refind.spec mv ~/rpmbuild/RPMS/*/refind-$1* ./ mv ~/rpmbuild/SRPMS/refind-$1* ./ sudo alien --to-deb -k -c refind-$1*x86_64.rpm sudo chown rodsmith: refind*deb rm ~/rpmbuild/SOURCES/refind-src-$1.tar.gz # Clean up if [[ $SignIt == 1 ]] ; then umount $KeysDir fi # Finish cd $StartDir