Re: [Fuego] [PATCH 2/4] linaro: update to python3

<[email protected]> Sat, 28 Aug 2021 00:05:05 +0000
Newsgroups dev.linux.lists.fuego
Message-ID <BYAPR13MB2503134A8F65E14946360414FDC99@BYAPR13MB2503.namprd13.prod.outlook.com>
FYI - I did some testing here, manually do the apt-get install of python-pip3 into my
old Debian 9 (jessie) Fuego container.

And here's the error message I get from the command
'pip3 install -r /fuego-rw/buildzone/min1.smoke.Functional.linaro-x86_64/automated/utils/requirements.txt --user'

Collecting squad_client>0.5 (from -r /fuego-rw/buildzone/min1.smoke.Functional.linaro-x86_64/automated/utils/requirements.txt (line 5))
  Could not find a version that satisfies the requirement squad_client>0.5 (from -r /fuego-rw/buildzone/min1.smoke.Functional.linaro-x86_64/automated/utils/requirements.txt (line 5)) (from versions: )
No matching distribution found for squad_client>0.5 (from -r /fuego-rw/buildzone/min1.smoke.Functional.linaro-x86_64/automated/utils/requirements.txt (line 5))
----

There's a 'squad-client 0.18' on pypi.org (note the middle dash, not underscore).

Upon investigation, it turns out that the latest squad-client requires python 3.6, and Debian stretch
has python 3.5.  I checked versions back to squad-client 0.1, and all of them require python 3.6,
so the Functional.linaro is not compatible with the default python in the Debian in the
current Fuego docker container.

Ugh.
 -- Tim



> -----Original Message-----
> From: Bird, Tim
> Sent: Friday, August 27, 2021 3:48 PM
> To: [email protected]
> Cc: [email protected]; [email protected]
> Subject: RE: [PATCH 2/4] linaro: update to python3
> 
> > -----Original Message-----
> > From: [email protected] <[email protected]>
> >
> > Hi Tim,
> >
> > Thanks for your review.
> > See my comments inline.
> >
> > > -----Original Message-----
> > > From: [email protected] <[email protected]>
> > > Sent: Friday, August 27, 2021 2:54 AM
> > > To: sangorrin daniel(サンゴリン ダニエル □SWC◯ACT) <[email protected]>
> > > Cc: [email protected]; nguyen dat tho(TSDV Eng 1) <[email protected]>
> > > Subject: RE: [PATCH 2/4] linaro: update to python3
> > >
> > > Ok - I went to apply this today, and I realized I still have some questions...
> > >
> > > See inline below.
> > >
> > >
> > > > -----Original Message-----
> > > > From: Daniel Sangorrin <[email protected]>
> > > >
> > > > From: Nguyen Dat Tho <[email protected]>
> > > >
> > > > The upstream linaro repository[1] now uses python3 so use pip3 to
> > > > install the requirements
> > > >
> > > > [1] https://github.com/Linaro/test-definitions
> > > >
> > > > Signed-off-by: Nguyen Dat Tho <[email protected]>
> > > > Signed-off-by: Daniel Sangorrin <[email protected]>
> > > > ---
> > > >  tests/Functional.linaro/fuego_test.sh | 4 +++-
> > > >  1 file changed, 3 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/tests/Functional.linaro/fuego_test.sh
> > > > b/tests/Functional.linaro/fuego_test.sh
> > > > index 677ab49..c775baa 100755
> > > > --- a/tests/Functional.linaro/fuego_test.sh
> > > > +++ b/tests/Functional.linaro/fuego_test.sh
> > > > @@ -26,8 +26,10 @@ function test_pre_check {  }
> > > >
> > > >  function test_build {
> > > > +    apt-get install python3-pip
> > > >      source ./automated/bin/setenv.sh
> > > > -    pip install -r $REPO_PATH/automated/utils/requirements.txt --user
> > > > +    pip3 install setuptools --user
> > > > +    pip3 install -r $REPO_PATH/automated/utils/requirements.txt
> > > > + --user
> > > >  }
> > >
> > > What is the effective user account when this is run in Fuego non-container mode?
> >
> > We normally install fuego as root and without jenkins. So it would be running with root permissions.
> >
> > > For non-container execution, do you execute build steps as user 'fuego'
> > > or 'jenkins'?
> >
> > We use root. However, you can also install jenkins even when you don't use containers.
> >
> > https://bitbucket.org/fuegotest/fuego/src/caf37be917f3756980879f32ad044b8f240fbd25/install-native.sh#lines-97
> >
> > So in that case, it would jenkins.
> >
> > > For a container environment, the build steps are performed as user 'jenkins'.  Will these steps even work, in that
> > > environment?
> >
> > I believe they should work, but we will double check and let you know.
> >
> > > Does this need to be 'sudo apt-get install', to handle the container case?
> >
> > Probably we can use the Debian packages, we haven't tested that. Also the requirements.txt from Linaro unfortunately does not specify
> > versions.
> 
> What is this requirements.txt file?  I'm not well-versed on pip and how it works (other than that it
> downloads packages and resolves dependencies, like most package manager).
> Does this requirements.txt have the version of python modules that are needed for Linaro's tools?
> Does it indicate the list of python modules required for every test in the test-definitions git
> repository, or just the python modules needed for the Linaro core itself?
> 
> The reason I ask is to get a sense of the scope of the items that will be installed when this
> is executed.
> 
> where does REPO_PATH come from in this test?  (I'm going to guess it comes from setenv.sh)
> 
> >
> > > Do the pip3 operations work at the system level, or at the level of an individual account.
> >
> > I think that if you run them from jenkins it will install them using jenkins (although i am not sure what happens if jenkins does not have a
> > $HOME folder). We run it with root so i guess they go to /root/.cache/pip or something like that.
> >
> > > If a better python3-pip is needed for building, I think this should go into the installation scripts, unless this is intended to be doing
> > > something on the device under test, and not the host.
> >
> > This was intended to run on the host for host-target configurations, and on the DUT for native configurations (eg. LAVA).
> >
> > We can put them on the installation scripts, I also thought about this.
> > The only bad thing is that if the upstream repository changes the requirements.txt file, we might not notice.
> I agree. That's very likely.
> >
> > Also, it is easier to understand the dependencies of each test if we put them there. Actually this should be handled better in general.
> Agreed.  I have struggled with how much to put into the docker container (or host system, for native installs) to
> support individual tests, and when exactly to put them there.
> 
> If you put every possible needed tool in the container, for all tests, you end up with a pretty bloated container.
> If you defer loading the needed tools and packages until a test is actually invoked, it keeps unnecessary
> bloat out of the container, but it risks items not finding out about dependency issues until then.
> 
> I see pros and cons of both approaches.
> 
> >
> > Should I move this to the install scripts then?
> 
> See below for my thinking on this.
> 
> >
> > In that case, we will install the requirements without --user (or perhaps using Debian packages) .
> > Regarding the upstream requirements.txt file, we can ignore until the test doesnt work or we can pin the current commit id.
> >
> > > This will have a permanent effect on the build environment, for either the container, or the host machine where Fuego is running.
> >
> > Correct.
> >
> > > In your test environment, is the host machine the same as the device under test, so that these changes are thrown away when the
> > > image is thrown away?  Or is this persistent?
> >
> > We want to use the LAVA model of always testing on a pristine image. So after running all tests, the image is discarded.
> 
> So this works pretty well when you're doing the LAVA thing, with Fuego native on the device under test.
> It gets dicier when this is run in the docker container.  This test_build potentially changes the contents of
> the python3 site-packages for the Jenkins user - which will affect on an ongoing basis all the other
> tests on the system.
> 
> In a perfect world, we would sandbox this, and create a separate custom site-packages directory
> just for the Linaro tests (maybe inside the /fuego-rw/buildzone/Functional.linaro directory).  This avoid
> changing the python modules for other tests.
> 
> However, having said that, I don't think we have a ton of tests that use python3 modules, or especially
> any esoteric python3 modules, which would create incompatibilities.  So setting up a private site-packages
> directory per test seems like overkill.  I reserve the right to do so sometime in the future, though, if we
> run into conflicts.
> 
> >
> > > It seems like there should be a check to avoid re-installing these, if they are already present.  But maybe "apt-get install " or "pip3
> > > install" will just issue a warning, and there is not harm to executing these if the packages are already there.
> >
> > Yes, they would only issue a warning. But if we remove test_build and move the dependencies to the install scripts, then we will not need
> > checks at all.
> >
> > >
> > > Anyway, as  you can tell, I am confused by this patch.
> > >
> > > Overall, I don't object to it.  I just want to understand what's happening with pip3 installation and setuptools installation at the user
> > > level and system level, for the case where:
> > >  - the test is executing in a Fuego container, with a remote DUT
> > >  - the test is executing in a Fuego container, with a local DUT (DUT=self)
> > >  - the text is executing natively, with a remote DUT
> > >  - the test is executing natively, with a local DUT (DUT=self)
> >
> > Sorry for the confusion.
> >
> > We will move the run dependencies to the install scripts. Then, we will test that those combinations work and what user/location is used
> to
> > install the pip packages.
> >
> > What do you think?
> 
> OK - pip3 and (python3) setuptools should be up-to-date at the system level.  So I'd like to see the
> installation of those put into the install scripts.  We'll be using more and more python3 code in
> the future, so I think this would be good.
> 
> For the packages specifically needed by Linaro tests definitions, I'm OK with deferring filling out the
> modules from requirements.txt into a local (--user) account, to when the Linaro test is run.
> 
> So I think I'd like to see this line stay in the test:
>  +    pip3 install -r $REPO_PATH/automated/utils/requirements.txt --user
> 
> Is that OK?
> 
>  -- Tim