Edit:
The primary weakness of my approach is that for convenience's sake, I rely heavily on apt-get. So hypothetically I'm tied to the debian family. (we use Ubuntu LTS of a couple different versions)
Strictly speaking this disadvantage is unnecessary, you could do all from-source builds using fabric if you wanted. Didn't seem like a constructive use of my time though.
Sample task in my fabfile:
https://gist.github.com/3086836
I'll let you guess from the function name what it does.
The magic word of devops is "idempotence".