Cisco NSO を Ubuntu にインストールするまで( Vagrant を使って)

#何がやりたい？

自分のMacにNSOをインストールする勇気もなく、色々試して……訳が分からんようになって……丸ごと削除して……を繰り返すことが多いだろうということで、色々なページを参考にしたきた結果をここに記録することにします。（皆様ありがとうございます）

まず、Ubuntu用のディレクトリとして``nso``を作成して、ホスト側（自分のPC）と共有するための``workspace``も作成する

# Vagrantの準備

```
mkdir nso
cd nso
mkdir workspace
```

vagrant の初期ファイルを準備する（コマンドを実行すると自動的に作成される）

```
vagrant init ubuntu/xenial64
```

```text:上記のコマンドの実行結果
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

```

vim で設定ファイルを開いて、編集するのは２箇所
```
vim Vagrantfile
```

1.下記の設定を追加する

```text:workspaceを共有させる
  # config.vm.synced_folder "../data", "/vagrant_data"
  config.vm.synced_folder "./workspace", "/home/vagrant/workspace"
```

2.(option) 下記行のコメントを外す（NSO Web UI にアクセスする時など）
 

```text:ホストマシンからpingが届くようにするためにNATを止める
  # config.vm.network "public_network"
  config.vm.network "public_network"
```

## Vagrantの起動

```
vagrant up
```
```text:上記のコマンドの実行結果
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/xenial64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: Setting the name of the VM: nso_default_1519181217630_10436
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 5.0.40
    default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
    default: /vagrant => /Users/hogehoge/vagrant/nso
    default: /home/vagrant/workspace => /Users/hogehoge/vagrant/nso/workspace
```

## ログイン

```
vagrant ssh
```

# Ubuntuの環境構築

まずは、必要そうなツールをインストール（You can add whatever you like...）

```
sudo apt-get update
sudo apt-get install -y make build-essential
sudo apt-get install -y python-minimal python2.7 python2.7-dev
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
sudo python get-pip.py
```

下記が入っていないと、netconf-console コマンドを実行した際にエラーが出る

```
sudo pip install paramiko
sudo apt-get -y install libxml2-utils
```

Java が入っていないと、NSO の packages reload を実行した際にエラーが出る

```
sudo apt-get -y install default-jre
```

# NSOのインストール

下記のファイルが``workspace``配下にあると``想定``する

```text:出力例
vagrant@ubuntu-xenial:~$ cd workspace/
vagrant@ubuntu-xenial:~/workspace$ ls
nso-4.5.3.linux.x86_64.signed.bin
```

下記のコマンドで展開する

```
chmod +x nso-4.5.3.linux.x86_64.signed.bin
./nso-4.5.3.linux.x86_64.signed.bin
```

```text:上記のコマンドの実行結果
Unpacking...
Verifying signature...
Downloading CA certificate from http://www.cisco.com/security/pki/certs/crcam2.cer ...
Successfully downloaded and verified crcam2.cer.
Downloading SubCA certificate from http://www.cisco.com/security/pki/certs/innerspace.cer ...
Successfully downloaded and verified innerspace.cer.
Successfully verified root, subca and end-entity certificate chain.
Successfully fetched a public key from tailf.cer.
Successfully verified the signature of nso-4.5.3.linux.x86_64.installer.bin using tailf.cer
```
インストーラーを実行する

```
sh ./nso-4.5.3.linux.x86_64.installer.bin $HOME/ncs-4.5.3 --local-install
```

```text:上記のコマンドの実行結果
INFO  Using temporary directory /tmp/ncs_installer.12754 to stage NCS installation bundle
INFO  Unpacked ncs-4.5.3 in /home/vagrant/ncs-4.5.3
INFO  Found and unpacked corresponding DOCUMENTATION_PACKAGE
INFO  Found and unpacked corresponding EXAMPLE_PACKAGE
INFO  Generating default SSH hostkey (this may take some time)
INFO  SSH hostkey generated
INFO  Environment set-up generated in /home/vagrant/ncs-4.5.3/ncsrc
INFO  NCS installation script finished
INFO  Found and unpacked corresponding NETSIM_PACKAGE
INFO  NCS installation complete
```

## 環境設定

ディレクトリを移動する

```
cd ~/ncs-4.5.3/
```

NSOの環境変数を設定する（ためのシェルスクリプトを実行）


```
source $HOME/ncs-4.5.3/ncsrc
```
これを毎回、実行するのが手間になるため、下記も実行しておくと便利

```
echo 'source $HOME/ncs-4.5.3/ncsrc' >> ~/.bashrc
```

NSO が動作するために必要となる作業スペースを作成する

```
ncs-setup --dest $HOME/ncs-run
```

NED の元パッケージを作業スペース配下にコピーする（cp -r でも良い）

```
ln -sF $HOME/ncs-4.5.3/packages/neds/cisco-ios $HOME/ncs-run/packages/
ln -sF $HOME/ncs-4.5.3/packages/neds/cisco-iosxr $HOME/ncs-run/packages/
ln -sF $HOME/ncs-4.5.3/packages/neds/cisco-nx $HOME/ncs-run/packages/
```
# NSOの起動

```
cd ~/ncs-run/
ncs
```

コマンドラインでログインする(Juniperスタイルなら、-J)

```
ncs_cli -u admin -C
```

NED のパッケージを確認する

```
show packages
```

もし、下記のような表示であれば、パッケージの再読み込みも試してみる

```text:NEDが認識されていない
admin@ncs# show packages 
% No entries found.
```
パッケージの再読み込み

```
packages reload
```
```text:上記のコマンドの実行結果
admin@ncs# packages reload 

>>> System upgrade is starting.
>>> Sessions in configure mode must exit to operational mode.
>>> No configuration changes can be performed until upgrade has completed.
>>> System upgrade has completed successfully.
reload-result {
    package cisco-ios
    result true
}
reload-result {
    package cisco-iosxr
    result true
}
reload-result {
    package cisco-nx
    result true
}
admin@ncs# 
```

再度、NED のパッケージを確認する

```
show packages | include file
```
```text:上記のコマンドの実行結果
admin@ncs# show packages | include file
 build-info file cisco-ios-source-3.0.0.3.tar.gz
 build-info file cisco-iosxr-source-3.0.3.tar.gz
 build-info file cisco-nx-source-3.0.0.1.tar.gz
```
コマンドラインを終了する

```
exit
```


# NSOの停止

```
ncs --stop
```

## Vagrantの停止

```
vagrant halt
```