ブロードバンドタワー國武です。
ネットワーク機器の設定情報ってどうやって管理してますか?
最近は、NAPALM, Ansibleなどが自動化などで利用されることも多く、そちらのツールを駆使して運用する方が注目度は高いでしょうか?ただ何と言っても、その先駆けとして有名なのは rancid だと思ってます。主に Shell + expect + Perl で作られたツールで、スイッチ、ルータ、ロードバランサなどなど、ネットワーク機器の設定情報を取得し、それらをバージョン管理システムのリポジトリに入れて変更管理を容易にしてくれるツールです。
最近?では cvs や subversion だけでなく git にも標準で対応するなど、まだまだ開発は続いており、流行り廃れの激しいこの業界にしては、安心して使えるツールです。
これからも、まだまだ活用できるツールだと思うので、何回かに分けて rancid とその活用方法をご紹介したいと思います(現時点でそう思っているだけで、全部は書かないかも?)
第一回 rancid を試す 〜温故知新〜
第X回 rancid のちょっとした改造(commitログを記録できるようにする)
第二回 rancid の管理対象機器として、仮想ルータを立ち上げてみる
第三回 rancid の設定と運用の話
第四回 rancid と bash-completion
第五回 rancid と gitbucket/redmine との連動
第六回 rancid の対応機種を増やしてみる Alaxala 編
第七回 rancid と Grafana + Influxdb との連動
#rancid のちょっとした改造、とブログ記事にしようと思っていた機能が、モタモタしてる間に本家で機能実装されてしまった……
個人的なボヤキはさておき、まず第一回目は rancid の紹介とそのインストールについて触れたいと思います
目次
Rancidとは
本家サイトは下記の通りです。
RANCID – Really Awesome New Cisco confIg Differ
Rancid がどんなツールかはすでに前段で書いてしまいましたが、少し細かく書くと
- ネットワーク機器にログインする
- 決められたコマンドを実行する(show int や show run など)
- 得られた出力を一部加工したりする
- 前回実行した時からの差分をメールで通知する
- git などのバージョン管理ツールにデータを commit する
といった動きをします。3.得られた出力を一部加工、というのは、例えば show int した結果のその差分だけだとわかりづらいので、down/up だけに注目して加工し、差分として Interface の down/up をわかりやすく表示できるようにしたり、ネットワーク機器の設定にあるパスワード情報などをリポジトリに入れたくない場合に備えて、そこだけ **** などでマスクするといったことをしてくれたりします(機種によって、対応、非対応などの差はそれなりにあるので、この部分にあまり過度な期待は持たない方がいいかもしれません)
また沢山の機器を効率よくデータを取得するための工夫もされていて、裏ではパラレルでデータ取得をしてたりします(なんてことを書いてますが、実はそんな気の利いた処理はしてないと思い込んでて、本体に手を入れずにパラレルで動かすようにプログラムを書いてました。で、その動作検証してる最中に Rancid、それ自身でパラレルに各ネットワーク機器へログインし、効率的にデータ取ってきており、自分がまったくムダなことをしてたことが判明……)
また、上記の 2. 決められたコマンドを実行するに関してですが、実は設定情報を取ってくるといったようなRancid標準の予め決まっている動作だけでなく、明示的に実行したいコマンドを指定して実行させることもできるので、たとえば「RMA処理を依頼するときにはこの複数の定型コマンドを打つのが決まりになっている」……なんて時は、Rancid にまかせてサクッと取ってきてしまうという運用もできると思います。
Rancid をインストールする
RHEL/CentOSなどは EPELリポジトリを参照していれば、パッケージ導入できます。ただ、このパッケージは git を有効にして生成されていなかったり、バージョンが古かったりするので、ちょっと手間ですが、このパッケージを元に rancidパッケージを作り直してみましょう。
まず、EPELリポジトリにアクセスできるようにします。
$ sudo yum install epel-release
これで rancidの src.rpmファイルにアクセスできるようになりました。以下は、yum-utils, rpm-build, rpmdevtools がインストール済みだとして説明してきます。
手元に rancid の src.rpmファイルをダウンロードします
$ yumdownloader --source rancid
これで rancid-3.2-2.el7.src.rpm といったファイルがカレントディレクトリにDownloadされたはずです。このパッケージを作業用ユーザ権限でインストールします。この作業にroot権限は不要です。
$ rpm -ivh rancid-3.2-2.el7.src.rpm 更新中 / インストール中... 1:rancid-3.2-2.el7 ################################# [100%] 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザー mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します
なにやらいろいろ怒られますが、無視してOKです。これで ~/rpmbuild に関連ファイルがDownloadされました。
[vagrant@localhost ~]$ find rpmbuild/ -type f -print rpmbuild/SOURCES/rancid-3.2.p1 rpmbuild/SOURCES/rancid-3.2.p2 rpmbuild/SOURCES/rancid-3.2.p3 rpmbuild/SOURCES/rancid-3.2.p4 rpmbuild/SOURCES/rancid-3.2.p5 rpmbuild/SOURCES/rancid-3.2.p6 rpmbuild/SOURCES/rancid-3.2.p7 rpmbuild/SOURCES/rancid-3.2.tar.gz rpmbuild/SOURCES/rancid-Makefile.patch rpmbuild/SOURCES/rancid-conf.patch rpmbuild/SOURCES/rancid.cron rpmbuild/SOURCES/rancid.logrotate rpmbuild/SPECS/rancid.spec
ついでに、コンパイルに必要なパッケージもインストールしておきます。
$ sudo yum-builddep ~/rpmbuild/SPECS/rancid.spec
現時点の最新に Rancidは 3.7 なので、このソースコードをダウンロードします。
$ cd ~/rpmbuild/SOURCES $ wget ftp://ftp.shrubbery.net/pub/rancid/rancid-3.7.tar.gz
この 3.7 でパッケージを作るように specファイルを書き換えます(~/rpmbuild/SPECS/rancid.spec)
差分は下記の通りです。不要な patch の適用などをコメント or 削除してしまいます。
--- rancid.spec.bak 2018-03-28 09:56:30.022287520 +0000 +++ rancid.spec 2018-05-22 10:46:48.702034697 +0000 @@ -1,6 +1,6 @@ Name: rancid -Version: 3.2 -Release: 2%{?dist} +Version: 3.7 +Release: 1%{?dist} Summary: Really Awesome New Cisco confIg Differ Group: Applications/Internet @@ -9,16 +9,7 @@ Source0: ftp://ftp.shrubbery.net/pub/{name}/%{name}-%{version}.tar.gz Source1: %{name}.cron Source2: %{name}.logrotate -Patch0: %{name}-conf.patch Patch1: %{name}-Makefile.patch -# Upstream Patches -Patch20: %{name}-%{version}.p1 -Patch21: %{name}-%{version}.p2 -Patch22: %{name}-%{version}.p3 -Patch23: %{name}-%{version}.p4 -Patch24: %{name}-%{version}.p5 -Patch25: %{name}-%{version}.p6 -Patch26: %{name}-%{version}.p7 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -27,11 +18,11 @@ BuildRequires: rsh BuildRequires: openssh-clients BuildRequires: expect >= 5.40 -BuildRequires: cvs -BuildRequires: subversion +#BuildRequires: cvs +#BuildRequires: subversion BuildRequires: perl BuildRequires: iputils -BuildRequires: sendmail +#BuildRequires: sendmail Requires(pre): shadow-utils Requires: findutils @@ -48,21 +39,14 @@ %prep %setup -q -n %{name}-%{version} -%patch0 -p1 %patch1 -p1 -%patch20 -p0 -%patch21 -p0 -%patch22 -p0 -%patch23 -p0 -%patch24 -p0 -%patch25 -p0 -%patch26 -p0 %build %configure \ --sysconfdir=%{_sysconfdir}/%{name} \ --bindir=%{_libexecdir}/%{name} \ --libdir=%{perl_vendorlib} \ + --with-git \ --enable-conf-install make %{?_smp_mflags}
あとは
$ cd ~/rpmbuild/SPECS $ rpmbuild -ba rancid.spec
でパッケージが出来上がるので、これをインストールします
$ sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/rancid-debuginfo-3.7-1.el7.centos.x86_64.rpm
環境によってはさらに下記のパッケージのインストールが必要かもしれません。
$ sudo yum install perl-Sys-Syslog perl-MailTools perl-LockFile-Simple perl-CGI
Rancid の設定ファイルについて
Rancidの管理ファイルは基本的に
– /etc/rancid/rancid.conf
を編集します。人によっては
– /etc/rancid/rancid.types.base
を修正することがあるかもしれません。ここでは各種対応機種に応じて発行されるコマンドやその結果をどの関数でフィルタしてやるのかといった情報が集約されています。
arista;script;rancid -t arista arista;login;clogin arista;module;aeos arista;inloop;aeos::inloop arista;command;aeos::ShowVersion;show version arista;command;aeos::ShowBoot;show boot-config arista;command;aeos::ShowEnv;show env all arista;command;aeos::ShowFlash;dir flash: arista;command;aeos::ShowInventory;show inventory arista;command;aeos::ShowBootExt;show boot-extensions arista;command;aeos::ShowExt;show extensions arista;command;aeos::DiffConfig;diff startup-config running-config #arista;command;aeos::WriteRibd;show tech ribd running arista;command;aeos::WriteTerm;show running-config
上記は rancid.types.base ファイル中のAsita機器の処理に関して記述されている箇所の抜粋です。login処理をどうするのか、module はどのモジュールを使って処理をするのか、また発行するコマンドとそれを処理する関数などを列挙しています。ただ、普段使うときはあまり意識することはないと思います。編集するにしても、運用を始めたあとに、必要・不必要に応じてコメントにするぐらいでしょうか。
使い始めるには rancid.conf内の
– BASEDIR
– CVSROOT (gitを使う場合でもあっても)
– LIST_OF_GROUPS
などを環境に合わせて修正することになりますが、詳細については次回解説していきます。
次回予告
今回は、rancid の概要とインストールするまでを説明させて頂きました。実際に動作環境を整えるには、rancid の管理対象となるネットワーク機器を用意する必要があります。最近はありがたいことに、仮想環境で動く仮想ルータも増えました。次回は、それら仮想ルータを起動し、rancid を一通り動かすところまでをご紹介したいと思います。
本ブログの情報につきましては、自社の検証に基づいた結果からの情報提供であり、
品質保証を目的としたものではございません。