* [PATCH 1/1] git-instaweb: support for apache2/lighttpd by other names
@ 2009-02-11 18:40 Luciano Miguel Ferreira Rocha
2009-06-16 9:02 ` Luciano Miguel Ferreira Rocha
0 siblings, 1 reply; 2+ messages in thread
From: Luciano Miguel Ferreira Rocha @ 2009-02-11 18:40 UTC (permalink / raw)
To: git
Some distributions include the Apache httpd server as just "httpd", but
specifying the option --httpd=httpd doesn't work, as git-instaweb uses
the program name to detect the type of server used.
Now the output if $httpd -v is used to also detect the server type.
Remove also the hard-coded path to apache2 modules, use apache2's
compilation options.
Signed-off-by: Luciano M. F. Rocha <luciano@eurotux.com>
---
git-instaweb.sh | 137 +++++++++++++++++++++++++++++++-----------------------
1 files changed, 79 insertions(+), 58 deletions(-)
diff --git a/git-instaweb.sh b/git-instaweb.sh
index 0843372..8c5aeb2 100755
--- a/git-instaweb.sh
+++ b/git-instaweb.sh
@@ -31,53 +31,84 @@ conf="$GIT_DIR/gitweb/httpd.conf"
# Defaults:
-# if installed, it doesn't need further configuration (module_path)
-test -z "$httpd" && httpd='lighttpd -f'
-
# any untaken local port will do...
test -z "$port" && port=1234
-resolve_full_httpd () {
- case "$httpd" in
- *apache2*|*lighttpd*)
- # ensure that the apache2/lighttpd command ends with "-f"
- if ! echo "$httpd" | grep -- '-f *$' >/dev/null 2>&1
- then
- httpd="$httpd -f"
- fi
- ;;
- esac
+# add sbin directories to path, usually not done for normal users
+PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin
- httpd_only="$(echo $httpd | cut -f1 -d' ')"
- if case "$httpd_only" in /*) : ;; *) which $httpd_only >/dev/null;; esac
- then
- full_httpd=$httpd
- else
- # many httpds are installed in /usr/sbin or /usr/local/sbin
- # these days and those are not in most users $PATHs
- # in addition, we may have generated a server script
- # in $fqgitdir/gitweb.
- for i in /usr/local/sbin /usr/sbin "$fqgitdir/gitweb"
- do
- if test -x "$i/$httpd_only"
- then
- full_httpd=$i/$httpd
- return
- fi
- done
-
- echo >&2 "$httpd_only not found. Install $httpd_only or use" \
- "--httpd to specify another httpd daemon."
- exit 1
- fi
-}
+# in addition, we may have generated a server script in $fqgitdir/gitweb.
+PATH=$PATH:"$fqgitdir/gitweb"
+
+# search for a server if not defined
+if test -z "$httpd"; then
+ for httpd in lighttpd apache2 httpd; do
+ type $httpd >/dev/null 2>&1 && break
+ httpd=
+ done
+fi
+
+# can't proceed without a server
+if test -z "$httpd"; then
+ echo >&2 "No HTTP server found, specify and/or install one."
+ exit 1
+fi
+
+# check if server can be executed
+httpd_only="$(echo $httpd | cut -f1 -d' ')"
+if ! type $httpd_only >/dev/null 2>&1; then
+ echo >&2 "$httpd_only not found. Install $httpd_only or use" \
+ "--httpd to specify another httpd daemon."
+fi
+
+# add option -f?
+uses_opt_f=
+
+# configuration generator
+confgenerator=
+
+case "$httpd" in
+*lighttpd*)
+ confgenerator=lighttpd_conf
+ uses_opt_f=1
+ ;;
+*apache2*)
+ confgenerator=apache2_conf
+ uses_opt_f=1
+ ;;
+webrick)
+ confgenerator=webrick_conf
+ ;;
+*)
+ # deduce from server version string
+ case "$($httpd_only -v 2>/dev/null)" in
+ *Apache/2.*)
+ confgenerator=apache2_conf
+ uses_opt_f=1
+ ;;
+ *lighttpd*)
+ confgenerator=lighttpd_conf
+ uses_opt_f=1
+ ;;
+ *)
+ echo >&2 "Unknown httpd specified: $httpd"
+ exit 1
+ ;;
+ esac
+esac
start_httpd () {
# here $httpd should have a meaningful value
- resolve_full_httpd
- # don't quote $full_httpd, there can be arguments to it (-f)
- $full_httpd "$fqgitdir/gitweb/httpd.conf"
+ # ensure that the apache2/lighttpd command ends with "-f"
+ if test -n "$uses_opt_f" &&
+ ! echo "$httpd" | grep -- '-f *$' >/dev/null 2>&1
+ then
+ httpd="$httpd -f"
+ fi
+
+ # don't quote $httpd, there can be arguments to it (-f)
+ $httpd "$fqgitdir/gitweb/httpd.conf"
if test $? != 0; then
echo "Could not execute http daemon $httpd."
exit 1
@@ -189,7 +220,13 @@ EOF
}
apache2_conf () {
- test -z "$module_path" && module_path=/usr/lib/apache2/modules
+ if test -z "$module_path"; then
+ # get module path from binary
+ module_path=$(
+ eval $($httpd_only -V | sed -n -e '/ -D.*=/s/.*-D//p')
+ echo $HTTPD_ROOT/modules
+ )
+ fi
mkdir -p "$GIT_DIR/gitweb/logs"
bind=
test x"$local" = xtrue && bind='127.0.0.1:'
@@ -232,8 +269,7 @@ PerlPassEnv GIT_EXEC_DIR
EOF
else
# plain-old CGI
- resolve_full_httpd
- list_mods=$(echo "$full_httpd" | sed "s/-f$/-l/")
+ list_mods=$(echo "$httpd" | sed "s/-f$/-l/")
$list_mods | grep 'mod_cgi\.c' >/dev/null 2>&1 || \
echo "LoadModule cgi_module $module_path/mod_cgi.so" >> "$conf"
cat >> "$conf" <<EOF
@@ -271,22 +307,7 @@ EOFGITWEB
gitweb_cgi "$GIT_DIR/gitweb/gitweb.cgi"
gitweb_css "$GIT_DIR/gitweb/gitweb.css"
-case "$httpd" in
-*lighttpd*)
- lighttpd_conf
- ;;
-*apache2*)
- apache2_conf
- ;;
-webrick)
- webrick_conf
- ;;
-*)
- echo "Unknown httpd specified: $httpd"
- exit 1
- ;;
-esac
-
+eval $confgenerator
start_httpd
url=http://127.0.0.1:$port
--
1.6.2.rc0.36.g86413.dirty
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 1/1] git-instaweb: support for apache2/lighttpd by other names
2009-02-11 18:40 [PATCH 1/1] git-instaweb: support for apache2/lighttpd by other names Luciano Miguel Ferreira Rocha
@ 2009-06-16 9:02 ` Luciano Miguel Ferreira Rocha
0 siblings, 0 replies; 2+ messages in thread
From: Luciano Miguel Ferreira Rocha @ 2009-06-16 9:02 UTC (permalink / raw)
To: git
[-- Attachment #1: Type: text/plain, Size: 649 bytes --]
On Wed, Feb 11, 2009 at 06:40:29PM +0000, Luciano Miguel Ferreira Rocha wrote:
> Some distributions include the Apache httpd server as just "httpd", but
> specifying the option --httpd=httpd doesn't work, as git-instaweb uses
> the program name to detect the type of server used.
>
> Now the output if $httpd -v is used to also detect the server type.
>
> Remove also the hard-coded path to apache2 modules, use apache2's
> compilation options.
<snip>
I got no replies. Is there any interest in this? Or in a pure perl
server option?
--
Luciano Rocha <luciano@eurotux.com>
Eurotux Informática, S.A. <http://www.eurotux.com/>
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-06-16 9:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-11 18:40 [PATCH 1/1] git-instaweb: support for apache2/lighttpd by other names Luciano Miguel Ferreira Rocha
2009-06-16 9:02 ` Luciano Miguel Ferreira Rocha
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).