Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configuring GitWeb - 404 - No projects found

Tags:

gitweb

I'm configuring gitweb in my system via Apache in OpenSUSE (non-virtual host). However, I get the following error: 404 - No projects found.

/etc/gitweb.conf

# path to git projects (<project>.git)
$projectroot = "/home/zhijian/gitweb";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link = $my_uri || "/";

# html text to include at home page
$home_text = "/gitweb/static/indextext.html";

# file with project list; by default, simply scan the projectroot dir.
$projects_list = $projectroot;

# stylesheet to use
$stylesheet = "/gitweb/static/gitweb.css";

# logo to use
$logo = "/gitweb/static/git-logo.png";

# the 'favicon'
$favicon = "/gitweb/static/git-favicon.png";

/etc/apache2/conf.d/gitweb.conf

Alias /gitweb "/home/zhijian/gitweb"

<Directory "/home/zhijian/gitweb">
    Options +Indexes +ExecCGI +FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    AddHandler cgi-script .cgi
    DirectoryIndex gitweb.cgi

</Directory>

I added a soft link in the gitweb folder to link gitweb.cgi and the static folder. The Apache error log shows gitweb.cgi: Can't opendir(/home/zhijian/gitweb): Permission denied, but the permissions on the gitweb folder has been set to 755. Does anybody have an idea what might be causing this issue?

like image 367
xuzhijian Avatar asked Apr 23 '12 06:04

xuzhijian


4 Answers

I've had the same problem too in OpenSuse 11.4. In my case (and I suspect this was the case for the initial poster, who is also an opensuse user), the problem turned out to be this AppArmor thing, which I know very little about.

Here's some points I noticed that led to the eventual solution:

  • In OpenSuse, the git-web rpm package installs so that the $projectroot defaults to the "/srv/git" folder
  • If you add your git repos within this "/srv/git/..." sub-folder, then everything works just fine
  • If you decide on some other location, eg, "/home/myname/srv/git/", then it fails, despite setting owner to wwwrun:www as advised in other posts.
  • The gotchya here is AppArmor, which seems to place even tighter policies on what an app is allowed to do
  • Doing an "rpm -ql git-web" will reveal a file called: "/etc/apparmor.d/usr.share.git-web.gitweb.cgi"
  • Open this file up with su/sudo so you can edit it
  • In here, you will see these lines:

...

/srv/git/ r,
/srv/git/** r,

...

  • Change these to the path of the parent-folder containing your git repos, eg, if your housing them in "/home/myname/srv/git/", then use the ""/home/myname/srv/" parent-folder, eg:

...

/home/myname/srv r,
/home/myname/srv/** r,

...

  • Save your changes to the file
  • I think you also have to change the owner of this parent folder to wwwrun:www, eg, "sudo chown -R wwwrun:www srv/"
  • restart AppArmor with "sudo rcapparmor restart"

All should be fine now :)

like image 193
Gurce Avatar answered Nov 18 '22 21:11

Gurce


The gitweb cgi has to have the same owner as the repo you're scanning. That is to say, if your $projectroot is www-data:www-data then gitweb.cgi has to be www-data:www-data too.

In addition, the directories under $projectroot also have to have the same permissions. You should be able to do a chown -R www-data:www-data . which should help. You'll want to look at permissions as well as ownership, but that is trickier and you'll want to make sure you've got it right and haven't opened any security holes.

like image 21
jeremiah Avatar answered Nov 18 '22 21:11

jeremiah


I had the same problem. "404 no projects found" but the config was good. Apache cached the 404-response and did not run the cgi-script again:

  1. config in gitweb.conf was not edited (default ubuntu installation)
  2. I accessed the URL with a web browser: Got "no projects found"
  3. I updated the config
  4. I hit ctrl-r but again: "no projects found" (although the config was correct now)
  5. I hit shift-ctrl-r (Firefox) and I got the correct result!
like image 3
guettli Avatar answered Nov 18 '22 23:11

guettli


Edit your gitweb config file found here: /etc/gitweb.conf

And change the 10th line that starts "our $projectroot" to be:

our $projectroot = "/path/to/your/git/root"

then restart your webserver, this will tell you if your webserver config setting the GIT_PROJECT_ROOT is actually working.

like image 3
Beachhouse Avatar answered Nov 18 '22 23:11

Beachhouse