Configuring GitWeb - 404 - No projects found

xuzhijian picture xuzhijian · Apr 23, 2012 · Viewed 21.8k times · Source

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?

Answer

Gurce picture Gurce · Aug 31, 2013

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 :)