HOWTO install NetBackup with a QLogic FibreChannel HBA on Gentoo Linux

From RADION OpenLab


Contents

1 Introduction

After evaluating a lot of backup software packages we finally came down with VERITAS NetBackup. It seemed rock solid (and it is), prepared for bigger networks, SAN, multiple storage units, mature robot handling and a lot of UNIX related history in the back. But it is only supported on the big Linux companies' "Enterprise Distributions" ( like redHat Enterprise and SuSE Enterprise ). Gentoo is the Linux of our choice, so we had to drop support by Veritas since they don't support gentoo and just hoped the software would be good enough to not to need any support. And we were right. This is a walkthrough of what I did to get NetBackup runnning as Master Server on a GentooLinux box.

It is not foolproof and will need some mind of your own. You can use it as a guide rather than a "step-by-step" manual.

Remember:

Veritas does not support this and although it proved to work here, it doesn't mean you can get it to work.
This HOWTO comes without any warranty. Whatever you do, it is your responsibility.



2 Prerequisites

We need a working gentoo system > 2004.1. This can be a naked stage1-3 source installation incorporating all your performance and system specific requirements ( that is what it was tested with ) or a readymade stage3-system. I have to mention that this is tested only on 2.4 Kernels to work. Also you have to have compiled your own kernel and make sure that the appropriate kernel sources are available. Some deeper Linux-, FibreChannel-, SCSI-knowledge is due to fully understand the mechanics working here.



3 Emerging additional required software packages

the following Gentoo portage packages will be required to get the machine "redHat Enterprise / SuSE Enterprise" ready :

  • mtx - Utilities for controlling SCSI media changers and tape drives
  • mt-st - Enhanced mt command for Linux, supporting Linux 2.4 ioctls
  • xinetd - powerful replacement for inetd
  • sys-apps/sg3_utils - apps for querying the sg SCSI interface
  • lib-compat - Compatibility C++ and libc5 and libc6 libraries for programs new and old


3.1 Tweaking X11 dependency

NOTE: If you don't have X11 on the box ( which I highly discourage you to have ) - you'll have to tweak the lib-compat dependencies ( remove sdl from ebuild ) since it will require X11 to install lib-compat. At the time setting the USE-Flag did not work, because the sdl dependency was hardcoded into the ebuild script.


Basically it should look like this and you should not find any X11/SDL related entries in there :

 
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-libs/lib-compat/lib-compat-1.4.ebuild,v 1.2 2004/10/21 00:04:26 vapier Exp $
 
DESCRIPTION="Compatibility C++ and libc5 and libc6 libraries for programs new and old"
HOMEPAGE="http://www.gentoo.org/"
SRC_URI="mirror://gentoo/${P}.tar.bz2"
 
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="x86 ppc sparc alpha"
IUSE=""
 
RDEPEND="virtual/libc"
 
S=${WORKDIR}/${P}/${ARCH}
 
src_unpack() {
    unpack ${A}
 
    cd ${S}
    # Rather install this with the proper filename
    mv -f libstdc++-libc6.2-2.so.3 libstdc++-3-libc6.2-2-2.10.0.so
    # libstdc++-2-libc6.1-1-2.9.0.so provides this one ...
    rm -f libstdc++-libc6.1-1.so.2
    # No package installs this one, so no need for the .dummy
    mv -f libstdc++.so.2.9.dummy libstdc++.so.2.9.0
    # dont install if they dont want sdl
    use sdl || rm -f libsmpeg-0.4.so.0.dummy
}
 
src_install() {
    if use x86 ; then
        into /
        dolib.so ld-linux.so.1*
        rm -f ld-linux.so.1*
    fi
    into /usr
    dolib.so *.so*
    preplib /usr
}
 


after editing the lib-compat file you should try a pretend emerge first :

# emerge -p lib-compat

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   N  ] sys-libs/lib-compat-1.4


If there are no dependencies left you can emerge lib-compat along with the other required packages


3.2 Finally emerge these packages simply by executing the following


# emerge mtx mt-st xinetd lib-compat sys-apps/sg3_utils



4 System Kernel Extensions

NetBackup requires some kernel tuning to be as fast as it is. If you have ever set up Oracle on Linux you'll probably remember some of the tweaks. The following settings should be sufficient for most systems.

# more /etc/sysctl.conf

 
# Disable ECN
net.ipv4.tcp_ecn = 0
 
# set system tuning for netbackup
 
kernel.shmmax = 268435456
kernel.shmall = 268435456
kernel.shmmni = 220
 
# sem parm array :  1. semmsl 2. semmns 3. semopm 4. semni
 
kernel.sem = 300 1024 32 1024
 
kernel.msgmnb = 65536
kernel.msgmax = 8192
kernel.msgmni = 256



5 Compile and install QLogic HBA drivers

Get the latest drivers from the qlogic website -> support -> [drivers and software | http://www.qlogic.com/support/drivers_software.asp]. I tried the 8.x drivers but I did not find any way to get them working with kernel 2.4.27 so I fell back to 7.00.01 which are decent enough. Additional to the drivers you should download the SANSurferCLI which will give you uttermost control over your HBA.


NOTE:' If you have a multiprocessor system or a single CPU Xeon / Pentium VI with HyperThreading enabled you have to set the SMP=1 parameter, otherwise just leave it out.


Unpack the archive, unpack the driver and compile the driver as a module :


# cd /usr/local/src
# tar xvfz qla2x00-v7.00.01-dist.tgz
# cd qlogic
# ./drvinstall
#

# make all *SMP=1* OSVER=linux
# make install

The driver's module will be installed in /lib/modules/2.4.27/kernel/drivers/scsi - if you use a 2.4.27 vanilla-source kernel.


/etc/modules.d/i386 anpassen :

# more /etc/modules.d/i386

 
alias parport_lowlevel parport_pc
alias char-major-10-144 nvram
alias binfmt-0064 binfmt_aout
alias char-major-10-135 rtc
 
alias scsi_hostadapter1 qla2300
options scsi_mod max_scsi_luns=256 scsi_allow_ghost_devices=1
alias scsi_hostadapter2 qla2300_conf
 
probeall scsi_hostadapter qla2300 sg st


Es macht Sinn die Karte in einem 1G Netz von Auto-Negotiate auf fest 1G zu setzen.

Es ist ratsam das qlogic scli tools von der qlogic website herunterzuladen oder die bereits vorhandene Version einzusetzen, da dieses Tool sehr gut zum einstellen und überwachen der Karte zu gebrauchen ist.

ACHTUNG :

Nach jeder Neu-Kompilierung des Kernels ist es erforderlich die Module des Treibers neu zu backen. Die aktuellen Module liegen in :

# /opt/QLogic_Corporation/driver


/etc/modules.autoload.d/kernel-2.4

# more /etc/modules.autoload.d/kernel-2.4

 
tg3
qla2300
aic7xxx

/etc/devfsd.conf anpassen damit die scsi module zusätzlich geladen werden.

# Autoload the sg module if generic scsi driver compiled as module.
LOOKUP          ^sg$      MODLOAD ACTION sg

/etc/modules.devfsd anpassen

folgende Einträge müssen vorhanden sein :

 
# SCSI HDDs
probeall  /dev/sd               scsi_hostadapter sd_mod
alias     /dev/sd*              /dev/sd
 
# SCSI CD-ROMs
probeall  /dev/sr               scsi_hostadapter sr_mod
alias     /dev/sr*              /dev/sr
alias     /dev/scsi/*/cd        sr_mod
 
# SCSI tapes
probeall  /dev/st               scsi_hostadapter st
alias     /dev/st*              /dev/st
alias     /dev/nst*             /dev/st
 
# SCSI generic
probeall  /dev/sg               scsi_hostadapter sg
alias     /dev/sg*              /dev/sg
alias     /dev/scsi/*/generic   /dev/sg
alias     /dev/pg               /dev/sg
alias     /dev/pg*              /dev/sg


scsi logging facility built into kernel activate from user mode via

<verbatim> echo "scsi log token [level]" > /proc/scsi/scsi </verbatim>

To start (or stop) logging information being sent to the console/log use echo "scsi log <token> <n>" > /proc/scsi/scsi where <token> is one of: {all, none, error, timeout, scan, mlqueue, mlcomplete, llqueue, llcomplete, hlqueue, hlcomplete, ioctl} and <n> is a number between 0 and 7. The tokens "all" and "none" don't take an <n> argument. Prefix meanings: Netbackup Syntax für Devices anlegen :

6 NetBackup device mappings

Due to NetBackup's age it is not aware of the new devFS filesystem structure. It just doesn't get any devices out of it. So we basically have to trick NetBackup by linking the devices ourselves. You need to know which HBA, BUS, SCSI ID and LUN each part of the robotic library has ( i.e. controller LUN0, tapedrive 1 LUN1, tapedrive 2 LUN2 ).

First of all we link all devices as generic scsi devices - controller and all tapedrives :

# cd /dev/sg
# ln -s /dev/scsi/host1/bus0/target0/lun0/generic h1c0t0l0
# ln -s /dev/scsi/host1/bus0/target0/lun1/generic h1c0t0l1
# ln -s /dev/scsi/host1/bus0/target0/lun2/generic h1c0t0l2
# ln -s /dev/scsi/host2/bus0/target3/lun0/generic h2c0t3l0
# ln -s /dev/scsi/host2/bus0/target4/lun0/generic h2c0t4l0
#
# ls –al /dev/sg/

 
lr-xr-xr-x  1 root root 41 Dec 20 09:06 h1c0t0l0 -> /dev/scsi/host1/bus0/target0/lun0/generic
lr-xr-xr-x  1 root root 41 Dec 20 09:06 h1c0t0l1 -> /dev/scsi/host1/bus0/target0/lun1/generic
lr-xr-xr-x  1 root root 41 Dec 20 09:06 h1c0t0l2 -> /dev/scsi/host1/bus0/target0/lun2/generic
lr-xr-xr-x  1 root root 41 Dec 20 10:38 h2c0t3l0 -> /dev/scsi/host2/bus0/target3/lun0/generic
lr-xr-xr-x  1 root root 41 Dec 20 10:39 h2c0t4l0 -> /dev/scsi/host2/bus0/target4/lun0/generic

Now we have to tell NetBackup which tapedrives it may use :

# cd /dev/st
# ln -s /dev/scsi/host1/bus0/target0/lun1/mtn nh1c0t0l1
# ln -s /dev/scsi/host1/bus0/target0/lun2/mtn nh1c0t0l2
# ln -s /dev/scsi/host2/bus0/target4/lun0/mtn nh2c0t4l0
#
# ls –al /dev/st/

 
lr-xr-xr-x  1 root root 37 Dec 20 09:06 nh1c0t0l1 -> /dev/scsi/host1/bus0/target0/lun1/mtn
lr-xr-xr-x  1 root root 37 Dec 20 09:06 nh1c0t0l2 -> /dev/scsi/host1/bus0/target0/lun2/mtn
lr-xr-xr-x  1 root root 37 Dec 20 11:52 nh2c0t4l0 -> /dev/scsi/host2/bus0/target4/lun0/mtn
  • NOTE : unbedingt im netbackup start / stop script das make_scsi_dev entfernen, da dieser befehl das devfs von gentoo dazu bringt alle devices, welche händisch gelinkt wurden, zu löschen.


um die Devices zu checken :

# /opt/openv/volmgr/bin/tpautoconf –a

it should look like this:

 
TPAC45 - - - -1~-1~-1~-1 2 - - - - - - - - - - - 0 0 - - backupserver.FQDN 4 - - 0
TPAC45 HPUltrium1-SCSI0 HP~~~~~~Ultrium~1-SCSI~~E36R /dev/st/nh1c0t0l1 -1~-1~-1~-1 1 0 0 1 8 3 - - - IE72A04378 
HP~~~~~~Ultrium~1-SCSI~~IE72A04378 3 0 1 - - backupserver.FQDN 0 - - 4
TPAC45 HPUltrium1-SCSI1 HP~~~~~~Ultrium~1-SCSI~~E36R /dev/st/nh1c0t0l2 -1~-1~-1~-1 1 0 0 2 8 3 - - - IE72B01319 
HP~~~~~~Ultrium~1-SCSI~~IE72B01319 3 0 1 - - backupserver.FQDN 0 - - 4
TPAC45 Tape_backup_1AIT SONY~~~~SDX-700C~~~~~~~~0204 /dev/st/nh2c0t4l0 -1~-1~-1~-1 1 0 1 1 6 13 - - - 0079000751 
SONY~~~~SDX-700C~~~~~~~~0079000751 2 0 0 - - backupserver.FQDN 0 - - 4
TPAC45 0 HP~~~~~~C7200~~~~~~~~~~~1720 /dev/sg/h1c0t0l0 -1~-1~-1~-1 0 0 0 - 8 - 20 2 0 IE0JD05026
HP~~~~~~C7200~~~~~~~~~~~IE0JD05026~~ 3 0 - backupserver.FQDN backupserver.FQDN backupserver.FQDN 0 - - 0
TPAC45 1 SONY~~~~LIB-81~~~~~~~~~~0105 /dev/sg/h2c0t3l0 -1~-1~-1~-1 0 0 1 - 6 - 8 1 0 01742093
 - 2 0 - backupserver.FQDN backupserver.FQDN backupserver.FQDN 0 - - 0


/etc/hosts.allow & /etc/hosts.deny anpassen

Diese Anpassungen sind für den xinetd notwendig, damit andere Hosts auch auf die in /etc/services definierten und über /etc/xinet.d/ konfigurierten Port / Services zugreifen dürfen.

# more /etc/hosts.allow

 
ALL: LOCAL
 
## Netbackup Related XINETD Permissions ##
 
bpcd: ALL
bprd: ALL
bpjobd: ALL
bpdbm: ALL
nbdbd: ALL
tldcd: ALL
vmd: ALL
 
# more /etc/hosts.deny
ALL: PARANOID

7 Beautifications

Since NetBackup should be installed in /opt/openv/netbackup the system environment knows nothing about NetBackup's executables. This really complicates day by day usage. On the other hand only the root user should be able to execute them without giving the full path ( like ifconfig for example ). So let us edit /etc/profile appropriately :

# vi /etc/profile

NBPATHAPPEND="/opt/openv/netbackup/bin:/opt/openv/netbackup/bin/admincmd:/opt/openv/volmgr/bin"
 
# 077 would be more secure, but 022 is generally quite realistic
umask 022
 
if [ `/usr/bin/whoami` = 'root' ]
then
        # Do not set PS1 for dumb terminals
        if [ "$TERM" != 'dumb'  ] && [ -n "$BASH" ]
        then
                export PS1='\[\033[01;31m\]\h \[\033[01;34m\]\W \$ \[\033[00m\]'
        fi
        export PATH="/bin:/sbin:/usr/bin:/usr/sbin:${ROOTPATH}:$NBPATHAPPEND"
else
        # Do not set PS1 for dumb terminals
        if [ "$TERM" != 'dumb'  ] && [ -n "$BASH" ]
        then
                export PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]'
        fi
        export PATH="/bin:/usr/bin:${PATH}"
fi
unset ROOTPATH


Teile der Netbackup Installation stammen aus sehr alten UNIX Zeiten und nutzen UNIX commands die mittlerweile deprecated sind. Dadurch laufen einige Scripte nicht richtig – dazu bitte die bereits angepassten scripte aus dem Paket zum Download verwenden, da hier die entsprechenden tail / head / ps commands scchon angepasst wurden und out-of-the-box mit netbackup 5.1 auf gentoo funktionieren.

Die Scripte im einzelnen :

Bpps – zeigt die NetBackup Prozesse an

Wird auch von anderen scripten aufgerufen, die ansonsten auch abbrechen, wenn bpps keine oder falsche resultate liefert.

Vmps – zeigt die VolManager Prozesse an

Wird von bpps aufgerufen und ist damit ebenfalls essentiel

7.1 Netbackup

das eigentliche init start und stop script

 
#!/bin/sh
# 
# Copyright 2004/2005 RADION Digital Research & Innovation
#
# Start/Stop the NetBackup request daemon at system initiation/shutdown.
# Starts/Stops the Media Manager device daemon (ltid).
# Starts/Stops the Global Data Manager daemon (visd).
# Starts/Stops the Advanced Reporter daemons.
# Stops nbdbd.
#
# Note - when the Media Manager device daemon (ltid) is started,
# it automatically starts the Media Manager volume daemon
# (/usr/openv/volmgr/bin/vmd) and robotic daemons as required.
#
 
NBPATH=/usr/openv/netbackup/bin
VMPS=/usr/openv/volmgr/bin/vmps
BPPS=/usr/openv/netbackup/bin/bpps
LTID=/usr/openv/volmgr/bin/ltid
BPRD=/usr/openv/netbackup/bin/initbprd
VISD=/usr/openv/netbackup/bin/visd
INITVISD=/usr/openv/netbackup/bin/initvisd
STOP_MYSQL=/usr/openv/netbackup/bin/admincmd/nbdbstop
MAKE_SCSI_DEV=/usr/openv/volmgr/bin/make_scsi_dev
BPCONF=/usr/openv/netbackup/bp.conf
BPRDREQ=/usr/openv/netbackup/bin/admincmd/bprdreq
STOPLTID=/usr/openv/volmgr/bin/stopltid
VMCTRLDBM=/usr/openv/volmgr/bin/vmctrldbm
MKDEV_OVPASS=/usr/openv/volmgr/bin/driver/mkdev_ovpass
 
FORCE_INIT_INQUIRY=/usr/openv/netbackup/db/config/FORCE_INIT_INQUIRY
 
SPACE=' '
BLANK=''
RETURN=0
 
TMPDIR=${TMPDIR:-/tmp}
 
PATH=$PATH:/usr/bin
export PATH
 
PRG=`basename $0`
TMPF=${TMPDIR}/${PRG}.$$
/bin/rm -f $TMPF
 
PS="/bin/ps -ea"
nbar_location="/usr/openv/nbar"
case `uname -s` in
        Darwin*) PS="/bin/ps -ax" ;;
        FreeBSD*) PS="/bin/ps -ax" ;;
        SunOS)  nbar_location="/opt/VRTSnbaro" ;;
esac
 
ARG="${1}"
 
if [ -z "${ARG}" ]; then
        ARG=start
fi
 
term_with_kill ()
{
        killstr=$1
        signal=$2
        processes=`${BPPS} | awk '! /(\/|\[)nbdbd(mon)?($|[     ]|\])/' | \
        grep "$killstr" | awk '{print $2}'`
        for process in $processes
        do
                if [ Y"$signal" != Y ] ; then
                        kill -${signal} $process > /dev/null 2>/dev/null
                else
                        kill $process > /dev/null 2>/dev/null
                fi
        done
}
 
stop_gdm_daemon ()
{
        ${VISD} -terminate > /dev/null 2>/dev/null
        if [ $? != 0 ]; then
                term_with_kill visd KILL
        fi
}
stop_acs_daemon ()
{
        process=$1
        kill $process > /dev/null 2>/dev/null
}
 
case "${ARG}" in
        start)
 
        if [ "`uname -s`" = "AIX" ] ; then
                if [ -x ${MKDEV_OVPASS} ]; then
                        $MKDEV_OVPASS
 
                        if [ -f "$FORCE_INIT_INQUIRY" ] ; then
                                INQUIRY=/usr/openv/volmgr/bin/scsi_command
                                TPCONFIG=/usr/openv/volmgr/bin/tpconfig
                                for i in `$TPCONFIG -d | grep rmt | awk '{ print $3 }' `
                                do
                                        echo "Forcing initial SCSI inquiry to $i" > /dev/console
                                        $INQUIRY -d $i > /dev/null 2>&1
                                done
                        fi
                else
                        echo "ERROR executing mkdev_ovpass !"
                fi
        fi
 
        #  Need to keep the now defunct -noinstall parameter in case
        #  NDMP has not been upgraded yet.
 
        if [ -f /usr/openv/volmgr/bin/ndmpmoveragent.start ] ; then
                /usr/openv/volmgr/bin/ndmpmoveragent.start -noinstall > /dev/null 2>&1
                echo "NetBackup NDMP Mover Agent started."
        fi
 
        # Don't start ltid if already started by HSM startup script.
                $VMPS > $TMPF
                if [ -f "$LTID" ]
                then
                        ltid=`grep ltid $TMPF`
                        if test Y"$ltid" = Y
                        then
#                               if [ -x ${MAKE_SCSI_DEV} -a "`uname -s`" = "Linux" ] ; then
#                               echo "Rebuilding device nodes."
#                               $MAKE_SCSI_DEV
#                               fi
                                $LTID
                                echo "Media Manager daemons started."
                        fi
                else
                        RETURN=1
                        echo "Media Manager daemons not started."
                fi
 
                /bin/rm -f $TMPF
 
                if [ -x "$BPRD" ]
                then
                        $BPRD
                        echo "NetBackup request daemon started."
                else
                        RETURN=2
                        echo "NetBackup request daemon not started."
                fi
 
                # Wait a little for nbdbd to come up, before starting visd
 
                wait=0
                $BPPS > $TMPF
                nbdbd=`grep nbdbd $TMPF`
 
                while [ ${wait} -lt 3 -a "${nbdbd}" = "" ]
                do
                        sleep 5
                        wait=`expr ${wait} + 1`
                        $BPPS > $TMPF
                        nbdbd=`grep nbdbd $TMPF`
                done
                /bin/rm -f $TMPF
 
                if [ -f ${nbar_location}/bin/nbar ] ; then
                        ${nbar_location}/bin/nbar start >/dev/null 2>&1
                        echo "NetBackup Advanced Reporter daemons started."
                fi
 
                if [ -x "${INITVISD}" ]; then
                        if [ "${nbdbd}" != "" ]; then
                                ${INITVISD} > /dev/null 2>/dev/null
                                if [ $? != 0 ]; then
                                        echo "Global Data Manager daemon not started."
                                        RETURN=2
                                else
                                        echo "Global Data Manager daemon started."
                                fi
                        else
                                echo "Global Data Manager daemon not started."
                                RETURN=2
                        fi
                fi
#
# This locking file is used by LINUX init
#
                if [ -d /var/lock/subsys ]; then
                        touch /var/lock/subsys/netbackup
                fi
        ;;
stop)
 
        IS_NETBACKUP_DAEMON=YES
        export IS_NETBACKUP_DAEMON
 
        BPRD_PID=`$PS | grep bprd | grep -v grep | awk '{print $1}'`
        if [  "$BPRD_PID" != "" ]; then
                echo "stopping the NetBackup request daemon"
                ${BPRDREQ} -terminate 2> /dev/null
        fi
 
        BPDBM_PID=`$PS | grep bpdbm | grep -v grep | awk '{print $1}'`
        if [  "$BPDBM_PID" != "" ]; then
                echo "stopping the NetBackup database daemon"
                /usr/openv/netbackup/bin/bpdbm -terminate 2> /dev/null
        fi
 
        LTID_PID=`$PS | grep ltid | grep -v grep | awk '{print $1}'`
        if [  "$LTID_PID" != "" ]; then
                echo "stopping the Media Manager device daemon"
                ${STOPLTID} 2> /dev/null
        fi
 
        VMD_PID=`$PS | egrep '[ /]vmd' | grep -v grep | awk '{print $1}'`
        if [  "$VMD_PID" != "" ]; then
                echo "stopping the Media Manager volume daemon"
                ${VMCTRLDBM} -t 2> /dev/null
        fi
 
        #  Need to keep the now defunct -remove parameter in case
        #  NDMP has not been upgraded yet.
 
        NDMP_PID=`$PS | grep ndmpmove | grep -v grep | awk '{print $1}'`
        if [ "${NDMP_PID}" != "" -a -f /usr/openv/volmgr/bin/ndmpmoveragent.stop ] ; then
                /usr/openv/volmgr/bin/ndmpmoveragent.stop -remove > /dev/null 2>&1
                echo "stopping NetBackup NDMP Mover Agent"
        fi
 
        nbar="`${BPPS} -r`"
        if [ "${nbar}" != "" -a -f ${nbar_location}/bin/nbar ] ; then
                echo "stopping NetBackup Advanced Reporter daemons"
                ${nbar_location}/bin/nbar stop >/dev/null 2>&1
        fi
 
        visd=`${BPPS} | grep visd | grep -v grep | awk '{print $2}'`
        if [ "${visd}" != "" ]; then
                echo "stopping Global Data Manager daemon"
                stop_gdm_daemon
        fi
 
        nbdbd=`${BPPS} | grep nbdbd | grep -v grep | awk '{print $2}'`
        if  [  "${nbdbd}" != "" ]; then
                echo "stopping nbdbd"
                ${STOP_MYSQL} 2> /dev/null
                if [ $? != 0 ]; then
                        echo "unable to stop nbdbd"
                fi
        fi
 
        ACSSSI_PID=`$PS | grep acsssi | grep -v grep | awk '{print $1}'`
        if [  "$ACSSSI_PID" != "" ]; then
                echo "stopping the Automated Cartridge System Storage Server Interface daemon"
                # sleep matches what was already in bp.kill_all
                sleep 20
                stop_acs_daemon $ACSSSI_PID
        fi
 
        ACSSEL_PID=`$PS | grep acssel | grep -v grep | awk '{print $1}'`
        if [  "$ACSSEL_PID" != "" ]; then
                echo "stopping the Automated Cartridge System SSI Event Logger daemon"
                stop_acs_daemon $ACSSEL_PID
        fi
#
# Lock file used by LINUX init
#
 
        rm -f /var/lock/subsys/netbackup
        ;;
start_msg)
        echo "Starting NetBackup"
        ;;
stop_msg)
        echo "Stopping NetBackup"
        ;;
*)
        echo "usage: $0 [start | stop | start_msg | stop_msg ]"
        RETURN=1
        ;;
esac
exit $RETURN
 

Hier wurden einige Änderungen durchgeführt, die wohl wichtigste ist das entfernen der make_scsi_dev routine, da diese devfs dazu bringt sich selbst zu resetten und alle gesetzten links in /dev/st/ und /dev/sg/ welche auf die eigentlichen devices zeigen löscht.

8 Downloads

 Gentoo NB Support Pack Support Pack containing the already altered and gentoo-fitted netbackup, bpps & vmps scripts. Just download, unpack and copy the scripts into their respective destinations.


9 Kernel 2.6 Issues

After running this solution for quite some time now it was time to get to Kernel 2.6 which unfortunately raised some issues and no backup for about two days now. First of all: There is no soft migration from a 2.4 based system to 2.6. I had to re-emerge everything and then re-emerge some more (again) in order to get my cflags in order with gcc-4 and binutils.

Kernel Adjustments:

IMPORTANT: DO NOT USE THE QLA FC SCSI Module that comes with the kernel (and you have to load some firmware every time you want to use the module). It simply doesn't work stable and always breaks at some point or another.

You have to disable the QLA module in the kernel and manually tweak the kernels Makefile > 2.6.16 since inter_module_communication is deprecated but the qla driver needs it in order to build :

Add intermodule.o to obj-y and comment out the appropriate config line in /usr/src/linux/kernel/Makefile

obj-y     = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
            exit.o itimer.o time.o softirq.o resource.o \
            sysctl.o capability.o ptrace.o timer.o user.o \
            signal.o sys.o kmod.o workqueue.o pid.o \
            rcupdate.o extable.o params.o posix-timers.o \
            kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
            hrtimer.o intermodule.o

obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o
obj-$(CONFIG_FUTEX) += futex.o
ifeq ($(CONFIG_COMPAT),y)
obj-$(CONFIG_FUTEX) += futex_compat.o
endif
obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
obj-$(CONFIG_SMP) += cpu.o spinlock.o
obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock.o
obj-$(CONFIG_UID16) += uid16.o
obj-$(CONFIG_MODULES) += module.o

#obj-$(CONFIG_OBSOLETE_INTERMODULE) += intermodule.o

Go grab the latest drivers from qlogics website, extract the package and compile it with :

 
./extras/build.sh
./extras/build.sh install

Also install some additional libraries I think scli will need to run properly:

./libinstall
RADION OpenLAB