Skip to content

Instantly share code, notes, and snippets.

@rajputvai
Created April 9, 2020 17:34
Show Gist options
  • Save rajputvai/d7f48fe7673a6aff4789a424212a5e31 to your computer and use it in GitHub Desktop.
Save rajputvai/d7f48fe7673a6aff4789a424212a5e31 to your computer and use it in GitHub Desktop.
require 'fileutils'
res = `which passenger-config`
if $?.exitstatus != 0
puts "`passenger-config` not found, Passenger might not be installed.\n`gem install passenger -v 6.0.4`.\n"
exit(-1)
end
path = "#{Dir.pwd}/nginx"
nginx_download_url = "http://nginx.org/download/nginx-1.12.2.tar.gz"
nchan_download_url = "https://github.com/slact/nchan/archive/v1.2.7.tar.gz"
upload_module_url = "https://github.com/Austinb/nginx-upload-module/archive/2.2.zip"
build_arguments = [
#"--add-module=$(passenger-config --nginx-addon-dir)"
"--with-http_gzip_static_module",
"--with-http_ssl_module"
]
puts "\nBuilding nginx in #{path}....\n\n"
puts "Clearing contents in #{path}...."
unless (FileUtils.rm_rf(path))
puts "#{res}\nFailed to delete directory #{path}"
exit(-1)
end
unless FileUtils.mkdir_p("#{path}/tmp")
puts "#{res}\nFailed to create directory #{path}/tmp"
exit(-1)
end
upload_module_name = ""
nchan_name = ""
nginx_name = ""
FileUtils.cd("#{path}/tmp") do
puts "Downloading nginx #{nginx_download_url}...."
res = `wget #{nginx_download_url}`
if $?.exitstatus != 0
puts "#{res}\nFailed to download nginx"
exit(-1)
end
nginx_name = nginx_download_url.split("/").last
puts "unpacking nginx...."
res = `tar -xvf #{nginx_name}`
if $?.exitstatus != 0
puts "#{res}\nFailed to unpack nginx"
exit(-1)
end
FileUtils.rm(nginx_name)
nginx_name = nginx_name.gsub(".tar.gz","")
puts "Downloading nchan #{nchan_download_url}...."
res = `wget #{nchan_download_url}`
if $?.exitstatus != 0
puts "#{res}\nFailed to download nchan"
exit(-1)
end
nchan_name = nchan_download_url.split("/").last
puts "Unpacking nchan...."
res = `tar -xvf #{nchan_name}`
if $?.exitstatus != 0
puts "#{res}\nFailed to unpack nchan"
exit(-1)
end
FileUtils.rm(nchan_name)
#nchan is unpacked to `nchan-version`
nchan_name = "nchan-#{nchan_name.gsub('.tar.gz','').gsub('v','')}"
puts "Downloading upload module #{upload_module_url}...."
res = `wget #{upload_module_url}`
if $?.exitstatus != 0
puts "#{res}\nFailed to download upload module"
exit(-1)
end
upload_module_name = upload_module_url.split("/").last
puts "Unpacking upload module...."
res = `unzip #{upload_module_name}`
if $?.exitstatus != 0
puts "#{res}\nFailed to unpack upload module"
exit(-1)
end
upload_module_name = "nginx-upload-module-2.2"
end
FileUtils.cd(path) do
puts "checking passenger..."
res = `passenger-config --nginx-addon-dir`
passenger_nginx_addon = res.strip
##########################################################################################
#prepare build
build_arguments << "--add-module=#{path}/tmp/#{upload_module_name}"
build_arguments << "--add-module=#{path}/tmp/#{nchan_name}"
build_arguments << "--add-module=#{passenger_nginx_addon}"
build_arguments << "--prefix=#{path}"
nginx_name = "#{path}/tmp/#{nginx_name}"
puts "Configuring build....\ncd #{nginx_name} && ./configure #{build_arguments.join(" ")}\n"
res = `cd #{nginx_name} && ./configure #{build_arguments.join(" ")}`
if $?.exitstatus != 0
puts "#{res}\n
*****************************\n
Failed to configure build, might need manual installation of packages, see above output\n
***************************\n"
exit(-1)
end
`sed -i -- 's/ngx_atomic_fetch_add(&head->shared->sub_count, head->total_sub_count - head->internal_sub_count);/ /g' /Users/vaibhav/nginx/tmp/nchan-1.2.7/src/store/memory/ipc-handlers.c`
puts "trying to make....\ncd #{nginx_name} && make\n"
res = `cd #{nginx_name} && make -i`
if $?.exitstatus != 0
puts "#{res}\nFailed to make\n"
exit(-1)
end
puts "trying to install....\ncd #{nginx_name} && make install\n"
res = `cd #{nginx_name} && make install`
if $?.exitstatus != 0
puts "#{res}\nFailed to make install\n"
exit(-1)
end
#clearing all tmp files
FileUtils.rm_rf("#{path}/tmp")
puts "Build complete in #{path}"
#creating ngix temp folders
FileUtils.mkdir_p("#{path}/client_body_temp")
FileUtils.mkdir_p("#{path}/proxy_temp")
puts "COPY CERTIFICATES AND CONFIG FILES TO #{path}/conf/\n\n"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment