Re: [Fuego] Use common script to install fuego on host or docker system

<[email protected]> Thu, 17 Jun 2021 20:53:14 +0000
Newsgroups dev.linux.lists.fuego
Message-ID <BYAPR13MB25037A497BD6C970839FFFA6FD0E9@BYAPR13MB2503.namprd13.prod.outlook.com>
> -----Original Message-----
> From: [email protected] <[email protected]>
> 
> Hi Tim,
> 
> Thanks for the feedback, I have commented in line.
> 
> I also copied your feedback and my answers here as the mail is longer to find them, also you can see in the inline in the below mail to see
> the context.

Sounds good.

> 
> > If we don't support any other distributions besides Debian at the moment,
> > then I'm not sure we need the distribution argument.  Do you have any
> > non-debian distribution install scripts ready to submit soon?
> No I don’t have any plan for other distributions coming soon, I kept the distribution argument
> Because in case if we have any future plan to support other distributions we can easily adapt.
> I think we can remove the distribution argument if we don’t have any plan to support in near future,
> I will remove this argument in my next patch if you have no other opinion.
Let's remove it.

> 
>  .
>  .
>  .
> > Is install-debian.sh the common parts for a Debian installation, with
> > buster and stretch having the parts that are unique to each of
> > those distros respectively?  If we're going to refactor this, I
> > want to eliminate any duplication, so that package names are
> > not used in multiple places.  This has been a headache to
> > maintain.
> >
> > It appears there is lots of duplication between install-buster.sh and
> > install-stretch.sh.  Can we possible put this duplication into an
> > "install-debian-common.sh", and reserve install-buster.sh and
> > install-stretch.sh for only the parts unique to those distros?
> Yes, that is a good idea, even I got the similar feedback from our internal review,
> I will do this refactoring in my next patch.
> 
>  .
>  .
>  .
> > Ooo - I like the sound of this uninstall script.
> Sorry do you have anything in mind, not required or required this uninstall script?
> I have created it because it helps me in testing the for uninstalling and installing the fuego multiple times.
> The uninstall script may also need lot of improvement, but I just created a basic script to solve my current problem.
> I may further improve based on the feedback or the issues if any.
I don't have any additional input.  I just like the overall idea.
It would normally only be useful for end users doing a native (not containerized) install.

>  .
> > One question about this overall approach.  Does this retain the ability to cache
> > operations, so that if something goes wrong with an install, you don't have to
> > start over from scratch.  When building with docker, with multiple steps, it
> > caches the image at each step.  When rebuilding, or when an error occurs,
> > this can save a lot of time.  It also can introduce subtle bugs, but that's
> > a separate issue.
> >
> > This setup seems like it performs the bulk of the install as a single docker
> > step, is that right?
> Yes, it will not create the cache for each step in the script, this will be a
>  disadvantage with this common script approach.
> 

How about having the Docker file call the separate scripts, instead of the scripts
calling each other?  This is kind of a middle ground.

The different steps would be:
 - install-debian-common.sh - all the common Debian packages
 - install-buster.sh - the buster-specific Debian packages
or
 - install-stretch.sh - the stretch-specific Debian packages
 - install-extras.sh (for ttc, serio, ebf(board farm rest api), labcontrol, fserver, and anything else we get directly from git)
 - install-jenkins.sh (stuff for Jenkins, called if --nojenkins was not specified)

There could be a simple script:
install-native.sh that would mirror the 4 steps in the Docker file.
and install-container.sh could do the docker-create, etc.

>  .
>  .
> > I'm not sure what this is doing.  It looks scary.  Please explain.
> Because, I had COPY the fuego current directory to the Docker image for installation purpose and removing it after installation,
>  and this is required because the common script "install-*.sh" requires some files to copy inside docker to a specified location
> for e.g:
> cp frontend-install/install-plugins.sh \
>     frontend-install/jenkins-support \
>     frontend-install/clitest \
>     /usr/local/bin/
> 
> And in the previous approach this was done using COPY command which will directly copy from host machine to docker location.
>
> May be I could have used mounting directory inside docker workdir to avoid copying and later removing it, maybe I faced some problem
> with this approach and so later chosen to copy it inside docker image.
> I have done this work little long ago so I have not remembered why I have chosen the copy it inside docker approach, Let me work on again
> and understand why have done this and change it to mounting directory instead copy and remove.
> Please let me know if you have other ideas.

OK - that's fine.  I just missed that.


> 
> 
>  .
>  .
>  .
> > should probably be:
> > ./install.sh [[<image name>] [[<Jenkins port>] [<Distribution name> <suite>]]]
> Thanks for suggestion,
> maybe if I remove the distribution it would be like this?
> ./install.sh [[<image name>] [[<Jenkins port>] [<suite>]]]

Sounds good.

 
> 
> 
>  .
>  .
>  .
> > Overall - this looks like a good start.  But I'd like to see the duplicate sections of
> > install-buster.sh
> > and install-stretch.sh put into a single location "install-debian-common.sh".
> > Also, I'd like to see
> > the non-debian stuff (ttc, serio, ebf, etc.) put into "install-common.sh".
> >
> > Can you please re-do this with that refactoring in mind?
> Thank you for the feedback, I will work on these refactoring and send you another patch.

Sounds good.  Thanks,
 -- Tim
 
> 
> Thanks
> Venkata.
> 
> 
> > -----Original Message-----
> > From: [email protected] <[email protected]>
> > Sent: 15 June 2021 05:39
> > To: pyla venkata(TSIP) <[email protected]>;
> > [email protected]
> > Cc: [email protected]; sangorrin daniel(サンゴリン ダニエル □SW
> > C◯ACT) <[email protected]>
> > Subject: RE: [Fuego] Use common script to install fuego on host or docker
> > system
> >
> > Please see comments  inline below.
> >
> > I tried to apply this patch from the e-mail list using 'git am', but got a failure.
> > That made it a hard to experiment with and view the changes in
> > context.
> >
> > What version of the code is this patch based on?
> >
> > > -----Original Message-----
> > > From: [email protected] <[email protected]>
> > > Subject: [Fuego] Use common script to install fuego on host or docker system
> > >
> > > From: venkata pyla <[email protected]>
> > >
> > >  Modified the install scripts to use common scripts for both types of
> > >  installation, this way it will help to make sure both the environments
> > >  are same and if any future modification will have single place of change.
> > >
> > >  Now, for installing fuego on docker system the 'install.sh' script will
> > >  use common script in Dockefile to install fuego related stuff.
> > >
> > >  sameway for installing fuego on host system it can use the same common
> > >  script to install fuego related stuff.
> > >
> > >  Below are the common scripts that are used in both the installation types
> > >  for each debian distribution
> > >    * install-stretch.sh
> > >    * install-buster.sh
> > >
> > >  so finally,
> > >  To install fuego on docker system use the below script with options
> > >   $ ./install.sh <options> image_name <port> <distribution> <suite>
> > >     e.g: ./install.sh debian_stretch 8090 debian stretch
> > > 		or
> > > 	 ./install.sh debian_buster 8090 debian buster
> > > 		or
> > > 	 ./install.sh --nojenkins debian_buster_nojenkins 8090 debian buster
> > This is a bit wordy, but OK.
> >
> > If we don't support any other distributions besides Debian at the moment,
> > then I'm not sure we need the distribution argument.  Do you have any
> > non-debian distribution install scripts ready to submit soon?
> No I don’t have any plan for other distributions coming soon, I kept the distribution argument
> Because in case if we have any future plan to support other distributions we can easily adapt.
> I think we can remove the distribution argument if we don’t have any plan to support.
> I will remove this argument in my next patch, please let me know if you have any other opinion.
> 
> >
> > I'm not sure I follow calling the Debian release name the "<suite>".
> >
> > >
> > >  To install fuego on host system use the below script with options
> > >   $ ./install-fuego.sh <options> <-d distribution> <-s suite> <-p port>
> > "suite" seems like an odd name.  Should this be distro "version" or "release"?
> >
> > >     e.g: ./install-fuego.sh -d debian -s stretch -p 8090
> > > 		or
> > > 	 ./install-fuego.sh -d debian -s buster -p 8090
> > > 		or
> > > 	 ./install-fuego.sh -d debian -s buster -p 8090 --nojenkins
> > >
> > > Signed-off-by: venkata pyla <[email protected]>
> > > ---
> > >  Dockerfile                               | 303 ++---------------
> > >  Dockerfile.nojenkins                     | 151 ---------
> > >  README                                   |  29 +-
> > >  entrypoint.sh                            |   7 +
> > >  fuego-host-scripts/docker-build-image.sh |  11 +-
> > >  install-buster.sh                        | 294 ++++++++++++++++
> > >  install-debian.sh                        | 410 ++++++++++++++---------
> > >  install-fuego.sh                         | 109 ++++++
> > >  install-stretch.sh                       | 288 ++++++++++++++++
> >
> > Is install-debian.sh the common parts for a Debian installation, with
> > buster and stretch having the parts that are unique to each of
> > those distros respectively?  If we're going to refactor this, I
> > want to eliminate any duplication, so that package names are
> > not used in multiple places.  This has been a headache to
> > maintain.
> >
> > It appears there is lots of duplication between install-buster.sh and
> > install-stretch.sh.  Can we possible put this duplication into an
> > "install-debian-common.sh", and reserve install-buster.sh and
> > install-stretch.sh for only the parts unique to those distros?
> Yes, that is a good idea, even I got the same feedback from our internal review,
> I will do this refactoring in my next patch.
> 
> >
> > >  install.sh                               |  12 +-
> > >  uninstall-fuego.sh                       |  47 +++
> >
> > Ooo - I like the sound of this uninstall script.
> Sorry do you have anything in mind, not required or required this uninstall script
> I have created it because it helps me in testing the environment uninstalling and installing the fuego multiple times.
> The uninstall script may also need lot of improvement, but I just created a basic script to solve my current problem.
> I may further improve based on the feedback or the issues if any.
> 
> >
> > >  11 files changed, 1057 insertions(+), 604 deletions(-)
> > >  delete mode 100644 Dockerfile.nojenkins
> > >  create mode 100755 entrypoint.sh
> > >  create mode 100755 install-buster.sh
> > >  create mode 100755 install-fuego.sh
> > >  create mode 100755 install-stretch.sh
> > >  create mode 100644 uninstall-fuego.sh
> > >
> >
> >
> > > diff --git a/Dockerfile b/Dockerfile
> > > index 7f63798..ac57cb2 100644
> > > --- a/Dockerfile
> > > +++ b/Dockerfile
> > > @@ -2,9 +2,11 @@
> > >  # WARNING: this Dockerfile assumes that the container will be created with
> > >  # several bind mounts (see docker-create-container.sh)
> > >  #
> > ================================================================
> > ==============
> > > -# FIXTHIS: build this as an extension of the nonjenkins image
> > >
> > > -FROM debian:stretch-slim
> > > +ARG SUITE=stretch
> > > +ARG DIST=debian
> > > +
> > > +FROM ${DIST}:${SUITE}-slim
> > >  MAINTAINER [email protected]
> > >
> > >  #
> > ================================================================
> > ==============
> > > @@ -16,299 +18,32 @@ ENV http_proxy ${HTTP_PROXY}
> > >  ENV https_proxy ${HTTP_PROXY}
> > >
> > >  #
> > ================================================================
> > ==============
> > > -# Prepare basic image
> > > +# Install fuego with the script
> > >  #
> > ================================================================
> > ==============
> > >
> > > -ARG DEBIAN_FRONTEND=noninteractive
> > > -
> > > -WORKDIR /
> > > -RUN echo deb http://deb.debian.org/debian stretch main non-free >
> > /etc/apt/sources.list
> > > -RUN echo deb http://security.debian.org/debian-security stretch/updates
> > main >> /etc/apt/sources.list
> > > -RUN if [ -n "$HTTP_PROXY" ]; then echo 'Acquire::http::proxy
> > "'$HTTP_PROXY'";' > /etc/apt/apt.conf.d/80proxy; fi
> > > -
> > > -# Fuego python dependencies
> > > -# - python-lxml: ftc, loggen
> > > -# - python-simplejson: ftc
> > > -# - python-yaml: ftc
> > > -# - python-openpyxl: ftc (also LTP)
> > > -# - python-requests: ftc (also fuego_release_test)
> > > -# - python-reportlab: ftc
> > > -# - python-parsedatetime: ftc
> > > -# - python-pexpect: ssh_exec (part of ttc)
> > > -# - python-pip: to install filelock, flake8
> > > -# - filelock: parser
> > > -RUN mkdir -p /usr/share/man/man1
> > > -RUN apt-get update -q=2 && apt-get -q=2 -V --no-install-recommends install
> > \
> > > -	python-lxml python-simplejson python-yaml python-openpyxl \
> > > -	python-requests python-reportlab python-parsedatetime \
> > > -	python-pexpect python-pip python-setuptools python-wheel
> > > -RUN pip install filelock
> > > -
> > > -# Fuego command dependencies
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	git sshpass openssh-client sudo net-tools wget curl lava-tool \
> > > -	bash-completion iproute2
> > > -
> > > -# Default SDK for testing locally or on an x86 board
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	build-essential cmake bison flex automake kmod libtool \
> > > -	libelf-dev libssl-dev libsdl1.2-dev libcairo2-dev libxmu-dev \
> > > -	libxmuu-dev libglib2.0-dev libaio-dev pkg-config rsync u-boot-tools
> > > -
> > > -# Default test host dependencies
> > > -# - iperf iperf3 netperf: used as servers on the host
> > > -# - bzip2 bc: used for local tests by Functional.bzip2/bc
> > > -# - python-matplotlib: Benchmark.iperf3 parser
> > > -# - python-xmltodict: AGL tests
> > > -# - flake8: Functional.fuego_lint
> > > -# - netpipe-tcp - used by Benchmark.netpipe (provides the netpipe server)
> > > -# - iputils-ping - for /bin/ping command, used by some tests
> > > -# FIXTHIS: install dependencies dynamically on the tests that need them
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	iperf iperf3 netperf bzip2 bc python-matplotlib python-xmltodict \
> > > -    netpipe-tcp iputils-ping
> > > -RUN pip install flake8
> > > -
> > > -# miscelaneous packages:
> > > -# python-serial - used by serio
> > > -# diffstat and vim - used by Tim
> > > -# time - useful for timing command duration
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -    python-serial \
> > > -    diffstat \
> > > -    vim \
> > > -    time
> > > -
> > > -# install packages used by NuttX SDK
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -    genromfs
> > > -
> > > -# FIXTHIS: determine if these tools are really necessary
> > > -#RUN apt-get -q=2 -V --no-install-recommends install \
> > > -#	apt-utils python-paramiko \
> > > -#	xmlstarlet rsync \
> > > -#	inotify-tools gettext netpipe-tcp \
> > > -#	at minicom lzop bsdmainutils \
> > > -#	mc netcat openssh-server
> > > -
> > > -# bsdmainutils provides hexdump, which is needed for netperf test
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	bsdmainutils
> > > -
> > > -RUN /bin/bash -c 'echo "dash dash/sh boolean false" | debconf-set-selections
> > ; dpkg-reconfigure dash'
> > > -RUN if [ -n "$HTTP_PROXY" ]; then echo "use_proxy = on" >> /etc/wgetrc; fi
> > > -RUN if [ -n "$HTTP_PROXY" ]; then echo -e
> > "http_proxy=$HTTP_PROXY\nhttps_proxy=$HTTP_PROXY" >> /etc/environment;
> > fi
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Install Jenkins with the same UID/GID as the host user
> > > -#
> > ================================================================
> > ==============
> > > +RUN mkdir /fuego
> > > +COPY . /fuego/
> > > +WORKDIR /fuego
> > >
> > > -ARG user=jenkins
> > > -ARG group=jenkins
> > > -ARG uid=1000
> > > -ARG gid=${uid}
> > >  ARG JENKINS_PORT=8090
> > > -# see https://updates.jenkins.io/download/war/ for latest Jenkins versions
> > > -#ARG JENKINS_VERSION=2.164.2
> > > -#ARG JENKINS_SHA=4536f43f61b1fca6c58bd91040fa09304eea96ab
> > > -#ARG JENKINS_VERSION=2.235.3
> > > -#ARG JENKINS_SHA=89a37ed1b3c8c14ff94cc66c3f2254f281b60794
> > > -ARG JENKINS_VERSION=2.249.3
> > > -ARG JENKINS_SHA=534014c007edbb533a1833fe6f2dc115faf3faa2
> > > -
> > > -ARG JENKINS_URL=https://pkg.jenkins.io/debian-
> > stable/binary/jenkins_${JENKINS_VERSION}_all.deb
> > > -ARG JENKINS_UC=https://updates.jenkins.io
> > > -ARG REF=/var/lib/jenkins/plugins
> > > +ARG NO_JENKINS=
> > > +ARG SUITE=stretch
> > > +ARG DIST=debian
> > > +ARG uid=
> > > +ARG gid=
> > >  ENV JENKINS_HOME=/var/lib/jenkins
> > >  ENV JENKINS_PORT=$JENKINS_PORT
> > > +RUN ./install-$DIST.sh -s $SUITE -p $JENKINS_PORT -u $uid -g $gid
> > $NO_JENKINS
> >
> > One question about this overall approach.  Does this retain the ability to cache
> > operations, so that if something goes wrong with an install, you don't have to
> > start over from scratch.  When building with docker, with multiple steps, it
> > caches the image at each step.  When rebuilding, or when an error occurs,
> > this can save a lot of time.  It also can introduce subtle bugs, but that's
> > a separate issue.
> >
> > This setup seems like it performs the bulk of the install as a single docker
> > step, is that right?
> Yes, it will not create the cache for each step in the installation script, this will be a disadvantage with this common script approach.
> 
> >
> > > -# Jenkins dependencies
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	default-jdk daemon psmisc adduser procps unzip
> > > -RUN pip install python-jenkins==1.4.0
> > > -
> > > -RUN echo -e "JENKINS_PORT=$JENKINS_PORT" >> /etc/environment
> > > -RUN getent group ${gid} >/dev/null || groupadd -g ${gid} ${group}
> > > -RUN useradd -l -m -d "${JENKINS_HOME}" -u ${uid} -g ${gid} -G sudo -s
> > /bin/bash ${user}
> > > -RUN wget -nv ${JENKINS_URL}
> > > -RUN echo "${JENKINS_SHA} jenkins_${JENKINS_VERSION}_all.deb" | sha1sum
> > -c -
> > > -# allow Jenkins to start and install plugins, as part of dpkg installation
> > > -RUN printf "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
> > > -RUN dpkg -i jenkins_${JENKINS_VERSION}_all.deb
> > > -RUN rm jenkins_${JENKINS_VERSION}_all.deb
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# get ttc script and helpers
> > > -#
> > ================================================================
> > ==============
> > > -RUN git clone https://github.com/tbird20d/ttc.git /usr/local/src/ttc
> > > -RUN /usr/local/src/ttc/install.sh /usr/local/bin
> > > -# as of ttc version 2.0.2, this should not be needed
> > > -#RUN perl -p -i -e "s#config_dir = \"/etc\"#config_dir = \"/fuego-ro/conf\"#"
> > /usr/local/bin/ttc
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# get ebf script and helpers
> > > -#
> > ================================================================
> > ==============
> > > -RUN apt-get -q=2 -V --no-install-recommends install jq
> > > -RUN git clone https://github.com/TimesysGit/board-farm-rest-api.git
> > /usr/local/src/board-farm-rest-api ; \
> > > -  cp /usr/local/src/board-farm-rest-api/cli/ebf /usr/local/bin/ebf ; \
> > > -  chmod a+x /usr/local/bin/ebf
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Serial Config
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN git clone https://github.com/frowand/serio.git /usr/local/src/serio
> > > -COPY frontend-install/0001-Fix-host-parsing-for-serial-device-with-in-
> > name.patch \
> > > -  frontend-install/0002-Output-data-from-port-during-command-
> > execution.patch \
> > > -  /tmp/
> > > -RUN /bin/bash -c 'patch -d /usr/local/src/serio -p1 </tmp/0001-Fix-host-
> > parsing-for-serial-device-with-in-name.patch ; \
> > > -  patch -d /usr/local/src/serio -p1 </tmp/0002-Output-data-from-port-
> > during-command-execution.patch ; \
> > > -  chown -R jenkins /usr/local/src/serio ; \
> > > -  cp /usr/local/src/serio/serio /usr/local/bin/ ; \
> > > -  ln -s /usr/local/bin/serio /usr/local/bin/sercp ; \
> > > -  ln -s /usr/local/bin/serio /usr/local/bin/sersh'
> > > -
> > > -RUN /bin/bash -c 'git clone https://github.com/tbird20d/serlogin.git
> > /usr/local/src/serlogin ;  chown -R jenkins /usr/local/src/serlogin ; cp
> > > /usr/local/src/serlogin/serlogin /usr/local/bin'
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# fserver
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN /bin/bash -c 'git clone https://github.com/tbird20d/fserver.git
> > /usr/local/lib/fserver ; \
> > > -  ln -s /usr/local/lib/fserver/start_local_bg_server
> > /usr/local/bin/start_local_bg_server'
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Jenkins post installation
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN source /etc/default/jenkins && \
> > > -	JENKINS_ARGS="$JENKINS_ARGS --prefix=/fuego" && \
> > > -	sed -i -e "s#JENKINS_ARGS.*#JENKINS_ARGS\=\"${JENKINS_ARGS}\"#g"
> > /etc/default/jenkins
> > > -
> > > -RUN source /etc/default/jenkins && \
> > > -	JAVA_ARGS="$JAVA_ARGS -Djenkins.install.runSetupWizard=false -
> > > Dhudson.model.DirectoryBrowserSupport.allowSymlinkEscape=true" && \
> > > -	if [ -n "$HTTP_PROXY" ]; then \
> > > -		PROXYSERVER=$(echo $http_proxy | sed -E 's/^http://' | sed -E
> > 's/\///g' | sed -E 's/(.*):(.*)/\1/') && \
> > > -		PROXYPORT=$(echo $http_proxy | sed -E 's/^http://' | sed -E
> > 's/\///g' | sed -E 's/(.*):(.*)/\2/') && \
> > > -		JAVA_ARGS="$JAVA_ARGS -
> > Dhttp.proxyHost="${PROXYSERVER}" -Dhttp.proxyPort="${PROXYPORT}" -
> > > Dhttps.proxyHost="${PROXYSERVER}" -Dhttps.proxyPort="${PROXYPORT}; \
> > > -	fi && \
> > > -	sed -i -e "s#^JAVA_ARGS.*#JAVA_ARGS\=\"${JAVA_ARGS}\"#g"
> > /etc/default/jenkins;
> > > -
> > > -RUN sed -i -e "s#8080#$JENKINS_PORT#g" /etc/default/jenkins
> > > -
> > > -# set up Jenkins plugins
> > > -COPY frontend-install/install-plugins.sh \
> > > -    frontend-install/jenkins-support \
> > > -    frontend-install/clitest \
> > > -    /usr/local/bin/
> > > -
> > > -# start Jenkins onces to initialize directories?
> > > -RUN service jenkins start && \
> > > -	sleep 30 && \
> > > -    service jenkins stop
> > > -
> > > -# install plugins - these versions are for Jenkins version 2.164.2
> > > -# Explicitly install script-security v1.68, otherwise
> > > -# v1.74 will automatically be installed as a dependency of
> > > -# the junit plugin. Make sure to install before junit plugin.
> > > -# Explicitly install junit:1.27
> > > -
> > > -# install other plugins from Jenkins update center
> > > -# NOTE: not sure all of these are needed, but keep list
> > > -# as compatible as possible with 1.2.1 release for now
> > > -# Do NOT change the order of the plugins, unless you know what
> > > -# you are doing.  Otherwise, the install-plugins.sh script will
> > > -# install the wrong versions of other plugins based on dependency
> > > -# information in the plugin files.
> > > -
> > > -#RUN /usr/local/bin/install-plugins.sh \
> > > -#    script-security:1.68 \
> > > -#    structs:1.20 \
> > > -#    workflow-step-api:2.22 \
> > > -#    workflow-api:2.40 \
> > > -#    junit:1.27 \
> > > -#    scm-api:2.6.3 \
> > > -#    ant:1.9 \
> > > -#    antisamy-markup-formatter:1.5 \
> > > -#    bouncycastle-api:2.17 \
> > > -#    command-launcher:1.3 \
> > > -#    description-setter:1.10 \
> > > -#    display-url-api:2.3.1 \
> > > -#    external-monitor-job:1.7 \
> > > -#    greenballs:1.15 \
> > > -#    icon-shim:2.0.3 \
> > > -#    javadoc:1.5 \
> > > -#    jdk-tool:1.2 \
> > > -#    ldap:1.20 \
> > > -#    mailer:1.23 \
> > > -#    matrix-auth:2.3 \
> > > -#    matrix-project:1.14 \
> > > -#    pam-auth:1.5 \
> > > -#    pegdown-formatter:1.3 \
> > > -#    windows-slaves:1.4
> > > -
> > > -# install plugins for latest LTS Jenkins (currently 2.249.3)
> > > -RUN /usr/local/bin/install-plugins.sh \
> > > -    script-security \
> > > -    structs \
> > > -    workflow-step-api \
> > > -    workflow-api \
> > > -    junit \
> > > -    scm-api \
> > > -    ant \
> > > -    antisamy-markup-formatter \
> > > -    bouncycastle-api \
> > > -    command-launcher \
> > > -    description-setter \
> > > -    display-url-api \
> > > -    external-monitor-job \
> > > -    greenballs \
> > > -    icon-shim \
> > > -    javadoc \
> > > -    jdk-tool \
> > > -    mailer \
> > > -    matrix-auth \
> > > -    matrix-project \
> > > -    pam-auth \
> > > -    pegdown-formatter \
> > > -    windows-slaves
> > > +COPY entrypoint.sh /usr/bin/
> > >
> > > -COPY frontend-install/plugins/flot-plotter-plugin/flot.hpi
> > $JENKINS_HOME/plugins/flot.jpi
> > > -
> > > -# jenkins should automatically unzip any plugins in the plugin dir
> > > -# make a symlink for mod.js well after flot is installed
> > > -RUN service jenkins start && sleep 30 && \
> > > -    rm $JENKINS_HOME/plugins/flot/flot/mod.js && \
> > > -    ln -s /fuego-core/scripts/mod.js $JENKINS_HOME/plugins/flot/flot/mod.js
> > > -
> > > -RUN ln -s /fuego-rw/logs $JENKINS_HOME/userContent/fuego.logs
> > > -COPY docs/fuego-docs.pdf $JENKINS_HOME/userContent/docs/fuego-
> > docs.pdf
> > > -
> > > -COPY frontend-install/config.xml $JENKINS_HOME/config.xml
> > > -COPY frontend-install/jenkins.model.JenkinsLocationConfiguration.xml
> > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > -RUN sed -i -e "s#8080#$JENKINS_PORT#g"
> > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > -
> > > -RUN chown -R jenkins:jenkins $JENKINS_HOME/
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# ftc post installation
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN ln -s /fuego-core/scripts/ftc /usr/local/bin/
> > > -COPY fuego-core/scripts/ftc_completion.sh /etc/bash_completion.d/ftc
> > > -RUN echo ". /etc/bash_completion" >> /root/.bashrc
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Lava
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN ln -s /fuego-ro/scripts/fuego-lava-target-setup /usr/local/bin
> > > -RUN ln -s /fuego-ro/scripts/fuego-lava-target-teardown /usr/local/bin
> > > +# Delete the files that are copied for installation
> > > +RUN rm -rf /fuego
> >
> > I'm not sure what this is doing.  It looks scary.  Please explain.
> Because, I had COPY the fuego current directory to the Docker image for installation purpose and removing it after installation,
>  and this is required because the common script "install-*.sh" requires some files to copy inside docker to a specified location
> for e.g:
> cp frontend-install/install-plugins.sh \
>     frontend-install/jenkins-support \
>     frontend-install/clitest \
>     /usr/local/bin/
> 
> And in the previous approach this was done using COPY command which will directly copy from host machine to docker location.
> 
> May be I could have used mounting directory inside docker workdir to avoid copying and later removing it, maybe I faced some problem
> with this approach and so later chosen to copy it inside docker image.
> I have done this work little long so I have not remembered why I have chosen the copy it inside docker approach, Let me work on again and
> understand why have done this and change it to mounting directory instead copy and remove.
> 
> >
> > > +WORKDIR /
> > >
> > >  #
> > ================================================================
> > ==============
> > >  # Setup startup command
> > >  #
> > ================================================================
> > ==============
> > > -
> > >  # FIXTHIS: when running multiple Fuego containers, or if the host is already
> > >  #  running the netperf server, netperf will complain because the port is taken
> > > -ENTRYPOINT service jenkins start && service netperf start && iperf3 -V -s -D
> > -f M && /bin/bash
> > > +ENTRYPOINT entrypoint.sh $NO_JENKINS && /bin/bash
> >
> > Isolating this to a separate script is nice!
> >
> > > diff --git a/Dockerfile.nojenkins b/Dockerfile.nojenkins
> > > deleted file mode 100644
> > > index 56de98a..0000000
> > > --- a/Dockerfile.nojenkins
> > > +++ /dev/null
> >
> > Getting rid of this separate Dockerfile is nice.
> >
> > > @@ -1,151 +0,0 @@
> > > -#
> > ================================================================
> > ==============
> > > -# WARNING: this Dockerfile assumes that the container will be created with
> > > -# several bind mounts (see docker-create-container.sh)
> > > -#
> > ================================================================
> > ==============
> > > -# Usage:
> > > -# host$ vi fuego-ro/conf/fuego.conf
> > > -#    jenkins_enabled=0
> > > -# host$ ./fuego-host-scripts/docker-build-image.sh fuego-nojenkins 8090
> > Dockerfile.nojenkins
> > > -# host$ ./fuego-host-scripts/docker-create-container.sh fuego-nojenkins
> > fuego-nojenkins-container
> > > -# host$ ./fuego-host-scripts/docker-start-container.sh fuego-nojenkins-
> > container
> > > -# docker# ftc list-boards
> > > -#   docker, bbb, ...
> > > -# docker# ftc list-tests
> > > -#   Functional.hello_world, ...
> > > -# docker# ftc run-test -b docker -t Functional.hello_world
> > > -#   log_compare: pattern 'SUCCESS' found 1 times (expected greater or
> > equal than 1)
> > > -
> > > -FROM debian:stretch-slim
> > > -MAINTAINER [email protected]
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Proxy variables
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -ARG HTTP_PROXY
> > > -ENV http_proxy ${HTTP_PROXY}
> > > -ENV https_proxy ${HTTP_PROXY}
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Prepare basic image
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -ARG DEBIAN_FRONTEND=noninteractive
> > > -
> > > -WORKDIR /
> > > -RUN echo deb http://deb.debian.org/debian stretch main non-free >
> > /etc/apt/sources.list
> > > -RUN echo deb http://security.debian.org/debian-security stretch/updates
> > main >> /etc/apt/sources.list
> > > -RUN if [ -n "$HTTP_PROXY" ]; then echo 'Acquire::http::proxy
> > "'$HTTP_PROXY'";' > /etc/apt/apt.conf.d/80proxy; fi
> > > -
> > > -# Fuego python dependencies
> > > -# - python-lxml: ftc, loggen
> > > -# - python-simplejson: ftc
> > > -# - python-yaml: ftc
> > > -# - python-openpyxl: ftc (also LTP)
> > > -# - python-requests: ftc (also fuego_release_test)
> > > -# - python-reportlab: ftc
> > > -# - python-parsedatetime: ftc
> > > -# - python-pexpect: ssh_exec (part of ttc)
> > > -# - python-pip: to install filelock, flake8
> > > -# - filelock: parser
> > > -RUN mkdir -p /usr/share/man/man1
> > > -RUN apt-get update -q=2 && apt-get -q=2 -V --no-install-recommends install
> > \
> > > -	python-lxml python-simplejson python-yaml python-openpyxl \
> > > -	python-requests python-reportlab python-parsedatetime \
> > > -	python-pexpect python-pip python-setuptools python-wheel
> > > -RUN pip install filelock
> > > -
> > > -# Fuego command dependencies
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	git sshpass openssh-client sudo net-tools wget curl lava-tool \
> > > -	bash-completion iproute2
> > > -
> > > -# Default SDK for testing locally or on an x86 board
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	build-essential cmake bison flex automake kmod libtool \
> > > -	libelf-dev libssl-dev libsdl1.2-dev libcairo2-dev libxmu-dev \
> > > -	libxmuu-dev libglib2.0-dev libaio-dev pkg-config rsync u-boot-tools
> > > -
> > > -# Default test host dependencies
> > > -# - iperf iperf3 netperf: used as servers on the host
> > > -# - bzip2 bc: used for local tests by Functional.bzip2/bc
> > > -# - python-matplotlib: Benchmark.iperf3 parser
> > > -# - python-xmltodict: AGL tests
> > > -# - flake8: Functional.fuego_lint
> > > -# - netpipe-tcp - used by Benchmark.netpipe (provides the netpipe server)
> > > -# - iputils-ping - for /bin/ping command, used by some tests
> > > -# FIXTHIS: install dependencies dynamically on the tests that need them
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	iperf iperf3 netperf bzip2 bc python-matplotlib python-xmltodict \
> > > -    netpipe-tcp iputils-ping
> > > -RUN pip install flake8
> > > -
> > > -# miscelaneous packages:
> > > -# python-serial - used by serio
> > > -# diffstat and vim - used by Tim
> > > -# time - useful for timing command duration
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -    python-serial \
> > > -    diffstat \
> > > -    vim \
> > > -    time
> > > -
> > > -# FIXTHIS: determine if these tools are really necessary
> > > -# RUN apt-get -q=2 -V --no-install-recommends install \
> > > -#	apt-utils python-paramiko \
> > > -#	xmlstarlet rsync \
> > > -#	inotify-tools gettext netpipe-tcp \
> > > -#	at minicom lzop bsdmainutils \
> > > -#	mc netcat openssh-server
> > > -
> > > -# bsdmainutils provides hexdump, which is needed for netperf test
> > > -RUN apt-get -q=2 -V --no-install-recommends install \
> > > -	bsdmainutils
> > > -
> > > -RUN /bin/bash -c 'echo "dash dash/sh boolean false" | debconf-set-selections
> > ; dpkg-reconfigure dash'
> > > -RUN if [ -n "$HTTP_PROXY" ]; then echo "use_proxy = on" >> /etc/wgetrc; fi
> > > -RUN if [ -n "$HTTP_PROXY" ]; then echo -e
> > "http_proxy=$HTTP_PROXY\nhttps_proxy=$HTTP_PROXY" >> /etc/environment;
> > fi
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# get ttc script and helpers
> > > -#
> > ================================================================
> > ==============
> > > -RUN git clone https://github.com/tbird20d/ttc.git /usr/local/src/ttc
> > > -RUN /usr/local/src/ttc/install.sh /usr/local/bin
> > > -# as of ttc version 2.0.2, this should not be needed
> > > -#RUN perl -p -i -e "s#config_dir = \"/etc\"#config_dir = \"/fuego-ro/conf\"#"
> > /usr/local/bin/ttc
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Serial Config
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN /bin/bash -c 'git clone https://github.com/frowand/serio.git
> > /usr/local/src/serio ;  cp /usr/local/src/serio/serio /usr/local/bin/ ; ln -s
> > > /usr/local/bin/serio /usr/local/bin/sercp ; ln -s /usr/local/bin/serio
> > /usr/local/bin/sersh'
> > > -
> > > -RUN /bin/bash -c 'git clone https://github.com/tbird20d/serlogin.git
> > /usr/local/src/serlogin ;  cp /usr/local/src/serlogin/serlogin
> > > /usr/local/bin'
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# fserver
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN /bin/bash -c 'git clone https://github.com/tbird20d/fserver.git
> > /usr/local/lib/fserver ; ln -s /usr/local/lib/fserver/start_local_bg_server
> > > /usr/local/bin/start_local_bg_server'
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# ftc post installation
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN ln -s /fuego-core/scripts/ftc /usr/local/bin/
> > > -COPY fuego-core/scripts/ftc_completion.sh /etc/bash_completion.d/ftc
> > > -RUN echo ". /etc/bash_completion" >> /root/.bashrc
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Lava
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -RUN ln -s /fuego-ro/scripts/fuego-lava-target-setup /usr/local/bin
> > > -RUN ln -s /fuego-ro/scripts/fuego-lava-target-teardown /usr/local/bin
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Setup startup command
> > > -#
> > ================================================================
> > ==============
> > > -
> > > -# FIXTHIS: when running multiple Fuego containers netperf will complain
> > because the port is taken
> > > -ENTRYPOINT service netperf start && iperf3 -V -s -D -f M && /bin/bash
> > > diff --git a/README b/README
> > > index 882d84e..ce42e1e 100644
> > > --- a/README
> > > +++ b/README
> > > @@ -44,6 +44,29 @@ You can change the name of the docker image and the
> > port used by Jenkins
> > >  by passing the corresponding parameters to install.sh.
> > >    ./install.sh fuego-8082 8082
> > >
> > > +To run fuego on different distribution versions like Debian(stretch, buster,
> > etc.)
> > > + pass appropriate arguments to the install.sh script
> > > +  ./install.sh <image name> <Jenkins port> <Distribution name> <suite>
> >
> > should probably be:
> > ./install.sh [[<image name>] [[<Jenkins port>] [<Distribution name> <suite>]]]
> Thanks for suggestion, may be if I remove the distribution then it will be like this
> ./install.sh [[<image name>] [[<Jenkins port>] [<suite>]]]
> 
> > > +
> > > +By default install.sh script will install fuego on Debian stretch version
> > > + to install fuego on Debian buster version pass below options
> > > +  ./install.sh fuego_buster 8090 debian buster
> > > +
> > > +[Note] It is currently verified on Debian versions (stretch and buster),
> > > +and yet to provide install scripts for other distributions
> > > +
> > > +Installing Fuego to a host system
> > > +-------------------------------------------------------------------------------
> > > +Run install-fuego.sh to install fuego on host system, by default it assume the
> > > +host system is Debian stretch
> > > +  ./install-fuego.sh
> > > +
> > > + to install on Debian buster version
> > > + ./install-fuego.sh -d debian -s buster -p 8090
> > > +
> > > + to install without jenkins pass --nojenkins option to the script
> > > + ./install-fuego.sh --nojenkins
> > > +
> > >  Running
> > >  -------------------------------------------------------------------------------
> > >  To start your Fuego container, issue the following command top directory:
> > > @@ -85,9 +108,9 @@ Updating the Jenkins version
> > >  -------------------------------------------------------------------------------
> > >
> > >  Modify the version and checksum
> > > -    $ vi Dockerfile
> > > -        ARG JENKINS_VERSION=2.32.1
> > > -        ARG JENKINS_SHA=3cbe9b6d4d82c975642ea4409e21e087
> > > +    $ vi install-debian.sh
> > > +        JENKINS_VERSION=2.32.1
> > > +        JENKINS_SHA=3cbe9b6d4d82c975642ea4409e21e087
> > >
> > >  Re-build the flot plugin
> > >      $ sudo apt-get install maven
> > > diff --git a/entrypoint.sh b/entrypoint.sh
> > > new file mode 100755
> > > index 0000000..6eac895
> > > --- /dev/null
> > > +++ b/entrypoint.sh
> > > @@ -0,0 +1,7 @@
> > > +#!/bin/bash
> > > +
> > > +[ "$1" != "--nojenkins" ] && service jenkins start
> > > +
> > > +#TODO: netperf not present in buster, remove this condition once
> > alternative found
> > > +[ -f /etc/init.d/netperf ] && service netperf start
> > > +iperf3 -V -s -D -f M
> > > diff --git a/fuego-host-scripts/docker-build-image.sh b/fuego-host-
> > scripts/docker-build-image.sh
> > > index 5823357..6889c47 100755
> > > --- a/fuego-host-scripts/docker-build-image.sh
> > > +++ b/fuego-host-scripts/docker-build-image.sh
> > > @@ -2,9 +2,10 @@
> > >  # $1 - name for the docker image (default: fuego)
> > >  # $2 - port for jenkins (default: 8090)
> > >  # $3 - Dockerfile or Dockerfile.nojenkins
> > > +# $4 - Debian code name on which to install (default: stretch)
> > >  #
> > >  # Example:
> > > -#  ./fuego-host-scripts/docker-build-image.sh --no-cache myfuegoimg 8082
> > Dockerfile.nojenkins
> > > +#  ./fuego-host-scripts/docker-build-image.sh --no-cache myfuegoimg 8082
> > debian stretch --nojenkins
> > >  #
> > >  if [ "$1" = "--no-cache" ]; then
> > >  	NO_CACHE=--no-cache
> > > @@ -13,7 +14,10 @@ fi
> > >
> > >  DOCKERIMAGE=${1:-fuego}
> > >  JENKINS_PORT=${2:-8090}
> > > -DOCKERFILE=${3:-Dockerfile}
> > > +DISTRIBUTION=${3:-debian}
> > > +SUITE=${4:-stretch}
> > > +NO_JENKINS=${5:""}
> > > +DOCKERFILE="Dockerfile"
> > >
> > >  if [ "$(id -u)" == "0" ]; then
> > >  	JENKINS_UID=$(id -u $SUDO_USER)
> > > @@ -27,4 +31,7 @@ echo "Using Port $JENKINS_PORT"
> > >
> > >  sudo docker build ${NO_CACHE} -t ${DOCKERIMAGE} --build-arg
> > HTTP_PROXY=$http_proxy \
> > >  	--build-arg uid=$JENKINS_UID --build-arg gid=$JENKINS_GID \
> > > +	--build-arg DIST=$DISTRIBUTION \
> > > +	--build-arg SUITE=$SUITE \
> > > +	--build-arg NO_JENKINS=$NO_JENKINS \
> > >  	--build-arg JENKINS_PORT=$JENKINS_PORT -f $DOCKERFILE .
> > > diff --git a/install-buster.sh b/install-buster.sh
> > > new file mode 100755
> > > index 0000000..f4ce65b
> > > --- /dev/null
> > > +++ b/install-buster.sh
> > > @@ -0,0 +1,294 @@
> > > +#!/bin/bash
> > > +# 2019 (c) Toshiba corp. <[email protected]>
> > > +#
> > > +# Usage:
> > > +#  $ sudo ./install-buster.sh [--help|-h] [--nojenkins] [<port>]
> > > +#
> > > +usage(){
> > > +
> > > +cat <<HERE
> > > +Usage: sudo ./install-buster.sh [--help|-h] [--nojenkins] [<port>]
> > > +
> > > +Install fuego on the host Debian filesystem.
> > > +
> > > +options:
> > > +     --help			Show usage help
> > > +     --nojenkins  		Install Fuego without Jenkins
> > > +HERE
> > > +}
> > > +
> > > +if [[ $EUID -ne 0 ]]; then
> > > +	echo "Sorry, you need root permissions"
> > > +	exit 1
> > > +fi
> > > +
> > > +nojenkins=0
> > > +
> > > +POSITIONAL=()
> > > +while [[ $# -gt 0 ]] ; do
> > > +  case $1 in
> > > +    --nojenkins)
> > > +      nojenkins=1
> > > +      shift
> > > +      ;;
> > > +    --help | -h)
> > > +      usage
> > > +      exit 0
> > > +      ;;
> > > +    *)
> > > +      POSITIONAL+=("$1") # save argument for later
> > > +      shift
> > > +  esac
> > > +done
> > > +set -- "${POSITIONAL[@]}" # restore positional arguments
> > > +
> > > +port=${2:-8090}
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Install Fuego dependencies
> > > +#
> > ================================================================
> > ==============
> > > +
> > > +mkdir -p /usr/share/man/man1
> > > +
> > > +# netperf is in non-free
> > > +echo deb http://deb.debian.org/debian buster main non-free >
> > /etc/apt/sources.list
> > > +echo deb http://security.debian.org/debian-security buster/updates main >>
> > /etc/apt/sources.list
> > > +
> > > +apt-get update -q=2
> > > +
> > > +# Fuego python dependencies
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	python-lxml python-simplejson python-yaml python-openpyxl \
> > > +	python-requests python-reportlab python-parsedatetime \
> > > +	python-pexpect python-pip python-setuptools python-wheel
> > > +pip install filelock
> > > +
> >
> > Can we put this stuff that is common between install-buster.sh and install-
> > stretch.sh
> > into an "install-debian-common.sh"?
> Yes, I will change this in my next patch.
> Thanks for suggesting it.
> 
> >
> > > +# Fuego command dependencies
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	git sshpass openssh-client sudo net-tools wget curl lava-tool \
> > > +	bash-completion iproute2
> > > +
> > > +# Default SDK for testing locally or on an x86 board
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	build-essential cmake bison flex kmod automake libtool \
> > > +	libelf-dev libssl-dev libsdl1.2-dev libcairo2-dev libxmu-dev \
> > > +	libxmuu-dev libglib2.0-dev libaio-dev pkg-config rsync u-boot-tools
> > > +
> > > +# Default test host dependencies
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	iperf iperf3 bzip2 bc python-matplotlib python-xmltodict \
> > > +	netpipe-tcp iputils-ping
> > > +pip install flake8
> > > +
> > > +# miscelaneous packages:
> > > +# python-serial - used by serio
> > > +# diffstat and vim - used by Tim
> > > +# time - useful for timing command duration
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +    python-serial \
> > > +    diffstat \
> > > +    vim \
> > > +    time
> > > +
> > > +# install packages used by NuttX SDK
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +    genromfs
> > > +
> > > +# bsdmainutils provides hexdump, which is needed for netperf test
> > > +#apt-get -q=2 -V --no-install-recommends install \
> > > +#	bsdmainutils
> > > +
> > > +echo "dash dash/sh boolean false" | debconf-set-selections
> > > +DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
> > > +
> > > +# TODO: check if proxy settings can set outside docker container
> > > +if [ -n "$http_proxy" ]; then
> > > +       sed -i -e 's/#use_proxy = on/use_proxy = on/g' /etc/wgetrc
> > > +       echo -e "http_proxy=$http_proxy\nhttps_proxy=$https_proxy" >>
> > /etc/environment
> > > +fi
> >
> > This doesn't seem specific to Debian (/etc/wgetrc and /etc/environment).
> > Should this be moved to an 'install-common.sh' script?
> Yes, this one too I will do in my next work.
> 
> >
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Install Jenkins
> > > +#
> > ================================================================
> > ==============
> > > +
> > > +if [ $nojenkins -eq 0 ]; then
> > > +	#JENKINS_VERSION=2.164.2
> > > +	#JENKINS_SHA=4536f43f61b1fca6c58bd91040fa09304eea96ab
> > > +	#JENKINS_VERSION=2.249.3
> > > +	#JENKINS_SHA=534014c007edbb533a1833fe6f2dc115faf3faa2
> > > +	JENKINS_VERSION=2.164.3
> > > +	JENKINS_SHA=27f14f0ccca207660765205317295a5c29f4dd53
> > > +	JENKINS_URL=https://pkg.jenkins.io/debian-
> > stable/binary/jenkins_${JENKINS_VERSION}_all.deb
> > > +	export JENKINS_UC=https://updates.jenkins.io
> > > +	REF=/var/lib/jenkins/plugins
> > > +	JENKINS_HOME=/var/lib/jenkins
> > > +	JENKINS_PORT=$port
> > > +
> > > +	# Jenkins dependencies
> > > +	apt-get -q=2 -V --no-install-recommends install \
> > > +		default-jdk daemon psmisc adduser procps unzip
> > > +	pip install python-jenkins==1.4.0
> > > +
> > > +	echo -e "JENKINS_PORT=$JENKINS_PORT" >> /etc/environment
> > > +	export JENKINS_PORT=$port
> > > +
> > > +	groupadd jenkins
> > > +	useradd -l -m -d "${JENKINS_HOME}" -g jenkins -G sudo -s /bin/bash
> > jenkins
> > > +
> > > +	wget -nv  ${JENKINS_URL}
> > > +	echo "${JENKINS_SHA} jenkins_${JENKINS_VERSION}_all.deb" |
> > sha1sum -c -
> > > +
> > > +	# allow Jenkins to start and install plugins, as part of dpkg installation
> > > +	printf "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
> > > +	dpkg -i jenkins_${JENKINS_VERSION}_all.deb
> > > +	rm jenkins_${JENKINS_VERSION}_all.deb
> > > +
> > > +	# fix for Jenkins Java version check error
> > > +	JAVA_VERSION_CHECK="\$\(\$JAVA -version 2\>\&1 \| sed -n \';s/.*
> > version
> > > \"\\\(.*\\\)\\\.\\\(.*\\\)\\\..\*\\\..\*\".\*\/\\\1\\\2\/p;\'\)"
> > > +	sed -i -e
> > "s#^JAVA_VERSION=.*#JAVA_VERSION\=\"${JAVA_VERSION_CHECK}\"#g"
> > /etc/init.d/jenkins
> > > +
> > > +	source /etc/default/jenkins && \
> > > +		JENKINS_ARGS="$JENKINS_ARGS --prefix=/fuego" && \
> > > +		sed -i -e
> > "s#JENKINS_ARGS.*#JENKINS_ARGS\=\"${JENKINS_ARGS}\"#g"
> > /etc/default/jenkins
> > > +
> > > +	source /etc/default/jenkins && \
> > > +		JAVA_ARGS="$JAVA_ARGS -
> > Djenkins.install.runSetupWizard=false -
> > > Dhudson.model.DirectoryBrowserSupport.allowSymlinkEscape=true" && \
> > > +		if [ -n "$http_proxy" ]; then \
> > > +			PROXYSERVER=$(echo $http_proxy | sed -E 's/^http://'
> > | sed -E 's/\///g' | sed -E 's/(.*):(.*)/\1/') && \
> > > +			PROXYPORT=$(echo $http_proxy | sed -E 's/^http://' |
> > sed -E 's/\///g' | sed -E 's/(.*):(.*)/\2/') && \
> > > +			JAVA_ARGS="$JAVA_ARGS -
> > Dhttp.proxyHost="${PROXYSERVER}" -Dhttp.proxyPort="${PROXYPORT}" -
> > > Dhttps.proxyHost="${PROXYSERVER}" -Dhttps.proxyPort="${PROXYPORT}; \
> > > +		fi && \
> > > +		sed -i -e "s#^JAVA_ARGS.*#JAVA_ARGS\=\"${JAVA_ARGS}\"#g"
> > /etc/default/jenkins;
> > > +
> > > +	sed -i -e "s#8080#$JENKINS_PORT#g" /etc/default/Jenkins
> >
> > The above looks like there's a lot of non-Debian-specific stuff intermingled with
> > Debian-specific stuff.
> > I'm not sure what other distributions are intended to be supported, but wouldn't
> > the user and
> > group manipulation be the same for those?
> >
> > > +
> > > +	# set up Jenkins plugins
> > > +	cp frontend-install/install-plugins.sh \
> > > +		frontend-install/jenkins-support \
> > > +		frontend-install/clitest \
> > > +		/usr/local/bin/
> > > +
> > > +	mkdir -p $JENKINS_HOME/userContent/docs
> > > +	cp frontend-install/config.xml $JENKINS_HOME/config.xml
> > > +	ln -s /fuego-rw/logs $JENKINS_HOME/userContent/fuego.logs
> > > +	cp docs/fuego-docs.pdf $JENKINS_HOME/userContent/docs/fuego-
> > docs.pdf
> > > +	cp frontend-install/jenkins.model.JenkinsLocationConfiguration.xml
> > > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > +	sed -i -e "s#8080#$JENKINS_PORT#g"
> > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > +	chown -R jenkins:jenkins $JENKINS_HOME/
> > > +
> > > +	# start and stop jenkins to pre-populate some settings
> > > +	service jenkins start && \
> > > +		sleep 30 && \
> > > +		service jenkins stop
> > > +
> > > +	# install other plugins from Jenkins update center
> > > +	# NOTE: not sure all of these are needed, but keep list
> > > +	# compatible with 1.2.1 release for now
> > > +	#/usr/local/bin/install-plugins.sh \
> > > +	#	ant:1.9 \
> > > +	#	antisamy-markup-formatter:1.5 \
> > > +	#	bouncycastle-api:2.17 \
> > > +	#	command-launcher:1.3 \
> > > +	#	description-setter:1.10 \
> > > +	#	display-url-api:2.3.1 \
> > > +	#	external-monitor-job:1.7 \
> > > +	#	greenballs:1.15 \
> > > +	#	icon-shim:2.0.3 \
> > > +	#	javadoc:1.5 \
> > > +	#	jdk-tool:1.2 \
> > > +	#	junit:1.27 \
> > > +	#	ldap:1.20 \
> > > +	#	mailer:1.23 \
> > > +	#	matrix-auth:2.3 \
> > > +	#	matrix-project:1.14 \
> > > +	#	pam-auth:1.4 \
> > > +	#	pegdown-formatter:1.3 \
> > > +	#	structs:1.17 \
> > > +	#	windows-slaves:1.4
> > > +
> > > +    # install plugins for latest LTS Jenkins (currently 2.249.3)
> > > +    /usr/local/bin/install-plugins.sh \
> > > +        script-security \
> > > +        structs \
> > > +        workflow-step-api \
> > > +        workflow-api \
> > > +        junit \
> > > +        scm-api \
> > > +        ant \
> > > +        antisamy-markup-formatter \
> > > +        bouncycastle-api \
> > > +        command-launcher \
> > > +        description-setter \
> > > +        display-url-api \
> > > +        external-monitor-job \
> > > +        greenballs \
> > > +        icon-shim \
> > > +        javadoc \
> > > +        jdk-tool \
> > > +        mailer \
> > > +        matrix-auth \
> > > +        matrix-project \
> > > +        pam-auth \
> > > +        pegdown-formatter \
> > > +        windows-slaves
> > > +
> > > +    cp frontend-install/plugins/flot-plotter-plugin/flot.hpi
> > $JENKINS_HOME/plugins/flot.jpi
> > > +
> > > +	# make the mod.js symlink well after flot is installed
> > > +	service jenkins start && sleep 30 && \
> > > +		rm $JENKINS_HOME/plugins/flot/flot/mod.js && \
> > > +		ln -s /fuego-core/scripts/mod.js
> > $JENKINS_HOME/plugins/flot/flot/mod.js
> > > +
> > > +	chown -R jenkins:jenkins $JENKINS_HOME/
> > > +fi
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# get ttc script and helpers
> > > +#
> > ================================================================
> > ==============
> > > +git clone https://github.com/tbird20d/ttc.git /usr/local/src/ttc
> > > +/usr/local/src/ttc/install.sh /usr/local/bin
> > > +perl -p -i -e "s#config_dir = \"/etc\"#config_dir = \"/fuego-ro/conf\"#"
> > /usr/local/bin/ttc
> > > +
> > The above and following are definitely not unique to Debian, or a specific
> > version of Debian.
> > They should be put into an "install-common.sh"
> >
> > > +#
> > ================================================================
> > ==============
> > > +# Serial Config
> > > +#
> > ================================================================
> > ==============
> > > +if [ $nojenkins -eq 0 ]; then
> > > +	/bin/bash -c 'git clone https://github.com/frowand/serio.git
> > /usr/local/src/serio ;  chown -R jenkins /usr/local/src/serio ; cp
> > > /usr/local/src/serio/serio /usr/local/bin/ ; ln -s /usr/local/bin/serio
> > /usr/local/bin/sercp ; ln -s /usr/local/bin/serio /usr/local/bin/sersh'
> > > +	/bin/bash -c 'git clone https://github.com/tbird20d/serlogin.git
> > /usr/local/src/serlogin ;  chown -R jenkins /usr/local/src/serlogin ;
> > > cp /usr/local/src/serlogin/serlogin /usr/local/bin'
> > > +else
> > > +	/bin/bash -c 'git clone https://github.com/frowand/serio.git
> > /usr/local/src/serio ;  cp /usr/local/src/serio/serio /usr/local/bin/ ; ln -
> > > s /usr/local/bin/serio /usr/local/bin/sercp ; ln -s /usr/local/bin/serio
> > /usr/local/bin/sersh'
> > > +	/bin/bash -c 'git clone https://github.com/tbird20d/serlogin.git
> > /usr/local/src/serlogin ;  cp /usr/local/src/serlogin/serlogin
> > > /usr/local/bin'
> > > +fi
> > > +cp frontend-install/0001-Fix-host-parsing-for-serial-device-with-in-
> > name.patch \
> > > +  frontend-install/0002-Output-data-from-port-during-command-
> > execution.patch \
> > > +  /tmp/
> > > +/bin/bash -c 'patch -d /usr/local/src/serio -p1 </tmp/0001-Fix-host-parsing-
> > for-serial-device-with-in-name.patch ; \
> > > +  patch -d /usr/local/src/serio -p1 </tmp/0002-Output-data-from-port-
> > during-command-execution.patch ;'
> > > +
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# get ebf script and helpers
> > > +#
> > ================================================================
> > ==============
> > > +apt-get -q=2 -V --no-install-recommends install jq
> > > +git clone https://github.com/TimesysGit/board-farm-rest-api.git
> > /usr/local/src/board-farm-rest-api
> > > +cp /usr/local/src/board-farm-rest-api/cli/ebf /usr/local/bin/ebf
> > > +chmod a+x /usr/local/bin/ebf
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# fserver
> > > +#
> > ================================================================
> > ==============
> > > +git clone https://github.com/tbird20d/fserver.git /usr/local/lib/fserver
> > > +ln -s /usr/local/lib/fserver/start_local_bg_server
> > /usr/local/bin/start_local_bg_server
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# ftc post installation
> > > +#
> > ================================================================
> > ==============
> > > +ln -s /fuego-core/scripts/ftc /usr/local/bin/
> > > +cp fuego-core/scripts/ftc_completion.sh /etc/bash_completion.d/ftc
> > > +echo ". /etc/bash_completion" >> /root/.bashrc
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Lava
> > > +#
> > ================================================================
> > ==============
> > > +ln -s /fuego-ro/scripts/fuego-lava-target-setup /usr/local/bin
> > > +ln -s /fuego-ro/scripts/fuego-lava-target-teardown /usr/local/bin
> > > diff --git a/install-debian.sh b/install-debian.sh
> > > index ccca032..2d3ffd3 100755
> > > --- a/install-debian.sh
> > > +++ b/install-debian.sh
> > > @@ -2,102 +2,163 @@
> > >  # 2019 (c) Toshiba corp. <[email protected]>
> > >  #
> > >  # Usage:
> > > -#  $ sudo ./install-debian.sh [--help|-h] [--nojenkins] [<port>]
> > > +#  $ sudo ./install-debian.sh [--help|-h] [-s <suite>] [-p <jenkins port>] [--
> > nojenkins]
> > >  #
> > > -if [ -n "$1" ]; then
> > > -	if [ "$1" = "--help" -o "$1" = "-h" ]; then
> > > -		cat <<HERE
> > > -Usage: sudo ./install-debian.sh [--help|-h] [--nojenkins] [<port>]
> > > -
> > > -Installs fuego on the host Debian filesystem.
> > > -
> > > -options:
> > > - --help       Show usage help
> > > - --nojenkins  Install Fuego without Jenkins
> > > -HERE
> > > -		exit 0
> > > -	fi
> > > -fi
> > > +
> > > +usage(){
> > > +	echo ""
> > > +	echo "Usage: sudo ./install-debian.sh [--help|-h] [-s <suite>] [-p <jenkins
> > port>] [--nojenkins]"
> > > +	echo "Install fuego on Debian filesystem."
> > > +	echo ""
> > > +	echo "options:"
> > > +	echo "	--help  | -h		Show usage help"
> > > +	echo "	--suite | -s <suite>	Specify Debian suite"
> > > +	echo "	--port  | -p <port>	Jenkins port"
> > > +	echo "	--nojenkins		Install Fuego without Jenkins"
> > > +	echo ""
> > > +}
> > >
> > >  if [[ $EUID -ne 0 ]]; then
> > >  	echo "Sorry, you need root permissions"
> > >  	exit 1
> > >  fi
> > >
> > > -if [ "$1" = "--nojenkins" ]; then
> > > -	nojenkins=1
> > > +nojenkins=0
> > > +port=8090
> > > +suite=stretch
> > > +user=jenkins
> > > +group=jenkins
> > > +uid=1000
> > > +gid=1000
> > > +
> > > +while [ "$1" != "" ]; do
> > > +	case $1 in
> > > +		-s | --suite )
> > > +			shift
> > > +			suite=$1
> > > +			;;
> > > +		-p | --port )
> > > +			shift
> > > +			port=$1
> > > +			;;
> > > +		-u | --uid )
> > > +			shift
> > > +			uid=$1
> > > +			;;
> > > +		-g | --gid )
> > > +			shift
> > > +			gid=$1
> > > +			;;
> > > +		--nojenkins )
> > > +			nojenkins=1
> > > +			;;
> > > +		-h | --help )
> > > +			usage
> > > +			exit 0
> > > +			;;
> > > +		* )
> > > +			break
> > > +	esac
> > >  	shift
> > > -else
> > > -	nojenkins=0
> > > -	port=${1:-8090}
> > > -fi
> > > +done
> > >
> > >  #
> > ================================================================
> > ==============
> > >  # Install Fuego dependencies
> > >  #
> > ================================================================
> > ==============
> > >
> > >  # netperf is in non-free
> > > -echo deb http://deb.debian.org/debian stretch main non-free >
> > /etc/apt/sources.list
> > > -echo deb http://security.debian.org/debian-security stretch/updates main >>
> > /etc/apt/sources.list
> > > -
> > > -apt-get update -q=2
> > > +echo deb http://deb.debian.org/debian $suite main non-free >
> > /etc/apt/sources.list
> > > +echo deb http://security.debian.org/debian-security $suite/updates main >>
> > /etc/apt/sources.list
> > >
> > >  # Fuego python dependencies
> > > -apt-get -q=2 -V --no-install-recommends install \
> > > +# - python-lxml: ftc, loggen
> > > +# - python-simplejson: ftc
> > > +# - python-yaml: ftc
> > > +# - python-openpyxl: ftc (also LTP)
> > > +# - python-requests: ftc (also fuego_release_test)
> > > +# - python-reportlab: ftc
> > > +# - python-parsedatetime: ftc
> > > +# - python-pexpect: ssh_exec (part of ttc)
> > > +# - python-pip: to install filelock, flake8
> > > +# - filelock: parser
> > > +mkdir -p /usr/share/man/man1
> > > +apt-get update -q=2 && apt-get -q=2 -V --no-install-recommends install \
> > >  	python-lxml python-simplejson python-yaml python-openpyxl \
> > >  	python-requests python-reportlab python-parsedatetime \
> > > -	python-pip
> > > +	python-pexpect python-pip python-setuptools python-wheel
> > >  pip install filelock
> > >
> > >  # Fuego command dependencies
> > >  apt-get -q=2 -V --no-install-recommends install \
> > >  	git sshpass openssh-client sudo net-tools wget curl lava-tool \
> > > -	bash-completion
> > > +	bash-completion iproute2
> > >
> > >  # Default SDK for testing locally or on an x86 board
> > >  apt-get -q=2 -V --no-install-recommends install \
> > >  	build-essential cmake bison flex automake kmod libtool \
> > >  	libelf-dev libssl-dev libsdl1.2-dev libcairo2-dev libxmu-dev \
> > > -	libxmuu-dev libglib2.0-dev libaio-dev u-boot-tools pkg-config
> > > +	libxmuu-dev libglib2.0-dev libaio-dev pkg-config rsync u-boot-tools
> > >
> > >  # Default test host dependencies
> > > +# - iperf iperf3 netperf: used as servers on the host
> > > +# - bzip2 bc: used for local tests by Functional.bzip2/bc
> > > +# - python-matplotlib: Benchmark.iperf3 parser
> > > +# - python-xmltodict: AGL tests
> > > +# - flake8: Functional.fuego_lint
> > > +# - netpipe-tcp - used by Benchmark.netpipe (provides the netpipe server)
> > > +# - iputils-ping - for /bin/ping command, used by some tests
> > > +# FIXTHIS: install dependencies dynamically on the tests that need them
> > >  apt-get -q=2 -V --no-install-recommends install \
> > > -	iperf iperf3 netperf bzip2 bc python-matplotlib python-xmltodict
> > > -pip install flake8 bsdmainutils
> > > +	iperf iperf3 bzip2 bc python-matplotlib python-xmltodict \
> > > +	netpipe-tcp iputils-ping
> > >
> > > -echo "dash dash/sh boolean false" | debconf-set-selections
> > > -DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
> > > -if [ -n "$http_proxy" ]; then
> > > -	sed -i -e 's/#use_proxy = on/use_proxy = on/g' /etc/wgetrc
> > > -	echo -e "http_proxy=$http_proxy\nhttps_proxy=$https_proxy" >>
> > /etc/environment
> > > +#TODO: find alternate package for netperf in buster version
> > > +if [ $suite != "buster" ];then
> > > +	apt-get -q=2 -V --no-install-recommends install netperf
> > >  fi
> > > +pip install flake8
> > >
> > > -#
> > ================================================================
> > ==============
> > > -# Clone fuego and fuego-core
> > > -#
> > ================================================================
> > ==============
> > > -if [ ! -d "/fuego" ]; then
> > > -	cd /
> > > -	git clone --branch next --depth=1
> > https://bitbucket.org/nirrognas/fuego.git
> > > -	ln -s /fuego/fuego-ro /fuego-ro
> > > -	ln -s /fuego/fuego-rw /fuego-rw
> > > -	cd fuego
> > > -	git clone --branch next --depth=1
> > https://bitbucket.org/nirrognas/fuego-core.git
> > > -	ln -s /fuego/fuego-core /fuego-core
> > > -fi
> > > +# miscelaneous packages:
> > > +# python-serial - used by serio
> > > +# diffstat and vim - used by Tim
> > > +# time - useful for timing command duration
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +    python-serial \
> > > +    diffstat \
> > > +    vim \
> > > +    time
> > > +
> > > +# install packages used by NuttX SDK
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +    genromfs
> > > +
> > > +# FIXTHIS: determine if these tools are really necessary
> > > +#RUN apt-get -q=2 -V --no-install-recommends install \
> > > +#	apt-utils python-paramiko \
> > > +#	xmlstarlet rsync \
> > > +#	inotify-tools gettext netpipe-tcp \
> > > +#	at minicom lzop bsdmainutils \
> > > +#	mc netcat openssh-server
> > > +
> > > +# bsdmainutils provides hexdump, which is needed for netperf test
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	bsdmainutils
> > > +
> > > +echo "dash dash/sh boolean false" | debconf-set-selections
> > > +DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
> > >
> > >  #
> > ================================================================
> > ==============
> > >  # Install Jenkins
> > >  #
> > ================================================================
> > ==============
> > > -
> > >  if [ $nojenkins -eq 0 ]; then
> > >  	#JENKINS_VERSION=2.164.2
> > >  	#JENKINS_SHA=4536f43f61b1fca6c58bd91040fa09304eea96ab
> > >  	JENKINS_VERSION=2.249.3
> > >  	JENKINS_SHA=534014c007edbb533a1833fe6f2dc115faf3faa2
> > >  	JENKINS_URL=https://pkg.jenkins.io/debian-
> > stable/binary/jenkins_${JENKINS_VERSION}_all.deb
> > > -	JENKINS_UC=https://updates.jenkins.io
> > > -	REF=/var/lib/jenkins/plugins
> > > -	JENKINS_HOME=/var/lib/jenkins
> > > +	export JENKINS_UC=https://updates.jenkins.io
> > > +	export REF=/var/lib/jenkins/plugins
> > > +	export JENKINS_HOME=/var/lib/jenkins
> > >  	JENKINS_PORT=$port
> > >
> > >  	# Jenkins dependencies
> > > @@ -106,10 +167,12 @@ if [ $nojenkins -eq 0 ]; then
> > >  	pip install python-jenkins==1.4.0
> > >
> > >  	echo -e "JENKINS_PORT=$JENKINS_PORT" >> /etc/environment
> > > -	groupadd jenkins
> > > -	useradd -l -m -d "${JENKINS_HOME}" -g jenkins -G sudo -s /bin/bash
> > jenkins
> > > -	cd
> > > -	wget ${JENKINS_URL}
> > > +	export JENKINS_PORT=$port
> > > +
> > > +	getent group ${gid} >/dev/null || groupadd -g ${gid} ${group}
> > > +	useradd -l -m -d "${JENKINS_HOME}" -u ${uid} -g ${gid} -G sudo -s
> > /bin/bash ${user}
> > > +
> > > +	wget -nv ${JENKINS_URL}
> > >  	echo "${JENKINS_SHA} jenkins_${JENKINS_VERSION}_all.deb" |
> > sha1sum -c -
> > >
> > >  	# allow Jenkins to start and install plugins, as part of dpkg installation
> > > @@ -117,11 +180,60 @@ if [ $nojenkins -eq 0 ]; then
> > >  	dpkg -i jenkins_${JENKINS_VERSION}_all.deb
> > >  	rm jenkins_${JENKINS_VERSION}_all.deb
> > >
> > > -	# update ownership
> > > -	chown -R jenkins:jenkins /fuego
> > > -	chown -R jenkins:jenkins /fuego-ro
> > > -	chown -R jenkins:jenkins /fuego-rw
> > > -	chown -R jenkins:jenkins /fuego-core
> > > +fi
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# get ttc script and helpers
> > > +#
> > ================================================================
> > ==============
> > > +git clone https://github.com/tbird20d/ttc.git /usr/local/src/ttc
> > > +/usr/local/src/ttc/install.sh /usr/local/bin
> > > +# as of ttc version 2.0.2, this should not be needed
> > > +#perl -p -i -e "s#config_dir = \"/etc\"#config_dir = \"/fuego-ro/conf\"#"
> > /usr/local/bin/ttc
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# get ebf script and helpers
> > > +#
> > ================================================================
> > ==============
> > > +if [ $nojenkins -eq 0 ]; then
> > > +	apt-get -q=2 -V --no-install-recommends install jq
> > > +	git clone https://github.com/TimesysGit/board-farm-rest-api.git
> > /usr/local/src/board-farm-rest-api
> > > +	cp /usr/local/src/board-farm-rest-api/cli/ebf /usr/local/bin/ebf
> > > +	chmod a+x /usr/local/bin/ebf
> > > +fi
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Serial Config
> > > +#
> > ================================================================
> > ==============
> > > +git clone https://github.com/frowand/serio.git /usr/local/src/serio
> > > +if [ $nojenkins -eq 0 ]; then
> > > +	cp frontend-install/0001-Fix-host-parsing-for-serial-device-with-in-
> > name.patch \
> > > +		frontend-install/0002-Output-data-from-port-during-command-
> > execution.patch \
> > > +		/tmp/
> > > +	patch -d /usr/local/src/serio -p1 </tmp/0001-Fix-host-parsing-for-
> > serial-device-with-in-name.patch
> > > +	patch -d /usr/local/src/serio -p1 </tmp/0002-Output-data-from-port-
> > during-command-execution.patch
> > > +	chown -R jenkins /usr/local/src/serio
> > > +fi
> > > +cp /usr/local/src/serio/serio /usr/local/bin/
> > > +ln -s /usr/local/bin/serio /usr/local/bin/sercp
> > > +ln -s /usr/local/bin/serio /usr/local/bin/sersh
> > > +
> > > +git clone https://github.com/tbird20d/serlogin.git /usr/local/src/serlogin
> > > +[ $nojenkins -eq 0 ] && chown -R jenkins /usr/local/src/serlogin
> > > +cp /usr/local/src/serlogin/serlogin /usr/local/bin
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# fserver
> > > +#
> > ================================================================
> > ==============
> > > +git clone https://github.com/tbird20d/fserver.git /usr/local/lib/fserver
> > > +ln -s /usr/local/lib/fserver/start_local_bg_server
> > /usr/local/bin/start_local_bg_server
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Jenkins post installation
> > > +#
> > ================================================================
> > ==============
> > > +if [ $nojenkins -eq 0 ]; then
> > > +
> > > +	# Fix jenkins issue, Java version check fails when java version is 11
> > > +	JAVA_VERSION_CHECK="\$\(\$JAVA -version 2\>\&1 \| sed -n \';s/.*
> > version \"\\\(\[^.-\]*\\\)\\\.\\\(\[^.-
> > > \]*\\\).*\\\".*/\\\1\\\2\/p;')"
> > > +	sed -i -e
> > "s#^JAVA_VERSION=.*#JAVA_VERSION\=\"${JAVA_VERSION_CHECK}\"#g"
> > /etc/init.d/jenkins
> > >
> > >  	source /etc/default/jenkins && \
> > >  		JENKINS_ARGS="$JENKINS_ARGS --prefix=/fuego" && \
> > > @@ -138,116 +250,107 @@ if [ $nojenkins -eq 0 ]; then
> > >
> > >  	sed -i -e "s#8080#$JENKINS_PORT#g" /etc/default/jenkins
> > >
> > > -	cp /fuego/frontend-install/install-plugins.sh \
> > > -		/fuego/frontend-install/jenkins-support \
> > > -		/fuego/frontend-install/clitest \
> > > +	# set up Jenkins plugins
> > > +	cp frontend-install/install-plugins.sh \
> > > +		frontend-install/jenkins-support \
> > > +		frontend-install/clitest \
> > >  		/usr/local/bin/
> > >
> > > -	cp /fuego/frontend-install/config.xml $JENKINS_HOME/config.xml
> > > -	ln -s /fuego-rw/logs $JENKINS_HOME/userContent/fuego.logs
> > > -	mkdir $JENKINS_HOME/userContent/docs
> > > -	cp /fuego/docs/fuego-docs.pdf
> > $JENKINS_HOME/userContent/docs/fuego-docs.pdf
> > > -	jenkins cp /fuego/frontend-
> > install/jenkins.model.JenkinsLocationConfiguration.xml
> > > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > -	sed -i -e "s#8080#$JENKINS_PORT#g"
> > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > -	chown -R jenkins:jenkins $JENKINS_HOME/
> > > -
> > >  	# start and stop jenkins to pre-populate some settings
> > >  	service jenkins start && \
> > >  		sleep 30 && \
> > >  		service jenkins stop
> > >
> > > +	# install plugins - these versions are for Jenkins version 2.164.2
> > > +	# Explicitly install script-security v1.68, otherwise
> > > +	# v1.74 will automatically be installed as a dependency of
> > > +	# the junit plugin. Make sure to install before junit plugin.
> > > +	# Explicitly install junit:1.27
> > > +
> > >  	# install other plugins from Jenkins update center
> > >  	# NOTE: not sure all of these are needed, but keep list
> > > -	# compatible with 1.2.1 release for now
> > > -	#/usr/local/bin/install-plugins.sh \
> > > -	#	ant:1.9 \
> > > -	#	antisamy-markup-formatter:1.5 \
> > > -	#	bouncycastle-api:2.17 \
> > > -	#	command-launcher:1.3 \
> > > -	#	description-setter:1.10 \
> > > -	#	display-url-api:2.3.1 \
> > > -	#	external-monitor-job:1.7 \
> > > -	#	greenballs:1.15 \
> > > -	#	icon-shim:2.0.3 \
> > > -	#	javadoc:1.5 \
> > > -	#	jdk-tool:1.2 \
> > > -	#	junit:1.27 \
> > > -	#	ldap:1.20 \
> > > -	#	mailer:1.23 \
> > > -	#	matrix-auth:2.3 \
> > > -	#	matrix-project:1.14 \
> > > -	#	pam-auth:1.4 \
> > > -	#	pegdown-formatter:1.3 \
> > > -	#	structs:1.17 \
> > > -	#	windows-slaves:1.4
> > > -
> > > -    # install plugins for latest LTS Jenkins (currently 2.249.3)
> > > -    /usr/local/bin/install-plugins.sh \
> > > -        script-security \
> > > -        structs \
> > > -        workflow-step-api \
> > > -        workflow-api \
> > > -        junit \
> > > -        scm-api \
> > > -        ant \
> > > -        antisamy-markup-formatter \
> > > -        bouncycastle-api \
> > > -        command-launcher \
> > > -        description-setter \
> > > -        display-url-api \
> > > -        external-monitor-job \
> > > -        greenballs \
> > > -        icon-shim \
> > > -        javadoc \
> > > -        jdk-tool \
> > > -        mailer \
> > > -        matrix-auth \
> > > -        matrix-project \
> > > -        pam-auth \
> > > -        pegdown-formatter \
> > > -        windows-slaves
> > > -
> > > -    cp frontend-install/plugins/flot-plotter-plugin/flot.hpi
> > $JENKINS_HOME/plugins/flot.jpi
> > > +	# as compatible as possible with 1.2.1 release for now
> > > +	# Do NOT change the order of the plugins, unless you know what
> > > +	# you are doing.  Otherwise, the install-plugins.sh script will
> > > +	# install the wrong versions of other plugins based on dependency
> > > +	# information in the plugin files.
> > >
> > > +	#/usr/local/bin/install-plugins.sh \
> > > +	#    script-security:1.68 \
> > > +	#    structs:1.20 \
> > > +	#    workflow-step-api:2.22 \
> > > +	#    workflow-api:2.40 \
> > > +	#    junit:1.27 \
> > > +	#    scm-api:2.6.3 \
> > > +	#    ant:1.9 \
> > > +	#    antisamy-markup-formatter:1.5 \
> > > +	#    bouncycastle-api:2.17 \
> > > +	#    command-launcher:1.3 \
> > > +	#    description-setter:1.10 \
> > > +	#    display-url-api:2.3.1 \
> > > +	#    external-monitor-job:1.7 \
> > > +	#    greenballs:1.15 \
> > > +	#    icon-shim:2.0.3 \
> > > +	#    javadoc:1.5 \
> > > +	#    jdk-tool:1.2 \
> > > +	#    ldap:1.20 \
> > > +	#    mailer:1.23 \
> > > +	#    matrix-auth:2.3 \
> > > +	#    matrix-project:1.14 \
> > > +	#    pam-auth:1.5 \
> > > +	#    pegdown-formatter:1.3 \
> > > +	#    windows-slaves:1.4
> > > +
> > > +	# install plugins for latest LTS Jenkins (currently 2.249.3)
> > > +	/usr/local/bin/install-plugins.sh \
> > > +		script-security \
> > > +		structs \
> > > +		workflow-step-api \
> > > +		workflow-api \
> > > +		junit \
> > > +		scm-api \
> > > +		ant \
> > > +		antisamy-markup-formatter \
> > > +		bouncycastle-api \
> > > +		command-launcher \
> > > +		description-setter \
> > > +		display-url-api \
> > > +		external-monitor-job \
> > > +		greenballs \
> > > +		icon-shim \
> > > +		javadoc \
> > > +		jdk-tool \
> > > +		mailer \
> > > +		matrix-auth \
> > > +		matrix-project \
> > > +		pam-auth \
> > > +		pegdown-formatter \
> > > +		windows-slaves
> > > +
> > > +	cp frontend-install/plugins/flot-plotter-plugin/flot.hpi
> > $JENKINS_HOME/plugins/flot.jpi
> > > +
> > > +	# jenkins should automatically unzip any plugins in the plugin dir
> > >  	# make the mod.js symlink well after flot is installed
> > >  	service jenkins start && sleep 30 && \
> > >  		rm $JENKINS_HOME/plugins/flot/flot/mod.js && \
> > >  		ln -s /fuego-core/scripts/mod.js
> > $JENKINS_HOME/plugins/flot/flot/mod.js
> > >
> > > -	chown -R jenkins:jenkins $JENKINS_HOME/
> > > -else
> > > -	sed -i -e 's/jenkins_enabled=1/jenkins_enabled=0/g' /fuego-
> > ro/conf/fuego.conf
> > > -fi
> > > +	mkdir -p $JENKINS_HOME/userContent/docs
> > > +	ln -s /fuego-rw/logs $JENKINS_HOME/userContent/fuego.logs
> > > +	cp docs/fuego-docs.pdf $JENKINS_HOME/userContent/docs/fuego-
> > docs.pdf
> > >
> > > -#
> > ================================================================
> > ==============
> > > -# get ttc script and helpers
> > > -#
> > ================================================================
> > ==============
> > > -git clone https://github.com/tbird20d/ttc.git /usr/local/src/ttc
> > > -/usr/local/src/ttc/install.sh /usr/local/bin
> > > -perl -p -i -e "s#config_dir = \"/etc\"#config_dir = \"/fuego-ro/conf\"#"
> > /usr/local/bin/ttc
> > > +	cp frontend-install/config.xml $JENKINS_HOME/config.xml
> > > +	cp frontend-install/jenkins.model.JenkinsLocationConfiguration.xml
> > > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > +	sed -i -e "s#8080#$JENKINS_PORT#g"
> > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > >
> > > -#
> > ================================================================
> > ==============
> > > -# Serial Config
> > > -#
> > ================================================================
> > ==============
> > > -if [ $nojenkins -eq 0 ]; then
> > > -	/bin/bash -c 'git clone https://github.com/frowand/serio.git
> > /usr/local/src/serio ;  chown -R jenkins /usr/local/src/serio ; cp
> > > /usr/local/src/serio/serio /usr/local/bin/ ; ln -s /usr/local/bin/serio
> > /usr/local/bin/sercp ; ln -s /usr/local/bin/serio /usr/local/bin/sersh'
> > > -	/bin/bash -c 'git clone https://github.com/tbird20d/serlogin.git
> > /usr/local/src/serlogin ;  chown -R jenkins /usr/local/src/serlogin ;
> > > cp /usr/local/src/serlogin/serlogin /usr/local/bin'
> > > -else
> > > -	/bin/bash -c 'git clone https://github.com/frowand/serio.git
> > /usr/local/src/serio ;  cp /usr/local/src/serio/serio /usr/local/bin/ ; ln -
> > > s /usr/local/bin/serio /usr/local/bin/sercp ; ln -s /usr/local/bin/serio
> > /usr/local/bin/sersh'
> > > -	/bin/bash -c 'git clone https://github.com/tbird20d/serlogin.git
> > /usr/local/src/serlogin ;  cp /usr/local/src/serlogin/serlogin
> > > /usr/local/bin'
> > > +	chown -R jenkins:jenkins $JENKINS_HOME/
> > >  fi
> > >
> > > -#
> > ================================================================
> > ==============
> > > -# fserver
> > > -#
> > ================================================================
> > ==============
> > > -git clone https://github.com/tbird20d/fserver.git /usr/local/lib/fserver
> > > -ln -s /usr/local/lib/fserver/start_local_bg_server
> > /usr/local/bin/start_local_bg_server
> > > -
> > >  #
> > ================================================================
> > ==============
> > >  # ftc post installation
> > >  #
> > ================================================================
> > ==============
> > >  ln -s /fuego-core/scripts/ftc /usr/local/bin/
> > > -cp /fuego-core/scripts/ftc_completion.sh /etc/bash_completion.d/ftc
> > > +cp fuego-core/scripts/ftc_completion.sh /etc/bash_completion.d/ftc
> > >  echo ". /etc/bash_completion" >> /root/.bashrc
> > >
> > >  #
> > ================================================================
> > ==============
> > > @@ -255,14 +358,3 @@ echo ". /etc/bash_completion" >> /root/.bashrc
> > >  #
> > ================================================================
> > ==============
> > >  ln -s /fuego-ro/scripts/fuego-lava-target-setup /usr/local/bin
> > >  ln -s /fuego-ro/scripts/fuego-lava-target-teardown /usr/local/bin
> > > -
> > > -#
> > ================================================================
> > ==============
> > > -# Small guide
> > > -#
> > ================================================================
> > ==============
> > > -echo "Run 'service netperf start' to start a netperf server"
> > > -echo "Run 'iperf3 -V -s -D -f M' to start an iperf3 server"
> > > -echo "Run 'ftc list-boards' to see the available boards"
> > > -echo "Run 'ftc list-tests' to see the available tests"
> > > -echo "Run 'ftc run-test -b local -t Functional.hello_world' to run a hello
> > world"
> > > -echo "Run 'ftc run-test -b local -t Benchmark.Dhrystone -s 500M' to run
> > Dhrystone"
> > > -echo "Run 'ftc gen-report' to get results"
> > > diff --git a/install-fuego.sh b/install-fuego.sh
> > > new file mode 100755
> > > index 0000000..7b3e010
> > > --- /dev/null
> > > +++ b/install-fuego.sh
> > > @@ -0,0 +1,109 @@
> > > +#!/bin/bash
> > > +# 2019 (c) Toshiba corp. <[email protected]>
> > > +#
> > > +# Usage:
> > > +#  $ sudo ./install-fuego.sh [--help|-h] [-d <distribution>] [-s <suite>] [-p
> > <jenkins port>] [--nojenkins]
> > > +#
> > > +
> > > +usage(){
> > > +        echo ""
> > > +        echo "Usage: sudo ./install-fuego.sh [--help|-h] [-d <distribution>] [-s
> > <suite>] [-p <jenkins port>] [--nojenkins]"
> > > +        echo "Install fuego on Debian filesystem."
> > > +        echo ""
> > > +        echo "options:"
> > > +        echo "  --help  | -h            	Show usage help"
> > > +        echo "  --dist | -d <distribution>	Specify distribution"
> > > +        echo "  --suite | -s <suite>    	Specify suite"
> > > +        echo "  --port  | -p <port>     	Jenkins port"
> > > +        echo "  --nojenkins             	Install Fuego without Jenkins"
> > > +        echo ""
> > > +}
> > > +
> > > +if [[ $EUID -ne 0 ]]; then
> > > +        echo "Sorry, you need root permissions"
> > > +        exit 1
> > > +fi
> > > +
> > > +nojenkins=
> > > +port=8090
> > > +dist=debian
> > > +suite=stretch
> > > +fuego_dir=$(pwd)
> > > +
> > > +while [ "$1" != "" ]; do
> > > +        case $1 in
> > > +                -d | --dist )
> > > +                        shift
> > > +                        dist=$1
> > > +                        ;;
> > > +                -s | --suite )
> > > +                        shift
> > > +                        suite=$1
> > > +                        ;;
> > > +                -p | --port )
> > > +                        shift
> > > +                        port=$1
> > > +                        ;;
> > > +                --nojenkins )
> > > +                        nojenkins="--nojenkins"
> > > +                        ;;
> > > +                -h | --help )
> > > +                        usage
> > > +                        exit 0
> > > +                        ;;
> > > +                * )
> > > +                        break
> > > +        esac
> > > +        shift
> > > +done
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Clone fuego-core
> > > +#
> > ================================================================
> > ==============
> > > +if [ ! -f "fuego-core/scripts/ftc" ]; then
> > > +	# set fuego-core branch to same as current fuego branch
> > > +	# get current git branch
> > > +	set -o noglob
> > > +	while IFS=" " read -r part1 part2 ; do
> > > +		if [ $part1 = "*" ] ; then
> > > +			branch=$part2
> > > +		fi
> > > +	done < <(git branch)
> > > +	set +o noglob
> > > +	git clone -b $branch https://bitbucket.org/fuegotest/fuego-core.git
> > > +fi
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Install fuego on host system
> > > +#
> > ================================================================
> > ==============
> > > +./install-$dist.sh -s $suite -p $port $nojenkins
> > > +
> > > +systemctl daemon-reload
> > > +service jenkins restart
> > > +
> > > +# provide permission to current user
> > > +usermod -aG jenkins $USER
> > > +chmod -R 775 $fuego_dir/fuego-rw
> > > +
> > > +chown -R jenkins:jenkins $fuego_dir/fuego-ro
> > > +chown -R jenkins:jenkins $fuego_dir/fuego-rw
> > > +chown -R jenkins:jenkins $fuego_dir/fuego-core
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Create Links to fuego folders
> > > +#
> > ================================================================
> > ==============
> > > +ln -s $fuego_dir/fuego-ro /
> > > +ln -s $fuego_dir/fuego-rw /
> > > +ln -s $fuego_dir/fuego-core /
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Small guide
> > > +#
> > ================================================================
> > ==============
> > > +echo "Logout and Login current user session to work properly"
> > > +echo "Run 'service netperf start' to start a netperf server"
> > > +echo "Run 'iperf3 -V -s -D -f M' to start an iperf3 server"
> > > +echo "Run 'ftc list-boards' to see the available boards"
> > > +echo "Run 'ftc list-tests' to see the available tests"
> > > +echo "Run 'ftc run-test -b local -t Functional.hello_world' to run a hello
> > world"
> > > +echo "Run 'ftc run-test -b local -t Benchmark.Dhrystone -s 500M' to run
> > Dhrystone"
> > > +echo "Run 'ftc gen-report' to get results"
> > > diff --git a/install-stretch.sh b/install-stretch.sh
> > > new file mode 100755
> > > index 0000000..4f6f724
> > > --- /dev/null
> > > +++ b/install-stretch.sh
> > > @@ -0,0 +1,288 @@
> > > +#!/bin/bash
> > > +# 2019 (c) Toshiba corp. <[email protected]>
> > > +#
> > > +# Usage:
> > > +#  $ sudo ./install-<debian-suit>.sh [--help|-h] [--nojenkins] [<port>]
> > > +#
> > > +usage(){
> > > +
> > > +cat <<HERE
> > > +Usage: sudo ./install-<debian-suit>.sh [--help|-h] [--nojenkins] [<port>]
> > > +
> > > +Install fuego on the host Debian filesystem.
> > > +
> > > +options:
> > > +     --help			Show usage help
> > > +     --nojenkins  		Install Fuego without Jenkins
> > > +HERE
> > > +}
> > > +
> > > +if [[ $EUID -ne 0 ]]; then
> > > +	echo "Sorry, you need root permissions"
> > > +	exit 1
> > > +fi
> > > +
> > > +nojenkins=0
> > > +
> > > +POSITIONAL=()
> > > +while [[ $# -gt 0 ]] ; do
> > > +  case $1 in
> > > +    --nojenkins)
> > > +      nojenkins=1
> > > +      shift
> > > +      ;;
> > > +    --help | -h)
> > > +      usage
> > > +      exit 0
> > > +      ;;
> > > +    *)
> > > +      POSITIONAL+=("$1") # save argument for later
> > > +      shift
> > > +  esac
> > > +done
> > > +set -- "${POSITIONAL[@]}" # restore positional arguments
> > > +
> > > +port=${2:-8090}
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Install Fuego dependencies
> > > +#
> > ================================================================
> > ==============
> > > +
> > > +mkdir -p /usr/share/man/man1
> > > +
> > > +# netperf is in non-free
> > > +echo deb http://deb.debian.org/debian stretch main non-free >
> > /etc/apt/sources.list
> > > +echo deb http://security.debian.org/debian-security stretch/updates main >>
> > /etc/apt/sources.list
> > > +
> > > +apt-get update -q=2
> > > +
> > > +# Fuego python dependencies
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	python-lxml python-simplejson python-yaml python-openpyxl \
> > > +	python-requests python-reportlab python-parsedatetime \
> > > +	python-pexpect python-pip python-setuptools python-wheel
> > > +pip install filelock
> > > +
> > > +# Fuego command dependencies
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	git sshpass openssh-client sudo net-tools wget curl lava-tool \
> > > +	bash-completion iproute2
> > > +
> > > +# Default SDK for testing locally or on an x86 board
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	build-essential cmake bison flex kmod automake libtool \
> > > +	libelf-dev libssl-dev libsdl1.2-dev libcairo2-dev libxmu-dev \
> > > +	libxmuu-dev libglib2.0-dev libaio-dev pkg-config rsync u-boot-tools
> > > +
> > > +# Default test host dependencies
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	iperf iperf3 netperf bzip2 bc python-matplotlib python-xmltodict \
> > > +	netpipe-tcp iputils-ping
> > > +pip install flake8
> > > +
> > > +# miscelaneous packages:
> > > +# python-serial - used by serio
> > > +# diffstat and vim - used by Tim
> > > +# time - useful for timing command duration
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +    python-serial \
> > > +    diffstat \
> > > +    vim \
> > > +    time
> > > +
> > > +# install packages used by NuttX SDK
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +    genromfs
> > > +
> > > +# bsdmainutils provides hexdump, which is needed for netperf test
> > > +apt-get -q=2 -V --no-install-recommends install \
> > > +	bsdmainutils
> > > +
> > > +echo "dash dash/sh boolean false" | debconf-set-selections
> > > +DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
> > > +
> > > +# TODO: check if proxy settings can set outside docker container
> > > +#if [ -n "$http_proxy" ]; then
> > > +#       sed -i -e 's/#use_proxy = on/use_proxy = on/g' /etc/wgetrc
> > > +#       echo -e "http_proxy=$http_proxy\nhttps_proxy=$https_proxy" >>
> > /etc/environment
> > > +#fi
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Install Jenkins
> > > +#
> > ================================================================
> > ==============
> > > +
> > > +if [ $nojenkins -eq 0 ]; then
> > > +	#JENKINS_VERSION=2.164.2
> > > +	#JENKINS_SHA=4536f43f61b1fca6c58bd91040fa09304eea96ab
> > > +	JENKINS_VERSION=2.249.3
> > > +	JENKINS_SHA=534014c007edbb533a1833fe6f2dc115faf3faa2
> > > +	JENKINS_URL=https://pkg.jenkins.io/debian-
> > stable/binary/jenkins_${JENKINS_VERSION}_all.deb
> > > +	export JENKINS_UC=https://updates.jenkins.io
> > > +	REF=/var/lib/jenkins/plugins
> > > +	JENKINS_HOME=/var/lib/jenkins
> > > +	JENKINS_PORT=$port
> > > +
> > > +	# Jenkins dependencies
> > > +	apt-get -q=2 -V --no-install-recommends install \
> > > +		default-jdk daemon psmisc adduser procps unzip
> > > +	pip install python-jenkins==1.4.0
> > > +
> > > +	echo -e "JENKINS_PORT=$JENKINS_PORT" >> /etc/environment
> > > +	export JENKINS_PORT=$port
> > > +
> > > +	groupadd jenkins
> > > +	useradd -l -m -d "${JENKINS_HOME}" -g jenkins -G sudo -s /bin/bash
> > jenkins
> > > +
> > > +	wget -nv ${JENKINS_URL}
> > > +	echo "${JENKINS_SHA} jenkins_${JENKINS_VERSION}_all.deb" |
> > sha1sum -c -
> > > +
> > > +	# allow Jenkins to start and install plugins, as part of dpkg installation
> > > +	printf "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
> > > +	dpkg -i jenkins_${JENKINS_VERSION}_all.deb
> > > +	rm jenkins_${JENKINS_VERSION}_all.deb
> > > +
> > > +	source /etc/default/jenkins && \
> > > +		JENKINS_ARGS="$JENKINS_ARGS --prefix=/fuego" && \
> > > +		sed -i -e
> > "s#JENKINS_ARGS.*#JENKINS_ARGS\=\"${JENKINS_ARGS}\"#g"
> > /etc/default/jenkins
> > > +
> > > +	source /etc/default/jenkins && \
> > > +		JAVA_ARGS="$JAVA_ARGS -
> > Djenkins.install.runSetupWizard=false -
> > > Dhudson.model.DirectoryBrowserSupport.allowSymlinkEscape=true" && \
> > > +		if [ -n "$http_proxy" ]; then \
> > > +			PROXYSERVER=$(echo $http_proxy | sed -E 's/^http://'
> > | sed -E 's/\///g' | sed -E 's/(.*):(.*)/\1/') && \
> > > +			PROXYPORT=$(echo $http_proxy | sed -E 's/^http://' |
> > sed -E 's/\///g' | sed -E 's/(.*):(.*)/\2/') && \
> > > +			JAVA_ARGS="$JAVA_ARGS -
> > Dhttp.proxyHost="${PROXYSERVER}" -Dhttp.proxyPort="${PROXYPORT}" -
> > > Dhttps.proxyHost="${PROXYSERVER}" -Dhttps.proxyPort="${PROXYPORT}; \
> > > +		fi && \
> > > +		sed -i -e "s#^JAVA_ARGS.*#JAVA_ARGS\=\"${JAVA_ARGS}\"#g"
> > /etc/default/jenkins;
> > > +
> > > +	sed -i -e "s#8080#$JENKINS_PORT#g" /etc/default/jenkins
> > > +
> > > +	# set up Jenkins plugins
> > > +	cp frontend-install/install-plugins.sh \
> > > +		frontend-install/jenkins-support \
> > > +		frontend-install/clitest \
> > > +		/usr/local/bin/
> > > +
> > > +	mkdir -p $JENKINS_HOME/userContent/docs
> > > +	cp frontend-install/config.xml $JENKINS_HOME/config.xml
> > > +	ln -s /fuego-rw/logs $JENKINS_HOME/userContent/fuego.logs
> > > +	cp docs/fuego-docs.pdf $JENKINS_HOME/userContent/docs/fuego-
> > docs.pdf
> > > +	cp frontend-install/jenkins.model.JenkinsLocationConfiguration.xml
> > > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > +	sed -i -e "s#8080#$JENKINS_PORT#g"
> > $JENKINS_HOME/jenkins.model.JenkinsLocationConfiguration.xml
> > > +	chown -R jenkins:jenkins $JENKINS_HOME/
> > > +
> > > +	# start and stop jenkins to pre-populate some settings
> > > +	service jenkins start && \
> > > +		sleep 30 && \
> > > +		service jenkins stop
> > > +
> > > +	# install other plugins from Jenkins update center
> > > +	# NOTE: not sure all of these are needed, but keep list
> > > +	# compatible with 1.2.1 release for now
> > > +	#/usr/local/bin/install-plugins.sh \
> > > +	#	ant:1.9 \
> > > +	#	antisamy-markup-formatter:1.5 \
> > > +	#	bouncycastle-api:2.17 \
> > > +	#	command-launcher:1.3 \
> > > +	#	description-setter:1.10 \
> > > +	#	display-url-api:2.3.1 \
> > > +	#	external-monitor-job:1.7 \
> > > +	#	greenballs:1.15 \
> > > +	#	icon-shim:2.0.3 \
> > > +	#	javadoc:1.5 \
> > > +	#	jdk-tool:1.2 \
> > > +	#	junit:1.27 \
> > > +	#	ldap:1.20 \
> > > +	#	mailer:1.23 \
> > > +	#	matrix-auth:2.3 \
> > > +	#	matrix-project:1.14 \
> > > +	#	pam-auth:1.4 \
> > > +	#	pegdown-formatter:1.3 \
> > > +	#	structs:1.17 \
> > > +	#	windows-slaves:1.4
> > > +
> > > +    # install plugins for latest LTS Jenkins (currently 2.249.3)
> > > +    /usr/local/bin/install-plugins.sh \
> > > +        script-security \
> > > +        structs \
> > > +        workflow-step-api \
> > > +        workflow-api \
> > > +        junit \
> > > +        scm-api \
> > > +        ant \
> > > +        antisamy-markup-formatter \
> > > +        bouncycastle-api \
> > > +        command-launcher \
> > > +        description-setter \
> > > +        display-url-api \
> > > +        external-monitor-job \
> > > +        greenballs \
> > > +        icon-shim \
> > > +        javadoc \
> > > +        jdk-tool \
> > > +        mailer \
> > > +        matrix-auth \
> > > +        matrix-project \
> > > +        pam-auth \
> > > +        pegdown-formatter \
> > > +        windows-slaves
> > > +
> > > +    cp frontend-install/plugins/flot-plotter-plugin/flot.hpi
> > $JENKINS_HOME/plugins/flot.jpi
> > > +
> > > +	# make the mod.js symlink well after flot is installed
> > > +	service jenkins start && sleep 30 && \
> > > +		rm $JENKINS_HOME/plugins/flot/flot/mod.js && \
> > > +		ln -s /fuego-core/scripts/mod.js
> > $JENKINS_HOME/plugins/flot/flot/mod.js
> > > +
> > > +	chown -R jenkins:jenkins $JENKINS_HOME/
> > > +fi
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# get ttc script and helpers
> > > +#
> > ================================================================
> > ==============
> > > +git clone https://github.com/tbird20d/ttc.git /usr/local/src/ttc
> > > +/usr/local/src/ttc/install.sh /usr/local/bin
> > > +perl -p -i -e "s#config_dir = \"/etc\"#config_dir = \"/fuego-ro/conf\"#"
> > /usr/local/bin/ttc
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Serial Config
> > > +#
> > ================================================================
> > ==============
> > > +if [ $nojenkins -eq 0 ]; then
> > > +	/bin/bash -c 'git clone https://github.com/frowand/serio.git
> > /usr/local/src/serio ;  chown -R jenkins /usr/local/src/serio ; cp
> > > /usr/local/src/serio/serio /usr/local/bin/ ; ln -s /usr/local/bin/serio
> > /usr/local/bin/sercp ; ln -s /usr/local/bin/serio /usr/local/bin/sersh'
> > > +	/bin/bash -c 'git clone https://github.com/tbird20d/serlogin.git
> > /usr/local/src/serlogin ;  chown -R jenkins /usr/local/src/serlogin ;
> > > cp /usr/local/src/serlogin/serlogin /usr/local/bin'
> > > +else
> > > +	/bin/bash -c 'git clone https://github.com/frowand/serio.git
> > /usr/local/src/serio ;  cp /usr/local/src/serio/serio /usr/local/bin/ ; ln -
> > > s /usr/local/bin/serio /usr/local/bin/sercp ; ln -s /usr/local/bin/serio
> > /usr/local/bin/sersh'
> > > +	/bin/bash -c 'git clone https://github.com/tbird20d/serlogin.git
> > /usr/local/src/serlogin ;  cp /usr/local/src/serlogin/serlogin
> > > /usr/local/bin'
> > > +fi
> > > +cp frontend-install/0001-Fix-host-parsing-for-serial-device-with-in-
> > name.patch \
> > > +  frontend-install/0002-Output-data-from-port-during-command-
> > execution.patch \
> > > +  /tmp/
> > > +/bin/bash -c 'patch -d /usr/local/src/serio -p1 </tmp/0001-Fix-host-parsing-
> > for-serial-device-with-in-name.patch ; \
> > > +  patch -d /usr/local/src/serio -p1 </tmp/0002-Output-data-from-port-
> > during-command-execution.patch ;'
> > > +
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# get ebf script and helpers
> > > +#
> > ================================================================
> > ==============
> > > +apt-get -q=2 -V --no-install-recommends install jq
> > > +git clone https://github.com/TimesysGit/board-farm-rest-api.git
> > /usr/local/src/board-farm-rest-api
> > > +cp /usr/local/src/board-farm-rest-api/cli/ebf /usr/local/bin/ebf
> > > +chmod a+x /usr/local/bin/ebf
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# fserver
> > > +#
> > ================================================================
> > ==============
> > > +git clone https://github.com/tbird20d/fserver.git /usr/local/lib/fserver
> > > +ln -s /usr/local/lib/fserver/start_local_bg_server
> > /usr/local/bin/start_local_bg_server
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# ftc post installation
> > > +#
> > ================================================================
> > ==============
> > > +ln -s /fuego-core/scripts/ftc /usr/local/bin/
> > > +cp fuego-core/scripts/ftc_completion.sh /etc/bash_completion.d/ftc
> > > +echo ". /etc/bash_completion" >> /root/.bashrc
> > > +
> > > +#
> > ================================================================
> > ==============
> > > +# Lava
> > > +#
> > ================================================================
> > ==============
> > > +ln -s /fuego-ro/scripts/fuego-lava-target-setup /usr/local/bin
> > > +ln -s /fuego-ro/scripts/fuego-lava-target-teardown /usr/local/bin
> > > diff --git a/install.sh b/install.sh
> > > index a5a90b0..259c887 100755
> > > --- a/install.sh
> > > +++ b/install.sh
> > > @@ -1,13 +1,13 @@
> > >  #!/bin/bash
> > >  #
> > > -# install.sh [--help] [--priv] [--no-cache] [--nojenkins] [<image_name>]
> > [<port>]
> > > +# install.sh [--help] [--priv] [--no-cache] [--nojenkins] [<image_name>]
> > [<port>] [<distribution>] [<suit>]
> > >  #
> > >
> > >  # $1 is the exit code after usage is shown
> > >  usage() {
> > >      exit_code="$1"
> > >      cat <<HERE
> > > -Usage: install.sh [--help] [--priv] [--no-cache] [--nojenkins] [<image_name>]
> > [<port>]
> > > +Usage: install.sh [--help] [--priv] [--no-cache] [--nojenkins] [<image_name>]
> > [<port>] [<distribution>] [<suit>]
> > >
> > >  Create the docker image and container with the Fuego test distribution.
> > >  If no <image_name> is provided, the image will be named 'fuego'.
> > > @@ -34,7 +34,7 @@ fi
> > >
> > >  priv=0
> > >  NOCACHE=""
> > > -dockerfile="Dockerfile"
> > > +NOJENKINS=""
> > >
> > >  POSITIONAL=()
> > >  while [[ $# -gt 0 ]] ; do
> > > @@ -48,7 +48,7 @@ while [[ $# -gt 0 ]] ; do
> > >        shift
> > >        ;;
> > >      --nojenkins)
> > > -      dockerfile="Dockerfile.nojenkins"
> > > +      NOJENKINS="--nojenkins"
> > >        shift
> > >        ;;
> > >      *)
> > > @@ -60,6 +60,8 @@ set -- "${POSITIONAL[@]}" # restore positional
> > arguments
> > >
> > >  image_name=${1:-fuego}
> > >  jenkins_port=${2:-8090}
> > > +distribution=${3:-debian}
> > > +suite=${4:-stretch}
> > >
> > >  container_name="${image_name}-container"
> > >
> > > @@ -79,7 +81,7 @@ fi
> > >
> > >  set -e
> > >
> > > -source fuego-host-scripts/docker-build-image.sh $NOCACHE ${image_name}
> > ${jenkins_port} ${dockerfile}
> > > +source fuego-host-scripts/docker-build-image.sh $NOCACHE
> > ${image_name} ${jenkins_port} ${distribution} ${suite} ${NOJENKINS}
> > >  if [ "$priv" == "0" ]; then
> > >      fuego-host-scripts/docker-create-container.sh ${image_name}
> > ${container_name}
> > >  else
> > > diff --git a/uninstall-fuego.sh b/uninstall-fuego.sh
> > > new file mode 100644
> > > index 0000000..b899e7c
> > > --- /dev/null
> > > +++ b/uninstall-fuego.sh
> > > @@ -0,0 +1,47 @@
> > > +#!/bin/bash
> > > +
> > > +# Remove Jenkins plugins
> > > +[ -d /usr/share/jenkins/ref/plugins/ ] && rm -rf
> > /usr/share/jenkins/ref/plugins
> > > +
> > > +# uninstall Jenkins
> > > +service jenkins stop
> > > +dpkg -P jenkins
> > > +
> > > +[ -f /usr/local/bin/install-plugins.sh ] && rm -f /usr/local/bin/install-
> > plugins.sh
> > > +[ -f /usr/local/bin/jenkins-support ] && rm -rf /usr/local/bin/jenkins-support
> > > +[ -f /usr/local/bin/clitest ] && rm -rf /usr/local/bin/clitest
> > > +[ -d /var/lib/jenkins ] && rm -rf /var/lib/jenkins
> > > +sed -i '/^JENKINS_PORT=/d' /etc/environment
> > > +
> > > +# uninstall ttc script
> > > +[ -d /usr/local/src/ttc ] && rm -rf /usr/local/src/ttc
> > > +
> > > +# uninstall ebf script
> > > +[ -d /usr/local/src/board-farm-rest-api ] && rm -rf /usr/local/src/board-
> > farm-rest-api
> > > +[ -f /usr/local/bin/ebf ] && rm -f /usr/local/bin/ebf
> > > +
> > > +# uninstall serial config
> > > +[ -d /usr/local/src/serio ] && rm -rf /usr/local/src/serio
> > > +[ -f /usr/local/bin/serio ] && rm -rf /usr/local/bin/serio
> > > +[ -f /usr/local/bin/sercp ] && rm -rf /usr/local/bin/sercp
> > > +[ -f /usr/local/bin/sersh ] && rm -rf /usr/local/bin/sersh
> > > +[ -d /usr/local/src/serlogin ] && rm -rf /usr/local/src/serlogin
> > > +[ -f /usr/local/bin/serlogin ] && rm -rf /usr/local/bin/serlogin
> > > +
> > > +# uninstall fserver
> > > +[ -d /usr/local/lib/fserver ] && rm -f /usr/local/bin/fserver
> > > +[ -f /usr/local/bin/start_local_bg_server ] && rm -rf
> > /usr/local/bin/start_local_bg_server
> > > +
> > > +# uninstall ftc
> > > +[ -f /usr/local/bin/ftc ] && rm -rf /usr/local/bin/ftc
> > > +[ -f /etc/bash_completion.d/ftc ] && rm -rf /etc/bash_completion.d/ftc
> > > +
> > > +# remove lava target files
> > > +[ -f /usr/local/bin/fuego-lava-target-setup ] && rm -rf /usr/local/bin/fuego-
> > lava-target-setup
> > > +[ -f /usr/local/bin/fuego-lava-target-teardown ] && rm -rf
> > /usr/local/bin/fuego-lava-target-teardown
> > > +
> > > +# remove links
> > > +[ -d /fuego-ro ] && rm /fuego-ro
> > > +[ -d /fuego-rw ] && rm /fuego-rw
> > > +[ -d /fuego-core ] && rm /fuego-core
> > > +
> > > --
> > > 2.20.1
> > >
> >
> > Overall - this looks like a good start.  But I'd like to see the duplicate sections of
> > install-buster.sh
> > and install-stretch.sh put into a single location "install-debian-common.sh".
> > Also, I'd like to see
> > the non-debian stuff (ttc, serio, ebf, etc.) put into "install-common.sh".
> >
> > Can you please re-do this with that refactoring in mind?
> Thank you for the feedback, I will work on these refactoring and send you another patch.
> 
> >
> > Thanks,
> >  -- Tim