diff --git a/rpm/SOURCES/nginx.suse.init b/rpm/SOURCES/nginx.suse.init
deleted file mode 100755
index c363f9a..0000000
--- a/rpm/SOURCES/nginx.suse.init
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/bin/sh
-#
-#     Template SUSE system startup script for example service/daemon FOO
-#     Copyright (C) 1995--2005  Kurt Garloff, SUSE / Novell Inc.
-#          
-#     This library is free software; you can redistribute it and/or modify it
-#     under the terms of the GNU Lesser General Public License as published by
-#     the Free Software Foundation; either version 2.1 of the License, or (at
-#     your option) any later version.
-#			      
-#     This library is distributed in the hope that it will be useful, but
-#     WITHOUT ANY WARRANTY; without even the implied warranty of
-#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#     Lesser General Public License for more details.
-# 
-#     You should have received a copy of the GNU Lesser General Public
-#     License along with this library; if not, write to the Free Software
-#     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA     
-#
-### BEGIN INIT INFO
-# Provides: nginx
-# Required-Start: $local_fs $remote_fs $network
-# Required-Stop: $local_fs $remote_fs $network
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: start and stop nginx
-### END INIT INFO
-
-# Check for existence of needed config file and read it
-NGINX_CONFIG=/etc/sysconfig/nginx
-test -r $NGINX_CONFIG || { echo "$NGINX_CONFIG not existing";
-	if [ "$1" = "stop" ]; then exit 0;
-	else exit 6; fi; }
-
-# Read config	
-. $NGINX_CONFIG
-
-test -x $nginx || { echo "$nginx not installed"; 
-	if [ "$1" = "stop" ]; then exit 0;
-	else exit 5; fi; }
-
-nginx=${NGINX:-/usr/sbin/nginx}
-conffile=${CONFFILE:-/etc/nginx/nginx.conf}
-pidfile=${PIDFILE:-/var/run/nginx.pid}
-SLEEPSEC=${SLEEPSEC:-1}
-
-. /etc/rc.status
-
-rc_reset
-
-upgrade() {
-    oldbinpidfile=${pidfile}.oldbin
-
-    configtest -q || return 6
-    echo -n $"Starting new master: "
-    /sbin/killproc -p ${pidfile} -USR2 $nginx
-    /bin/sleep $SLEEPSEC
-    if [ -f ${oldbinpidfile} -a -f ${pidfile} ]; then
-        echo -n $"Graceful shutdown of old nginx: "
-        killproc -p ${oldbinpidfile} -QUIT $nginx
-    else
-        echo $"Upgrade failed!"
-        return 1
-    fi
-}
-
-configtest() {
-    if [ "$#" -ne 0 ] ; then
-        case "$1" in
-            -q)
-                FLAG=$1
-                ;;
-            *)
-                ;;
-        esac
-        shift
-    fi
-    ${nginx} -t -c ${conffile} $FLAG
-}
-
-
-case "$1" in
-    start)
-	echo -n "Starting nginx "
-        $0 status
-        if test $? -ne 0; then
-	    /sbin/startproc $nginx -c $conffile
-        else
-            rc_reset
-        fi
-	rc_status -v
-	;;
-    stop)
-	echo -n "Shutting down nginx "
-
-	/sbin/killproc -p $pidfile $nginx
-	rc_status -v
-	;;
-    try-restart|condrestart)
-	$0 status
-	if test $? -eq 0; then
-		$0 restart
-	else
-		rc_reset
-	fi
-	rc_status
-	;;
-    restart)
-        configtest -q || exit 6
-	$0 stop
-	$0 start
-	rc_status
-	;;
-    reload|force-reload)
-	echo -n "Reload service nginx "
-	/sbin/killproc -p $pidfile -HUP $nginx
-	rc_status -v
-	;;
-    status)
-	echo -n "Checking for service nginx "
-	
-	/sbin/checkproc $nginx
-	rc_status -v
-	;;
-    upgrade)
-        upgrade 
-        rc_status -v
-        ;;
-    configtest)
-        configtest
-        rc_status -v
-        ;;
-    *)
-	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|upgrade|configtest}"
-	exit 1
-	;;
-esac
-rc_exit
