会社で 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 転送でホスト側に持ってきてみたけどまぁまぁ動くのでアプリケーションサーバとして稼働させておけば複数台にインストールする手間が省けるかも。