
会社で 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/bin に packettracer をインストールしますか?」のような質問をされるので「はい」にすれば 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_PATH に x86_64-gnu-linux ディレクトリを追加する必要がある。tpl.packettracer では pushd と popd で相対パスで実行するようになっていたが、気に入らなかったのでフルパス呼び出しに変更した。
PT7HOME 環境変数と QT_DEVICE_PIXEL_RATIO 環境変数は install スクリプトを使用したときに、同ディレクトリにある set_qtenv.sh と set_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」が表示されるようになる。

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