Menu

Hue Prepare

Follows Cloudera build-instruction for Hue 3.7 and later version. An internet Connection is needed to be able to download. Becareful when used with docker-machine nikita might exit before finishing the execution. you can resume build by executing again prepare

First container

cd /tmp/ryba/hue-build/
eval "$(docker-machine env dev)" && docker build -t "ryba/hue-build" .

Second container

cd /tmp/ryba/hue-build/
eval "$(docker-machine env dev)" && docker build -t "ryba/hue-build" .

Builds Hue from source

module.exports = header: 'Hue Docker Prepare', ssh: false, handler: (options) ->

Hue compiling build from Dockerfile

Builds Hue in two steps: 1 - the first step creates a docker container to build hue from source with all the tools needed 2 - the second step builds a production ready ryba/hue image by setting:

  • the needed yum packages
  • user and group layout It's the install middleware which takes care about mounting the differents volumes for hue to be able to communicate with the hadoop cluster in secure mode.

Hue Build dockerfile execution

  @call header: 'Build Prepare', ->
    @system.mkdir
      target: "#{options.cache_dir}/huedocker"
    @system.mkdir
      target: "#{path.resolve options.cache_dir, options.build.directory}/"
    @system.copy
      unless: options.build.source.indexOf('.git') > 0
      source: options.build.source
      target: "#{path.resolve options.cache_dir, options.build.directory}/hue"
    @tools.git
      if: options.build.source.indexOf('.git') > 0
      source: options.build.source
      target: "#{path.resolve options.cache_dir, options.build.directory}/hue"
      revision: options.build.revision
    @file.render
      source: options.build.dockerfile
      target: "#{path.resolve options.cache_dir, options.build.directory}/Dockerfile"
      context:
        source: 'hue'
        user: options.user.name
        uid: options.user.uid
        gid: options.user.uid
    @docker.build
      image: "#{options.build.name}:#{options.build.version}"
      file: "#{path.resolve options.cache_dir, options.build.directory}/Dockerfile"
    @docker.service
      image: "#{options.build.name}:#{options.build.version}"
      name: 'ryba_hue_extractor'
      entrypoint: '/bin/bash'
    @system.mkdir
      target: "#{path.resolve options.cache_dir, options.prod.directory}"
    @docker.cp
      container: 'ryba_hue_extractor'
      source: 'ryba_hue_extractor:/hue-build.tar.gz'
      target: path.resolve options.cache_dir, options.prod.directory
    @docker.rm
      container: 'ryba_hue_extractor'
      force: true

Hue Production dockerfile execution

This production container running as hue service

  @call header: 'Production Container', ->
    @file.render
      source: options.prod.dockerfile
      target: "#{path.resolve options.cache_dir, options.prod.directory}/Dockerfile"
      context:
        user: options.user.name
        uid: options.user.uid
        gid: options.group.gid
    @file.render
      source: "#{__dirname}/resources/hue_init.sh"
      target: "#{options.prod.directory}/hue_init.sh"
      context:
        pid_file: options.pid_file
        user: options.user.name
    # docker build -t "ryba/hue-build:3.9" .
    @docker.build
      image: "#{options.image}:#{options.version}"
      file: "#{options.prod.directory}/Dockerfile"
    , (err, _, checksum) ->
      throw err if err
      @file
        content: "#{checksum}"
        target: "#{options.prod.directory}/checksum"
    @docker.save
      image: "#{options.image}:#{options.version}"
      output: "#{options.prod.directory}/#{options.prod.tar}"

Dependencies

path = require 'path'

Instructions