[ Home | briantanaka.com | RSS 2.0 | 2010 Archive | 2009 Archive | 2008 Archive ]
2008
If you're having trouble with group permissions on git objects in a shared environment, read on.
Recently, I needed to set up a git repository to which a number of people would need to push. I used Don Marti's excellent article on LinuxWorld, Getting a static web site organized with git as a guide.
Everything went according to plan. I created a new user and group, added the user accounts of all the collaborators to the newly created group, made the home directory (where the repository would live) setgid, git init, created a subdirectory for the working files that would be served by Apache, and installed the post-update hook that keeps the working files checked out. (I'm breezing through these steps. You can get more detail by reading Don's article.)
At first everything worked correctly, but once multiple people had git pushed to the repository, we began running into permissions issues despite the setgid. They manifested roughly like so:
$ git push Counting objects: 7, done. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 376 bytes, done. Total 4 (delta 3), reused 0 (delta 0) error: unable to create temporary sha1 filename ./objects/tmp_obj_gBZ5Rl: Permission denied fatal: failed to write object
Inspection revealed that git objects were being written to .git/objects with the group write permissions bit off.
The solution turned out to be fairly straightforward. In the file .git/config, I added a line that read: "sharedRepository = group", like so:
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true sharedRepository = group
Thereafter, new files in .git/objects were created with the proper permissions for group write. (However, note that new files are group-owned by the primary group of the user account via which the push was received. If the users collaborating on the project have different primary groups, and if those users do not share membership in that set of groups, you may still run into problems.)
Disclaimer: I'm far from being a git expert. Though this solution worked for me, you're advised to do additional research on your own. For example, while writing this post, I stumbled upon this article that has extra, useful looking information you should read: Converting a Shared Subversion Repository to Git (The section titled "Make the shared Git repository" in particular.)
Happy collaborating!
...posted at: 11:11 | path: /git | permanent link to this entry
The problem -- You have an HTML form whose action points produces a GET URL like this: http://example.com/foo.php?s=bar+baz but you want to redirect it to a flat directory style URL like: http://example.com/bar+baz
The solution -- Use Apache's mod_rewrite. In your .htaccess file do this:
Options +FollowSymlinks RewriteEngine on RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} ^s=(.*)$ RewriteRule .* /%1? [R,L]
How it works:
Hope that helps someone out there. The important thing to remember here is that you have to match the name-value pair in the QUERY-STRING condition, not in the RewriteRule. If you notice anything incorrect about this solution and want to comment, send me an email and I'll post your comment as an addendum.
posted at: 11:11 | path: /apache | permanent link to this entry
posted at: 11:11 | path: /misc | permanent link to this entry
Lately, I've been using Ubuntu about fifty percent of the time throughout my workday. I used to use Linux 100% of the time (Slackware or Debian), but for the last few years I've been using Mac OS X 100% of the time. Making the switch from Linux to Mac OS X was largely snag-free, but I did have to spend a fair amount of time finding applications in Mac OS X that performed all the functionality I was used to in Linux. Now, that I'm using Linux again, at least half-time, I find I'm having to go through the same exercise of finding apps and utilities that do what I need. Mostly, this has been very easy.
One exception has been annoying because it's something that's so trivial, one would assume it'd be easy to take care of right off the bat. Namely, I need a simple "tea timer" utility. You know... you tell it how many minutes to count, and when that many minutes has passed, it makes an obnoxious sound.
I've looked around a few times now for such a beastie. There are a couple of things that are pretty close, but nothing that exactly fits the (simple) bill. Today, annoyed by the absence of a tea timer again (I use timers all the time for various reasons -- the major one right now being that I have to enforce typing breaks because I have a slipped disc and if I type like a fiend for hours on end, I end up in a lot of pain), I decided to just hack one out in Perl.
This was definitely a case of "Perl to the rescue." It took a couple of minutes to make a script that did exactly what I want -- much less time than I've spent scouring the 'net for a utility to do the same thing. Plus, since it uses mpg123 to play the alarm, I can use any sound I like, as long as mpg123 can play it. I ended up making a little series of chimes in Garageband for the alarm. Works great.
Here's the script. It's not the world's most elegant, but it's perfectly fine for the purpose at hand:
mbp:~$ cat bin/teatimer #!/usr/bin/perl $limit = $ARGV[0] * 60; print "Starting tea timer for $ARGV[0] minutes ($limit seconds)...\n"; while ( $limit > 0 ) { print "seconds remaining... $limit\n"; sleep 1; $limit--; } print "ding!\n"; exec("/path/to/mpg123 /path/to/alarm.mp3");
posted at: 11:11 | path: /linux | permanent link to this entry
posted at: 11:11 | path: /misc | permanent link to this entry