mattintosh note

どこかのエンジニアモドキの備忘録

Cisco Packet Tracer 7.1.1 を Ubuntu 16.04 や Debian 9 以降にインストールする方法

f:id:mattintosh4:20180527001644p:plain

会社で CCENT/CCNA の教材作成用に Cisco Packet Tracer を使う用事があったので Linux 版のインストール方法を残しておく。

Ubuntu 16.04 以降では Packet Tracer 7.1.1 をインストールしただけでは起動できない

Linux 向けの Cisco Packet Tracer 7.1.1 は Ubuntu 14.04 を対象にしているようなので Ubuntu 16.04 以降の環境では一部のライブラリが存在せず起動できない。

install スクリプトによってインストールされた packettracer コマンドでは >/dev/null 2>&1 となっているためエラーが出力されないが、PacketTracer7 を直接実行するとライブラリが見つからないというエラーを確認することができる。

linus@ubuntu1804:~/Applications/pt-7.1.1$ LD_LIBRARY_PATH=lib bin/PacketTracer7  
bin/PacketTracer7: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory
linus@ubuntu1804:~/Applications/pt-7.1.1$ LD_LIBRARY_PATH=lib ldd bin/PacketTracer7 | grep "not found" | sort | uniq
        libicui18n.so.52 => not found
        libicuuc.so.52 => not found
        libpng12.so.0 => not found

Packet Tracer 7.1.1 を使用するにあたり、追加で必要になるライブラリは下記の通り。Kali Linux (MATE Edition) でも試したが libxslt が不足していたような気がする。

ディストリビューション 追加で必要なライブラリ
Ubuntu 16.04.4 LTS xenial libicui18n.so.52
libicuuc.so.52
Ubuntu 18.04 LTS bionic libicui18n.so.52
libicuuc.so.52
libpng12.so.0
Debian 9 libcrypto.so.1.0.0
libicui18n.so.52
libicuuc.so.52
libpng12.so.0
Kali Linux (Mate Edition) 後日確認予定

Packet Tracer 7.1.1 のインストール

適当なディレクトリ(ここでは ~/Applications/pt-7.1.1 とする)を作成して、その中に Packet Tracer 7.1.1 for Linux 64 bit.tar.gz を展開する。このとき saves ディレクトリ以下に書き込み権限が無く、エラーを吐くので sudo で展開する。

mkdir -p ~/Applications/pt-7.1.1
cd       ~/Applications/pt-7.1.1
sudo tar xzf ~/Downloads/Packet\ Tracer\ 7.1.1\ for\ Linux\ 64\ bit.tar.gz

展開直後のトップディレクトリの構成は下記の通り。

linus@ubuntu1804:~/Applications/pt-7.1.1$ tree -F -L 1
.
├── Sounds/
├── art/
├── backgrounds/
├── bin/
├── eula.txt
├── extensions/
├── help/
├── install*
├── languages/
├── lib/
├── saves/
├── set_ptenv.sh
├── set_qtenv.sh
├── templates/
├── tpl.linguist
└── tpl.packettracer

10 directories, 6 files

インストールはトップディレクトリにある install スクリプトを実行し、EULA を読んだ後にインストールディレクトリを指定する。「/usr/local/binpackettracer をインストールしますか?」のような質問をされるので「はい」にすれば LD_LIBRARY_PATH の設定をしてくれる /usr/local/bin/packettracer を配置してくれる。

./install

依存関係の解決

Packet Tracer 7.1.1 には Qt5 のライブラリが同梱されている。

linus@ubuntu1804:~/Applications/pt-7.1.1$ tree -F lib
lib
├── libQt5Core.so -> libQt5Core.so.5.5.1*
├── libQt5Core.so.5 -> libQt5Core.so.5.5.1*
├── libQt5Core.so.5.5 -> libQt5Core.so.5.5.1*
├── libQt5Core.so.5.5.1*
├── libQt5DBus.so -> libQt5DBus.so.5.5.1*
├── libQt5DBus.so.5 -> libQt5DBus.so.5.5.1*
├── libQt5DBus.so.5.5 -> libQt5DBus.so.5.5.1*
├── libQt5DBus.so.5.5.1*
├── libQt5Gui.so -> libQt5Gui.so.5.5.1*
├── libQt5Gui.so.5 -> libQt5Gui.so.5.5.1*
├── libQt5Gui.so.5.5 -> libQt5Gui.so.5.5.1*
├── libQt5Gui.so.5.5.1*
├── libQt5Multimedia.so -> libQt5Multimedia.so.5.5.1*
├── libQt5Multimedia.so.5 -> libQt5Multimedia.so.5.5.1*
├── libQt5Multimedia.so.5.5 -> libQt5Multimedia.so.5.5.1*
├── libQt5Multimedia.so.5.5.1*
├── libQt5MultimediaWidgets.so -> libQt5MultimediaWidgets.so.5.5.1*
├── libQt5MultimediaWidgets.so.5 -> libQt5MultimediaWidgets.so.5.5.1*
├── libQt5MultimediaWidgets.so.5.5 -> libQt5MultimediaWidgets.so.5.5.1*
├── libQt5MultimediaWidgets.so.5.5.1*
├── libQt5Network.so -> libQt5Network.so.5.5.1*
├── libQt5Network.so.5 -> libQt5Network.so.5.5.1*
├── libQt5Network.so.5.5 -> libQt5Network.so.5.5.1*
├── libQt5Network.so.5.5.1*
├── libQt5Positioning.so -> libQt5Positioning.so.5.5.1*
├── libQt5Positioning.so.5 -> libQt5Positioning.so.5.5.1*
├── libQt5Positioning.so.5.5 -> libQt5Positioning.so.5.5.1*
├── libQt5Positioning.so.5.5.1*
├── libQt5PrintSupport.so -> libQt5PrintSupport.so.5.5.1*
├── libQt5PrintSupport.so.5 -> libQt5PrintSupport.so.5.5.1*
├── libQt5PrintSupport.so.5.5 -> libQt5PrintSupport.so.5.5.1*
├── libQt5PrintSupport.so.5.5.1*
├── libQt5Script.so -> libQt5Script.so.5.5.1*
├── libQt5Script.so.5 -> libQt5Script.so.5.5.1*
├── libQt5Script.so.5.5 -> libQt5Script.so.5.5.1*
├── libQt5Script.so.5.5.1*
├── libQt5ScriptTools.so -> libQt5ScriptTools.so.5.5.1*
├── libQt5ScriptTools.so.5 -> libQt5ScriptTools.so.5.5.1*
├── libQt5ScriptTools.so.5.5 -> libQt5ScriptTools.so.5.5.1*
├── libQt5ScriptTools.so.5.5.1*
├── libQt5Sensors.so -> libQt5Sensors.so.5.5.1*
├── libQt5Sensors.so.5 -> libQt5Sensors.so.5.5.1*
├── libQt5Sensors.so.5.5 -> libQt5Sensors.so.5.5.1*
├── libQt5Sensors.so.5.5.1*
├── libQt5Sql.so -> libQt5Sql.so.5.5.1*
├── libQt5Sql.so.5 -> libQt5Sql.so.5.5.1*
├── libQt5Sql.so.5.5 -> libQt5Sql.so.5.5.1*
├── libQt5Sql.so.5.5.1*
├── libQt5Svg.so -> libQt5Svg.so.5.5.1*
├── libQt5Svg.so.5 -> libQt5Svg.so.5.5.1*
├── libQt5Svg.so.5.5 -> libQt5Svg.so.5.5.1*
├── libQt5Svg.so.5.5.1*
├── libQt5WebKit.so -> libQt5WebKit.so.5.5.1*
├── libQt5WebKit.so.5 -> libQt5WebKit.so.5.5.1*
├── libQt5WebKit.so.5.5 -> libQt5WebKit.so.5.5.1*
├── libQt5WebKit.so.5.5.1*
├── libQt5WebKitWidgets.so -> libQt5WebKitWidgets.so.5.5.1*
├── libQt5WebKitWidgets.so.5 -> libQt5WebKitWidgets.so.5.5.1*
├── libQt5WebKitWidgets.so.5.5 -> libQt5WebKitWidgets.so.5.5.1*
├── libQt5WebKitWidgets.so.5.5.1*
├── libQt5Widgets.so -> libQt5Widgets.so.5.5.1*
├── libQt5Widgets.so.5 -> libQt5Widgets.so.5.5.1*
├── libQt5Widgets.so.5.5 -> libQt5Widgets.so.5.5.1*
├── libQt5Widgets.so.5.5.1*
├── libQt5XcbQpa.so -> libQt5XcbQpa.so.5.5.1*
├── libQt5XcbQpa.so.5 -> libQt5XcbQpa.so.5.5.1*
├── libQt5XcbQpa.so.5.5 -> libQt5XcbQpa.so.5.5.1*
├── libQt5XcbQpa.so.5.5.1*
├── libQt5Xml.so -> libQt5Xml.so.5.5.1*
├── libQt5Xml.so.5 -> libQt5Xml.so.5.5.1*
├── libQt5Xml.so.5.5 -> libQt5Xml.so.5.5.1*
└── libQt5Xml.so.5.5.1*

0 directories, 72 files

packettracer コマンドのソースである tpl.packettracer を見ると LD_LIBRARY_PATH でインストール先の lib ディレクトリを参照するになっている。

#!/bin/bash

echo Starting Packet Tracer 7.1.1

PTDIR=III
export LD_LIBRARY_PATH=$PTDIR/lib
pushd $PTDIR/bin > /dev/null
./PacketTracer7 "$@" > /dev/null 2>&1
popd > /dev/null

どのライブラリが足りないのかを ldd を使って確認する。

Ubuntu 16.04〉

libicuuc.so.52 は libicu52 に含まれるのでこれは libicu52 のパッケージを入れれば解決できる。

linus@ubuntu1604:~/Applications/pt-7.1.1$ LD_LIBRARY_PATH=lib ldd bin/PacketTracer7 | grep "not found" | sort | uniq
        libicui18n.so.52 => not found
        libicuuc.so.52 => not found

Ubuntu 18.04〉

Ubuntu 18.04 の場合は libicu52 に加え、libpng12 が不足している。

linus@ubuntu1804:~/Applications/pt-7.1.1$ LD_LIBRARY_PATH=lib ldd bin/PacketTracer7 | grep "not found" | sort | uniq
        libicui18n.so.52 => not found
        libicuuc.so.52 => not found
        libpng12.so.0 => not found

Debian 9〉

Debian 9 の場合は更に libcrypto.so.1.0.0 が不足しているが、これは libssl-1.0.0 に含まれる。

linus@debian9:~/Applications/pt-7.1.1$ LD_LIBRARY_PATH=lib ldd bin/PacketTracer7  | grep "not found" | sort | uniq
        libcrypto.so.1.0.0 => not found
        libicui18n.so.52 => not found
        libicuuc.so.52 => not found
        libpng12.so.0 => not found

依存関係のパッケージの入手

いずれのディストリビューションも libicu52 を必要とするが、APT でインストールできるのは libicu55 や libicu57 以降になっている。

linus@ubuntu1604:~/Applications/pt-7.1.1$ apt-cache search libicu
icu-devtools - Development utilities for International Components for Unicode
libicu-dev - Development files for International Components for Unicode
libicu55 - International Components for Unicode
libicu55-dbg - International Components for Unicode
libicu4j-4.4-java - Library for Unicode support and internationalization
libicu4j-49-java - Library for Unicode support and internationalization
libicu4j-java - Library for Unicode support and internationalization

そこで、http://ftp.jaist.ac.jp あたりから対象パッケージの DEB ファイルをダウンロードしてくる。

Ubuntu

※以降、Ubuntu 16.04 の場合は libpng12 は最初からインストールされているので読み飛ばしてかまわない。

wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/main/i/icu/libicu52_52.1-3ubuntu0.8_amd64.deb
wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.deb

Debian

Debian 9 の場合は libssl-1.0.0 もダウンロードする。

wget http://ftp.jaist.ac.jp/pub/Linux/debian/pool/main/i/icu/libicu52_52.1-8+deb8u7_amd64.deb
wget http://ftp.jaist.ac.jp/pub/Linux/debian/pool/main/libp/libpng/libpng12-0_1.2.50-2+deb8u3_amd64.deb
wget http://ftp.jaist.ac.jp/pub/Linux/debian/pool/main/o/openssl/libssl1.0.0_1.0.2l-1~bpo8+1_amd64.deb

依存関係のインストール

Ubuntu

libicu52、libpng12 は現行バージョンと名前が異なるため衝突しないと思われるので dpkg コマンドでインストールする。詳細な検証はしていないのでパッケージをインストールしたくない場合は下の手動配置方法を参照。

sudo dpkg -i libicu52_52.1-3ubuntu0.8_amd64.deb
sudo dpkg -i libpng12-0_1.2.54-1ubuntu1_amd64.deb

Debian

dpkg -i libicu52_52.1-8+deb8u7_amd64.deb
dpkg -i libpng12-0_1.2.50-2+deb8u3_amd64.deb 
dpkg -i libssl1.0.0_1.0.2l-1~bpo8+1_amd64.deb

これで Packet Tracer 7.1.1 が起動できるようになる。

【番外編】 Packet Tracer とライブラリを手動で配置する方法

パッケージをインストールをしたくない場合は DEB ファイルからライブラリだけを取り出せばよい。DEB パッケージの中にある data.tar.xz を取り出して中を見てみる。libicu52 の場合、必要になるのは ./usr/lib/x86_64-linux-gnu 以下にあるものだけ。

linus@ubuntu1804:~/Applications/pt-7.1.1$ ar p libicu52_52.1-3ubuntu0.8_amd64.deb data.tar.xz | xz -dc | tar tvf -  | sort -k6
drwxr-xr-x root/root         0 2018-03-28 01:08 ./
drwxr-xr-x root/root         0 2018-03-28 01:08 ./usr/
drwxr-xr-x root/root         0 2018-03-28 01:08 ./usr/lib/
drwxr-xr-x root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/
lrwxrwxrwx root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicudata.so.52 -> libicudata.so.52.1
-rw-r--r-- root/root  23512848 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicudata.so.52.1
lrwxrwxrwx root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicui18n.so.52 -> libicui18n.so.52.1
-rw-r--r-- root/root   2121040 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicui18n.so.52.1
lrwxrwxrwx root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicuio.so.52 -> libicuio.so.52.1
-rw-r--r-- root/root     55304 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicuio.so.52.1
lrwxrwxrwx root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicule.so.52 -> libicule.so.52.1
-rw-r--r-- root/root    358408 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicule.so.52.1
lrwxrwxrwx root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libiculx.so.52 -> libiculx.so.52.1
-rw-r--r-- root/root     47112 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libiculx.so.52.1
lrwxrwxrwx root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicutest.so.52 -> libicutest.so.52.1
-rw-r--r-- root/root     64864 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicutest.so.52.1
lrwxrwxrwx root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicutu.so.52 -> libicutu.so.52.1
-rw-r--r-- root/root    195344 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicutu.so.52.1
lrwxrwxrwx root/root         0 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicuuc.so.52 -> libicuuc.so.52.1
-rw-r--r-- root/root   1525776 2018-03-28 01:08 ./usr/lib/x86_64-linux-gnu/libicuuc.so.52.1
drwxr-xr-x root/root         0 2018-03-28 01:08 ./usr/share/
drwxr-xr-x root/root         0 2018-03-28 01:08 ./usr/share/doc/
drwxr-xr-x root/root         0 2018-03-28 01:08 ./usr/share/doc/libicu52/
-rw-r--r-- root/root       317 2013-12-25 01:45 ./usr/share/doc/libicu52/NEWS.Debian.gz
-rw-r--r-- root/root      1807 2018-03-28 01:08 ./usr/share/doc/libicu52/changelog.Debian.gz
-rw-r--r-- root/root      7016 2013-12-25 01:45 ./usr/share/doc/libicu52/copyright
drwxr-xr-x root/root         0 2018-03-28 01:08 ./usr/share/lintian/
drwxr-xr-x root/root         0 2018-03-28 01:08 ./usr/share/lintian/overrides/
-rw-r--r-- root/root       176 2013-12-25 01:45 ./usr/share/lintian/overrides/libicu52

DEB ファイルからライブラリだけを取り出すが、その際、--strip-components=2 オプションで2階層ほど削って展開することで余計なファイル移動を省略する。--strip-components=3 で、もう一段階削って lib 直下に libicu52 のライブラリを展開するようにしてもいいが、なんとなく分けたかったので lib/x86_64-linux-gnu 以下に展開するようにする。(pax コマンドがあればそちらでパスを変換して取り出すのもあり)

ar p libicu52_52.1-3ubuntu0.8_amd64.deb data.tar.xz | xz -dc | tar xf - --wildcards '*/lib/x86_64-linux-gnu/*' --strip-components=2

これで lib の直下に x86_64-linux-gnu ディレクトリが作成され、libicu52 のライブラリが展開される。

linus@ubuntu1804:~/Applications/pt-7.1.1$ tree -F lib
lib
├── libQt5Core.so -> libQt5Core.so.5.5.1*
├── libQt5Core.so.5 -> libQt5Core.so.5.5.1*
├── libQt5Core.so.5.5 -> libQt5Core.so.5.5.1*
├── libQt5Core.so.5.5.1*
:
中略
:
└── x86_64-linux-gnu/
    ├── libicudata.so.52 -> libicudata.so.52.1
    ├── libicudata.so.52.1
    ├── libicui18n.so.52 -> libicui18n.so.52.1
    ├── libicui18n.so.52.1
    ├── libicuio.so.52 -> libicuio.so.52.1
    ├── libicuio.so.52.1
    ├── libicule.so.52 -> libicule.so.52.1
    ├── libicule.so.52.1
    ├── libiculx.so.52 -> libiculx.so.52.1
    ├── libiculx.so.52.1
    ├── libicutest.so.52 -> libicutest.so.52.1
    ├── libicutest.so.52.1
    ├── libicutu.so.52 -> libicutu.so.52.1
    ├── libicutu.so.52.1
    ├── libicuuc.so.52 -> libicuuc.so.52.1
    └── libicuuc.so.52.1

1 directory, 88 files

libpng12 もライブラリだけを取り出すことができるが、こちらは /usr/lib/x86_64-linux-gnu にあるのはシンボリックリンクで、実体は ./lib/x86_64-linux-gnu/libpng12.so.0 になっている。

linus@ubuntu1804:~/Applications/pt-7.1.1$ ar p libpng12-0_1.2.54-1ubuntu1_amd64.deb data.tar.xz | xz -dc | tar tvf - --wildcards '*/x86_64-linux-gnu/*' | sort -k6
lrwxrwxrwx root/root         0 2016-01-07 03:08 ./lib/x86_64-linux-gnu/libpng12.so.0 -> libpng12.so.0.54.0
-rw-r--r-- root/root    149904 2016-01-07 03:08 ./lib/x86_64-linux-gnu/libpng12.so.0.54.0
lrwxrwxrwx root/root         0 2016-01-07 03:08 ./usr/lib/x86_64-linux-gnu/libpng12.so.0 -> /lib/x86_64-linux-gnu/libpng12.so.0

シンボリックリンクの方は展開しても意味が無いので ./lib/x86_64-linux-gnu だけを展開する。これはそのまま展開すれば相対パスでちょうどよく lib/x86_64-linux-gnu に配置される。

ar p libpng12-0_1.2.54-1ubuntu1_amd64.deb data.tar.xz | xz -dc | tar xf - --wildcards './lib/x86_64-linux-gnu/*'
linus@ubuntu1804:~/Applications/pt-7.1.1$ tree -F lib
lib
:
中略
:
└── x86_64-linux-gnu/
    :
    中略
    :
    ├── libpng12.so.0 -> libpng12.so.0.54.0
    └── libpng12.so.0.54.0

1 directory, 90 files

Debian 9 の場合は ar コマンドが無いので busybox ar を使う。

busybox ar p libicu52_52.1-8+deb8u7_amd64.deb data.tar.xz      | xz -dc | tar xf - --wildcards '*/lib/x86_64-linux-gnu/*' --strip-components=2
busybox ar p libpng12-0_1.2.50-2+deb8u3_amd64.deb data.tar.xz  | xz -dc | tar xf - --wildcards './lib/x86_64-linux-gnu/*'
busybox ar p libssl1.0.0_1.0.2l-1~bpo8+1_amd64.deb data.tar.xz | xz -dc | tar xf - --wildcards '*/libcrypto.so.1.0.0' --strip-components=2

ライブラリだけを取り出しても通常のインストールとは異なるため packettracer コマンドを自作する。これはルートディレクトリにある tpl.packettracer を参考に変更すればよい。

〈packettracer〉

libicu52 や libpng12 のライブラリを lib/x86_64-linux-gnu の下に配置したので、LD_LIBRARY_PATHx86_64-gnu-linux ディレクトリを追加する必要がある。tpl.packettracer では pushdpopd相対パスで実行するようになっていたが、気に入らなかったのでフルパス呼び出しに変更した。

PT7HOME 環境変数QT_DEVICE_PIXEL_RATIO 環境変数install スクリプトを使用したときに、同ディレクトリにある set_qtenv.shset_ptenv.sh によって必要に応じて /etc/profile に書き出されるもの。これも一応追加しておく。

#!/bin/bash

PTDIR=$(cd "$(dirname "$0")" && pwd)
export LD_LIBRARY_PATH=$PTDIR/lib/x86_64-linux-gnu:$PTDIR/lib
export PT7HOME=$PTDIR
export QT_DEVICE_PIXEL_RATIO=auto
exec "$PTDIR"/bin/PacketTracer7 "$@" >/dev/null 2>&1

このスクリプトpackettracer という名前で実行権限を付与して実行すれば Packet Tracer が起動する。

chmod +x packettracer
./packettracer

続いて、デスクトップエントリも自分で配置する。

cp bin/Cisco-PacketTracer.desktop ~/.local/share/applications

packettracer/usr/local/bin に配置していないので適切なパスに変更する。また、インストール先を /opt/pt から変更しているのでアイコンのパスも変更しておく。

〈~/.local/share/applications/Cisco-PacketTracer.desktop〉

[Desktop Entry]
Encoding=UTF-8
Type=Application

#Exec=packettracer %F
Exec=/home/linus/Applications/pt-7.1.1/packettracer %F
#Icon=/opt/pt/art/app.png
Icon=/home/linus/Applications/pt-7.1.1/art/app.png

Name=Cisco Packet Tracer
Categories=Application;Network;

MimeType=application/x-pkt;application/x-pka;application/x-pkz;

デスクトップファイルのデータベースを更新する。

update-desktop-database ~/.local/share/applications

これでアプリケーションメニューに「Cisco Packet Tracer」が表示されるようになる。

f:id:mattintosh4:20180527001525p:plain


任意のパッケージだけ APT に追加できたような気がするけど忘れた。

VirtualBox でゲストの Ubuntu に Packet Tracer をインストールして X11 転送でホスト側に持ってきてみたけどまぁまぁ動くのでアプリケーションサーバとして稼働させておけば複数台にインストールする手間が省けるかも。

f:id:mattintosh4:20180527012646p:plain