summaryrefslogtreecommitdiffstats
path: root/builder/modules.d/slx-tpm/module-setup.sh
blob: f9a239e0a4b6c6a59a8f33f69ff6d2266f717c78 (plain) (blame)
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
#!/usr/bin/env bash

declare -rg openssl_tpm2_engine_url="https://git.kernel.org/pub/scm/linux/kernel/git/jejb/openssl_tpm2_engine.git/snapshot"
declare -rg openssl_tpm2_engine_target="openssl_tpm2_engine-1.2.1"
declare -rg ibm_tss_target="ibmtss1234.tar.gz"
declare -rg ibm_tss_url="https://sourceforge.net/projects/ibmtpm20tss/files/$ibm_tss_target/download"
# TODO download in "$moddir/src"
check() {
	if ! hash help2man 2>&1 /dev/null; then
		echo "Missing help2man, please install it..."
		return 1
	fi
	mkdir -p "$moddir/build"
	if [ ! -d "$moddir/build/${openssl_tpm2_engine_target}" ]; then
		compile_openssl_tpm2_engine || return 1
	fi
	return 255
}
depends() {
	:	
}
compile_ibm_tss() {
	(
	set -o errexit
	wget -O "$ibm_tss_target" "$ibm_tss_url"
	local build_dir="$moddir/build/${ibm_tss_target%%.*}"
	mkdir -p "$build_dir"
	tar xvf "$ibm_tss_target" -C "$build_dir"
	cd "$build_dir/utils"
	make
	)
	local ret=$?
	if [ $ret -ne 0 ]; then
		echo "Failed to compile IBM TSS"
		rm -rf "$moddir/build/${ibm_tss_target%%.*}"
	fi
	return $ret
}
compile_openssl_tpm2_engine() {
	if [ -d "$moddir/build/${ibm_tss_target%%.*}" ]; then
		compile_ibm_tss || return 1
	fi
	install_ibm_tss "/"
	(
	set -o errexit
	wget -O "$openssl_tpm2_engine_target.tar.gz" "$openssl_tpm2_engine_url/$openssl_tpm2_engine_target.tar.gz"
	tar xvf "$openssl_tpm2_engine_target.tar.gz" -C "$moddir/build"
	cd "$moddir/build/$openssl_tpm2_engine_target"
	bash bootstrap.sh
	CFLAGS="-I$moddir/build/${ibm_tss_target%%.*}/utils -Wno-pointer-sign" ./configure
	# cause help2man suck...
	sed -i '/^HELP2MAN/ s/$/ --no-discard-stderr/' Makefile
	make
	)
}
install_ibm_tss() {
	if [ "$#" -ne 1 ]; then
		echo "Failed: Needs one arg."
		return 1
	fi
	if [ ! -d "$moddir/build/${ibm_tss_target%%.*}" ]; then
		compile_ibm_tss || return 1
	fi
	cd "$moddir/build/${ibm_tss_target%%.*}/utils"
	mkdir -p "$1/usr/local/bin"
	# this is hacky, TODO better with /etc/ld.cache.conf.d ?
	cp -a *.so* "$1/usr/lib"
	mkdir -p "$1/usr/local/bin"
	find . -perm /a+x -type f -exec cp {} "$1/usr/local/bin/" \;
	# only needed to compile some tpm binary (not needed in initramfs)
#	tar cvf - tss2 | tar xvf - -C "$1/usr/local/include"
	cd -
}
install_openssl_tpm2_engine() {
	if [ ! -d "$moddir/build/${openssl_tpm2_engine_target}" ]; then
		echo "no build of openssl tpm2 engine"
		return 1
	fi
	cd "$moddir/build/${openssl_tpm2_engine_target}"
	make DESTDIR="$initdir" install
	mkdir -p "$initdir/usr/lib/x86_64-linux-gnu/"
	cp -r /usr/lib/x86_64-linux-gnu/engines-1.1 "$initdir/usr/lib/x86_64-linux-gnu/"
	ln -s "libtpm2.so" "$initdir/usr/lib/x86_64-linux-gnu/engines-1.1/tpm2.so"
}
install() {
	install_openssl_tpm2_engine
	install_ibm_tss "$initdir"
	inst_multiple openssl
	return 0
}
installkernel() {
	instmods =drivers/char/tpm
}