<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mediagoblin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cfdv</id>
	<title>GNU MediaGoblin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mediagoblin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cfdv"/>
	<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/Special:Contributions/Cfdv"/>
	<updated>2026-05-19T07:27:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=236</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=236"/>
		<updated>2011-09-04T05:20:08Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Bite-sized bugs to start with */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Needswork}}&lt;br /&gt;
&lt;br /&gt;
= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
* Python Imaging Library (PIL) - http://www.pythonware.com/products/pil/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Debian, Mint, or [http://bugs.foocorp.net/issues/478 Ubuntu 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo apt-get install mongodb git-core python python-dev python-lxml python-imaging}}&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|yum install mongodb-server python-paste-deploy python-paste-script git-core python python-devel python-lxml python-imaging}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On Mac OS X Lion:&lt;br /&gt;
&lt;br /&gt;
Download the Newest Python.&lt;br /&gt;
&lt;br /&gt;
Git is already installed.&lt;br /&gt;
&lt;br /&gt;
Install MongoDB from these instructions: http://www.mongodb.org/display/DOCS/Quickstart+OS+X&lt;br /&gt;
&lt;br /&gt;
Python-lxml: http://muffinresearch.co.uk/archives/2009/03/05/install-lxml-on-osx/ with sudo&lt;br /&gt;
&lt;br /&gt;
Python Imaging Library (PIL): http://code.google.com/appengine/docs/python/images/installingPIL.html#mac&lt;br /&gt;
&lt;br /&gt;
Libjpeg &amp;amp; Libpng: http://ethan.tira-thompson.org/Mac_OS_X_Ports.html Combo Installer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions or Mac OS X to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: {{Cmd|git clone &amp;lt;nowiki&amp;gt;git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# Bootstrap and run buildout: {{Cmd|cd mediagoblin}} and then one of the following:&lt;br /&gt;
#* {{Cmd|python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout}}, &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
#* {{Cmd|python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why would you want one over the other?  If the first doesn&#039;t work, then try the second.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
If you have problems, please [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.&lt;br /&gt;
&lt;br /&gt;
To do that, run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running Mongo Database ==&lt;br /&gt;
&lt;br /&gt;
Startup the Database: {{Cmd|./mongodb-xxxxxxx/bin/mongod}}.&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./lazyserver.sh}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/paster serve paste.ini --reload}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&amp;lt;/nowiki&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./runtests.sh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/gmg shell}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo mongod --repair}}&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|gmg wipealldata}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
Now you should visit our latest list of [http://bugs.foocorp.net/projects/mediagoblin/issues?query_id=3 bite-sized issues] because squishing bugs is messy fun. If you&#039;re interested in other things to work on, or need help getting started on a bug, let us know on [http://mediagoblin.org/join/ the mailing list] or on the [http://mediagoblin.org/join/ IRC channel].&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Deployment&amp;diff=235</id>
		<title>Deployment</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Deployment&amp;diff=235"/>
		<updated>2011-09-04T01:57:47Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page could use a lot of work.  For now, a few smaller deployment tips!&lt;br /&gt;
&lt;br /&gt;
= Use Virtualenv =&lt;br /&gt;
&lt;br /&gt;
Our [[Development quick start]] guide recommends using [http://buildout.org zc.buildout], but this system is somewhat problematic for actual deployments (if a buildout goes badly, buildout removes all your packaging setup and your scripts in bin/ and other things... yuck :\).  Use [http://www.virtualenv.org/ Virtualenv] instead.  In the future, all our docs will bet set up to recommend using Virtualenv.&lt;br /&gt;
&lt;br /&gt;
= MongoDB setup =&lt;br /&gt;
&lt;br /&gt;
You should almost certainly [http://www.mongodb.org/display/DOCS/Journaling run MongoDB with Journaling on] if you have a new enough version of MongoDB.  (If you don&#039;t, maybe you should get a newer version!)  Without journaling there&#039;s some risk you could lose data that isn&#039;t yet written to disk if MongoDB is shut down incorrectly.&lt;br /&gt;
&lt;br /&gt;
Also, keep in mind the following [http://www.snailinaturtleneck.com/blog/2010/08/19/if-it-quacks-like-a-rdbms/ assumptions MongoDB makes] about your deployment environment&lt;br /&gt;
&lt;br /&gt;
* 64-bit machine&lt;br /&gt;
* little-endian&lt;br /&gt;
* more than one server&lt;br /&gt;
* speed is more important than reliability, and journaling is off by default&lt;br /&gt;
&lt;br /&gt;
= Running MediaGoblin&#039;s web server and Celery separately =&lt;br /&gt;
&lt;br /&gt;
./lazyserver.sh is all good and well for debugging, but probably not for deployments.  Instead, you should probably run&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=173</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=173"/>
		<updated>2011-08-21T02:25:11Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Prepare instance for bundling into a public AMI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an [http://aws.amazon.com/ec2/ EC2] instance from an [http://aws.amazon.com/amis AMI] pre-loaded with MediaGoblin. The following [http://aws.amazon.com/articles/0155828273219400 recipe] should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-61be7908 ami-61be7908]. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not log in to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=153</id>
		<title>User Experience</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=153"/>
		<updated>2011-08-17T16:16:33Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* From Deb, UX notes on 8.16.2011 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We need help doing user experience testing!  This means users testing our software, observing what does and doesn&#039;t work for them, and recording that.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re here to help (HOORAY!) go to the testing instance set up by Caleb Davis: http://omgmg.dyndns.org:6543/&lt;br /&gt;
&lt;br /&gt;
Sign up for an account&#039;&#039;&#039;*&#039;&#039;&#039;, add some pictures&#039;&#039;&#039;**&#039;&#039;&#039; and play around. Take some notes and then either set up an account on this wiki and add your thoughts to this page or email them to press@mediagoblin.org. Please include your operating system and what browser you&#039;re using. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*&#039;&#039;&#039; Your email validation link may be in your spam folder!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;**&#039;&#039;&#039; NOTHING ON THIS INSTANCE IS PERMANENT.  This is for user experience testing only... your pics will be wiped!&lt;br /&gt;
&lt;br /&gt;
You&#039;ll be able to give us the best feedback if you don&#039;t look at anyone else&#039;s notes before you start. Thanks for helping us with usability!! We really appreciate it!&lt;br /&gt;
&lt;br /&gt;
= User notes go in this section =&lt;br /&gt;
&lt;br /&gt;
=== From Deb, UX notes on 8.16.2011 === &lt;br /&gt;
I&#039;m running Ubuntu 10.04, Lucid Lynx. It&#039;s the Netbook remix version on an Aspire One, with Firefox version 3.6.18 for Ubuntu &lt;br /&gt;
&lt;br /&gt;
* Login page did not prompt for the possibility of forgotten password&lt;br /&gt;
&lt;br /&gt;
* login is really big on netbook, so that not all felds are visible on the screen at once, not ideal for just four fields&lt;br /&gt;
&lt;br /&gt;
* Not clear how you get to a page for adding media from the email verification page. &lt;br /&gt;
&lt;br /&gt;
* The submit box is really large on a netbook, the whole box should be visible on one screen&lt;br /&gt;
&lt;br /&gt;
* The tagging field should have small text underneath it about what format tags should use&lt;br /&gt;
&lt;br /&gt;
* Thumbnails on the little nav buttons from one pic to the other would be nice&lt;br /&gt;
&lt;br /&gt;
* The media submission page could also be scaled for the netbook screen&lt;br /&gt;
&lt;br /&gt;
* people will want to submit multiple images which it seems you can&#039;t yet do&lt;br /&gt;
&lt;br /&gt;
* Animated gifs work! Awesome.  &lt;br /&gt;
&lt;br /&gt;
* Tags seem to be not case sensitive and strip punctuation. Also awesome.&lt;br /&gt;
&lt;br /&gt;
=== Nelson&#039;s notes on 8.13.2011 (paraphrased) === &lt;br /&gt;
&lt;br /&gt;
* hey, where&#039;s my notification?&lt;br /&gt;
* everything is working alright&lt;br /&gt;
* successfully uploaded stuff ...&lt;br /&gt;
* commenting works&lt;br /&gt;
* profile works ...&lt;br /&gt;
* is that all I can do?&lt;br /&gt;
&#039;&#039;&#039;I&#039;d like to be able to&#039;&#039;&#039;&lt;br /&gt;
* find other users&lt;br /&gt;
* friend them ... or something&lt;br /&gt;
* go somewhere else besides my profile page&lt;br /&gt;
* download original image&lt;br /&gt;
* see full-size image&lt;br /&gt;
* use a public server&lt;br /&gt;
&#039;&#039;&#039;Other Comments&#039;&#039;&#039;&lt;br /&gt;
* go to a real domain and make it public&lt;br /&gt;
&lt;br /&gt;
= General thoughts on running a user experience test =&lt;br /&gt;
&lt;br /&gt;
Could someone with experience with this fill in info here? ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I (Jan-Christoph Borchardt) write a thesis at the moment on [http://owncloud.iuk.hdm-stuttgart.de/apps/files_publiclink/get.php?token=6c766212ba094bea08bf1bb800b3e1e7c785388e Coordinating low-cost usability testing in independent free &amp;amp; open source software projects]&amp;lt;br&amp;gt;&lt;br /&gt;
There are many small tips and recipes on how to do your own testing. Especially look into the &#039;&#039;Methods&#039;&#039; part.&amp;lt;br&amp;gt;&lt;br /&gt;
Please let me know if you have any other experiences with testing, I intend on regularly updating that document and release the full version freely licensed once it’s done as well as some kind of a &#039;&#039;quick start guide&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=143</id>
		<title>User Experience</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=143"/>
		<updated>2011-08-16T22:59:17Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We need help doing user experience testing!  This means users testing our software, observing what does and doesn&#039;t work for them, and recording that.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re here to help (HOORAY!) go to the testing instance set up by Caleb Davis: http://omgmg.dyndns.org:6543/&lt;br /&gt;
&lt;br /&gt;
Sign up for an account&#039;&#039;&#039;*&#039;&#039;&#039;, add some pictures&#039;&#039;&#039;**&#039;&#039;&#039; and play around. Take some notes and then either set up an account on this wiki and add your thoughts to this page or email them to press@mediagoblin.org. Please include your operating system and what browser you&#039;re using. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*&#039;&#039;&#039; Your email validation link may be in your spam folder!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;**&#039;&#039;&#039; NOTHING ON THIS INSTANCE IS PERMANENT.  This is for user experience testing only... your pics will be wiped!&lt;br /&gt;
&lt;br /&gt;
You&#039;ll be able to give us the best feedback if you don&#039;t look at anyone else&#039;s notes before you start. Thanks for helping us with usability!! We really appreciate it!&lt;br /&gt;
&lt;br /&gt;
= User notes go in this section =&lt;br /&gt;
&lt;br /&gt;
=== From Deb, UX notes on 8.16.2011 === &lt;br /&gt;
I&#039;m running Ubuntu 10.04, Lucid Lynx. It&#039;s the Netbook remix version on an Aspire One, with Firefox version 3.6.18 for Ubuntu &lt;br /&gt;
&lt;br /&gt;
* Login page did not prompt for the possibility of forgotten password&lt;br /&gt;
&lt;br /&gt;
* login is really big on netbook, so that not all felds are visible on the screen at once, not ideal for just four fields&lt;br /&gt;
&lt;br /&gt;
* Not clear how you get to a page for adding media from the email verification page. &lt;br /&gt;
&lt;br /&gt;
* The submit box is really large on a netbook, the whole box should be visible on one screen&lt;br /&gt;
&lt;br /&gt;
* The tagging field should have small text underneath it about what format tags should use&lt;br /&gt;
&lt;br /&gt;
* Thumbnails on the little nav buttons from one pic to the other would be nice&lt;br /&gt;
&lt;br /&gt;
* The media submission page could also be scaled for the netbook screen&lt;br /&gt;
&lt;br /&gt;
* people will want to submit multiple images which it seems you can&#039;t yet do&lt;br /&gt;
&lt;br /&gt;
* Animated gifs work! Awesome.  &lt;br /&gt;
&lt;br /&gt;
* Tags seem to be not case sensitive and strip punctuation. Also awesome.&lt;br /&gt;
&lt;br /&gt;
= General thoughts on running a user experience test =&lt;br /&gt;
&lt;br /&gt;
Could someone with experience with this fill in info here? ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I (Jan-Christoph Borchardt) write a thesis at the moment on [http://owncloud.iuk.hdm-stuttgart.de/apps/files_publiclink/get.php?token=6c766212ba094bea08bf1bb800b3e1e7c785388e Coordinating low-cost usability testing in independent free &amp;amp; open source software projects]&amp;lt;br&amp;gt;&lt;br /&gt;
There are many small tips and recipes on how to do your own testing. Especially look into the &#039;&#039;Methods&#039;&#039; part.&amp;lt;br&amp;gt;&lt;br /&gt;
Please let me know if you have any other experiences with testing, I intend on regularly updating that document and release the full version freely licensed once it’s done as well as some kind of a &#039;&#039;quick start guide&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=142</id>
		<title>User Experience</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=142"/>
		<updated>2011-08-16T22:58:05Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We need help doing user experience testing!  This means users testing our software, observing what does and doesn&#039;t work for them, and recording that.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re here to help (HOORAY!) go to the testing instance set up by Caleb Davis: http://omgmg.dyndns.org:6543/&lt;br /&gt;
&lt;br /&gt;
Sign up for an account&#039;&#039;&#039;*&#039;&#039;&#039;, add some pictures&#039;&#039;&#039;**&#039;&#039;&#039; and play around. Take some notes and then either set up an account on this wiki and add your thoughts to this page or email them to press@mediagoblin.org. Please include your operating system and what browser you&#039;re using. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*&#039;&#039;&#039; Your email validation email could be in your spam folder!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;**&#039;&#039;&#039; NOTHING ON THIS INSTANCE IS PERMANENT.  This is for user experience testing only... your pics will be wiped!&lt;br /&gt;
&lt;br /&gt;
You&#039;ll be able to give us the best feedback if you don&#039;t look at anyone else&#039;s notes before you start. Thanks for helping us with usability!! We really appreciate it!&lt;br /&gt;
&lt;br /&gt;
= User notes go in this section =&lt;br /&gt;
&lt;br /&gt;
=== From Deb, UX notes on 8.16.2011 === &lt;br /&gt;
I&#039;m running Ubuntu 10.04, Lucid Lynx. It&#039;s the Netbook remix version on an Aspire One, with Firefox version 3.6.18 for Ubuntu &lt;br /&gt;
&lt;br /&gt;
* Login page did not prompt for the possibility of forgotten password&lt;br /&gt;
&lt;br /&gt;
* login is really big on netbook, so that not all felds are visible on the screen at once, not ideal for just four fields&lt;br /&gt;
&lt;br /&gt;
* Not clear how you get to a page for adding media from the email verification page. &lt;br /&gt;
&lt;br /&gt;
* The submit box is really large on a netbook, the whole box should be visible on one screen&lt;br /&gt;
&lt;br /&gt;
* The tagging field should have small text underneath it about what format tags should use&lt;br /&gt;
&lt;br /&gt;
* Thumbnails on the little nav buttons from one pic to the other would be nice&lt;br /&gt;
&lt;br /&gt;
* The media submission page could also be scaled for the netbook screen&lt;br /&gt;
&lt;br /&gt;
* people will want to submit multiple images which it seems you can&#039;t yet do&lt;br /&gt;
&lt;br /&gt;
* Animated gifs work! Awesome.  &lt;br /&gt;
&lt;br /&gt;
* Tags seem to be not case sensitive and strip punctuation. Also awesome.&lt;br /&gt;
&lt;br /&gt;
= General thoughts on running a user experience test =&lt;br /&gt;
&lt;br /&gt;
Could someone with experience with this fill in info here? ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I (Jan-Christoph Borchardt) write a thesis at the moment on [http://owncloud.iuk.hdm-stuttgart.de/apps/files_publiclink/get.php?token=6c766212ba094bea08bf1bb800b3e1e7c785388e Coordinating low-cost usability testing in independent free &amp;amp; open source software projects]&amp;lt;br&amp;gt;&lt;br /&gt;
There are many small tips and recipes on how to do your own testing. Especially look into the &#039;&#039;Methods&#039;&#039; part.&amp;lt;br&amp;gt;&lt;br /&gt;
Please let me know if you have any other experiences with testing, I intend on regularly updating that document and release the full version freely licensed once it’s done as well as some kind of a &#039;&#039;quick start guide&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=141</id>
		<title>User Experience</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=141"/>
		<updated>2011-08-16T22:54:43Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We need help doing user experience testing!  This means users testing our software, observing what does and doesn&#039;t work for them, and recording that.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re here to help (HOORAY!) go to the testing instance set up by Caleb Davis: http://omgmg.dyndns.org:6543/&lt;br /&gt;
&lt;br /&gt;
Sign up for an account&#039;&#039;&#039;*&#039;&#039;&#039;, add some pictures&#039;&#039;&#039;**&#039;&#039;&#039; and play around. Take some notes and then either set up an account on this wiki and add your thoughts to this page or email them to press@mediagoblin.org. Please include your operating system and what browser you&#039;re using. &lt;br /&gt;
&lt;br /&gt;
 * Your email validation email could be in your spam folder!&lt;br /&gt;
 ** NOTHING ON THIS INSTANCE IS PERMANENT.  This is for user experience testing only... your pics will be wiped!&lt;br /&gt;
&lt;br /&gt;
You&#039;ll be able to give us the best feedback if you don&#039;t look at anyone else&#039;s notes before you start. Thanks for helping us with usability!! We really appreciate it!&lt;br /&gt;
&lt;br /&gt;
= User notes go in this section =&lt;br /&gt;
&lt;br /&gt;
=== From Deb, UX notes on 8.16.2011 === &lt;br /&gt;
I&#039;m running Ubuntu 10.04, Lucid Lynx. It&#039;s the Netbook remix version on an Aspire One, with Firefox version 3.6.18 for Ubuntu &lt;br /&gt;
&lt;br /&gt;
* Login page did not prompt for the possibility of forgotten password&lt;br /&gt;
&lt;br /&gt;
* login is really big on netbook, so that not all felds are visible on the screen at once, not ideal for just four fields&lt;br /&gt;
&lt;br /&gt;
* Not clear how you get to a page for adding media from the email verification page. &lt;br /&gt;
&lt;br /&gt;
* The submit box is really large on a netbook, the whole box should be visible on one screen&lt;br /&gt;
&lt;br /&gt;
* The tagging field should have small text underneath it about what format tags should use&lt;br /&gt;
&lt;br /&gt;
* Thumbnails on the little nav buttons from one pic to the other would be nice&lt;br /&gt;
&lt;br /&gt;
* The media submission page could also be scaled for the netbook screen&lt;br /&gt;
&lt;br /&gt;
* people will want to submit multiple images which it seems you can&#039;t yet do&lt;br /&gt;
&lt;br /&gt;
* Animated gifs work! Awesome.  &lt;br /&gt;
&lt;br /&gt;
* Tags seem to be not case sensitive and strip punctuation. Also awesome.&lt;br /&gt;
&lt;br /&gt;
= General thoughts on running a user experience test =&lt;br /&gt;
&lt;br /&gt;
Could someone with experience with this fill in info here? ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I (Jan-Christoph Borchardt) write a thesis at the moment on [http://owncloud.iuk.hdm-stuttgart.de/apps/files_publiclink/get.php?token=6c766212ba094bea08bf1bb800b3e1e7c785388e Coordinating low-cost usability testing in independent free &amp;amp; open source software projects]&amp;lt;br&amp;gt;&lt;br /&gt;
There are many small tips and recipes on how to do your own testing. Especially look into the &#039;&#039;Methods&#039;&#039; part.&amp;lt;br&amp;gt;&lt;br /&gt;
Please let me know if you have any other experiences with testing, I intend on regularly updating that document and release the full version freely licensed once it’s done as well as some kind of a &#039;&#039;quick start guide&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=140</id>
		<title>User Experience</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=User_Experience&amp;diff=140"/>
		<updated>2011-08-16T22:54:04Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We need help doing user experience testing!  This means users testing our software, observing what does and doesn&#039;t work for them, and recording that.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re here to help (HOORAY!) go to the testing instance set up by Caleb Davis: http://omgmg.dyndns.org:6543/&lt;br /&gt;
&lt;br /&gt;
Sign up for an account&#039;&#039;&#039;*&#039;&#039;&#039;, add some pictures&#039;&#039;&#039;**&#039;&#039;&#039; and play around. Take some notes and then either set up an account on this wiki and add your thoughts to this page or email them to press@mediagoblin.org Please include your operating system and what browser you&#039;re using. &lt;br /&gt;
&lt;br /&gt;
 * Your email validation email could be in your spam folder!&lt;br /&gt;
 ** NOTHING ON THIS INSTANCE IS PERMANENT.  This is for user experience testing only... your pics will be wiped!&lt;br /&gt;
&lt;br /&gt;
You&#039;ll be able to give us the best feedback if you don&#039;t look at anyone else&#039;s notes before you start. Thanks for helping us with usability!! We really appreciate it!&lt;br /&gt;
&lt;br /&gt;
= User notes go in this section =&lt;br /&gt;
&lt;br /&gt;
=== From Deb, UX notes on 8.16.2011 === &lt;br /&gt;
I&#039;m running Ubuntu 10.04, Lucid Lynx. It&#039;s the Netbook remix version on an Aspire One, with Firefox version 3.6.18 for Ubuntu &lt;br /&gt;
&lt;br /&gt;
* Login page did not prompt for the possibility of forgotten password&lt;br /&gt;
&lt;br /&gt;
* login is really big on netbook, so that not all felds are visible on the screen at once, not ideal for just four fields&lt;br /&gt;
&lt;br /&gt;
* Not clear how you get to a page for adding media from the email verification page. &lt;br /&gt;
&lt;br /&gt;
* The submit box is really large on a netbook, the whole box should be visible on one screen&lt;br /&gt;
&lt;br /&gt;
* The tagging field should have small text underneath it about what format tags should use&lt;br /&gt;
&lt;br /&gt;
* Thumbnails on the little nav buttons from one pic to the other would be nice&lt;br /&gt;
&lt;br /&gt;
* The media submission page could also be scaled for the netbook screen&lt;br /&gt;
&lt;br /&gt;
* people will want to submit multiple images which it seems you can&#039;t yet do&lt;br /&gt;
&lt;br /&gt;
* Animated gifs work! Awesome.  &lt;br /&gt;
&lt;br /&gt;
* Tags seem to be not case sensitive and strip punctuation. Also awesome.&lt;br /&gt;
&lt;br /&gt;
= General thoughts on running a user experience test =&lt;br /&gt;
&lt;br /&gt;
Could someone with experience with this fill in info here? ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I (Jan-Christoph Borchardt) write a thesis at the moment on [http://owncloud.iuk.hdm-stuttgart.de/apps/files_publiclink/get.php?token=6c766212ba094bea08bf1bb800b3e1e7c785388e Coordinating low-cost usability testing in independent free &amp;amp; open source software projects]&amp;lt;br&amp;gt;&lt;br /&gt;
There are many small tips and recipes on how to do your own testing. Especially look into the &#039;&#039;Methods&#039;&#039; part.&amp;lt;br&amp;gt;&lt;br /&gt;
Please let me know if you have any other experiences with testing, I intend on regularly updating that document and release the full version freely licensed once it’s done as well as some kind of a &#039;&#039;quick start guide&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=108</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=108"/>
		<updated>2011-08-13T16:22:17Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Getting requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Mint or [http://bugs.foocorp.net/issues/478 Ubuntu 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install mongodb git-core python python-dev \&lt;br /&gt;
         python-lxml&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
    yum install mongodb-server python-paste-deploy python-paste-script \&lt;br /&gt;
         git-core python python-devel python-lxml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: &amp;lt;tt&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Bootstrap and run buildout: &amp;lt;tt&amp;gt;cd mediagoblin&amp;lt;/tt&amp;gt; and then &amp;lt;tt&amp;gt;python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.  To do that, run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, do:&lt;br /&gt;
&lt;br /&gt;
    rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
    ./lazyserver.sh&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
    ./bin/paster serve paste.ini --reload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./runtests.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/gmg shell&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
    sudo mongod --repair&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pkg_resources.DistributionNotFound: distribute ===&lt;br /&gt;
&lt;br /&gt;
If you get this while running buildout:&lt;br /&gt;
&lt;br /&gt;
   pkg_resources.DistributionNotFound: distribute&lt;br /&gt;
&lt;br /&gt;
Try this commmand instead:&lt;br /&gt;
&lt;br /&gt;
   python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
    gmg wipealldata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 3rd, 2011&#039;&#039;&#039;:  We don&#039;t have a list of bite-sized bugs, yet, but&lt;br /&gt;
this is important to us.  If you&#039;re interested in things to work on,&lt;br /&gt;
let us know on [http://mediagoblin.org/join/ the mailing list] or&lt;br /&gt;
on the [http://mediagoblin.org/join/ IRC channel].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://python.mirocommunity.org Python Miro Community] -- This is a shameless plug; Will Kahn-Greene runs Python Miro Community.&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, find us on the mailing list and on&lt;br /&gt;
IRC.&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=107</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=107"/>
		<updated>2011-08-13T16:03:53Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Getting requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB [http://bugs.foocorp.net/issues/478 v1.3+]      - http://www.mongodb.org/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Mint or Ubuntu, running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install mongodb git-core python python-dev \&lt;br /&gt;
         python-lxml&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
    yum install mongodb-server python-paste-deploy python-paste-script \&lt;br /&gt;
         git-core python python-devel python-lxml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: &amp;lt;tt&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Bootstrap and run buildout: &amp;lt;tt&amp;gt;cd mediagoblin&amp;lt;/tt&amp;gt; and then &amp;lt;tt&amp;gt;python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.  To do that, run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, do:&lt;br /&gt;
&lt;br /&gt;
    rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
    ./lazyserver.sh&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
    ./bin/paster serve paste.ini --reload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./runtests.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/gmg shell&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
    sudo mongod --repair&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pkg_resources.DistributionNotFound: distribute ===&lt;br /&gt;
&lt;br /&gt;
If you get this while running buildout:&lt;br /&gt;
&lt;br /&gt;
   pkg_resources.DistributionNotFound: distribute&lt;br /&gt;
&lt;br /&gt;
Try this commmand instead:&lt;br /&gt;
&lt;br /&gt;
   python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
    gmg wipealldata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 3rd, 2011&#039;&#039;&#039;:  We don&#039;t have a list of bite-sized bugs, yet, but&lt;br /&gt;
this is important to us.  If you&#039;re interested in things to work on,&lt;br /&gt;
let us know on [http://mediagoblin.org/join/ the mailing list] or&lt;br /&gt;
on the [http://mediagoblin.org/join/ IRC channel].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://python.mirocommunity.org Python Miro Community] -- This is a shameless plug; Will Kahn-Greene runs Python Miro Community.&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, find us on the mailing list and on&lt;br /&gt;
IRC.&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=106</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=106"/>
		<updated>2011-08-13T15:57:00Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Getting requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Mint or Ubuntu [http://bugs.foocorp.net/issues/478 http://bugs.foocorp.net/issues/478 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install mongodb git-core python python-dev \&lt;br /&gt;
         python-lxml&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
    yum install mongodb-server python-paste-deploy python-paste-script \&lt;br /&gt;
         git-core python python-devel python-lxml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: &amp;lt;tt&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Bootstrap and run buildout: &amp;lt;tt&amp;gt;cd mediagoblin&amp;lt;/tt&amp;gt; and then &amp;lt;tt&amp;gt;python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.  To do that, run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, do:&lt;br /&gt;
&lt;br /&gt;
    rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
    ./lazyserver.sh&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
    ./bin/paster serve paste.ini --reload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./runtests.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/gmg shell&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
    sudo mongod --repair&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pkg_resources.DistributionNotFound: distribute ===&lt;br /&gt;
&lt;br /&gt;
If you get this while running buildout:&lt;br /&gt;
&lt;br /&gt;
   pkg_resources.DistributionNotFound: distribute&lt;br /&gt;
&lt;br /&gt;
Try this commmand instead:&lt;br /&gt;
&lt;br /&gt;
   python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
    gmg wipealldata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 3rd, 2011&#039;&#039;&#039;:  We don&#039;t have a list of bite-sized bugs, yet, but&lt;br /&gt;
this is important to us.  If you&#039;re interested in things to work on,&lt;br /&gt;
let us know on [http://mediagoblin.org/join/ the mailing list] or&lt;br /&gt;
on the [http://mediagoblin.org/join/ IRC channel].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://python.mirocommunity.org Python Miro Community] -- This is a shameless plug; Will Kahn-Greene runs Python Miro Community.&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, find us on the mailing list and on&lt;br /&gt;
IRC.&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=105</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=105"/>
		<updated>2011-08-13T15:56:19Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Getting requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Mint or Ubuntu ([http://bugs.foocorp.net/issues/478 http://bugs.foocorp.net/issues/478 10.10+]), running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install mongodb git-core python python-dev \&lt;br /&gt;
         python-lxml&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
    yum install mongodb-server python-paste-deploy python-paste-script \&lt;br /&gt;
         git-core python python-devel python-lxml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: &amp;lt;tt&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Bootstrap and run buildout: &amp;lt;tt&amp;gt;cd mediagoblin&amp;lt;/tt&amp;gt; and then &amp;lt;tt&amp;gt;python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.  To do that, run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, do:&lt;br /&gt;
&lt;br /&gt;
    rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
    ./lazyserver.sh&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
    ./bin/paster serve paste.ini --reload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./runtests.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/gmg shell&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
    sudo mongod --repair&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pkg_resources.DistributionNotFound: distribute ===&lt;br /&gt;
&lt;br /&gt;
If you get this while running buildout:&lt;br /&gt;
&lt;br /&gt;
   pkg_resources.DistributionNotFound: distribute&lt;br /&gt;
&lt;br /&gt;
Try this commmand instead:&lt;br /&gt;
&lt;br /&gt;
   python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
    gmg wipealldata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 3rd, 2011&#039;&#039;&#039;:  We don&#039;t have a list of bite-sized bugs, yet, but&lt;br /&gt;
this is important to us.  If you&#039;re interested in things to work on,&lt;br /&gt;
let us know on [http://mediagoblin.org/join/ the mailing list] or&lt;br /&gt;
on the [http://mediagoblin.org/join/ IRC channel].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://python.mirocommunity.org Python Miro Community] -- This is a shameless plug; Will Kahn-Greene runs Python Miro Community.&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, find us on the mailing list and on&lt;br /&gt;
IRC.&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=102</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=102"/>
		<updated>2011-08-13T02:53:16Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an [http://aws.amazon.com/ec2/ EC2] instance from an [http://aws.amazon.com/amis AMI] pre-loaded with MediaGoblin. The following [http://aws.amazon.com/articles/0155828273219400 recipe] should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-61be7908 ami-61be7908]. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not login to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=100</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=100"/>
		<updated>2011-08-12T22:41:07Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an [http://aws.amazon.com/ec2/ EC2] instance from an [http://aws.amazon.com/amis AMI] pre-loaded with MediaGoblin. The following [http://aws.amazon.com/articles/0155828273219400 recipe] should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: ami-61be7908. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not login to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=99</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=99"/>
		<updated>2011-08-12T22:13:08Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an [http://aws.amazon.com/ec2/ EC2] instance from an [http://aws.amazon.com/amis AMI] pre-loaded with MediaGoblin. The following recipe should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: ami-61be7908. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not login to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=98</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=98"/>
		<updated>2011-08-12T22:12:11Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an [http://aws.amazon.com/ec2/ EC2] instance from an AMI pre-loaded with MediaGoblin. The following recipe should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: ami-61be7908. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not login to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=97</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=97"/>
		<updated>2011-08-12T22:04:09Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Want to hack on GNU MediaGoblin? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GNU MediaGoblin wiki of bizarre and unusual things =&lt;br /&gt;
&lt;br /&gt;
In this wiki you will find beasts the likes of which you have never laid eyes on before!  Expand your imagination, ladies and gentlemen, and examine the errata in this corpus of knowledge.  May it transform you and let you see the world in a new light forevermore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto]] - generally covers getting set up for hacking on GNU MediaGoblin&lt;br /&gt;
** FIXME - add distribution/OS specific hacking guides as separate pages here&lt;br /&gt;
* [http://python.mirocommunity.org/video/4337/gnu-mediagoblin-for-a-federate A video with Chris Webber talking about MediaGoblin] at [http://chipy.org ChiPy]&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
* [[UnitTests]] - all about the unit tests&lt;br /&gt;
* [[Configure MediaGoblin]] - how to configure MediaGoblin for all your local needs.&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
* Deployment - How to run your own publicly available MediaGoblin server&lt;br /&gt;
** [[Virtual Machine Hosting]] - using [http://aws.amazon.com/free/?utm_source=adwords&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=CPC_Google_AWS_ec2&amp;amp;utm_content=TextV01_PP_V01_EC2&amp;amp;trk=CPC_Google_AWS_ec2 Amazon&#039;s free EC2 tier]&lt;br /&gt;
&lt;br /&gt;
== Inner workings of the secret sanctum (aka project documentation) ==&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/ IRC meeting logs]&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess]] - covers the release process&lt;br /&gt;
&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual&lt;br /&gt;
* [https://gitorious.org/mediagoblin/mediagoblin/blobs/master/extlib/README External Library Policy] - covers use of external libraries&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Amazon_Free_Tier&amp;diff=96</id>
		<title>Amazon Free Tier</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Amazon_Free_Tier&amp;diff=96"/>
		<updated>2011-08-12T22:01:36Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: moved Amazon Free Tier to Virtual Machine Hosting: original title suggests the link would go to an amazon page...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Virtual Machine Hosting]]&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=95</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=95"/>
		<updated>2011-08-12T22:01:36Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: moved Amazon Free Tier to Virtual Machine Hosting: original title suggests the link would go to an amazon page...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an EC2 instance from an AMI pre-loaded with MediaGoblin. The following recipe should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: ami-61be7908. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not login to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=94</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=94"/>
		<updated>2011-08-12T21:38:02Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: Created page with &amp;quot;= Motivation =  If you want to give MediaGoblin a try, but would prefer to run it on someone else&amp;#039;s machine for a while, then you may be interested in spinning up an EC2 instance...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an EC2 instance from an AMI pre-loaded with MediaGoblin. The following recipe should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: ami-61be7908. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not login to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=93</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=93"/>
		<updated>2011-08-12T18:58:29Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Want to hack on GNU MediaGoblin? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GNU MediaGoblin wiki of bizarre and unusual things =&lt;br /&gt;
&lt;br /&gt;
In this wiki you will find beasts the likes of which you have never laid eyes on before!  Expand your imagination, ladies and gentlemen, and examine the errata in this corpus of knowledge.  May it transform you and let you see the world in a new light forevermore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto]] - generally covers getting set up for hacking on GNU MediaGoblin&lt;br /&gt;
** FIXME - add distribution/OS specific hacking guides as separate pages here&lt;br /&gt;
* [http://python.mirocommunity.org/video/4337/gnu-mediagoblin-for-a-federate A video with Chris Webber talking about MediaGoblin] at [http://chipy.org ChiPy]&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
* [[UnitTests]] - all about the unit tests&lt;br /&gt;
* [[Configure MediaGoblin]] - how to configure MediaGoblin for all your local needs.&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
* Deployment - How to run your own publicly available MediaGoblin server&lt;br /&gt;
** [[Amazon Free Tier]] - using [http://aws.amazon.com/free/?utm_source=adwords&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=CPC_Google_AWS_ec2&amp;amp;utm_content=TextV01_PP_V01_EC2&amp;amp;trk=CPC_Google_AWS_ec2 EC2]&lt;br /&gt;
&lt;br /&gt;
== Inner workings of the secret sanctum (aka project documentation) ==&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/ IRC meeting logs]&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess]] - covers the release process&lt;br /&gt;
&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual&lt;br /&gt;
* [https://gitorious.org/mediagoblin/mediagoblin/blobs/master/extlib/README External Library Policy] - covers use of external libraries&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=87</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=87"/>
		<updated>2011-08-10T06:40:00Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Want to hack on GNU MediaGoblin? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GNU MediaGoblin wiki of bizarre and unusual things =&lt;br /&gt;
&lt;br /&gt;
In this wiki you will find beasts the likes of which you have never laid eyes on before!  Expand your imagination, ladies and gentlemen, and examine the errata in this corpus of knowledge.  May it transform you and let you see the world in a new light forevermore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto]] - generally covers getting set up for hacking on GNU MediaGoblin&lt;br /&gt;
** FIXME - add distribution/OS specific hacking guides as separate pages here&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
* [[UnitTests]] - all about the unit tests&lt;br /&gt;
* [[Configure MediaGoblin]] - how to configure MediaGoblin for all your local needs.&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
&lt;br /&gt;
== Inner workings of the secret sanctum (aka project documentation) ==&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/ IRC meeting logs]&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess]] - covers the release process&lt;br /&gt;
&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual&lt;br /&gt;
* [[ExternalLibraryPolicy]] - covers use of external libraries&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=84</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=84"/>
		<updated>2011-08-10T05:30:36Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Want to hack on GNU MediaGoblin? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GNU MediaGoblin wiki of bizarre and unusual things =&lt;br /&gt;
&lt;br /&gt;
In this wiki you will find beasts the likes of which you have never laid eyes on before!  Expand your imagination, ladies and gentlemen, and examine the errata in this corpus of knowledge.  May it transform you and let you see the world in a new light forevermore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto]] - generally covers getting set up for hacking on GNU MediaGoblin&lt;br /&gt;
** FIXME - add distribution/OS specific hacking guides as separate pages here&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
* [[UnitTests]] - all about the unit tests&lt;br /&gt;
* [[Configure MediaGoblin]] - how to configure MediaGoblin for all your local needs.&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s hardware resource requirements&lt;br /&gt;
&lt;br /&gt;
== Inner workings of the secret sanctum (aka project documentation) ==&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/ IRC meeting logs]&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess]] - covers the release process&lt;br /&gt;
&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual&lt;br /&gt;
* [[ExternalLibraryPolicy]] - covers use of external libraries&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Configure_MediaGoblin&amp;diff=78</id>
		<title>Configure MediaGoblin</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Configure_MediaGoblin&amp;diff=78"/>
		<updated>2011-08-09T04:43:30Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: Undo revision 77 by Cfdv (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The config files =&lt;br /&gt;
&lt;br /&gt;
So basically there are two config files (and one meta-config file).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mediagoblin.ini:&#039;&#039;&#039; Use this to configure MediaGoblin, the application.  Want to use a different storage system?  Configure it here!&lt;br /&gt;
* &#039;&#039;&#039;paste.ini:&#039;&#039;&#039; This just actually configures the web server that launches the MediaGoblin application, and some other things (like actually sets up the applications that serve your static files).&lt;br /&gt;
&lt;br /&gt;
And then there&#039;s the meta-config file:&lt;br /&gt;
* &#039;&#039;&#039;mediagoblin/config_spec.ini:&#039;&#039;&#039; This sets the defaults for config file options and the type conversion for things in mediagoblin.ini.  Developers who add new config options should probably register them and their types here (and set some good defaults, if applicable).&lt;br /&gt;
&lt;br /&gt;
= Changing config files =&lt;br /&gt;
&lt;br /&gt;
So you want to turn on (or off) all the bells and whistles, set up mediagoblin to use a storage system running out of a distributed cluster of Commodore 64s, change your email server configuration, etc.  Where do you set all this stuff up?&lt;br /&gt;
&lt;br /&gt;
You should do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# copy the config files&lt;br /&gt;
$ cp paste.ini paste_local.ini&lt;br /&gt;
$ cp mediagoblin.ini mediagoblin_local.ini&lt;br /&gt;
&lt;br /&gt;
# edit paste_local.ini to know where mediagoblin_local.ini is&lt;br /&gt;
$ editor paste_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find the line marked &amp;quot;config =&amp;quot; under [app:mediagoblin]; change to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[app:mediagoblin]&lt;br /&gt;
use = egg:mediagoblin#app&lt;br /&gt;
filter-with = beaker&lt;br /&gt;
config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use lazyserver.sh, you can run it like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./lazyserver.sh -c paste_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, all the ./bin/gmg commands have arguments to allow you to pass in the config file.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/gmg shell -cf mediagoblin_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(It&#039;s important to note that the ./bin/gmg commands don&#039;t care about the paster file, they just care about the mediagoblin config file.)&lt;br /&gt;
&lt;br /&gt;
BTW, all these ./bin/gmg subcommands have help.  You can check them like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/gmg shell --help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for more info.&lt;br /&gt;
&lt;br /&gt;
= Setting up Cloud Files public storage =&lt;br /&gt;
&lt;br /&gt;
These settings also work with OpenStack Object Storage (Swift), but you will need to set the API endpoint to avoid it defaulting to Rackspace Cloud Files US.&lt;br /&gt;
&lt;br /&gt;
== Setting it up ==&lt;br /&gt;
&lt;br /&gt;
In mediagoblin.ini (or mediagoblin_local.ini), add this to the file and edit it to fit your needs.&lt;br /&gt;
&lt;br /&gt;
=== Working example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# BEGIN CloudFiles public storage&lt;br /&gt;
##&lt;br /&gt;
# Uncomment the following line and fill in your details to enable Cloud Files&lt;br /&gt;
# (or OpenStack Object Storage [Swift])&lt;br /&gt;
# - &lt;br /&gt;
publicstore_storage_class = mediagoblin.storage:CloudFilesStorage&lt;br /&gt;
publicstore_cloudfiles_user = user&lt;br /&gt;
publicstore_cloudfiles_api_key = 1a2b3c4d5e6f7g8h9i&lt;br /&gt;
publicstore_cloudfiles_container = mediagoblin&lt;br /&gt;
&lt;br /&gt;
# Uncomment this and fill it in to set the API endpoint to anything other&lt;br /&gt;
# than Rackspace Cloud Files US&lt;br /&gt;
# publicstore_cloudfiles_host = https://example.org/v1.0 &lt;br /&gt;
&lt;br /&gt;
# Only applicable if you run MediaGoblin on a Rackspace Cloud Server&lt;br /&gt;
# it routes traffic through the internal Rackspace network, this&lt;br /&gt;
# means that the bandwith betis free.&lt;br /&gt;
publicstore_cloudfiles_use_servicenet = false&lt;br /&gt;
##&lt;br /&gt;
# END CloudFiles&lt;br /&gt;
##&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
&lt;br /&gt;
==== publicstore_storage_class ====&lt;br /&gt;
&#039;&#039;Default: mediagoblin.storage:BasicFileStorage&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
This is used internally in mediagoblin to decide which type the storage object should be.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_user ====&lt;br /&gt;
The user account that you use for authentication with the Cloud Files API.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_api_key ====&lt;br /&gt;
The API key for the Cloud Files API&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_container ====&lt;br /&gt;
The container on your Cloud Files account in which the MediaGoblin public storage should be stored.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_host ====&lt;br /&gt;
&#039;&#039;Default: Your current version of [https://github.com/rackspace/python-cloudfiles python-cloudfiles]&#039;s Rackspace Cloud Files US host.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
The API endpoint of the Cloud Files (Swift, OpenStack Object Storage) provider.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_use_servicenet ====&lt;br /&gt;
&#039;&#039;Default: false&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
User the RackSpace internal network when transferring data between the MediaGoblin server and the Cloud Files provider. This only works when running MediaGoblin on Rackspace Cloud Servers.&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;As of 6th of August `attachments` are not yet in mediagoblin master. Dev branch can be found at https://gitorious.org/~jwandborg/mediagoblin/jwandborgs-mediagoblin/commits/f482_media_attachments&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attachment are files that are associated to a media entry. &lt;br /&gt;
&lt;br /&gt;
For example, it could be the GIMP .xcf file for the image. So that others can inspect the source of your work.&lt;br /&gt;
&lt;br /&gt;
== Hazards ==&lt;br /&gt;
&lt;br /&gt;
Attachments are not filtered or scanned and therefore present a security risk. They can be used to perform XSS attacks or to upload malicious content. Make sure your environment is safe before enabling it.&lt;br /&gt;
&lt;br /&gt;
== Allow attachments ==&lt;br /&gt;
&lt;br /&gt;
To allow attachments, add&lt;br /&gt;
&lt;br /&gt;
  allow_attachments = true&lt;br /&gt;
&lt;br /&gt;
to your mediagoblin.ini (or mediagoblin_local.ini)&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Configure_MediaGoblin&amp;diff=77</id>
		<title>Configure MediaGoblin</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Configure_MediaGoblin&amp;diff=77"/>
		<updated>2011-08-09T04:25:23Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Attachments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The config files =&lt;br /&gt;
&lt;br /&gt;
So basically there are two config files (and one meta-config file).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mediagoblin.ini:&#039;&#039;&#039; Use this to configure MediaGoblin, the application.  Want to use a different storage system?  Configure it here!&lt;br /&gt;
* &#039;&#039;&#039;paste.ini:&#039;&#039;&#039; This just actually configures the web server that launches the MediaGoblin application, and some other things (like actually sets up the applications that serve your static files).&lt;br /&gt;
&lt;br /&gt;
And then there&#039;s the meta-config file:&lt;br /&gt;
* &#039;&#039;&#039;mediagoblin/config_spec.ini:&#039;&#039;&#039; This sets the defaults for config file options and the type conversion for things in mediagoblin.ini.  Developers who add new config options should probably register them and their types here (and set some good defaults, if applicable).&lt;br /&gt;
&lt;br /&gt;
= Changing config files =&lt;br /&gt;
&lt;br /&gt;
So you want to turn on (or off) all the bells and whistles, set up mediagoblin to use a storage system running out of a distributed cluster of Commodore 64s, change your email server configuration, etc.  Where do you set all this stuff up?&lt;br /&gt;
&lt;br /&gt;
You should do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# copy the config files&lt;br /&gt;
$ cp paste.ini paste_local.ini&lt;br /&gt;
$ cp mediagoblin.ini mediagoblin_local.ini&lt;br /&gt;
&lt;br /&gt;
# edit paste_local.ini to know where mediagoblin_local.ini is&lt;br /&gt;
$ editor paste_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find the line marked &amp;quot;config =&amp;quot; under [app:mediagoblin]; change to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[app:mediagoblin]&lt;br /&gt;
use = egg:mediagoblin#app&lt;br /&gt;
filter-with = beaker&lt;br /&gt;
config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use lazyserver.sh, you can run it like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./lazyserver.sh -c paste_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, all the ./bin/gmg commands have arguments to allow you to pass in the config file.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/gmg shell -cf mediagoblin_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(It&#039;s important to note that the ./bin/gmg commands don&#039;t care about the paster file, they just care about the mediagoblin config file.)&lt;br /&gt;
&lt;br /&gt;
BTW, all these ./bin/gmg subcommands have help.  You can check them like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/gmg shell --help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for more info.&lt;br /&gt;
&lt;br /&gt;
= Setting up Cloud Files public storage =&lt;br /&gt;
&lt;br /&gt;
These settings also work with OpenStack Object Storage (Swift), but you will need to set the API endpoint to avoid it defaulting to Rackspace Cloud Files US.&lt;br /&gt;
&lt;br /&gt;
== Setting it up ==&lt;br /&gt;
&lt;br /&gt;
In mediagoblin.ini (or mediagoblin_local.ini), add this to the file and edit it to fit your needs.&lt;br /&gt;
&lt;br /&gt;
=== Working example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# BEGIN CloudFiles public storage&lt;br /&gt;
##&lt;br /&gt;
# Uncomment the following line and fill in your details to enable Cloud Files&lt;br /&gt;
# (or OpenStack Object Storage [Swift])&lt;br /&gt;
# - &lt;br /&gt;
publicstore_storage_class = mediagoblin.storage:CloudFilesStorage&lt;br /&gt;
publicstore_cloudfiles_user = user&lt;br /&gt;
publicstore_cloudfiles_api_key = 1a2b3c4d5e6f7g8h9i&lt;br /&gt;
publicstore_cloudfiles_container = mediagoblin&lt;br /&gt;
&lt;br /&gt;
# Uncomment this and fill it in to set the API endpoint to anything other&lt;br /&gt;
# than Rackspace Cloud Files US&lt;br /&gt;
# publicstore_cloudfiles_host = https://example.org/v1.0 &lt;br /&gt;
&lt;br /&gt;
# Only applicable if you run MediaGoblin on a Rackspace Cloud Server&lt;br /&gt;
# it routes traffic through the internal Rackspace network, this&lt;br /&gt;
# means that the bandwith betis free.&lt;br /&gt;
publicstore_cloudfiles_use_servicenet = false&lt;br /&gt;
##&lt;br /&gt;
# END CloudFiles&lt;br /&gt;
##&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
&lt;br /&gt;
==== publicstore_storage_class ====&lt;br /&gt;
&#039;&#039;Default: mediagoblin.storage:BasicFileStorage&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
This is used internally in mediagoblin to decide which type the storage object should be.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_user ====&lt;br /&gt;
The user account that you use for authentication with the Cloud Files API.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_api_key ====&lt;br /&gt;
The API key for the Cloud Files API&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_container ====&lt;br /&gt;
The container on your Cloud Files account in which the MediaGoblin public storage should be stored.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_host ====&lt;br /&gt;
&#039;&#039;Default: Your current version of [https://github.com/rackspace/python-cloudfiles python-cloudfiles]&#039;s Rackspace Cloud Files US host.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
The API endpoint of the Cloud Files (Swift, OpenStack Object Storage) provider.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_use_servicenet ====&lt;br /&gt;
&#039;&#039;Default: false&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
User the RackSpace internal network when transferring data between the MediaGoblin server and the Cloud Files provider. This only works when running MediaGoblin on Rackspace Cloud Servers.&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
Attachment are files that are associated to a media entry. &lt;br /&gt;
&lt;br /&gt;
For example, it could be the GIMP .xcf file for the image. So that others can inspect the source of your work.&lt;br /&gt;
&lt;br /&gt;
== Hazards ==&lt;br /&gt;
&lt;br /&gt;
Attachments are not filtered or scanned and therefore present a security risk. They can be used to perform XSS attacks or to upload malicious content. Make sure your environment is safe before enabling it.&lt;br /&gt;
&lt;br /&gt;
== Allow attachments ==&lt;br /&gt;
&lt;br /&gt;
To allow attachments, add&lt;br /&gt;
&lt;br /&gt;
  allow_attachments = true&lt;br /&gt;
&lt;br /&gt;
to your mediagoblin.ini (or mediagoblin_local.ini)&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Configure_MediaGoblin&amp;diff=76</id>
		<title>Configure MediaGoblin</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Configure_MediaGoblin&amp;diff=76"/>
		<updated>2011-08-09T04:24:49Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* Seting it up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The config files =&lt;br /&gt;
&lt;br /&gt;
So basically there are two config files (and one meta-config file).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mediagoblin.ini:&#039;&#039;&#039; Use this to configure MediaGoblin, the application.  Want to use a different storage system?  Configure it here!&lt;br /&gt;
* &#039;&#039;&#039;paste.ini:&#039;&#039;&#039; This just actually configures the web server that launches the MediaGoblin application, and some other things (like actually sets up the applications that serve your static files).&lt;br /&gt;
&lt;br /&gt;
And then there&#039;s the meta-config file:&lt;br /&gt;
* &#039;&#039;&#039;mediagoblin/config_spec.ini:&#039;&#039;&#039; This sets the defaults for config file options and the type conversion for things in mediagoblin.ini.  Developers who add new config options should probably register them and their types here (and set some good defaults, if applicable).&lt;br /&gt;
&lt;br /&gt;
= Changing config files =&lt;br /&gt;
&lt;br /&gt;
So you want to turn on (or off) all the bells and whistles, set up mediagoblin to use a storage system running out of a distributed cluster of Commodore 64s, change your email server configuration, etc.  Where do you set all this stuff up?&lt;br /&gt;
&lt;br /&gt;
You should do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# copy the config files&lt;br /&gt;
$ cp paste.ini paste_local.ini&lt;br /&gt;
$ cp mediagoblin.ini mediagoblin_local.ini&lt;br /&gt;
&lt;br /&gt;
# edit paste_local.ini to know where mediagoblin_local.ini is&lt;br /&gt;
$ editor paste_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find the line marked &amp;quot;config =&amp;quot; under [app:mediagoblin]; change to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[app:mediagoblin]&lt;br /&gt;
use = egg:mediagoblin#app&lt;br /&gt;
filter-with = beaker&lt;br /&gt;
config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use lazyserver.sh, you can run it like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./lazyserver.sh -c paste_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, all the ./bin/gmg commands have arguments to allow you to pass in the config file.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/gmg shell -cf mediagoblin_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(It&#039;s important to note that the ./bin/gmg commands don&#039;t care about the paster file, they just care about the mediagoblin config file.)&lt;br /&gt;
&lt;br /&gt;
BTW, all these ./bin/gmg subcommands have help.  You can check them like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/gmg shell --help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for more info.&lt;br /&gt;
&lt;br /&gt;
= Setting up Cloud Files public storage =&lt;br /&gt;
&lt;br /&gt;
These settings also work with OpenStack Object Storage (Swift), but you will need to set the API endpoint to avoid it defaulting to Rackspace Cloud Files US.&lt;br /&gt;
&lt;br /&gt;
== Setting it up ==&lt;br /&gt;
&lt;br /&gt;
In mediagoblin.ini (or mediagoblin_local.ini), add this to the file and edit it to fit your needs.&lt;br /&gt;
&lt;br /&gt;
=== Working example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# BEGIN CloudFiles public storage&lt;br /&gt;
##&lt;br /&gt;
# Uncomment the following line and fill in your details to enable Cloud Files&lt;br /&gt;
# (or OpenStack Object Storage [Swift])&lt;br /&gt;
# - &lt;br /&gt;
publicstore_storage_class = mediagoblin.storage:CloudFilesStorage&lt;br /&gt;
publicstore_cloudfiles_user = user&lt;br /&gt;
publicstore_cloudfiles_api_key = 1a2b3c4d5e6f7g8h9i&lt;br /&gt;
publicstore_cloudfiles_container = mediagoblin&lt;br /&gt;
&lt;br /&gt;
# Uncomment this and fill it in to set the API endpoint to anything other&lt;br /&gt;
# than Rackspace Cloud Files US&lt;br /&gt;
# publicstore_cloudfiles_host = https://example.org/v1.0 &lt;br /&gt;
&lt;br /&gt;
# Only applicable if you run MediaGoblin on a Rackspace Cloud Server&lt;br /&gt;
# it routes traffic through the internal Rackspace network, this&lt;br /&gt;
# means that the bandwith betis free.&lt;br /&gt;
publicstore_cloudfiles_use_servicenet = false&lt;br /&gt;
##&lt;br /&gt;
# END CloudFiles&lt;br /&gt;
##&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
&lt;br /&gt;
==== publicstore_storage_class ====&lt;br /&gt;
&#039;&#039;Default: mediagoblin.storage:BasicFileStorage&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
This is used internally in mediagoblin to decide which type the storage object should be.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_user ====&lt;br /&gt;
The user account that you use for authentication with the Cloud Files API.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_api_key ====&lt;br /&gt;
The API key for the Cloud Files API&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_container ====&lt;br /&gt;
The container on your Cloud Files account in which the MediaGoblin public storage should be stored.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_host ====&lt;br /&gt;
&#039;&#039;Default: Your current version of [https://github.com/rackspace/python-cloudfiles python-cloudfiles]&#039;s Rackspace Cloud Files US host.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
The API endpoint of the Cloud Files (Swift, OpenStack Object Storage) provider.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_use_servicenet ====&lt;br /&gt;
&#039;&#039;Default: false&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
User the RackSpace internal network when transferring data between the MediaGoblin server and the Cloud Files provider. This only works when running MediaGoblin on Rackspace Cloud Servers.&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;As of 6th of August `attachments` are not yet in mediagoblin master. Dev branch can be found at https://gitorious.org/~jwandborg/mediagoblin/jwandborgs-mediagoblin/commits/f482_media_attachments&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attachment are files that are associated to a media entry. &lt;br /&gt;
&lt;br /&gt;
For example, it could be the GIMP .xcf file for the image. So that others can inspect the source of your work.&lt;br /&gt;
&lt;br /&gt;
== Hazards ==&lt;br /&gt;
&lt;br /&gt;
Attachments are not filtered or scanned and therefore present a security risk. They can be used to perform XSS attacks or to upload malicious content. Make sure your environment is safe before enabling it.&lt;br /&gt;
&lt;br /&gt;
== Allow attachments ==&lt;br /&gt;
&lt;br /&gt;
To allow attachments, add&lt;br /&gt;
&lt;br /&gt;
  allow_attachments = true&lt;br /&gt;
&lt;br /&gt;
to your mediagoblin.ini (or mediagoblin_local.ini)&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Configure_MediaGoblin&amp;diff=75</id>
		<title>Configure MediaGoblin</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Configure_MediaGoblin&amp;diff=75"/>
		<updated>2011-08-09T03:25:46Z</updated>

		<summary type="html">&lt;p&gt;Cfdv: /* editor paste_local.ini, not mediagoblin_local.ini */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The config files =&lt;br /&gt;
&lt;br /&gt;
So basically there are two config files (and one meta-config file).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;mediagoblin.ini:&#039;&#039;&#039; Use this to configure MediaGoblin, the application.  Want to use a different storage system?  Configure it here!&lt;br /&gt;
* &#039;&#039;&#039;paste.ini:&#039;&#039;&#039; This just actually configures the web server that launches the MediaGoblin application, and some other things (like actually sets up the applications that serve your static files).&lt;br /&gt;
&lt;br /&gt;
And then there&#039;s the meta-config file:&lt;br /&gt;
* &#039;&#039;&#039;mediagoblin/config_spec.ini:&#039;&#039;&#039; This sets the defaults for config file options and the type conversion for things in mediagoblin.ini.  Developers who add new config options should probably register them and their types here (and set some good defaults, if applicable).&lt;br /&gt;
&lt;br /&gt;
= Changing config files =&lt;br /&gt;
&lt;br /&gt;
So you want to turn on (or off) all the bells and whistles, set up mediagoblin to use a storage system running out of a distributed cluster of Commodore 64s, change your email server configuration, etc.  Where do you set all this stuff up?&lt;br /&gt;
&lt;br /&gt;
You should do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# copy the config files&lt;br /&gt;
$ cp paste.ini paste_local.ini&lt;br /&gt;
$ cp mediagoblin.ini mediagoblin_local.ini&lt;br /&gt;
&lt;br /&gt;
# edit paste_local.ini to know where mediagoblin_local.ini is&lt;br /&gt;
$ editor paste_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find the line marked &amp;quot;config =&amp;quot; under [app:mediagoblin]; change to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[app:mediagoblin]&lt;br /&gt;
use = egg:mediagoblin#app&lt;br /&gt;
filter-with = beaker&lt;br /&gt;
config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use lazyserver.sh, you can run it like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./lazyserver.sh -c paste_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, all the ./bin/gmg commands have arguments to allow you to pass in the config file.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/gmg shell -cf mediagoblin_local.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(It&#039;s important to note that the ./bin/gmg commands don&#039;t care about the paster file, they just care about the mediagoblin config file.)&lt;br /&gt;
&lt;br /&gt;
BTW, all these ./bin/gmg subcommands have help.  You can check them like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./bin/gmg shell --help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for more info.&lt;br /&gt;
&lt;br /&gt;
= Setting up Cloud Files public storage =&lt;br /&gt;
&lt;br /&gt;
These settings also work with OpenStack Object Storage (Swift), but you will need to set the API endpoint to avoid it defaulting to Rackspace Cloud Files US.&lt;br /&gt;
&lt;br /&gt;
== Seting it up ==&lt;br /&gt;
&lt;br /&gt;
In mediagoblin.ini (or mediagoblin_local.ini), add this to the file and edit it to fit your needs.&lt;br /&gt;
&lt;br /&gt;
=== Working example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# BEGIN CloudFiles public storage&lt;br /&gt;
##&lt;br /&gt;
# Uncomment the following line and fill in your details to enable Cloud Files&lt;br /&gt;
# (or OpenStack Object Storage [Swift])&lt;br /&gt;
# - &lt;br /&gt;
publicstore_storage_class = mediagoblin.storage:CloudFilesStorage&lt;br /&gt;
publicstore_cloudfiles_user = user&lt;br /&gt;
publicstore_cloudfiles_api_key = 1a2b3c4d5e6f7g8h9i&lt;br /&gt;
publicstore_cloudfiles_container = mediagoblin&lt;br /&gt;
&lt;br /&gt;
# Uncomment this and fill it in to set the API endpoint to anything other&lt;br /&gt;
# than Rackspace Cloud Files US&lt;br /&gt;
# publicstore_cloudfiles_host = https://example.org/v1.0 &lt;br /&gt;
&lt;br /&gt;
# Only applicable if you run MediaGoblin on a Rackspace Cloud Server&lt;br /&gt;
# it routes traffic through the internal Rackspace network, this&lt;br /&gt;
# means that the bandwith betis free.&lt;br /&gt;
publicstore_cloudfiles_use_servicenet = false&lt;br /&gt;
##&lt;br /&gt;
# END CloudFiles&lt;br /&gt;
##&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
&lt;br /&gt;
==== publicstore_storage_class ====&lt;br /&gt;
&#039;&#039;Default: mediagoblin.storage:BasicFileStorage&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
This is used internally in mediagoblin to decide which type the storage object should be.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_user ====&lt;br /&gt;
The user account that you use for authentication with the Cloud Files API.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_api_key ====&lt;br /&gt;
The API key for the Cloud Files API&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_container ====&lt;br /&gt;
The container on your Cloud Files account in which the MediaGoblin public storage should be stored.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_host ====&lt;br /&gt;
&#039;&#039;Default: Your current version of [https://github.com/rackspace/python-cloudfiles python-cloudfiles]&#039;s Rackspace Cloud Files US host.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
The API endpoint of the Cloud Files (Swift, OpenStack Object Storage) provider.&lt;br /&gt;
&lt;br /&gt;
==== publicstore_cloudfiles_use_servicenet ====&lt;br /&gt;
&#039;&#039;Default: false&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
User the RackSpace internal network when transferring data between the MediaGoblin server and the Cloud Files provider. This only works when running MediaGoblin on Rackspace Cloud Servers.&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;As of 6th of August `attachments` are not yet in mediagoblin master. Dev branch can be found at https://gitorious.org/~jwandborg/mediagoblin/jwandborgs-mediagoblin/commits/f482_media_attachments&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attachment are files that are associated to a media entry. &lt;br /&gt;
&lt;br /&gt;
For example, it could be the GIMP .xcf file for the image. So that others can inspect the source of your work.&lt;br /&gt;
&lt;br /&gt;
== Hazards ==&lt;br /&gt;
&lt;br /&gt;
Attachments are not filtered or scanned and therefore present a security risk. They can be used to perform XSS attacks or to upload malicious content. Make sure your environment is safe before enabling it.&lt;br /&gt;
&lt;br /&gt;
== Allow attachments ==&lt;br /&gt;
&lt;br /&gt;
To allow attachments, add&lt;br /&gt;
&lt;br /&gt;
  allow_attachments = true&lt;br /&gt;
&lt;br /&gt;
to your mediagoblin.ini (or mediagoblin_local.ini)&lt;/div&gt;</summary>
		<author><name>Cfdv</name></author>
	</entry>
</feed>