]> code.delx.au - refind/blob - mkdistrib
78fbe95466feee2e063b67e20467258411cbfcd4
[refind] / mkdistrib
1 #!/bin/bash
2 #
3 # Script to prepare source code and binary distribution files of rEFInd.
4 # By Rod Smith, 3/11/2012
5 # Updated 11/8/2012 to do more things automatically
6 # Updated 12/6/2012 to sign binaries with the rEFInd MOK
7 #
8 # Usage: ./mkdistrib version [--nosign]
9 # where "version" is a version number
10 # MUST be run from an x86-64 system, on which the TianoCore build
11 # includes both X64 and IA32 build support ("TARGET_ARCH = IA32 X64"
12 # in Conf/target.txt). The MOK files must be available from a disk
13 # partition to be mounted via /etc/fstab at /mnt/refind.
14
15
16 if [[ $2 == "--nosign" ]] ; then
17 SignIt=0
18 else
19 SignIt=1
20 fi
21
22 StartDir=`pwd`
23 SBSign=`which sbsign 2> /dev/null`
24 KeysDir=/mnt/refind
25
26 KeysInfo=`df $KeysDir 2> /dev/null | grep $KeysDir`
27
28 if [[ ! -n $SBSign && $SignIt == 1 ]] ; then
29 echo "Can't find sbsign binary! Aborting!"
30 exit 1
31 fi
32
33 if [[ ! -n $KeysInfo && $SignIt == 1 ]] ; then
34 mount /mnt/refind
35 if [[ $? -ne 0 ]] ; then
36 echo "Error mounting $KeysDir! Aborting!"
37 echo ""
38 exit 1
39 fi
40 fi
41
42 # From here on, if there's an error, abort immediately.
43 set -e
44
45 make clean
46
47 # Remove temporary files from the "debian" subdirectory
48 rm -rf debian/refind debian/*.log
49
50 # Convert man pages to HTML form
51 man2html docs/man/mkrlconf.8 > docs/refind/mkrlconf.html
52 man2html docs/man/mvrefind.8 > docs/refind/mvrefind.html
53 man2html docs/man/refind-install.8 > docs/refind/refind-install.html
54
55 # Prepare a place and copy files there....
56 mkdir -p ../snapshots/$1/refind-$1/icons/licenses ../snapshots/$1/refind-$1/icons/svg
57 cp --preserve=timestamps icons/*png icons/README ../snapshots/$1/refind-$1/icons/
58 cp --preserve=timestamps -r icons/licenses/* ../snapshots/$1/refind-$1/icons/licenses/
59 cp --preserve=timestamps -r icons/svg/* ../snapshots/$1/refind-$1/icons/svg/
60 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 Make.aarch64 Makefile refind.conf-sample ../snapshots/$1/refind-$1
61
62 # Go there and prepare a souce code tarball....
63 cd ../snapshots/$1/
64 rm -f refind-src-$1.tar.gz
65 tar cvf refind-src-$1.tar refind-$1
66 gzip -9 refind-src-$1.tar
67
68 # Remove SVG files, since they aren't needed for binary packages....
69 rm -rf refind-$1/icons/svg
70
71 # Build the ARM64 binaries
72 cd refind-$1
73 ARCH=aarch64 make -j1
74 ARCH=aarch64 make fs
75 mkdir -p refind-bin-$1/refind/drivers_aa64
76 cp --preserve=timestamps drivers_aa64/*_aa64.efi refind-bin-$1/refind/drivers_aa64/
77 cp --preserve=timestamps filesystems/LICENSE*txt refind-bin-$1/refind/drivers_aa64/
78 cp refind/refind_aa64.efi refind-bin-$1/refind/refind_aa64.efi
79 cp refind/refind_aa64.efi $StartDir/
80 mkdir -p refind-bin-$1/refind/tools_aa64
81 # Don't copy gptsync_aa64.efi because it won't build in cross-compile environment
82 # and because it's likely to be useless on ARM64.
83
84 # Build the IA32 binaries
85 make clean
86 ARCH=ia32 make -j1
87 ARCH=ia32 make fs
88 mkdir -p refind-bin-$1/refind/drivers_ia32
89 cp --preserve=timestamps drivers_ia32/*_ia32.efi refind-bin-$1/refind/drivers_ia32/
90 cp --preserve=timestamps filesystems/LICENSE*txt refind-bin-$1/refind/drivers_ia32/
91 cp refind/refind_ia32.efi refind-bin-$1/refind/refind_ia32.efi
92 cp refind/refind_ia32.efi $StartDir/
93 mkdir -p refind-bin-$1/refind/tools_ia32
94 cp --preserve=timestamps gptsync/gptsync_ia32.efi refind-bin-$1/refind/tools_ia32/
95
96 # Build the X64 binaries
97 make clean
98 make -j1
99 make fs
100 mkdir -p refind-bin-$1/refind/drivers_x64
101 cp -a icons refind-bin-$1/refind/
102 if [[ $SignIt == 1 ]] ; then
103 for File in `ls drivers_x64/*_x64.efi` ; do
104 $SBSign --key $KeysDir/refind.key --cert $KeysDir/refind.crt --output refind-bin-$1/refind/$File $File
105 done
106 else
107 cp --preserve=timestamps drivers_x64/*_x64.efi refind-bin-$1/refind/drivers_x64/
108 fi
109 cp --preserve=timestamps filesystems/LICENSE*txt refind-bin-$1/refind/drivers_x64/
110 cp --preserve=timestamps refind.conf-sample refind-bin-$1/refind/
111 if [[ $SignIt == 1 ]] ; then
112 $SBSign --key $KeysDir/refind.key --cert $KeysDir/refind.crt --output refind-bin-$1/refind/refind_x64.efi refind/refind_x64.efi
113 else
114 cp refind/refind_x64.efi refind-bin-$1/refind/refind_x64.efi
115 fi
116 mkdir -p refind-bin-$1/refind/tools_x64
117 if [[ $SignIt == 1 ]] ; then
118 $SBSign --key $KeysDir/refind.key --cert $KeysDir/refind.crt --output refind-bin-$1/refind/tools_x64/gptsync_x64.efi gptsync/gptsync_x64.efi
119 else
120 cp --preserve=timestamps gptsync/gptsync_x64.efi refind-bin-$1/refind/tools_x64/
121 fi
122 cp refind-bin-$1/refind/refind_x64.efi $StartDir
123 cp -a docs keys banners fonts COPYING.txt LICENSE.txt README.txt CREDITS.txt NEWS.txt refind-install mkrlconf mvrefind mountesp refind-bin-$1
124
125 # Prepare the final .zip file
126 zip -9r ../refind-bin-$1.zip refind-bin-$1
127
128 # Prepare a variant with the x86-64 version built with GNU-EFI....
129 make clean
130 make -j1 gnuefi
131 if [[ $SignIt == 1 ]] ; then
132 $SBSign --key $KeysDir/refind.key --cert $KeysDir/refind.crt --output refind-bin-$1/refind/refind_x64.efi refind/refind_x64.efi
133 else
134 cp refind/refind_x64.efi refind-bin-$1/refind/refind_x64.efi
135 fi
136 zip -9r ../refind-bin-gnuefi-$1.zip refind-bin-$1
137
138 # Clean up....
139 cd ..
140 rm -r refind-$1
141
142 # Prepare the RPM & Debian package files
143 cp refind-src-$1.tar.gz ~/rpmbuild/SOURCES/
144 rpmbuild -ba $StartDir/refind.spec
145 mv ~/rpmbuild/RPMS/*/refind-$1* ./
146 mv ~/rpmbuild/SRPMS/refind-$1* ./
147 sudo alien --to-deb -k -c refind-$1*x86_64.rpm
148 sudo chown rodsmith: refind*deb
149 rm ~/rpmbuild/SOURCES/refind-src-*
150
151 # Clean up
152 if [[ $SignIt == 1 ]] ; then
153 umount $KeysDir
154 fi
155
156 # Finish
157 cd $StartDir