#!/bin/bash # # Usage: createPatchstick /dev/diskX echo echo "--- Generation of Apple TV Patchstick ---" echo echo " Created by Marook." echo " Thanks to: MacTijn, Alan_Quatermain & ericIII" echo " Leopard remake by joda" echo echo "-----------------------------------------" echo if [ "$USER" != "root" ] then echo "You need to run this script as ROOT. Exiting..." echo exit 1 fi if [ $# -ne 1 ] then echo echo "Listing available disks:" diskutil list echo $'\a' echo "Please specify the disk to re-partition as argument one:" echo " ./createpatchstick /dev/diskX" echo echo " WARNING: The disk will be ERASED !!!" echo exit 1 fi partition_disk() { echo echo " Partitioning $THEDISK:" diskutil partitionDisk $THEDISK 2 GPTFormat HFS+ Patchstick-root 80M HFS+ Patchstick 40M echo " Patitions done." #sleep 2 } basic_folders() { echo "Creating System folders..." mkdir /Volumes/Patchstick-root/sbin /Volumes/Patchstick-root/etc /Volumes/Patchstick-root/dev /Volumes/Patchstick-root/OSBoot /Volumes/Patchstick-root/stuff mkdir -p /Volumes/Patchstick-root/usr/lib/system mkdir -p /Volumes/Patchstick-root/System/Library/Extensions mkdir -p /Volumes/Patchstick-root/System/Library/Frameworks ln -s /Volumes/Patchstick-root/sbin /Volumes/Patchstick-root/bin mkdir -p /Volumes/Patchstick-root/System/Library/Frameworks/OSXFrames/ mkdir -p /Volumes/Patchstick-root/usr/libexec } copy_system() { echo "Copying System Extentions..." cp -R Files/System/Library/Extensions/{AppleACPIPlatform,AppleAPIC,AppleEFIRuntime,AppleFileSystemDriver,AppleFlashNVRAM,AppleHDA,AppleHPET,AppleIRController,AppleRTC,AppleSMBIOS,AppleSMC,AudioIPCDriver,BootCache,GeForce,IO80211Family,IOACPIFamily,IOATAFamily,IOAudioFamily,IOGraphicsFamily,IOHIDFamily,IONDRVSupport,IONetworkingFamily,IOPCIFamily,IOPlatformPluginFamily,IOSCSIArchitectureModelFamily,IOStorageFamily,IOUSBFamily,IOUSBMassStorageClass,NVDANV40Hal,NVDAResman,OSvKernDSPLib,System,AppleIntelCPUPowerManagement}.kext /Volumes/Patchstick-root/System/Library/Extensions/ cp -R Files/System/Library/Frameworks/{CoreFoundation,IOKit}.framework /Volumes/Patchstick-root/System/Library/Frameworks cp Files/sbin/{bash,chmod,chown,bless,cp,mount,mount_hfs,mount_devfs,sleep,umount,sync,sh,ls,reboot} /Volumes/Patchstick-root/sbin/ cp Files/usr/lib/{dyld,libSystem.B.dylib,libncurses.5.4.dylib,libgcc_s.1.dylib} /Volumes/Patchstick-root/usr/lib/ cp Files/usr/lib/system/libmathCommon.A.dylib /Volumes/Patchstick-root/usr/lib/system/ } copy_kernal() { echo "Copying System files..." cp root/mach_kernel /Volumes/Patchstick-root/ cp root/com.apple.Boot.plist /Volumes/Patchstick-root/ cp root/Info.plist /Volumes/Patchstick-root/System/Library/Extensions/AppleFileSystemDriver.kext/Contents/ cp root/launchd /Volumes/Patchstick-root/sbin/launchd chmod 755 /Volumes/Patchstick-root/sbin/launchd cp Files/boot.efi /Volumes/Patchstick-root/ echo "Adding Kerberos..." cp -p -R Files/System/Library/Frameworks/Kerberos.framework /Volumes/Patchstick-root/System/Library/Frameworks/OSXFrames/ } copy_stuff() { echo "Copying Patchstick files..." cp -R Patchstick/* /Volumes/Patchstick/ } disk_atv_mode() { echo "Changing Patchstick-root to Apple TV Mode..." START=$(gpt -r show $THEDISK | grep '1 GPT part' | awk '{print $1}') SIZE=$(gpt -r show $THEDISK | grep '1 GPT part' | awk '{print $2}') diskutil unmountDisk $THEDISK gpt remove -i 1 $THEDISK diskutil unmountDisk $THEDISK gpt add -b $START -s $SIZE -i 1 -t "5265636F-7665-11AA-AA11-00306543ECAC" $THEDISK diskutil unmountDisk $THEDISK echo echo "Your disk $THEDISK is now unmounted and ready to patch your AppleTV." } if [ $# = 1 ] then read -p "Are you sure you want to partition disk $1? [yes|no]" sure echo THEDISK=$1 export THEDISK case "$sure" in yes) echo partition_disk basic_folders copy_system copy_kernal copy_stuff disk_atv_mode echo "Enjoy... :-)" echo ;; *) echo "You selected No. Aborting..." exit ;; esac fi