def initialize_homedir(basedir, homedir, cart_basedir)
@homedir = homedir
notify_observers(:before_initialize_homedir)
homedir = homedir.end_with?('/') ? homedir : homedir + '/'
tmp_dir = File.join(homedir, ".tmp")
FileUtils.mkdir_p tmp_dir
FileUtils.chmod(0o0000, tmp_dir)
sandbox_dir = File.join(homedir, ".sandbox")
FileUtils.mkdir_p sandbox_dir
FileUtils.chmod(0o0000, sandbox_dir)
sandbox_uuid_dir = File.join(sandbox_dir, @uuid)
FileUtils.mkdir_p sandbox_uuid_dir
FileUtils.chmod(0o1755, sandbox_uuid_dir)
env_dir = File.join(homedir, ".env")
FileUtils.mkdir_p(env_dir)
FileUtils.chmod(0o0750, env_dir)
FileUtils.chown(nil, @uuid, env_dir)
ssh_dir = File.join(homedir, ".ssh")
FileUtils.mkdir_p(ssh_dir)
FileUtils.chmod(0o0750, ssh_dir)
FileUtils.chown(nil, @uuid, ssh_dir)
geardir = File.join(homedir, @container_name, "/")
gearappdir = File.join(homedir, "app-root", "/")
add_env_var("APP_DNS",
"#{@app_name}-#{@namespace}.#{@config.get("CLOUD_DOMAIN")}",
true)
add_env_var("APP_NAME", @app_name, true)
add_env_var("APP_UUID", @application_uuid, true)
data_dir = File.join(gearappdir, "data", "/")
add_env_var("DATA_DIR", data_dir, true) {|v|
FileUtils.mkdir_p(v, :verbose => @debug)
}
add_env_var("HISTFILE", File.join(data_dir, ".bash_history"))
profile = File.join(data_dir, ".bash_profile")
File.open(profile, File::WRONLY|File::TRUNC|File::CREAT, 0o0600) {|file|
file.write %Q{
# Warning: Be careful with modifications to this file,
# Your changes may cause your application to fail.
}
}
FileUtils.chown(@uuid, @uuid, profile, :verbose => @debug)
add_env_var("GEAR_DNS",
"#{@container_name}-#{@namespace}.#{@config.get("CLOUD_DOMAIN")}",
true)
add_env_var("GEAR_NAME", @container_name, true)
add_env_var("GEAR_UUID", @container_uuid, true)
add_env_var("HOMEDIR", homedir, true)
add_env_var("PATH",
"#{cart_basedir}abstract-httpd/info/bin/:#{cart_basedir}abstract/info/bin/:$PATH",
false)
add_env_var("REPO_DIR", File.join(gearappdir, "runtime", "repo", "/"), true) {|v|
FileUtils.mkdir_p(v, :verbose => @debug)
FileUtils.cd gearappdir do |d|
FileUtils.ln_s("runtime/repo", "repo", :verbose => @debug)
end
FileUtils.cd File.join(gearappdir, "runtime") do |d|
FileUtils.ln_s("../data", "data", :verbose => @debug)
end
}
add_env_var("TMP_DIR", "/tmp/", true)
Dir[gearappdir + "/*"].entries.reject{|e| [".", ".."].include? e}.each {|e|
FileUtils.chmod_R(0o0750, e, :verbose => @debug)
FileUtils.chown_R(@uuid, @uuid, e, :verbose => @debug)
}
FileUtils.chown(nil, @uuid, gearappdir, :verbose => @debug)
raise "Failed to instantiate gear: missing application directory (#{gearappdir})" unless File.exist?(gearappdir)
state_file = File.join(gearappdir, "runtime", ".state")
File.open(state_file, File::WRONLY|File::TRUNC|File::CREAT, 0o0660) {|file|
file.write "new\n"
}
FileUtils.chown(@uuid, @uuid, state_file, :verbose => @debug)
token = "#{@uuid}_#{@namespace}_#{@container_name}"
path = File.join(basedir, ".httpd.d", token)
FileUtils.rm_rf(path) if File.exist?(path)
FileUtils.mkdir_p(path)
set_selinux_context(homedir)
notify_observers(:after_initialize_homedir)
end