Table of Contents

20231007
Надо поправить:

Установка и настройка связки Rancid+ViewVC

Rancid - это софт для сбора, хранения и учета версий конфигураций сетевого оборудования.
Отлично работает с оборудованием Cisco, HP, Juniper, Huawei, H3C. Единственный неприятный минус, это хранение паролей для захода на оборудование в открытом виде.

ViewVC - это веб-интерфейс для просмотра CVS репозиториев. Rancid как раз может складывает кофиги в CVS.

Связку Rancid+ViewVC будем использовать для удобной работы с конфигурациями сетевого оборудования.

Установка Rancid

В Centos и Debian есть готовые пакеты свежей версии.

Ставим пакеты rancid и cvs,

# yum install cvs rancid

Смотрим, куда поставились файлы:

[root@noc-g8 rancid]# rpm -ql rancid
/etc/cron.d/rancid
/etc/rancid
/etc/rancid/lg.conf
/etc/rancid/rancid.conf
/etc/rancid/rancid.types.base
/etc/rancid/rancid.types.conf
/usr/bin/rancid
/usr/bin/rancid-cvs
...

или “repoquery –installed -l rancid ” из пакета “yum-utils”.

Файлы, директории:

Задаём пароль пользователю racnid

# apg -m 73 -n 1 
# passwd rancid

Запрещаем пользователю rancid ходить по ssh,

# cat /etc/ssh/sshd_config
...
DenyUsers rancid
...

Настройка Rancid

В файле /etc/rancid/rancid.conf определяем группы сетевого оборудование.

...
# list of rancid groups
#LIST_OF_GROUPS="sl joebobisp"; export LIST_OF_GROUPS
LIST_OF_GROUPS="routers switches"; export LIST_OF_GROUPS
...

Создаем CVS репозиторий для ранее определенных групп, команду даем от имени пользователя rancid.

# su - rancid
$ rancid-cvs

В домашней директории создатутся папки.

$ ll
total 0
drwxrwxr-x 3 rancid rancid  21 Oct  7 20:09 CVS
drwxr-x--- 3 rancid rancid 147 Oct  7 21:01 routers
drwxr-x--- 3 rancid rancid 113 Oct  7 21:01 switches
$ pwd
/var/rancid/

FIXME: !!!!

$ rancid-cvs 

No conflicts created by this import

cvs checkout: Updating tst-grp
Directory /var/rancid/CVS/tst-grp/configs added to the repository
cvs commit: Examining configs
cvs add: scheduling file `router.db' for addition
cvs add: use 'cvs commit' to add this file permanently
RCS file: /var/rancid/CVS/tst-grp/router.db,v
done
Checking in router.db;

Добавляем пользователю rancid папку со скриптам Rancid в PATH.
От имени пользователя rancid правим файл .bashrc, в конец добавляем.

...
# Add def rancid bin dir to PATH
export PATH="/usr/libexec/rancid:$PATH"

Даём команду “bash” и проверяем, что через TAB должна добиться, например, команда jlogin.

$ echo $PATH
/usr/libexec/rancid:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/var/rancid//.local/bin:/var/rancid//bin
$ jlogin

Перечисляем оборудование с которого будем снимать конфигурацию.

$ joe ~/routers/router.db
...
m9-srx;juniper;up
...

где:

В домашней директории rancid создаём файл “.cloginrc” для описания захода на сетевое оборудование и задаём права.
FIXME:
Доразобраться с ssh ключами от сетевого (/usr/share/rancid/cloginrc.sample).

$ touch ~/.cloginrc
$ chmod 640 .cloginrc
$ ll .cloginrc
-rw-r----- 1 rancid rancid 77 Oct  7 20:34 .cloginrc

Правим .cloginrc

$ cat .cloginrc
...
add method kg-srx2 ssh
add user kg-srx2 rncd
add password kg-srx2 DabVigenvickciphiosCeOrfAjAkhygsya
...

Запускаем и проверяем работу Rancid.
Если все хорошо, в /var/rancid/routers/config появится файл не нулевого размера.

$ rancid-run -r kg-srx2
$ ll /var/rancid/routers/config
total 52
-rw-r----- 1 rancid rancid 50429 Oct  8 22:01 kg-srx2

Если файл нулевого размера, то идем смотреть логи в “/var/log/rancid/” и\или запускаем rancid в дебаг режиме и смотрим, что происходит.

$ rancid -d -t juniper kg-srx2

Запуск Rancid

При установке создатся крон-файл “/etc/cron.d/rancid” в котором можно задать переодичность запуска Rancid.
По дефолту Rancid запускается раз в час.
В 3:03, каждую ночь, удаляются логи Rancid старше 30 дней.

# cat /etc/cron.d/rancid 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/var/rancid
# Run config differ hourly
1 * * * * rancid /usr/libexec/rancid/rancid-run
3 3 * * * rancid /usr/bin/find /var/log/rancid -type f -mtime +30 -exec /usr/bin/rm {} \;

АРХИВ: Установка Rancid из исходников

Доставляем необходимые пакеты

# yum install cvs expect gcc MySQL-python telnet

Скачиваем и распаковываем свежую версию Rancid.
ftp://ftp.shrubbery.net/pub/rancid/rancid-3.1.tar.gz

Версию 3.1 уже с официального фтп скачать нельзя.
Свежие версии rancid не хотят вставать на Centos 6, с perl какая-то беда.
Все последние разы rancid надо было ставить быстро и с проблемой не разбирался.

Rancid 3.1 нормально ставится на минимальную версию Centos 6, ссылка - rancid-3.1.tar.gz

# wget ftp://ftp.shrubbery.net/pub/rancid/rancid-3.1.tar.gz
# tar -zxvf rancid-3.1.tar.gz

Добавляем группу netadm в которую впоследствии будет добавлен пользователь rancid.

# groupadd netadm

Создаем пользователя rancid и задаем ему пароль.

# useradd -g netadm -d /home/rancid rancid
# passwd rancid

Компилируем и устанавлваем rancid.

# pwd
/root/src/rancid-3.1

# ./configure --prefix=/home/rancid
# make install

Копируем файл в котором будут содержаться пароли от сетевого оборудования и выставляем права.

# cp /root/src/rancid-3.1/cloginrc.sample /home/rancid/.cloginrc
# chmod 0640 /home/rancid/.cloginrc
# chown -R rancid:netadm /home/rancid/
# chmod 770 /home/rancid/

В файле rancid.conf определяем группы сетевого оборудование.
Все дальнейшие изменения в файлах надо делать от пользователся rancid.

# su - rancid
$ cp ~/etc/rancid.conf ~/etc/rancid.conf.orig
$ joe ~/etc/rancid.conf
...
# list of rancid groups
#LIST_OF_GROUPS="sl joebobisp"
# more groups...
#LIST_OF_GROUPS="$LIST_OF_GROUPS noc billybobisp"
LIST_OF_GROUPS="cisco juniper"
#
...

Создаем CVS репозиторий для ранее определенных групп.

$ /home/rancid/bin/rancid-cvs

Перечисляем оборудование с которого будем снимать конфигурацию.

$ joe ~/var/juniper/router.db
...
srx-test;juniper;up

...

где:

Обращаем внимание, что в версиях rancid после 3.x в качестве разделителя используется “;”.

Задаем пользователя, пароль и имя устройства (как в router.db) для захода на сетевое оборудование.
Файл читается до первого совпадения.

$ joe ~/.cloginrc
...
add method srx-test ssh
add user srx-test srx-user
add password srx-test srx-passwd
...

Примеры .cloginrc для различного оборудования:

Вручную запускаем rancid (от пользователя rancid) и проверяем, что конфигурация снялась.

$ rancid-run -r srx-test
$ ll ~/var/juniper/configs/
total 484
drwxr-x---. 2 rancid netadm   4096 Feb  30 23:59 CVS
-rw-r-----  1 rancid netadm 488712 Feb  30 23:59 srx-test

Пишем правило cron для rancid.

$ crontab -e
# #############################################
# Crontab for rancid on myserver
# #############################################
# Hourly Check
1 * * * * /home/rancid/bin/rancid-run

# Daily Clean Up of Diff Files at 11 50 pm
50 23 * * * /usr/bin/find /home/rancid/var/logs -type f -mtime +2 -exec rm {} \;

# Daily Clean Up of .SITE.run.lock Files at 11 50 pm
50 23 * * * rm /tmp/.*.lock

Скрипты Rancid

Huawei

Скрипты - huawei-rancid.tar
Что бы подключить скрипты надо файл ~/etc/rancid.types.base добавить строчку:

huawei;script;hwrancid

В router.db оборудование прописываем так:

S5328-EL;huawei;up

H3С

Скрипты - h3c-rancid.tar
~/etc/rancid.types.base:

h3с;script;h3сrancid

router.db:

A5500-SI;h3c;up

VYOS

https://bitbucket.org/aquerubin/rancid-vyatta/overview


Настройка пользователя rancid на сетевом оборудовании

Brocade

Заводим read-only пользователя rancid и дополнительно разрешаем ему выполять команду

username rancid privilege 5 password some-Pass
privilege exec level 5 skip-page-display

Почта от Rancid

FIXME

Правим файл /etc/aliases:

...
rancid-cisco:           config@company.name
rancid-admin-cisco:     config@company.name, lead@company.name
rancid-huawei:          config@company.name
rancid-admin-huawei:    config@company.name, lead@company.name
...

Применяем изменения в файле командой newaliases.

На алиас rancid-cisco будут приходить письма и дифами консигураций, на rancid-admin-cisco служебные сообщения.
Часть алиаса после rancid- и rancid-admin- должна совпадать с именем группы которую задавали в файле rancid.conf.


Отключение проверки ssh ключа

Для некоторых сетевых устройств полезно отключать проверку ssh т.к. на них часто могут меняться ключи.
А когда устройств реально много, проще отключить проверку для всех.

Что бы откючить проверку надо в домашней директории rancid в папке .ssh создать файл config след. содержания:

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Установка ViewVC

FIXME

Скачиваем и распаковываем свежую версию ViewVC.

# wget http://viewvc.tigris.org/files/documents/3330/49392/viewvc-1.1.23.tar.gz
# tar zxvf viewvc-1.1.23.tar.gz

Ставим.

 ./viewvc-install 
This is the ViewVC 1.2.3 installer.

It will allow you to choose the install path for ViewVC.  You will now
be asked some installation questions.  Defaults are given in square brackets.
Just hit [Enter] if a default is okay.

Installation path [/usr/local/viewvc-1.2.3]: 

DESTDIR path (generally only used by package maintainers) []: 

Installing ViewVC to /usr/local/viewvc-1.2.3:
   created   /usr/local/viewvc-1.2.3/bin/cgi/

...

ViewVC file installation complete.

Consult the INSTALL document for detailed information on completing the
installation and configuration of ViewVC on your system.  Here's a brief
overview of the remaining steps:

  1) Edit the /usr/local/viewvc-1.2.3/viewvc.conf file.

  2) Either configure an existing web server to run
     /usr/local/viewvc-1.2.3/bin/cgi/viewvc.cgi.
     
     Or, copy /usr/local/viewvc-1.2.3/bin/cgi/viewvc.cgi to an
     already-configured cgi-bin directory.
     
     Or, use the standalone server provided by this distribution at
     /usr/local/viewvc-1.2.3/bin/standalone.py.
# cd viewvc-1.1.23
# ./viewvc-install
...
ViewVC file installation complete.

Consult the INSTALL document for detailed information on completing the
installation and configuration of ViewVC on your system.  Here's a brief
overview of the remaining steps:

  1) Edit the /usr/local/viewvc-1.1.23/viewvc.conf file.

  2) Either configure an existing web server to run
     /usr/local/viewvc-1.1.23/bin/cgi/viewvc.cgi.
     
     Or, copy /usr/local/viewvc-1.1.23/bin/cgi/viewvc.cgi to an
     already-configured cgi-bin directory.
     
     Or, use the standalone server provided by this distribution at
     /usr/local/viewvc-1.1.23/bin/standalone.py.
...

Настраиваем viewvc для работы с CVS репозиторием.

# cd /usr/local/viewvc-1.1.23/
# joe viewvc.conf
...
## Example:
## cvs_roots = cvsroot: /opt/cvs/repos1,
##             anotherroot: /usr/local/cvs/repos2
##
#cvs_roots =

cvs_roots = cvsroot: /home/rancid/var/CVS 
...
## Example:
## root_parents = /opt/svn: svn,
##                /opt/cvs: cvs
##
#root_parents =

root_parents = /home/rancid/var/CVS : cvs
...
## Example:
## rcs_dir = /usr/bin/
##
#rcs_dir =

rcs_dir = /usr/local/bin
...
## use_rcsparse: Use the rcsparse Python module to retrieve CVS
## repository information instead of invoking rcs utilities [EXPERIMENTAL]
##
use_rcsparse = 1
...
## use_localtime: Display dates as UTC or in local time zone.
##
#use_localtime = 0
use_localtime = 1
...
#allowed_views = annotate, diff, markup, roots
allowed_views = annotate, diff, markup, roots, co
...

Копируем файлы query.cgi и viewvc.cgi в рабочую папку веб-сервера.

# cp /usr/local/viewvc-1.1.23/bin/cgi/*.cgi /var/www/cgi-bin
# ll /var/www/cgi-bin
total 8
-rwxr-xr-x. 1 root root 1782 Feb 30 23:59 query.cgi
-rwxr-xr-x. 1 root root 1781 Feb 30 21:59 viewvc.cgi

Правим /etc/httpd/conf.d/vhosts.conf

# joe /etc/httpd/conf.d/vhosts.conf
...
# Custom Rancid Config
<VirtualHost *:80>
        DocumentRoot /var/www
        ScriptAlias /cgi-bin/ "/var/www/cgi-bin"
        ScriptAlias /viewvc /var/www/cgi-bin/viewvc.cgi
        ScriptAlias /query /var/www/cgi-bin/query.cgi
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

Добавляем пользователя apache в группу netadm.

# joe /etc/group
...
netadm:x:5000:apache
...

Создаем mysql базу данных и пользователей.

# mysql -u root -p
mysql> create database viewvc_db;
mysql> create user 'viewvc_user'@'localhost' identified by 'pass1';
mysql> grant all privileges on viewvc_db.* to 'viewvc_user'@'localhost' with grant option;
mysql> create user 'viewvc_rouser'@'localhost' identified by 'pass2';
mysql> grant all privileges on viewvc_db.* to 'viewvc_rouser'@'localhost' with grant option;
mysql> flush privileges;

Заливаем структуру базы данных viewvc_db.

# cd /usr/local/viewvc-1.1.23/bin/
# ./make-database
./make-database:20: DeprecationWarning: The popen2 module is deprecated.  Use the subprocess module.
  import popen2
MySQL Hostname (leave blank for default): 
MySQL Port (leave blank for default): 
MySQL User: viewvc_user
MySQL Password: pass1
ViewVC Database Name [default: ViewVC]: viewvc_db

Database created successfully.  Don't forget to configure the 
[vsdb] section of your viewvc.conf file.

Настраиваем viewvc для работы с mysql.

# joe /usr/local/viewvc-1.1.23/viewvc.conf
...
[cvsdb]

## enabled: Enable database integration feature.
##
enabled = 1

## host: Database hostname.  Leave unset to use a local Unix socket
## connection.
##
host = localhost

## post: Database listening port.
##
port = 3306

## database_name: ViewVC database name.
##
database_name = viewvc_db

## user: Username of user with read/write privileges to the database
## specified by the 'database_name' configuration option.
##
user = viewvc_user

## passwd: Password of user with read/write privileges to the database
## specified by the 'database_name' configuration option.
##
passwd = pass1

## readonly_user: Username of user with read privileges to the database
## specified by the 'database_name' configuration option.
##
readonly_user = viewvc_rouser

## readonly_passwd: Password of user with read privileges to the database
## specified by the 'database_name' configuration option.
##
readonly_passwd = pass2
...

Заполняем базу данных.

# cd /usr/local/viewvc-1.1.23/bin/
# ./cvsdbadmin rebuild /home/rancid/var/CVS/CVSROOT/
Using repository root `/home/rancid/var/CVS'
Purging existing data for repository root `/home/rancid/var/CVS'
[CVSROOT/loginfo [0 commits]]
[CVSROOT/editinfo [0 commits]]
[CVSROOT/config [0 commits]]
[CVSROOT/notify [0 commits]]
[CVSROOT/verifymsg [0 commits]]
[CVSROOT/cvswrappers [0 commits]]
[CVSROOT/rcsinfo [0 commits]]
[CVSROOT/modules [0 commits]]
[CVSROOT/commitinfo [0 commits]]
[CVSROOT/checkoutlist [0 commits]]
[CVSROOT/taginfo [0 commits]]

Пробуем зайти на веб-интерфейс http://x.x.x.x/viewvc

Нормальной работе мешает selinux, в чем проблема не разбирался, в локальных инсталяция допустимо отключить.

Все должно быть хорошо.

Полезные материалы