On Fri, Jun 8, 2012 at 12:56 PM, Nishanth Aravamudan
<[email protected]> wrote:
> In our environment, there is a firewall between client machines and the
> outside world which prevents downloading the grubby tarball from github.
> We have the tarball in the autotest tree on the server, though. So push
> it out as part of the set of files sent to the client. In bootool, look
> for the tarball in the current directory, the autotest top directory (if
> running under autotest) and fallback to the remote tarball if neither of
> those work.
>
> Signed-off-by: Nishanth Aravamudan <[email protected]>
> ---
> I've used try/catch instead of os.path manipulation because that's
> supposedly a security hole (in theory, a user can manipulate the file
> between the check and the open).
>
> Also, I've only covered the rsync deployment of autotest, I'm not sure
> about the others, as to including the grubby tarball.
the client can be also deployed through the autotest internal
packaging system. I think it could be something like this:
job.install_pkg('grubby', 'dep', 'client/deps/grubby')
As I was recalling the def of the function:
def install_pkg(self, name, pkg_type, install_dir):
'''
This method is a simple wrapper around the actual package
installation method in the Packager class. This is used
internally by the profilers, deps and tests code.
name : name of the package (ex: sleeptest, dbench etc.)
pkg_type : Type of the package (ex: test, dep etc.)
install_dir : The directory in which the source is actually
untarred into. (ex: client/profilers/<name> for profilers)
'''
if self.pkgmgr.repositories:
self.pkgmgr.install_pkg(name, pkg_type, self.pkgdir, install_dir)
Need to do more research on it.
> diff --git a/client/tools/boottool b/client/tools/boottool
> index c0b095c..615c01e 100755
> --- a/client/tools/boottool
> +++ b/client/tools/boottool
> @@ -1227,18 +1227,34 @@ class Grubby(object):
> Fetches and verifies the grubby source tarball
> '''
> tarball_name = os.path.basename(GRUBBY_TARBALL_URI)
> - tarball = os.path.join(topdir, tarball_name)
>
> + # first look in the current directory
> try:
> - urllib.urlretrieve(GRUBBY_TARBALL_URI, tarball)
> + tarball = tarball_name
> + f = open(tarball)
> except:
> - return False
> -
> - tarball_md5 = md5.md5(open(tarball).read()).hexdigest()
> + try:
> + # then the autotest source directory
> + from autotest.client.shared import global_config
> + GLOBAL_CONFIG = global_config.global_config
> + tarball = os.path.join(
> + GLOBAL_CONFIG.get_config_value('COMMON',
> 'autotest_top_path'),
> + tarball_name)
> + f = open(tarball)
> + except:
> + # then try to grab it from github
> + try:
> + tarball = os.path.join(topdir, tarball_name)
> + urllib.urlretrieve(GRUBBY_TARBALL_URI, tarball)
> + f = open(tarball)
> + except:
> + return None
> +
> + tarball_md5 = md5.md5(f.read()).hexdigest()
> if tarball_md5 != GRUBBY_TARBALL_MD5:
> - return False
> + return None
>
> - return True
> + return tarball
>
>
> def grubby_build(self, topdir, tarball):
> @@ -1301,12 +1317,10 @@ class Grubby(object):
>
> topdir = tempfile.mkdtemp()
>
> - if not self.grubby_install_fetch_tarball(topdir):
> + tarball = self.grubby_install_fetch_tarball(topdir)
> + if tarball is None:
> raise GrubbyInstallException('Failed to fetch grubby tarball')
>
> - tarball_name = os.path.basename(GRUBBY_TARBALL_URI)
> - tarball = os.path.join(topdir, tarball_name)
> -
> srcdir = os.path.join(topdir, 'src')
> install_root = os.path.join(topdir, 'install_root')
> os.mkdir(install_root)
> diff --git a/server/autotest_remote.py b/server/autotest_remote.py
> index 6840514..f19ca31 100644
> --- a/server/autotest_remote.py
> +++ b/server/autotest_remote.py
> @@ -160,6 +160,9 @@ class BaseAutotest(installable_object.InstallableObject):
> light_files = [os.path.join(self.source_material, f)
> for f in os.listdir(self.source_material)
> if f not in dirs_to_exclude]
> + # needs updating when grubby version is changed
> + light_files.append(os.path.join(self.source_material,
> + "deps/grubby/grubby-8.11-autotest.tar.bz2"))
^ I guess if we send the parent directory, any tarball that is in
there will follow. Need to test, but I think it'll work.
> host.send_file(light_files, autodir, delete_dest=True)
>
> profilers_autodir = os.path.join(autodir, 'profilers')
>
> --
> Nishanth Aravamudan <[email protected]>
> IBM Linux Technology Center
>
> _______________________________________________
> Autotest mailing list
> [email protected]
> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
--
Lucas
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest