シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

ネットワーク機器のOSアップデートでうまくいかなかったこと

シナプスの技術部ネットワーク課の福山と申します。

ここ数年で、弊社ではネットワーク機器に新しいOSを導入しました。

  • Juniper MX204(Junos OS)
  • Cisco NCS55A1(Cisco IOS XR)
  • Juniper ACX7100-48L(Junos OS Evolved)

導入前の検証ではOSアップデートのテストは問題ありませんでしたが、運用開始後のOSアップデートで検証時の手順では問題が発生しました。
問題が発生した内容と対応内容をご紹介したいと思います。

ケース1: Juniper MX204(Junos OS)

バージョン情報

  • アップデート前: 21.1R2.x
  • アップデート後: 21.4R3-Sx.y
    ※詳細なバージョン情報は x, y として伏せさせていただきます

うまくいかなかったこと

OSをインストールする時にエラーが発生しました。

user@router> request vmhost software add /var/tmp/junos-vmhost-install-mx-x86-64-21.4R3-Sx.y.tgz
Aug 31 03:14:14
Junos Validation begin. Procedure will take few minutes.

<<途中省略>>

chroot: pwd_mkdb: No such file or directory
Hardware Database regeneration succeeded
Validating against /config/juniper.conf.gz
Abort trap (core dumped)
Validation failed
ERROR: Failed to add /var/tmp/junos-vmhost-install-mx-x86-64-21.4R3-Sx.y.tgz
da0 at vtscsi0 bus 0 scbus2 target 0 lun 0
da0: <QEMU QEMU HARDDISK 2.5+> detached
(da0:vtscsi0:0:0:0): Periph destroyed
warning: Host software installation has failed.

「Validation failed」とあるので、何か検証に失敗している様子です。

調査

アップデートしようとしていたバージョンのリリースノートをよく見ると、以下のような記載がありました。

  • Junos OS リリース 21.2R1 以降、これまで FreeBSD 11.x ベースの Junos OS で実行されていたすべての Junos OS 製品は、FreeBSD 12.x ベースの Junos OS に移行されます。
  • Junos OS (FreeBSD 6.x、10.x、および 11.x) から Junos OS (FreeBSD 12.x) にアップグレードする際には、validate オプションを使用しないでください。
  • これは、junos-upgrade-x パッケージ内のプログラムが FreeBSD 12.x に基づいて構築されており、Junos OS (FreeBSD 6.x、10.x、および 11.x) ではこれらのプログラムを実行できないためです。
  • no-validate オプションを実行する必要があります。
  • no-validate ステートメントは検証手順を無効にします。

デフォルトの動作では現在の構成とソフトウェア パッケージの互換性を確認して検証するようです。
アップデート前は FreeBSD 11系で、アップデートしようとしていたバージョンは FreeBSD 12系だったため、失敗しました。
検証時にテストしたアップデートは FreeBSD 11系から FreeBSD 11系へのアップデートだったため、問題なかったようでした。

対応内容

インストールコマンドに「no-validate」 オプションを付けて実行してインストールすることができました。

user@router> request vmhost software add /var/tmp/junos-vmhost-install-mx-x86-64-21.4R3-Sx.y.tgz no-validate
Aug 31 03:53:23
Verified junos-vmhost-install-mx-x86-64-21.4R3-Sx.y signed by PackageDevelopmentECP256_2022 method
ECDSA256+SHA256
Copied the config and other data to the aux disk.

<<途中省略>>

... upgrade complete.
A REBOOT IS REQUIRED TO LOAD THIS SOFTWARE CORRECTLY.
Use the 'request vmhost reboot' command to reboot the system.

ケース2: Cisco NCS55A1(Cisco IOS XR)

バージョン情報

  • アップデート前: 7.9.x
  • アップデート後: 7.11.x
    ※詳細なバージョン情報は x として伏せさせていただきます

うまくいかなかったこと

検証時には IOSイメージおよびパッケージをリポジトリに追加し、「install prepare」コマンドで 準備プロセスを実行してアクティベーション前のチェックをしてから、アクティベーションするようにしていたのですが、問題なく実行できていました。
しかし、運用開始後のアップデート作業では準備プロセスでエラーが発生しました。

IOSイメージをリポジトリに追加

RP/0/RP0/CPU0:router#install add source /harddisk: NCS5500-iosxr-k9-7.11.x.tar
Fri Jul 5 03:13:39.355 JST
2024-07-05 03:13:41 Install operation 71 started by root:
install add source /harddisk: NCS5500-iosxr-k9-7.11.x.tar
2024-07-05 03:13:50 Install operation will continue in the background
RP/0/RP0/CPU0:router#2024-07-05 03:18:57 Install operation 71 finished successfully

ここで表示される「Install operation 71」の「71」を使用すると追加されたパッケージの準備がまとめて行われます。

準備プロセスでエラーが発生

RP/0/RP0/CPU0:router#install prepare id 71
Fri Jul 5 03:22:02.631 JST
2024-07-05 03:22:03 Install operation 72 started by root:
install prepare id 71
2024-07-05 03:22:03 Package list:
2024-07-05 03:22:03 ncs5500-eigrp-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-lictrl-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-isis-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-li-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-mgbl-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-mpls-te-rsvp-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-mpls-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-mcast-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-k9sec-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-healthcheck-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 ncs5500-mini-x-7.11.x
2024-07-05 03:22:03 ncs5500-ospf-1.0.0.0-r711x.x86_64
2024-07-05 03:22:03 Install operation will continue in the background
RP/0/RP0/CPU0:router#2024-07-05 03:23:47 Install operation 72 aborted

「Install operation 72 aborted」となっており、中止されています。

調査

上記「Install operation 72」の「72」を「show install log」コマンドに指定することで「Install operation 72」の実行結果のログを確認することができます。

RP/0/RP0/CPU0:router#show install log 72

<<途中省略>>

2024-07-05 03:23:43  Following error(s) occurred in sysadmin vm(s) during install operation:
2024-07-05 03:23:43  Preparation failed with the error:
nsufficient space in install_repo in sysadmin.
2024-07-05 03:23:43 
                  
                Error stack for 0/RP0 :
                   #1 Insufficient space for staging location /install_repo. Staging Free Space : 910 MB, Total Package Size : 1289 MB
                #2 Insufficient space in install_repo in sysadmin.
                                              
              Please collect 'show tech-support install one-showtech' from XR and
              'show tech-support ctrace' from Admin and pass this information to
              your TAC representative for support.
                                    
2024-07-05 03:23:47  Ending operation 72
2024-07-05 03:23:47  Install operation 72 aborted

「install_repo」の空き容量が足りないとログに出ていました。
確認したところ、検証時に何度かアップデートの検証を実施していたのですが、その時のパッケージがリポジトリに残っており、容量不足になっていました。

対応内容

非アクティブなパッケージを全て削除してから、再度、IOSイメージをリポジトリに追加し、準備プロセスを実行したところ問題なく完了しました。

非アクティブなパッケージを全て削除

RP/0/RP0/CPU0:router#install remove inactive all
Fri Jul  5 04:27:12.147 JST
2024-07-05 04:27:13 Install operation 73 started by root:
  install remove inactive all
2024-07-05 04:27:14 Install operation will continue in the background
RP/0/RP0/CPU0:router#2024-07-05 04:27:38 Install operation 73 finished successfully

再度、IOSイメージをリポジトリに追加

RP/0/RP0/CPU0:router#install add source /harddisk: NCS5500-iosxr-k9-7.11.x.tar
Fri Jul  5 04:33:51.260 JST
2024-07-05 04:33:53 Install operation 74 started by root:
 install add source /harddisk: NCS5500-iosxr-k9-7.11.x.tar
2024-07-05 04:34:02 Install operation will continue in the background
RP/0/RP0/CPU0:router#2024-07-05 04:39:07 Install operation 74 finished successfully

準備プロセスを実行

RP/0/RP0/CPU0:router#install prepare id 74
Fri Jul  5 04:47:04.448 JST
2024-07-05 04:47:05 Install operation 75 started by root:
  install prepare id 74
2024-07-05 04:47:05 Package list:
2024-07-05 04:47:05     ncs5500-eigrp-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-lictrl-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-isis-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-li-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-mgbl-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-mpls-te-rsvp-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-mpls-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-mcast-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-k9sec-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-healthcheck-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05     ncs5500-mini-x-7.11.x
2024-07-05 04:47:05     ncs5500-ospf-1.0.0.0-r711x.x86_64
2024-07-05 04:47:05 Install operation will continue in the background
RP/0/RP0/CPU0:router#2024-07-05 04:51:58 Install operation 75 finished successfully

準備プロセスが問題なく完了しています。

ケース3: Juniper ACX7100-48L(Junos OS Evolved)

バージョン情報

  • アップデート前: 22.4R2.x-EVO
  • アップデート後: 23.2R2-Sx.y-EVO
    ※詳細なバージョン情報は x, y として伏せさせていただきます

うまくいかなかったこと

弊社ではアップデート用のOSをftp接続できるサーバに事前に設置して、ftp接続でネットワーク機器に転送するようにしています。
検証時にはそのftpサーバにftp接続してOSを転送できていました。
しかし、運用開始後のアップデート作業ではそのftpサーバにftp接続できませんでした。

user@router> ftp [ftpサーバのアドレス] source [ルーターのループバックアドレス]
/usr/bin/ftp: connect to address [ftpサーバのアドレス] : Connection timed out
/usr/bin/ftp: no response from host

調査

ftp接続しようとしていたルーターとftpサーバの間にL3スイッチがあり、アクセスリストでそのルーターからはループバックアドレスからでないと、ftpサーバにftp接続できないようにしていたのですが、L3スイッチのアクセスログを見ると、ルーターの物理インターフェースに設定しているIPアドレスからftpサーバに接続しようとして拒否しているログが出ていました。

ftpコマンドの後に「?」を入力して使用可能なオプションを確認してみます。

user@router> ftp  [ftpサーバのアドレス]  ?
Possible completions:
  <[Enter]>            Execute this command
  bypass-routing       Bypass routing table, use specified interface
  inet                 Force FTP to IPv4 destination
  inet6                Force FTP to IPv6 destination
  interface            Name of interface for outgoing traffic
  logical-system       Name of logical system
  routing-instance     Name of routing instance for FTP session
  source               Source address for FTP session
  |                    Pipe through a command

「source」でftp接続の送信元アドレスを指定できると思っていたのですが、実際の動作は異なっているようでした。

対応内容

別のコマンドを調べてみたのですが、「file copy」だと、引数の末尾にsource-address [ルーターのループバックアドレス] を指定することで、送信元アドレスをループバックアドレスにして問題なくftp接続、OSイメージを転送できました。

user@router> file copy ftp://anonymous@[ftpサーバのアドレス]/junos-evo-install-acx-f-x86-64-23.2R2-Sx.y-EVO.iso /var/tmp/ staging-directory /var/tmp source-address [ルーターのループバックアドレス]
Password:
junos-evo-install-acx-f-x86-64-23.2R2-Sx.y-EVO.iso          100%[==================================================================================================>]   1.64G  2.18MB/s    in 13m 54s
2024-07-15 20:12:09 URL: ftp://anonymous@[ftpサーバのアドレス]/junos-evo-install-acx-f-x86-64-23.2R2-Sx.y-EVO.iso [1758738432] -> "/var/tmp/...transferring.file.........100%

まとめ

  • 検証時に運用開始後のネットワーク構成を考慮した検証が不十分だったと感じました。
  • リリースノートにアップデート時の注意点が載っていることもあるので、見落とさないように確認しようと思います。