A few months ago, I wrote a post about installing svnserve on DV hosting at Media Temple. It was a great quick solution to get started, but I really wanted to get to svn via ssh instead for the long term.
Rather than scour the Internet for how to do this (I’ve done it a few times in my career, but I’m no sysadmin), I sat down for lunch one day with Collin, who used to be a mighty fine sysadmin! Saved me hours of time, hopefully this will help some of you all too.
Keep in mind that you’ll have to check out your files from scratch, so you’ll want to make sure all of your current changes are checked in (or otherwise managed) before you get started on this project.
Log into your server. I have root access from ssh disabled, and you may want to consider doing this as well.
I use the su – username notation to be sure the console session is refreshed. Now add a new group called svn that members will be a part of
Because we’re on CentOS, there are certain permissions that make the owner only having default permissions of the file, so we’ll have to deal with that here as well so that we can avoid permissions issues when users commit their changes to SVN.
Take a look to verify, in the group file, that your user is added to the correct group:
You also want to verify that svn is the secondary group by doing this:
You should see something like this:
Now you’ll set up the ssh keys. We’ll set up dummy keys for now because we’re going to copy the public key from our local computer, not the other way around. Make sure you are still acting as the new user.
when it prompts you for a filename, enter id_rsa
when it prompts you for a password, hit enter, leave it blank, we won’t be using these keys.
Now, go back to you local computer and generate the keys again as described above, but this time use a password. If you already have keys, you’ll just need to copy them to the server.
From your local computer, do a secure copy. My keys happen to be named identity. Also note that I am renaming the keys to authorized_keys2 for this CentOS environment.
Double check that the user can now log in properly without any trouble. Now to go back and change the permissions on the repository
You’ll want to make sure your repository has a group owner of svn and a user owner of someone in that group. Make sure you’re running as root here, and it never hurts to refresh the console using the dash notation.
Since the owner can read/write but the group can only read/view on the CentOS, we need to change the default umask for the user to avoid collisions:
In the .profile file, add the following:
then reload the environment again by doing:
Now we need to make joe’s default group SVN:
Now refresh enviro
You should see something similar to the following–notice the default group is svn now:
Now, if you’d previously been using svnserv, you’ll want to turn it off. Let’s start by viewing the running processes on the server:
I had more than one instance running, so I ended up doing the following (do at your own risk)
Double check that you can then check out, change and commit files. If you can’t, there is likely a permissions issue. Also double check that you can’t access the repository with plan svn://. If so, you may have not properly terminated svnserve. You will also want to clean up for yourself by making sure that you’ve removed any information from the passwd and svnserv.conf files in the /var/svn/reponame folder.
Well, I’ve been a bad blogger lately, lots of awesome stuff going in in the world of Ingrid. I’m now working at Gnip. I’ve gotten the chance to do some really cool stuff there, having a great time for sure!
In any case, here’s a little snippet of something I wrote. In Computer Science, recursion is a major conceptual hurdle to get through. Once you master it in school, you sadly may or may not ever see it again. Well, I was fortunate enough to need the beauty of recursion recently.
Say you are trying to calculate the date of the first Sunday in September of 2008. You know that the first day of September is September 1st. The following recursive function in PHP will take the parameters and return the day part of the date. For instance,
echo addDay(“9″, “1″, “2008″, “0″);
This will return 7; the first Sunday in September of 2008 is, indeed, September 7, 2008. Here is the function: