LoginSignup
svsv
@svsv

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ubuntu22.04へのSDNフレームワークRyuのインストール

現在の状況(2023/6/22)

ubuntu22.04での動作を諦め、ubuntu20.04で環境構築を行ったところ正常に動作しました。

解決したいこと

仮想マシン(ubuntu22.04)にopenflowの環境を作成しようと、以下のことを行っています。
①mininetのインストール
②Ryuのインストール
このために次のコマンドをそれぞれ実行し①までを終わらせ、mininetの動作確認を行い、mininetは正常にインストールできたことを確認しました。
(2.3.1b4-2-g5b1b376はmininetの最新版です)

$sudo apt update
$sudo apt upgrade
$sudo apt-get install build-essential
$sudo apt-get install git
$git clone https://github.com/mininet/mininet.git
$cd mininet
$git checkout -b 2.3.1b4-2-g5b1b376 2.3.1b4-2-g5b1b376
$util/install.sh

次に②を行うため、次のコマンドでRyuをインストールしました。

$git clone https://github.com/faucetsdn/ryu.git
$cd ryu; pip install .

2行目のコマンドを実行後、インストール処理の最後に次の警告があり、その後Ryu-managerを実行できなかったため、その下のコマンドでPATHを作りました。

WARNING: The scripts ryu and ryu-manager are installed in '/home/vagrant/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

$export PATH="/home/vagrant/.local/bin:$PATH"

発生している問題・エラー

以上を行った後、ryu-manager --versionを実行すると次のエラーが発生してしまい、解決法が分かりません。何かわかることがあれば教えていただけるとありがたいです。

Traceback (most recent call last):
  File "//home/vagrant/.local/bin/ryu-manager", line 5, in <module>
    from ryu.cmd.manager import main
  File "/home/vagrant/.local/lib/python3.10/site-packages/ryu/cmd/manager.py", line 22, in <module>
    from ryu.lib import hub
  File "/home/vagrant/.local/lib/python3.10/site-packages/ryu/lib/hub.py", line 30, in <module>
    import eventlet
  File "/home/vagrant/.local/lib/python3.10/site-packages/eventlet/__init__.py", line 17, in <module>
    from eventlet import convenience
  File "/home/vagrant/.local/lib/python3.10/site-packages/eventlet/convenience.py", line 7, in <module>
    from eventlet.green import socket
  File "/home/vagrant/.local/lib/python3.10/site-packages/eventlet/green/socket.py", line 4, in <module>
    __import__('eventlet.green._socket_nodns')
  File "/home/vagrant/.local/lib/python3.10/site-packages/eventlet/green/_socket_nodns.py", line 11, in <module>
    from eventlet import greenio
  File "/home/vagrant/.local/lib/python3.10/site-packages/eventlet/greenio/__init__.py", line 3, in <module>
    from eventlet.greenio.base import *  # noqa
  File "/home/vagrant/.local/lib/python3.10/site-packages/eventlet/greenio/base.py", line 32, in <module>
    socket_timeout = eventlet.timeout.wrap_is_timeout(socket.timeout)
  File "/home/vagrant/.local/lib/python3.10/site-packages/eventlet/timeout.py", line 166, in wrap_is_timeout
    base.is_timeout = property(lambda _: True)
TypeError: cannot set 'is_timeout' attribute of immutable type 'TimeoutError'

自分で試したこと

上のエラーの最後のTypeErrorの行と同様のエラーを質問したものがgithub上にあり、そこでの解決法と同様の操作を試したのですが、それによってPythonのバージョン互換のエラーが新たに発生するのか、他のエラーが発生し解決できませんでした。
そのgithubのリンクは「https://github.com/eventlet/eventlet/issues/733」です。

0

6Answer

mininet をインストールしないで
ryubookを参考にryuをインストールできました。
ryu --version 4.34
python3 --version 3.10.6
cat /etc/os-release 22.04.20 LTS

apt update -y; apt upgrade -y
apt install -y python3
apt install -y git python3-dev python3-setuptools python3-pip
apt update -y; apt upgrade -y
pip install -upgrade pip これエラー
git clone https://github.com/osrg/ryu.git
cd ryu
pip install .

ワーニングはでてます。
尚、環境はvagrantが非対応のLinuxコンテナです。

1

Comments

  1. @svsv

    Questioner

    同じコマンドでインストールを行ったところ、エラーの箇所はno such actionでできませんでしたがインストールは行えました。しかしやはりバージョンの方をいじらないでそのままやるとwarningで指摘されるPATHを作成しても、

    ryu-manager --version
    

    でryuを起動するところでエラーが発生します。

  2. @svsv

    Questioner

    報告ですが、諦めてubuntu20.04で同様に行ったところ、正常に動作させることができました。

  3. almalinux 8.8で朝実施したらryu-manager --version 4.34まで確認できました。python関連はインストール済みでした。

    yum  update -y; apt upgrade -y
    yum  install -y git
    pip3 install --upgrade pip
    git clone https://github.com/osrg/ryu.git
    cd ryu
    pip install ·
    
  4. @svsv

    Questioner

    Pythonのバージョンはいくつでしたか?

  5. @svsv

    Questioner

    やはりそうですよね、一度バージョン3.10を入れると恐ろしく複雑になるのでデフォルトで3.9以前のものを使うのがよさそうです。

  6. とにかく問題解決おめでとう!

    私はlxcですが、alpine,almalinux,fedora,ubuntu,debian,openSUSEをを順に試しています。無駄なトライはしない、すぐ諦めて次にトライしてます。alpineはチョットだけ食らいついたが、善戦虚しくダメダメでした。

  7. @svsv

    Questioner

    色々触れるのすごいです、手を貸していただきありがとうございました。

なんか色々と試されているようなので、横から口を挟んでいいものか悩みますが…。

https://launchpad.net/ubuntu/focal/+source/ryu
Focal(ubuntu20.04)用のパッケージがuniverseレポジトリにありそうなので、ubuntu20.04ならuniverseレポジトリを有効にすればapt一発でインストールできそうなきがします。


もし、ubuntu22.04にこだわるのであれば…。

Traceback (most recent call last):
  File "/home/vagrant/.local/lib/python3.10/site-packages/ryu/lib/hub.py", line 30, in <module>
    import eventlet
  (省略)
  File "/home/vagrant/.local/lib/python3.10/site-packages/eventlet/timeout.py", line 166, in wrap_is_timeout
    base.is_timeout = property(lambda _: True)
TypeError: cannot set 'is_timeout' attribute of immutable type 'TimeoutError'

このエラーメッセージを読む限り、eventletをインポートしただけで例外が起きているし、開発サイドでも問題と認識している(そして修正した)ので、eventletをなんとかしないといけないと思います。
先に示したgithubのissuesのとおり、eventletをgithubからインストールする(それで問題が起きるのであれば、そちらを解決する)ほうがいいのではないでしょうか。
(まぁ、masterブランチから持ってきているようですから、しばらくして時間が経てば解決するかもしれません)

1

Comments

  1. @svsv

    Questioner

    仮想マシンをvagrantのコマンド
    $vagrant init generic/ubuntu2004
    で立ち上げ、sshし次のコマンドを実行することによってRyuを起動し、バージョン確認・接続待ち状態にすることができました。

    $sudo apt update
    $sudo apt -y upgrade
    $sudo apt-get install build-essential
    $sudo apt-get install git
    $git clone https://github.com/faucetsdn/ryu.git
    $sudo apt install python3-pip
    $cd ryu; pip install .
    $export PATH="/home/vagrant/.local/bin:$PATH"
    $ryu-manager ryu/ryu/app/simple_switch.py
    

    ただ教えてくださったレポジトリについてはまだあまり分かっていないのでこれから調べます。
    またubuntu22.04について、eventletをgithubからインストールするのは既に試しましたが他のエラーが発生してしまっていました。

私もSDNに興味があります。コンテナにインストールして見ようとおもいます。

さて、vagrant にて仮想化サーバを過去ビルドしてませんか?

0

Comments

  1. @svsv

    Questioner

    すみません、あまり知識がないですが、今はWindowsにMovaxtermをインストールして、そこからUbuntuサーバーにsshでログインし、そこでvagrantで仮想マシンを立てて環境構築を行おうとしています。

  2. 現状確認

    1. mininetは正常である。
    2. ryuが正常にインストールできない。
    3. apt update; apt upgradeは実施済み
    4. apt install python-setuptools を実施したか記述なし
    5. pip install -upgrade pip を実施したか記述なし
    6. apt install g++ linux-headers  を実施したか記述なし
    7. apt install git gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev は実施済み
    8. vagrant destroy; vagrant up にて再作成したか?記述なし
    9. echo $PATHの確認の記述なし
    10. pip install . のエラーメッセージが掲示されていない。但し、PATH="//ものは掲示されている。
    $export PATH="//home/vagrant/.local/bin:$PATH"
    

    のPATH="// が気になります。PATH="/で実施済み

    尚、仮想マシン内でvagrantがエラーメッセージに表示されるのおかしいです。
    仮想マシン内なのでしょうか? 仮想マシン内との事

    また、vagrantのターゲットはVirtual Box?ですか?まさか?dockerてことはないですよね?
     
    Virtual Boxとのこと

  3. @svsv

    Questioner

    ・apt install -y pipは、行わないとRyuのインストールがそもそも不可能であったため行いました。
    ・pip install -upgrade pipは行っていません。
    ・PATH="//については誤字です、実際には"/で実行しました。
    ・投稿した操作は全てUbuntuサーバー内に立てた仮想マシン内で行っています。仮想マシンはVirtual Boxを用いて立てました。dockerは使っていません。

  4. RyuはPython 2.7およびPython 3.4をサポートしています。

    とあります。10年前の記事?

ubuntuのPython関係のファイルを一旦全てアンインストールするのも一つの手ですかね...、やってみます。

0

こちらのエラーについて、以下の記事が解決策になるかもしれません。

ModuleNotFoundError: No module named ’apt_pkg’

0

Comments

  1. @svsv

    Questioner

    ありがとうございます、実は僕もそれを先ほど見つけて試したのですがうまくいきませんでした。もう一度記事を見直しながらやりたいと思います。

そもそも、以下が動作するのはPythonのバージョンがいくつ以上なのか、確認できてますか?

  • mininetのインストール
  • Ryuのインストール

mininetの動作確認はどのように行ったんでしょうか?

上記の2つが成立していると仮定したうえで、Ryuが最新版でなくても良いのであれば、少しずつRyuのバージョンを下げて、動作確認してはいかがでしょうか。

0

Comments

  1. @svsv

    Questioner

    mininetの動作確認は、実際にmnコマンドでpingallを行うことで実施しました。
    Ryuが動作するPythonのバージョンはどのように確認すればよいのでしょうか?確認方法が分からなかったためPythonのバージョンを3.10から3.9に落として再度実行してみましたが、同じタイミングで別のエラーが発生してしまいました。

  2. 確かにPythonのどのバージョンに対応しているかは、ドキュメントをさらっと見た限りでは不明でした。

    しかしながら、Prerequisites以下に以下の記述があります。

    On Ubuntu(16.04 LTS or later):

    % apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev

    なので、以下のコマンドを実行後、Ryuのインストールを試みるといいのではないでしょうか。

    sudo apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev
    
  3. @svsv

    Questioner

    ありがとうございます。挙げてくださったコマンドを実行したところ、python-devのみ使用できなかったため「以下のパッケージが置き換えます」と出てきたpython-dev python2 python-dev-is-python3をそれぞれインストールしました。その後にpython3.9にして再度試みましたが駄目でした。自分でも何をしてるのかよく分からなくなってきたので、後ほどまとめて投稿します。

  4. @svsv

    Questioner

    パッケージ追加

    $sudo apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev
    $sudo apt install python-dev python2 python-dev-is-python3
    

    次の操作でバージョン変更

    $sudo add-apt-repository ppa:deadsnakes/ppa
    $sudo apt install python3.9
    $sudo apt install zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev
    libffi-dev libsqlite3-dev wget libbz2-dev
    $wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz
    $tar -xf Python-3.9.1.tgz
    $cd Python-3.9.1
    $./configure --enable-optimizations
    $make -j 12
    $sudo make altinstall
    $sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1
    $sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1
    

    この状態でRyuをインストールしようとしたところ、

    Traceback (most recent call last):
    ...
    File ”/usr/lib/python3/dist-packages/CommandNotFound/db/db.py”, line 5, in <module>
    import apt pkg
    ModuleNotFoundError: No module named ’apt_pkg’
    

    と、エラーが発生しました。バージョン変更をするとこのエラーが発生することがあるそうで、バージョン管理をどうにかしようと思っています。

Your answer might help someone💌