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
