Difference between revisions of "Patchstick"

From AwkwardTV
Jump to: navigation, search
(Artwork)
m
 
(4 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
This is the page about Project Patchstick, a 100% legal way to open up the ATV for hacking ''without having to open the case''.
 
This is the page about Project Patchstick, a 100% legal way to open up the ATV for hacking ''without having to open the case''.
 +
 +
http://img389.imageshack.us/img389/4637/patchstickum2.jpg
  
 
'''Proof of concept is found [[Patchstick/Testing|Here]]'''
 
'''Proof of concept is found [[Patchstick/Testing|Here]]'''
Line 10: Line 12:
  
 
==Secondary goals==
 
==Secondary goals==
* Add an awkwardtv.frappliance that accesses the [http://plugins.awkwardtv.org/ plugins directory] and installs them online. alan_quatermain is working on this: [http://www.zerowaitingtime.com/18519-download-ATVLoader.MP4 ATVLoader.MP4], [http://img90.imageshack.us/img90/4488/pluginsfinal2ox8.png icon] by BigBaconAndEggs.
+
* Add an awkwardtv.frappliance that accesses the [http://plugins.awkwardtv.org/ plugins directory] and installs them online. alan_quatermain is working on this: [http://www.zerowaitingtime.com/19101-download-ATVLoader3.MP4 ATVLoader3.MP4], [http://img90.imageshack.us/img90/4488/pluginsfinal2ox8.png icon] by BigBaconAndEggs.
 
** add more hacks and update them online (ericIII's [[ATVFiles]] comes to mind)
 
** add more hacks and update them online (ericIII's [[ATVFiles]] comes to mind)
 
* [[Booting_from_a_USB_Thumbdrive|make it work from a (small) USB stick]]
 
* [[Booting_from_a_USB_Thumbdrive|make it work from a (small) USB stick]]
Line 49: Line 51:
 
</item>
 
</item>
 
</pre>
 
</pre>
 +
 +
NB you can't have multiple top-level elements in XML, so the above's illegal. You'd need to wrap all the <item>s in another element, eg <plugins>.
  
 
Once the user clicks that, mygreatnewfrappliance XML gets loaded:
 
Once the user clicks that, mygreatnewfrappliance XML gets loaded:
Line 145: Line 149:
 
cp $source/usr/bin/strings $target/usr/bin/
 
cp $source/usr/bin/strings $target/usr/bin/
 
cp -pRvf $source/usr/libexec/gdb $target/usr/libexec/
 
cp -pRvf $source/usr/libexec/gdb $target/usr/libexec/
cp -pRvf $target/System/Library/PrivateFrameworks/PlatformHardwareManagement.framework $target/System/Library/PrivateFrameworks/
+
cp -pRvf $source/System/Library/PrivateFrameworks/PlatformHardwareManagement.framework $target/System/Library/PrivateFrameworks/
 
cp $source/usr/bin/bspatch $target/usr/bin/
 
cp $source/usr/bin/bspatch $target/usr/bin/
 
cp $source/usr/bin/bzip2 $target/usr/bin/
 
cp $source/usr/bin/bzip2 $target/usr/bin/
Line 153: Line 157:
  
 
I also note that the line copying PlatformHardwareManagement.framework is a little confusing... Why are we copying this framework to itself? Running the cp will just complain that it's the same file, so should we be copying it elsewhere or from the source rather than the target?
 
I also note that the line copying PlatformHardwareManagement.framework is a little confusing... Why are we copying this framework to itself? Running the cp will just complain that it's the same file, so should we be copying it elsewhere or from the source rather than the target?
 +
* Fixed, it should be $source, not $target. - [[User:Maraklov|Maraklov]]
 +
 +
[[Category:Software]][[Category:How-to]][[Category:Patchstick]]

Latest revision as of 06:25, 28 July 2007

This is the page about Project Patchstick, a 100% legal way to open up the ATV for hacking without having to open the case.

patchstickum2.jpg

Proof of concept is found Here

Primary Goals

  • Build our own Darwin kernel that boots on the ATV (Booting from a USB Thumbdrive is a great help) (using semthex's kernel will do)
  • Build our own sshd (probably dropbear)
  • Install sshd on the ATV, enable it

Secondary goals

Steps to be taken

  • get a homebrew Darwin kernel to boot up (kernel boots, working on kexts -- macTijn)
  • build boot scripts that upload the sshd binary to the ATV, and enable it

Artwork

BigBaconAndEggs

XML format for fetching additional plugins

The idea is to have an XML format for fetching information on available plugins that is as easy as possible and as flexible as necessary. Please comment.

alan_quatermain is working on a frappliance that uses this data.

http://plugins.awkwardtv.org/xml/

<?xml version="1.0" encoding="utf-8"?>
<item>
    <category>Communication</category>
    <title>My Great New Frappliance</title>
    <shortname>mygreatnewfrappliance</shortname>
    <version>0.1</version>
</item>

<item>
...
</item>

NB you can't have multiple top-level elements in XML, so the above's illegal. You'd need to wrap all the <item>s in another element, eg <plugins>.

Once the user clicks that, mygreatnewfrappliance XML gets loaded:

http://plugins.awkwardtv.org/xml/?p=atvfiles

<?xml version="1.0" encoding="utf-8"?>
<item>
    <category>Communication</category>
    <title>My Great New Frappliance</title>
    <shortname>mygreatnewfrappliance</shortname>
    <author>Joe Doe</author>
    <icon url="http://example.com/downloads/icon" />
    <screenshot url="http://example.com/downloads/icon" />
    <enclosure url="http://example.com/downloads/mygreatnewfrappliance.tgz"  md5="5655cc6f7d1ba118665fe14be41ad296" length="5650889" type="application/tgz" />
    <guid>mygreatnewfrappliance</guid>
    <version>1.0v1</version>
    <pubDate>Wed, 8 Jun 2005 19:00:00 GMT</pubDate>
    <copyright>© Copyright 2007 Joe Doe</copyright>
    <license>GPL</license>
    <url>http://www.mygreatsite.com/myproduct</url>
    <keywords>(set of keywords to be defined)</keywords>
    <info>
        <English>
            <subtitle>Cooking plugins is fun!</subtitle>
            <summary>This plugin doesn't really exist, but here we have one sentence of description saying what it does and why it is so insanely great.</summary>
            <description>A longer description here, up to one screen page</description>
        </English>
        <Dutch>
        </Dutch>
        <French>
        </French>
        <German>
            <subtitle></subtitle>
            <summary></summary>
            <description></description>
        </German>
        <Italian>
            <subtitle></subtitle>
            <summary></summary>
            <description></description>
        </Italian>
        <Japanese>
            <subtitle></subtitle>
            <summary></summary>
            <description></description>
        </Japanese>
        <Spanish>
            <subtitle></subtitle>
            <summary></summary>
            <description></description>
        </Spanish>
    </info>
</item>

Code ideas

#!/bin/sh

#
# Initial ideas for AwkwardTV Patchstick Script to be done
# by phoem at phoempc.com
# v20070331.0
#
# V0.2 fixes path issues, since the system links /etc/ to the media volume thats where the configs need to be adjusted and set

# Set a source and target to make it easier to test the
# script's actions.
source=""
target="/Volumes/OSBoot"
media_target="/Volumes/Media"

echo -n "Disabling watchdog..."
mkdir $media_target/Scratch/private/etc/mach_init.disabled
mv $media_target/Scratch/private/etc/mach_init.d/ripstop.plist $media_target/Scratch/private/etc/mach_init.disabled
echo "$source/sbin/kextunload -b com.apple.driver.AppleTCOWatchdog" >> $media_target/Scratch/private/etc/rc.local 
echo "done"
echo -n "Installing sshd..."
cp $source/usr/sbin/sshd $target/usr/sbin/
cp $source/System/Library/LaunchDaemons/ssh.plist $target/System/Library/LaunchDaemons/ssh.plist
echo "done"
echo -n "Installing various programs..."
cp $source/usr/bin/sort $target/usr/bin/sort
cp $source/usr/bin/nidump $target/usr/bin/nidump
cp $source/usr/bin/passwd $target/usr/bin/passwd
cp $source/usr/bin/du $target/usr/bin/du
cp $source/usr/bin/kdump $target/usr/bin/kdump
cp $source/usr/bin/ktrace $target/usr/bin/ktrace
cp $source/usr/sbin/kextstat $target/usr/sbin/kextstat
cp $source/usr/bin/gdb $target/usr/bin/gdb
cp $source/usr/bin/vim $target/usr/bin/
cp $source/usr/bin/nc $target/usr/bin/
cp $source/usr/bin/diff $target/usr/bin/
cp $source/usr/bin/strings $target/usr/bin/
cp -pRvf $source/usr/libexec/gdb $target/usr/libexec/
cp -pRvf $source/System/Library/PrivateFrameworks/PlatformHardwareManagement.framework $target/System/Library/PrivateFrameworks/
cp $source/usr/bin/bspatch $target/usr/bin/
cp $source/usr/bin/bzip2 $target/usr/bin/
echo "done"

I've added a source and target variable to the script so you can test the script without having to clean up your Apple TV and restart. This should make testing on a dev box easier.

I also note that the line copying PlatformHardwareManagement.framework is a little confusing... Why are we copying this framework to itself? Running the cp will just complain that it's the same file, so should we be copying it elsewhere or from the source rather than the target?

  • Fixed, it should be $source, not $target. - Maraklov