haskell-pair
haskell-pair copied to clipboard
Haskell pair programming server via Vagrant
Installation
on a local virtualbox
- Clone this repo
- Install Vagrant and VirtualBox
-
vagrant up
-
vagrant ssh
This will create a clean dev environment with the newest GHC and Cabal. It also includes haskell-vim-now, a vim configured to be a Haskell IDE.
on a public pair programming server
- Clone this repo
- Install Vagrant
- Sign up at DigitalOcean
- Fill out your DigitalOcean client ID and API key in
Vagrantfile
-
vagrant plugin install vagrant-digitalocean
-
vagrant box add digital_ocean https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box
-
vagrant up --provider=digital_ocean
-
vagrant ssh
You'll be logged in to a newly created DigitalOcean "droplet."
ps: for some reason I had to create a ssh key with a password otherwise I could not get ssh access to the box
Included software
- Ubuntu 16.04
- New GHC via Stack
- haskell-vim-now
- SixArm git config
- Firewall, hardened OpenSSH, Fail2ban
- Oh My ZSH, Tmux/wemux
- Mumble voice chat server (port 64738)
Pairing
To pair program with someone you can give them login access by running
pair github_name
They connect to your server by ssh-add
'ing their Github SSH key
and running ssh friend@[your-server-ip]
.
When you're done working with them, run
unpair
Tmux Keybindings
C-a | | Split vertically |
C-a _ | Split horizontally |
C-h | Move to leftward pane |
C-l | Move to rightward pane |
C-j | Move to downward pane |
C-k | Move to upward pane |
C-a [ | Detach cursor to scroll (ENTER stops) |
C-a c | Create new window |
C-a [0-9] | Switch to numbered window |
Publishing a bare git repo to export work (safest)
To safely write code in the pairing environment and then export it to some kind of github account, you'll probably want to create a bare-repo locally on the pairing server, push your development to that, and then pull your new work onto your safe local development laptop, where you can then push it to your gitlab/ github server safely.
On Pairing Server
# Creating a bare repo, a safe portal allowing code to flow into safer places
$ sudo mkdir /pairing && sudo chown ${USER} /pairing
$ mkdir /pairing/my_project && cd "$_"
$ git init --bare
On Your Local System
# Push the code to the remote
$ git remote add pairing-server:/pairing/my_project
$ git push pairing-server master
On Pairing Server
# Clone the bare repo, and start hacking
$ mkdir ~/dev && cd ~/dev
$ git clone /pairing/my_project
$ cd my_project
$ echo 'hi' >> README.md && git add . && git commit -m "adds a thing"
$ git push origin master # it's now waiting in the portal :)
On Your Local System
# Collect the new code
$ git pull pairing-server master
SSH agent forwarding (for use with trusted pairs)
If both parties trust each other, then user agent forwarding can be enabled to allow convienient access to your github repos through the pairing server. But if trust has not been established, forwarding your user agent can potentially allow one of the pairs usage of all the private keys in your local machine's user agent, and these keys could potentially be misused to access remote machines or delete github repos, etc, etc.
Understanding the risks, to access your github repos on the pairing server use agent forwarding.
Edit your local ~/.ssh/config
file and add an entry for your
pair server host.
Host [ip address]
ForwardAgent yes
Before ssh'ing into the pairing server run
ssh-add ~/.ssh/[keyname]
and it will be available remotely. To test agent forwarding run this remotely
ssh -T [email protected]