=head1 NAME

Netdisco UPGRADE - Instructions on Upgrading between versions.

=head1 AUTHOR

Max Baker

=head1 SUPPORT

See L<INSTALL> or L<README> or L<http://netdisco.org>

=head1 UPGRADING

Here are some hints for upgrading between versions of Netdisco.

B<FIRST!> Go read below where it says L<Backup Database> and L<Backup Configuration Files>
and B<DO IT!>.

The B<best way> is to back everything up, move the configuration
files out of the way and then follow F<INSTALL> for all but the
database steps.

Then change the configuration files back to match.  If you reuse your old configuration file,
check it against the new one to see what config file directives have been added / removed / changed.

You B<DO NOT> wipe the database contents for an upgrade.  But just in case, you will have
of course made a backup by now. 

Make sure to read the section(s) relevant to your version update in
L<VERSION SPECIFIC NOTES>, then read the L<APPLICATION NOTES> and L<General Upgrade Procedures>
sections.

=head1 VERSION SPECIFIC NOTES

=over

=item v1.1 -> 1.2

=over

=item Update Database

You will have to run the following command to add new tables and modify existing
ones.

 cd /usr/pkg/netdisco/sql
 ./pg upgrade-1.1-to-1.2.sql

=item SNMP::Info

Please make sure you have the newest verison of SNMP::Info available, version
3.01 minimum.

 perl -MCPAN -e shell install SNMP::Info

=back

=over

=item v1.0 -> 1.1

=over

=item Update Database

You will have to run the following command to add new tables and modify existing
ones.

 cd /usr/pkg/netdisco/sql
 ./pg upgrade-1.0-to-1.1.sql

=back

=item v0.95 -> 1.0

=over

=item New Perl Modules

  Parallel::ForkManager
  Net::LDAP (optional for LDAP authentication)
  Net::SSLeay (optional for encrypted LDAP authentication)
  IO::Socket::SSL (optional for encrypted LDAP authentication)

=item Update Database

You will have to run the following command to add new tables and modify existing
ones.

 cd /usr/pkg/netdisco/sql
 ./pg upgrade-0.95-to-1.0.sql

Note that it is safe to run the upgrade.sql scripts more than once (in case you are
running a CVS or RC version). Also note that if you are upgrading from 0.94,
you must run C<upgrade-0.94-to-0.95.sql> first.

=back

=item v.0.94 -> 0.95

=over

=item New and Updated Perl Modules

This version of Netdisco is based around the new API for the Graph module, so you need 
to have version 0.50 or greater and GraphViz 2.02 or greater.

Also we are now using the Net::NBName module to scan nodes for netbios information, 
and this module must be installed.

 perl -MCPAN -e shell
        install Net::NBName
        install Graph
        install GraphViz

You should update all the Perl modules listed in F<INSTALL> as well.

=item SNMP::Info

Please make sure you have the newest verison of SNMP::Info available, version
1.04 minimum.

 perl -MCPAN -e shell
        install SNMP::Info

=item New SQL script

The F<pg_all>, F<pg_init>, F<pg_back>, and F<pg_run> commands have been
rolled into one new command : C<sql/pg>.  This new command will read the
command line for arguments and then parse F<netdisco.conf> for the database
user and password.  Run C<sql/pg --help> for more options.

=item Database Upgrades

Now would be a great time to upgrade to Postgres 8.x if you haven't already.
There are some major speed, memory, and storage benefits, and there is no INDEX
bloat problem.  Upgrading from 7.x does require a data base dump/restore.  See
Postgres documentation and the C<sql/pg_dump> command that you already used to
make a backup.  Follow the instructions in INSTALL and re-install the database
related Perl modules after changing versions.

You will have to run the following command to add new tables and modify existing
ones.

 cd /usr/pkg/netdisco/sql
 ./pg upgrade-0.94-to-0.95.sql

Note that it is safe to run the upgrade.sql scripts more than once (in case you are
running a CVS or RC version). Also note that if you are upgrading from 0.93 or older,
you must run C<upgrade-0.93-to-0.94.sql> first.

=item Security Warning

B<WARNING>!  There is a potential community string exposure when Netdisco is auto-discovering
network equipment.  If a malicious host were to implement CDP and Netdisco were
to discover that host, Netdisco would send all read-only community strings to
that device in an attempt to add it to the topology.

To avoid this problem, limit the address range that netdisco will discover
or disable CDP and similar discovery protocols from your end-ports.
Be aware that in configurations with IP phones, CDP may be necessary for
certain aspects of phone support.  See L<README/"Security Warning"> for
more information.

=back

=item v0.93 -> 0.94

=over

=item Autodetection of Uplink Ports

Macsuck will now autodetect some uplink ports.  If it sees the MAC addres of a
known switch port or router, it will not collect mac addresses on that port.  

Start checking the logs from your macwalk device (you can do it from the web
page now) and look for the uplink warnings.  Fix your topology file to match.

=item SNMP::Info

You will need SNMP::Info v0.9 in order to support the new netdisco-mibs package.

=item Database Upgrades

Now would be a great time to upgrade to Postgres 7.4 if you haven't already.  
There are some great speed benefits, and there is no INDEX bloat problem.  Upgrading
from 7.2 or 7.3 does require a data base dump/restore.  See Postgres documentation.

You will have to run the following command to add new tables and modify existing
ones.

 cd /usr/pkg/netdisco/sql
 ./pg_run upgrade-0.93-to-0.94.sql

Note that it is safe to run the upgrade.sql scripts more than once (in case you are
running a CVS or RC version). 

=item GraphViz

=over

=item Program

Make sure you have a relatively new version.  If you get an error similar to

  Creating CMAP : /usr/pkg/netdisco/html/netmap.map
    warning, language cmap not recognized, use one of: ps hpgl pcl mif...

You need a newer version of GraphViz

=item GraphViz.pm 2.01

The newest Perl interface to GraphViz (non-dependent on the GraphViz 
release) has some better client map interfaces for the Network Graph.

Please make sure this newest version is installed.

 perl -MCPAN -e shell
    install GraphViz

Double check the version.

 perl -MGraphViz -e 'print $GraphViz::VERSION'

=back

=item Perl Modules

A lot of the Perl modules that Netdisco depends on have released newer (better) versions.
Go to the INSTALL and follow Part 8.1 C<Perl Modules and Mason>.   If you use CPAN, it will
upgrade all the dependency modules for you too.

=item Bay Switches

If you have bay switches, note that the naming scheme for the ports has changed
from C<1> to C<1.1> as they were folded into the new Nortel classes.  The above
upgrade script will do the renaming for you, so you won't lose data.  

=back

=item v0.92 -> 0.93

=over

=item GraphViz 0.10

You may want to install this latest version of GraphViz

=item Database Upgrades

For some of the new features, fields have been added to some
of the database tables.  A F<.sql> file has been made to make
the changes for you.   Please run :

 cd /usr/pkg/netdisco/sql
 ./pg_run upgrade-0.92-to-0.93.sql

IGNORE the warning about nuking all the data in the table. It won't.
But even if you did, YOU ALREADY MADE A BACKUP RIGHT? (C<sql/pg_back>)

=item New MIB Files

If you insist on using this old version of netdisco, at least download
the C<netdisco-mibs> package and use that.

=back

=item v0.91 -> 0.92

Make sure you run C<Database Cleanup>  or C<-K> when you 
are done upgrading.  The bug where the MAC address of switch
ports showing up on their own port has been fixed.  SNMP::Info
Version 0.7 required.

=item v0.90 -> 0.91

=over

=item netdisco_apache.conf

Double check that your copy of netdisco_apache.conf has the 
settings right for all the C<session_*> directives.

=item GraphViz

Make sure you have GraphViz 0.9 installed.

=back

=back

=back

=head1 APPLICATION NOTES

=head2 Apache / Mod_perl

You shouldn't have to upgrade apache, but now would be a good time to
see if there are any security upgrades to apache or mod_perl.

=head2 SNMP::Info

When upgrading to any version, please make sure you have the
newest version of SNMP::Info installed (at least 2.04):

=over

=item CVS Version

To update a CVS version of SNMP::Info : 

    cd /usr/pkg/netdisco/SNMP
    cvs update

=item CPAN Version

To update a version installed by CPAN :

    perl -MCPAN -e shell
    install SNMP::Info

=item Manual Install Version

Download the newest version from CPAN or L<http://snmp-info.sourceforge.net>
and install.

=back

=head1 General Upgrade Procedures

=over 

=item Read INSTALL

Read the INSTALL file that comes with the new version to see
what has changed.  Make sure you have all the Requirements
listed.

=item Backup Database

For any version you will want to make backup copies of all your 
data first.  

    cd /usr/pkg/netdisco/sql
    ./pg --back
    scp db_back*.gz somesafehost:

=item Backup Configuration Files

Make backups of all your files.

    tar cvf - -C /usr/local netdisco | gzip > netdisco-back.tgz
    scp netdisco-back.tgz somesafehost:
    cp /usr/pkg/netdisco/*.conf /path/to/some_where_safe
    cp /usr/pkg/netdisco/*.txt  /path/to/some_where_safe

=item Vacuum full and reindex database

For PostgreSQL you may be suffering from severe space and
performance problems because of various issues.  Especially for 
versions before 7.4.  Please consider upgrading to 8.x and ALSO
run the Procedure, "Things are Getting Really Slow" in README.

This will REINDEX and VACUUM FULL your database.  

On a recent Postgres 7.3 install this changed the database size from
16GB to 400 MB!   Sound worth it?

=item Install on top of existing Netdisco

Put the new files in your F<netdisco/> directory 

    cp -R /path/to/netdisco-new-0.999 /usr/pkg/netdisco

=item [Optional] Upgrade Perl Modules

Following the procedures in F<INSTALL>, now would be a good time
to upgrade all the required Perl modules.  

This step is optional, unless a certain Perl module is listed for 
your version.

=item Check Permissions

Make sure the permissions are set to let the web user
read the F<html/> directory and write to the F<mason/> directory.

=item Modify the Configuration Files

New options are always being added to the config files and 
Netdisco.  It's usually a lot cleaner to modify the new config
file that comes with Netdisco than try to add the new features
to the old one.  This helps get rid of old bugs too.

=item Restart Apache

You must do a full restart on apache (not a C<graceful> or C<restart>) so that Netdisco
will use the newly installed version of F<netdisco.pm>. 

    /usr/local/apache/bin/apachectl stop
    /usr/local/apache/bin/apachectl start

=item Restart Admin Daemon

You need to restart the admin daemon to run on the new copy of Netdisco.

    su - netdisco -c "/usr/pkg/netdisco -p restart"

=item Reload Crontab

Review F<netdisco.crontab> and reload it for the C<netdisco> user.

    su 
    crontab -u netdisco /usr/pkg/netdisco/netdisco.crontab

=back
