Browse Source

major improvements to nitotv install section, openssl builds shared libs now, almost fixed an openssh issue but theres still missing symbols

Kevin Bradley 5 years ago
parent
commit
3c7345ed88
1 changed files with 162 additions and 62 deletions
  1. 162 62
      the_memo.sh

+ 162 - 62
the_memo.sh

@@ -24,7 +24,9 @@ PKG_NAME="" #The name of our current package being built
 PKG_VERSION="-1"
 WORKING_DIR="" #This stores the working directory under BUILD_ROOT
 BUILD_BASH="false"
-NITOTV="false"
+NITOTV="true"
+CLEAN_SKEL="false"
+MOVE_DPKG="true"
 
 set -e
 # set trap to help debug any build errors
@@ -139,8 +141,12 @@ fi
 if [ -z "$SDK_PATH" ]; then
 	if [ "$PLATFORM" == "AppleTVOS" ]; then
 		SDK_PATH="`xcrun --sdk appletvos --show-sdk-path`"
+		SDK_VERSION="`xcrun --show-sdk-version --sdk appletvos`"
+		IOKIT_MATCH="`find ~/Library/Developer/Xcode/tvOS\ DeviceSupport/ -name IOKit.framework | grep "$SDK_VERSION" -m 1`"
+		echo "IOKit match: $IOKIT_MATCH"
 	elif [ "$PLATFORM" == "WatchOS" ]; then
 		SDK_PATH="`xcrun --sdk watchos --show-sdk-path`"
+		SDK_VERSION="`xcrun --show-sdk-version --sdk watchos`"
 	fi
 elif [ ${SDK_PATH: -1} == "/" ]; then
 	# Some of our sed's require SDK_PATH *not* end with /
@@ -171,6 +177,41 @@ prepSDK() {
 		echo "Missing <sys/ttydev.h>. Moving it in from MacOSX SDK (with sudo)"
 		sudo cp "`xcrun --sdk macosx --show-sdk-path`/usr/include/sys/ttydev.h" "$SDK_PATH/usr/include/sys/ttydev.h"
 	fi
+	if [ ! -e "$SDK_PATH/usr/include/lockdown.h" ]; then
+		echo "Missing lockdown.h! Generating the bare essentials for apt to build..."
+		echo "#ifndef LOCKDOWN_LOCKDOWN_H" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "#define LOCKDOWN_LOCKDOWN_H" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "#include <CoreFoundation/CFString.h>" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "#ifdef __cplusplus" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "extern \"C\" {" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "#endif" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "extern CFStringRef kLockdownUniqueDeviceIDKey;" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "extern void *lockdown_connect(void);" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "extern CFStringRef lockdown_copy_value(void *lockdown, void *null, CFStringRef key);" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "extern void lockdown_disconnect(void *lockdown);" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "#ifdef __cplusplus" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "}" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "#endif" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "" >> "$SDK_PATH/usr/include/lockdown.h"
+		echo "#endif/*LOCKDOWN_LOCKDOWN_H*/" >> "$SDK_PATH/usr/include/lockdown.h"
+    
+	fi
+
+	echo "IOKit: $SDK_PATH/System/Library/Frameworks/IOKit.framework"
+	if [ ! -d "$SDK_PATH/System/Library/Frameworks/IOKit.framework" ]; then
+		if [ ! -z "$IOKIT_MATCH" ]; then
+			echo "we do indeed have an IOKit match and IOKIt is missing!!"
+            echo "cp -r $IOKIT_MATCH $SDK_PATH/System/Library/Frameworks/"
+            cp -r "$IOKIT_MATCH" "$SDK_PATH/System/Library/Frameworks/"
+			
+		fi
+	fi
+
 	#I forget.. Readline perhaps?
 	#IOKit
 	#~/Library/Developer/Xcode/tvOS\ DeviceSupport
@@ -209,12 +250,12 @@ codesign() {
 	elif [ "$CODESIGN_TOOL" == "ldid" ]; then
 		cp "$1" out.bin
 		sudo chmod 777 out.bin
-		ldid -S out.bin
+		ldid -S"$BUILD_ROOT/ent.plist" out.bin
 		sudo cp -X out.bin "$1"
 	elif [ "$CODESIGN_TOOL" == "ldid2" ]; then
 		cp "$1" out.bin
 		sudo chmod 777 out.bin
-		ldid2 -S out.bin
+		ldid2 -S"$BUILD_ROOT/ent.plist" out.bin
 		sudo cp -X out.bin "$1"
 	fi
 }
@@ -225,22 +266,27 @@ notifyProgress() {
 }
 
 createListFile() {
-	if [ ! -d "$SKEL_PREFIX/var/lib/dpkg/info/" ]; then
-		mkdir -p "$SKEL_PREFIX/var/lib/dpkg/info/"
-	fi
+
+    INFOPATH="$SKEL_PREFIX/var/lib/dpkg/info"
+
+    if [ -d "$SKEL_PREFIX/private/var/lib/dpkg/info/" ]; then
+        INFOPATH="$SKEL_PREFIX/private/var/lib/dpkg/info"
+    elif [ ! -d "$SKEL_PREFIX/var/lib/dpkg/info/" ]; then
+            mkdir -p "$SKEL_PREFIX/var/lib/dpkg/info/"
+    fi
 
 	#md5 -r == md5sum
 	MD5="md5sum"
 	command -v md5sum >/dev/null 2>&1 || { MD5="md5 -r" ; }
-	find "$BUILD_ROOT/$WORKING_DIR/deb" -type f -not -path "$BUILD_ROOT/$WORKING_DIR/deb/DEBIAN/*" -exec $MD5 {} \; |  awk '{ print $1 "  " $2 }' | sed "s|$BUILD_ROOT/$WORKING_DIR/deb/||g" >> "$SKEL_PREFIX/var/lib/dpkg/info/$PKG_NAME.md5sums"
+	find "$BUILD_ROOT/$WORKING_DIR/deb" -type f -not -path "$BUILD_ROOT/$WORKING_DIR/deb/DEBIAN/*" -exec $MD5 {} \; |  awk '{ print $1 "  " $2 }' | sed "s|$BUILD_ROOT/$WORKING_DIR/deb/||g" >> "$INFOPATH/$PKG_NAME.md5sums"
 
-	find "$BUILD_ROOT/$WORKING_DIR/deb" -type f -not -path "$BUILD_ROOT/$WORKING_DIR/deb/DEBIAN/*" | sed "s|$BUILD_ROOT/$WORKING_DIR/deb||g" >> "$SKEL_PREFIX/var/lib/dpkg/info/$PKG_NAME.list"
+	find "$BUILD_ROOT/$WORKING_DIR/deb" -type f -not -path "$BUILD_ROOT/$WORKING_DIR/deb/DEBIAN/*" | sed "s|$BUILD_ROOT/$WORKING_DIR/deb||g" >> "$INFOPATH/$PKG_NAME.list"
 	FILES="$BUILD_ROOT/$WORKING_DIR/deb/DEBIAN/*"
 	for f in $FILES; do
 		file=${f##*/}
 		if [ "$file" != "control" ]; then
 			echo "Processing $file in $PKG_NAME..";
-			cp "$f" "$SKEL_PREFIX/var/lib/dpkg/info/$PKG_NAME.$file"
+			cp "$f" "$INFOPATH/$PKG_NAME.$file"
 		fi
 	done
 }
@@ -258,8 +304,16 @@ createStatusFile() {
 		echo "" >> status
 		echo "" >> available
 	done
-	mv status "$SKEL_PREFIX/var/lib/dpkg/status"
-	mv available "$SKEL_PREFIX/var/lib/dpkg/available"
+	if [ -d "$SKEL_PREFIX/private/var/lib/dpkg/" ]; then 
+		mv status "$SKEL_PREFIX/private/var/lib/dpkg/status"
+		mv available "$SKEL_PREFIX/private/var/lib/dpkg/available"
+	else 
+		echo "### [WARNING]: $SKEL_PREFIX/private/var/lib/dpkg/ is missing! this bootstrap is likely malformed..."
+		echo ""
+		mv status "$SKEL_PREFIX/var/lib/dpkg/status"
+		mv available "$SKEL_PREFIX/var/lib/dpkg/available"
+	fi 
+
 }
 
 checkPGPSig() {
@@ -802,7 +856,7 @@ buildBash() {
 # 10.2 and up
 buildBashAndFriends() {
 	notifyProgress "Building readline"
-	buildReadline
+    buildReadline
 	notifyProgress "Building ncurses"
 	buildNcurses
 	notifyProgress "Building bash"
@@ -1943,16 +1997,20 @@ buildOpenSSL() {
 	export CROSS_SDK="`echo $SDK_PATH | sed 's/.*\///g'`"
 	#export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
 
-
-	./Configure ios64-cross no-shared no-dso no-hw no-engine --prefix="/$ROOT_PREFIX"
+    ./Configure ios64-cross no-dso no-hw no-engine --prefix="/$ROOT_PREFIX"
+    #./Configure ios64-cross no-shared no-dso no-hw no-engine --prefix="/$ROOT_PREFIX"
 	#make
 
 	make DESTDIR="$SKEL_PREFIX" install
 	codesign "$SKEL_PREFIX/$ROOT_PREFIX/bin/openssl"
+#codesign "$SKEL_PREFIX/$ROOT_PREFIX/lib/libcrypto.dylib"
+    codesign "$SKEL_PREFIX/$ROOT_PREFIX/lib/libcrypto.1.1.dylib"
 
 	initDebStructure
 	make DESTDIR="$BUILD_ROOT/$WORKING_DIR/deb" install
 	codesign "$BUILD_ROOT/$WORKING_DIR/deb/$ROOT_PREFIX/bin/openssl"
+#codesign "$BUILD_ROOT/$WORKING_DIR/deb/$ROOT_PREFIX/lib/libcrypto.dylib"
+    codesign "$BUILD_ROOT/$WORKING_DIR/deb/$ROOT_PREFIX/lib/libcrypto.1.1.dylib"
 
 	echo "Package: $PKG_NAME" >> "$BUILD_ROOT/$WORKING_DIR/deb/DEBIAN/control"
 	echo "Priority: standard" >> "$BUILD_ROOT/$WORKING_DIR/deb/DEBIAN/control"
@@ -2437,13 +2495,13 @@ buildDpkg() {
 
 buildDPKGAndDependencies() {
 	notifyProgress "Building zlib"
-	buildZLib
+    buildZLib
 	notifyProgress "Building xz"
-	buildXZ
+    buildXZ
 	notifyProgress "Building bzip2"
-	buildBZip2
+    buildBZip2
 	notifyProgress "Building lz4"
-	buildLZ4
+    buildLZ4
 	notifyProgress "Building openSSL"
 	buildOpenSSL
 	notifyProgress "Building curl"
@@ -3487,14 +3545,18 @@ installSubstrate() {
 #main functions
 #main
 #Entry Point
-echo "Cleaning the slate"
-sudo rm -rf skel extra_pkg
-mkdir -p skel/etc
-mkdir extra_pkg
+if [ "$CLEAN_SKEL" == "true" ]; then
+	echo "Cleaning the slate"
+	sudo rm -rf skel extra_pkg
+	mkdir -p skel/etc
+	mkdir extra_pkg
+fi
+
 
 # Ensure our SDK has all the required "extras" installed/setup
 prepSDK
 
+#exit 0
 #Begin Building
 #DO NOT BUILD THE 11 UTILS IN UNTIL YOU ARE BUILDING EXPLICITLY FOR 11+
 #/bin/bash exists on 9 and 10 and if overwritten without unthether will likely brick.
@@ -3505,56 +3567,79 @@ buildBasicUtils
 buildDPKGAndDependencies
 buildAPTAndDependencies
 
-#installSubstrate
-#rm -rf deb
-#mkdir -p deb/DEBIAN
-#dpkg-deb -x nitoTVLatest.deb deb
-#dpkg-deb -e nitoTVLatest.deb deb/DEBIAN
-#createListFile "com.nito.nitoTV4"
-#dpkg-deb -x nitoTVLatest.deb "$SKEL_PREFIX"
+#clean out frivolous stuff to slim skel down to a reasonable size
+find "$SKEL_PREFIX" -type f -name .DS_Store -delete
+mkdir -p "$SKEL_PREFIX/private"
+mv "$SKEL_PREFIX/etc" "$SKEL_PREFIX/private/"
+mv "$SKEL_PREFIX/var" "$SKEL_PREFIX/private/"
+
+processDeb() {
+	PKG=$1
+	VER=$2
+	NAME=$3
+	rm -rf deb
+    mkdir -p deb/DEBIAN
+    dpkg-deb -x "$PKG" deb
+    dpkg-deb -e "$PKG" deb/DEBIAN
+    PKG_NAME="$NAME"
+    PKG_VERSION="$VER"
+    createListFile
+    dpkg-deb -x "$PKG" "$SKEL_PREFIX"
+}
 
 if [ "$NITOTV" == "true" ]; then
-	installSubstrate
-	rm -rf nitotv
+
+#installSubstrate
+	if [ -d "nitotv" ]; then
+		rm -rf nitotv
+	fi
+
 	mkdir -p nitotv
-	cp nitotv_2.0-27_appletvos-arm64.deb com.nito.tssagent_1.0-appletvos-arm64.deb com.nito.uicache_0.0.1-245_appletvos-arm64.deb nitotv/
+    SUB_V=0.0.7
+    NTV_V=2.3-26
+    UIC_V=0.0.2-97
+    TWEAK_V=0.0.1-26
+	MORPH_V=1.0-1
+    SHIM_V=0.0.1-1
+    SSH_V=7.6p1-4
+    SSH_DEB=openssh_"$SSH_V"_appletvos_arm64.deb
+    SHIM_DEB=mobilesubstrate_"$SHIM_V"_appletvos-arm64.deb
+    SUB_DEB=com.ex.libsubstitute_"$SUB_V"-coolstar_appletvos-arm64.deb
+    NTV_DEB=nitotv_"$NTV_V"_appletvos-arm64.deb
+    UIC_DEB=com.nito.uicache_"$UIC_V"_appletvos-arm64.deb
+    TSS_DEB=com.nito.tssagent_1.0-1.appletvos-arm64.deb
+    TWEAK_DEB=com.nito.tweakinject_"$TWEAK_V"_appletvos-arm64.deb
+	MORPH_DEB=com.morpheus.binpack_"$MORPH_V"_appletvos-arm64.deb
+	SAFETY_NET=com.nito.safetynet-1.0_appletvos_arm64.deb
+
 	cd nitotv
+    curl -LO "https://nitosoft.com/electra/deb/$SUB_DEB"
+    curl -LO "https://nitosoft.com/electra/deb/$NTV_DEB"
+    curl -LO "https://nitosoft.com/electra/deb/$UIC_DEB"
+    curl -LO "https://nitosoft.com/electra/deb/$TSS_DEB"
+    curl -LO "https://nitosoft.com/electra/deb/$TWEAK_DEB"
+	curl -LO "https://nitosoft.com/electra/deb/$MORPH_DEB"
+	curl -LO "https://nitosoft.com/electra/deb/$SAFETY_NET"
+    curl -LO "https://nitosoft.com/electra/deb/$SHIM_DEB"
+    curl -LO "https://nitosoft.com/electra/deb/$SSH_DEB"
+
 	WORKING_DIR="nitotv"
-	rm -rf deb
-	mkdir -p deb/DEBIAN
-	dpkg-deb -x nitotv_2.0-27_appletvos-arm64.deb deb
-	dpkg-deb -e nitotv_2.0-27_appletvos-arm64.deb deb/DEBIAN
-	PKG_NAME="com.nito.nitotv4"
-	PKG_VERSION="2.0-27"
-	createListFile
-	dpkg-deb -x nitotv_2.0-27_appletvos-arm64.deb "$SKEL_PREFIX"
 
-	rm -rf deb
-	mkdir -p deb/DEBIAN
-	dpkg-deb -x com.nito.tssagent_1.0-appletvos-arm64.deb deb
-	dpkg-deb -e com.nito.tssagent_1.0-appletvos-arm64.deb deb/DEBIAN
-	PKG_NAME="com.nito.tssagent"
-	PKG_VERSION="1.0"
-	createListFile
-	dpkg-deb -x com.nito.tssagent_1.0-appletvos-arm64.deb "$SKEL_PREFIX"
+	processDeb "$SUB_DEB" "$SUB_V" "com.ex.libsubstitute"
+	processDeb "$TWEAK_DEB" "$TWEAK_V" "com.nito.tweakinject"
+	processDeb "$NTV_DEB" "$NTV_V" "com.nito.nitotv4"
+	processDeb "$TSS_DEB" "1.0-1" "com.nito.tssagent"
+	processDeb "$UIC_DEB" "$UIC_V" "com.nito.uicache"
+	processDeb "$MORPH_DEB" "$MORPH_V" "com.morpheus.binpack"
+	processDeb "$SAFETY_NET" "1.0" "com.nito.safetynet"
+    processDeb "$SHIM_DEB" "$SHIM_V" "mobilesubstrate"
+    processDeb "$SSH_DEB" "$SSH_V" "openssh"
+    mv *.deb ..
 
-	rm -rf deb
-	mkdir -p deb/DEBIAN
-	dpkg-deb -x com.nito.uicache_0.0.1-245_appletvos-arm64.deb deb
-	dpkg-deb -e com.nito.uicache_0.0.1-245_appletvos-arm64.deb deb/DEBIAN
-	PKG_NAME="com.nito.uicache"
-	PKG_VERSION="0.0.1-245"
-	createListFile
-	dpkg-deb -x com.nito.uicache_0.0.1-245_appletvos-arm64.deb "$SKEL_PREFIX"
 fi
 
-createStatusFile
 
-#clean out frivolous stuff to slim skel down to a reasonable size
-find "$SKEL_PREFIX" -type f -name .DS_Store -delete
-mkdir -p "$SKEL_PREFIX/private"
-mv "$SKEL_PREFIX/etc" "$SKEL_PREFIX/private/"
-mv "$SKEL_PREFIX/var" "$SKEL_PREFIX/private/"
+createStatusFile
 
 #clean out symbolic links that you don't want to overwrite
 unlink "$SKEL_PREFIX/$ROOT_PREFIX/lib/liblzma.dylib"
@@ -3592,6 +3677,8 @@ rm -rf "$SKEL_PREFIX/$ROOT_PREFIX/bin/ncurses6-config"
 rm -rf "$SKEL_PREFIX/$ROOT_PREFIX/bin/npth-config"
 rm -rf "$SKEL_PREFIX/$ROOT_PREFIX/bin/ntbtls-config"
 
+ 
+
 # for getting permissions right, try to mimic them as closely as possible to the default ones
 # Still need to do this for debs, but oh well. We just won't use the yet :P
 sudo chown -R root:wheel "$SKEL_PREFIX/$ROOT_PREFIX"
@@ -3602,6 +3689,19 @@ sudo chown -R root:wheel "$SKEL_PREFIX/private/var"
 #sudo chmod 6755 "$SKEL_PREFIX/usr/bin/nitoUpdate"
 rm -rf skel.tgz
 cd "$SKEL_PREFIX"
+
+if [ "$MOVE_DPKG" == "true" ]; then
+	if [ ! -d "Library" ]; then
+		sudo mkdir Library
+	fi
+	sudo mv private/var/lib/dpkg Library/
+	pushd private/var/lib/
+	sudo ln -s /Library/dpkg .
+	popd
+	pwd
+
+fi
+
 if [ "$NITOTV" == "true" ]; then
 	sudo chown root:admin "$SKEL_PREFIX/Applications"
 	sudo chown -R root:wheel "$SKEL_PREFIX/Library"