X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6de4e2d16c3288ddda96fff8a8bc2b757e5765d7..eb3c52158a603946b7680ae5f3f0848c7246eb9c:/docker/build_tools/build.rb diff --git a/docker/build_tools/build.rb b/docker/build_tools/build.rb index fd5543c3b1..df76d52cd4 100755 --- a/docker/build_tools/build.rb +++ b/docker/build_tools/build.rb @@ -18,7 +18,12 @@ def main options # - TODO: mount cgroup automatically # - TODO: start the docker service if not started - docker_path = %x(which docker).chomp + docker_path = %x(which docker.io).chomp + + if docker_path.empty? + docker_path = %x(which docker).chomp + end + if docker_path.empty? warn "Docker not found." warn "" @@ -28,7 +33,7 @@ def main options warn "Installation instructions for a variety of platforms can be found at" warn "http://docs.docker.io/en/latest/installation/" exit 1 - elsif not docker_ok? + elsif not docker_ok? docker_path warn "WARNING: docker could not be run." warn "Please make sure that:" warn " * You have permission to read and write /var/run/docker.sock" @@ -48,7 +53,7 @@ def main options print "Generating config.yml.\n" print "Arvados needs to know the email address of the administrative user,\n" print "so that when that user logs in they are automatically made an admin.\n" - print "This should be the email address you use to log in to Google.\n" + print "This should be an email address associated with a Google account.\n" print "\n" admin_email_address = "" until is_valid_email? admin_email_address @@ -59,9 +64,22 @@ def main options end end + print "Arvados needs to know the shell login name for the administrative user.\n" + print "This will also be used as the name for your git repository.\n" + print "\n" + user_name = "" + until is_valid_user_name? user_name + print "Enter a shell login name here: " + user_name = gets.strip + if not is_valid_user_name? user_name + print "That doesn't look like a valid shell login name. Please try again.\n" + end + end + File.open 'config.yml', 'w' do |config_out| config = YAML.load_file 'config.yml.example' config['API_AUTO_ADMIN_USER'] = admin_email_address + config['ARVADOS_USER_NAME'] = user_name config['API_HOSTNAME'] = generate_api_hostname config['PUBLIC_KEY_PATH'] = find_or_create_ssh_key(config['API_HOSTNAME']) config.each_key do |var| @@ -75,11 +93,12 @@ def main options # If all prerequisites are met, go ahead and build. if ip_forwarding_enabled? and - docker_ok? and + docker_ok? docker_path and debootstrap_ok? and File.exists? 'config.yml' - warn "Building Arvados." - system '/usr/bin/make', '-f', options[:makefile], *ARGV + exit 0 + else + exit 6 end end @@ -109,6 +128,15 @@ def is_valid_email? str str.match /^\S+@\S+\.\S+$/ end +# is_valid_user_name? +# Returns true if its arg looks like a valid unix username. +# This is a very very loose sanity check. +# +def is_valid_user_name? str + # borrowed from Debian's adduser (version 3.110) + str.match /^[_.A-Za-z0-9][-\@_.A-Za-z0-9]*\$?$/ +end + # generate_api_hostname # Generates a 5-character randomly chosen API hostname. # @@ -133,8 +161,8 @@ end # docker_ok? # Returns 'true' if docker can be run as the current user. # -def docker_ok? - return system 'docker images > /dev/null 2>&1' +def docker_ok?(docker_path) + return system "#{docker_path} images > /dev/null 2>&1" end # find_or_create_ssh_key arvados_name @@ -216,6 +244,5 @@ if __FILE__ == $PROGRAM_NAME options[:makefile] = mk end end - main options end