Hi Kakuma-San,

Thank you for your reply!


On 2016年11月07日 21:50, fumihiko kakuma wrote:
> Hi Iwase-san,
>
> I am sorry for the delay in my reply.
>
> On Mon, 7 Nov 2016 16:08:09 +0900
> Iwase Yusuke <[email protected]> wrote:
>
>> Hi Kakuma-San,
>>
>> Could you check my answer as following?
>> This patch will fix the Travis-CI build error of Ryu upstream.
>>
>
> I also was checking it and I found that it is caused by the fact that
> tinyrpc is not installed.

Yes, the embedded tinyrpc has been deleted in the latest Ryu,
but docker_base.py does not install it yet.


> I answered in inline.
>
>> Thanks,
>> Iwase
>>
>>
>> On 2016年11月06日 14:28, Iwase Yusuke wrote:
>>> Hi, Kakuma-San,
>>>
>>>
>>> On 2016年11月04日 06:52, fumihiko kakuma wrote:
>>>> Hi Iwase-san,
>>>>
>>>> On Wed,  2 Nov 2016 16:51:35 +0900
>>>> IWASE Yusuke <[email protected]> wrote:
>>>>
>>>>> Signed-off-by: IWASE Yusuke <[email protected]>
>>>>> ---
>>>>>  ryu/tests/integrated/common/docker_base.py | 23 +++++++++++++----------
>>>>>  1 file changed, 13 insertions(+), 10 deletions(-)
>>>>>
>>>>> diff --git a/ryu/tests/integrated/common/docker_base.py 
>>>>> b/ryu/tests/integrated/common/docker_base.py
>>>>> index 13fe223..fd3ceef 100644
>>>>> --- a/ryu/tests/integrated/common/docker_base.py
>>>>> +++ b/ryu/tests/integrated/common/docker_base.py
>>>>> @@ -196,25 +196,28 @@ class DockerImage(object):
>>>>>      def create_ryu(self, tagname='ryu', image=None, check_exist=False):
>>>>>          if check_exist and self.exist(tagname):
>>>>>              return tagname
>>>>> -        workdir = TEST_BASE_DIR + '/' + tagname
>>>>> +        workdir = '%s/%s' % (TEST_BASE_DIR, tagname)
>>>>>          workdir_ctn = '/root/osrg/ryu'
>>>>> -        pkges = 'telnet tcpdump iproute2 '
>>>>> -        pkges += 'gcc python-pip python-dev libffi-dev libssl-dev'
>>>>> +        pkges = 'telnet tcpdump iproute2'
>>>>> +        pkges += ' gcc python-dev libffi-dev libssl-dev'
>>>>> +        pkges += ' libxml2-dev libxslt1-dev zlib1g-dev'
>>>>>          if image:
>>>>>              use_image = image
>>>>>          else:
>>>>>              use_image = self.baseimage
>>>>>          c = CmdBuffer()
>>>>> -        c << 'FROM ' + use_image
>>>>> +        c << 'FROM %s' % use_image
>>>>>          c << 'RUN apt-get update'
>>>>> -        c << 'RUN apt-get install -qy --no-install-recommends ' + pkges
>>>>> -        c << 'RUN pip install -U six paramiko msgpack-rpc-python'
>>>>> -        c << 'ADD ryu ' + workdir_ctn
>>>>> -        install = 'RUN cd %s && pip install -r tools/pip-requires ' % 
>>>>> workdir_ctn
>>>>> -        install += '&& python setup.py install'
>>>>> +        c << 'RUN apt-get install -qy --no-install-recommends %s' % pkges
>>>>> +        c << 'ADD ryu %s' % workdir_ctn
>>>>> +        install = 'RUN cd %s' % workdir_ctn
>>>>> +        install += ' && pip install'
>>>>> +        install += ' -r tools/pip-requires'
>>>>> +        install += ' -r tools/test-requires'
>>>>
>>>> Why do we need the test-requires to run a ryu app on a container?
>>>> I think that we may need a pip-requires which some packages are added or
>>>> an another required file.
>>>
>>> test-requires also includes the optional requirements (e.g. paramiko, 
>>> tinyrpc)
>>> to run BGPSpeaker and OF-Config, for example.
>>>  
>>> http://ryu.readthedocs.io/en/latest/getting_started.html#optional-requirements
>>>
>>> So, when we want to test the other feature on osrg/ryu based Docker 
>>> container,
>>> we must have installed them, I guess.
>
> Yes, but I didn't like to install test tool(mock, nose and etc).

I agree with you.
I don't prefer to installing unnecessary packages too.

Well, I would like to separate test-requires into two files("test
requirements" and "optional requirements").

# Removes "optional requirements" from test-requires.
$ cat tools/test-requires
coverage
mock
nose
pep8
pylint
formencode

# Create a new file for "optional requirements".
$ cat tools/optional-requires
lxml; platform_python_implementation != 'PyPy'  # OF-Config
lxml==3.4.0; platform_python_implementation == 'PyPy'
cryptography==1.5
paramiko  # NETCONF, BGP speaker
tinyrpc   # RPC
ncclient  # OF-Config


>
>>> I prefer to separating the optional requirements from "test-requires", 
>>> though...
>>>
>
> But I am ok in using test-requires if it makes many works.
>
>>>>
>>>> And the above Dockerfile seems to faile in a case not to use
>>>> osrg/ryu image. But we may not need that case.
>>>
>>> You mean the above does not have "python-pip", for example?
>
>
> Yes. And I get the following error while I build ryu image file.
>
> $ cat /tmp/ctn_docker/bgp/ryu/Dockerfile
> FROM ubuntu:14.04.5
> RUN apt-get update
> RUN apt-get install -qy --no-install-recommends telnet tcpdump iproute2 gcc 
> python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev 
> python-pip
> ADD ryu /root/osrg/ryu
> RUN cd /root/osrg/ryu && pip install -r tools/pip-requires -r 
> tools/test-requires && python setup.py install
> $ sudo docker build -t ryu /tmp/ctn_docker/bgp/ryu
> Sending build context to Docker daemon 179.3 MB
> Step 1 : FROM ubuntu:14.04.5
>  ---> f2d8ce9fa988
> Step 2 : RUN apt-get update
>  ---> Running in 90d7f0bb0ef3
> Ign http://archive.ubuntu.com trusty InRelease
> Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
>
> ...
>
> Removing intermediate container 384b0764eeaf
> Step 4 : ADD ryu /root/osrg/ryu
>  ---> ee57cfffe5d9
> Removing intermediate container 1adb83f316e9
> Step 5 : RUN cd /root/osrg/ryu && pip install -r tools/pip-requires -r 
> tools/test-requires && python setup.py install
>  ---> Running in 9de973780048
> Exception:
> Traceback (most recent call last):
>   File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in 
> main
>     status = self.run(options, args)
>   File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 262, 
> in run
>     for req in parse_requirements(filename, finder=finder, options=options, 
> session=session):
>   File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1632, in 
> parse_requirements
>     req = InstallRequirement.from_line(line, comes_from, 
> prereleases=getattr(options, "pre", None))
>   File "/usr/lib/python2.7/dist-packages/pip/req.py", line 173, in from_line
>     return cls(req, comes_from, url=url, prereleases=prereleases)
>   File "/usr/lib/python2.7/dist-packages/pip/req.py", line 71, in __init__
>     req = pkg_resources.Requirement.parse(req)
>   File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2667, in 
> parse
>     reqs = list(parse_requirements(s))
>   File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2605, in 
> parse_requirements
>     line, p, specs = scan_list(VERSION,LINE_END,line,p,(1,2),"version spec")
>   File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2573, in 
> scan_list
>     raise ValueError("Expected "+item_name+" in",line,"at",line[p:])
> ValueError: ('Expected version spec in', "lxml; 
> platform_python_implementation != 'PyPy'", 'at', "; 
> platform_python_implementation != 'PyPy'")
>
> Storing debug log for failure in /root/.pip/pip.log
> The command '/bin/sh -c cd /root/osrg/ryu && pip install -r 
> tools/pip-requires -r tools/test-requires && python setup.py install' 
> returned a non-zero code: 2
> $

The above error show the pip version is too old, I guess.
The packaged python-pip on Ubuntu 14.04 might be old to use
the environment marker in the requirements file.
   https://www.python.org/dev/peps/pep-0345/#environment-markers


>
>>> Well, is there any case or request for using the other base image?
>>> If any, I guess we can use the Ubuntu based image only...
>>>
>
> In the default DockerImage class uses ubuntu 14.04.5.
> I think that there may be a case try multiple ubuntu version and
> the latest ubuntu version and use debian.
> But I don't know whether we try those cases.
>
> BTW how about having a separate method like the following?
>
> def create_ryu(self, tagname='ryu', image=None, check_exist=False):
> ...
>
> def create_ryu_osrg(self, tagname='ryu', image='osrg/ryu',
> check_exist=False):
> ...

Hummm... I don't want to separate method for the specific case...

With Ubuntu 16.04, the packaged python-pip version is enough to
use the environment marker, so this problem will not occur.
But, if we should consider the multiple Ubuntu version,
I will update my patch to include python-pip.

Thanks,
Iwase


>
>
> Thank you,
> fumihiko kakuma
>
>
>>> Thanks,
>>> Iwase
>>>
>>>>
>>>>> +        install += ' && python setup.py install'
>>>>>          c << install
>>>>>
>>>>> -        self.cmd.sudo('rm -rf ' + workdir)
>>>>> +        self.cmd.sudo('rm -rf %s' % workdir)
>>>>>          self.cmd.execute('mkdir -p ' + workdir)
>>>>>          self.cmd.execute("echo '%s' > %s/Dockerfile" % (str(c), workdir))
>>>>>          self.cmd.execute('cp -r ../ryu %s/' % workdir)
>>>>> --
>>>>> 2.7.4
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Developer Access Program for Intel Xeon Phi Processors
>>>>> Access to Intel Xeon Phi processor-based developer platforms.
>>>>> With one year of Intel Parallel Studio XE.
>>>>> Training and support from Colfax.
>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>> _______________________________________________
>>>>> Ryu-devel mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>>>
>

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to